-
Notifications
You must be signed in to change notification settings - Fork 18
/
conditional.html
219 lines (170 loc) · 7.09 KB
/
conditional.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
<!-- Creator : groff version 1.22.3 -->
<!-- CreationDate: Mon Mar 18 08:51:03 2024 -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta name="generator" content="groff -Thtml, see www.gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<meta name="Content-Style" content="text/css">
<style type="text/css">
p { margin-top: 0; margin-bottom: 0; vertical-align: top }
pre { margin-top: 0; margin-bottom: 0; vertical-align: top }
table { margin-top: 0; margin-bottom: 0; vertical-align: top }
h1 { text-align: center }
</style>
<title>conditional</title>
</head>
<body>
<h1 align="center">conditional</h1>
<a href="#NAME">NAME</a><br>
<a href="#SYNOPSIS">SYNOPSIS</a><br>
<a href="#DESCRIPTION">DESCRIPTION</a><br>
<a href="#OPERATING SYSTEM">OPERATING SYSTEM</a><br>
<a href="#EXAMPLES">EXAMPLES</a><br>
<a href="#BUGS">BUGS</a><br>
<a href="#COPYRIGHT">COPYRIGHT</a><br>
<a href="#SEE ALSO">SEE ALSO</a><br>
<hr>
<h2>NAME
<a name="NAME"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">conditional
compilation − RWP*Load Simulator directives for
conditional compilation</p>
<h2>SYNOPSIS
<a name="SYNOPSIS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><b>$if</b>
expression <b>$then</b> rwl code [ <b>$else</b> rwl code ]
<b>$endif</b></p>
<h2>DESCRIPTION
<a name="DESCRIPTION"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">The RWP*Load
Simulator allows conditional compilation of code similarly
to how the C preprocessor does it using #if.</p>
<p style="margin-left:11%; margin-top: 1em">This is
achieved using the three directives <b>$if $then</b>,
<b>$else</b>, <b>$endif</b> where the else part is optional.
The <b>$if $then</b> directive takes a simple expression
that does not include function calls (neither most standard
functions nor user defined functions); the simplified
expression must be between <b>$if</b> and <b>$then</b> and
all must be on the same source line. If the expression is
non-zero, the code until a subsequent <b>$else</b> is
compiled, otherwise the code after <b>$else</b> and until
<b>$endif</b> is compiled. The $else part can be
omitted.</p>
<p style="margin-left:11%; margin-top: 1em">The expression
that is between the <b>$if</b> and <b>$then</b> directives
can only consist of constants (including environment
variables such as $USER) or private or public variables of
type integer, double or string, the function access() or the
function defined(). No other standard or declared functions
can be used. There is no short circuit evaluation (of e.g.
<b>and</b>) taking place of the expression.</p>
<p style="margin-left:11%; margin-top: 1em">The excluded
part of your code must still consist of valid rwloadsim
input as it is still being scanned; only parsing is not done
for the excluded part.</p>
<p style="margin-left:11%; margin-top: 1em">Most other
directives, specifically also the $include directive, found
inside an excluded part of your code will not be used.</p>
<p style="margin-left:11%; margin-top: 1em">The only
exception to this rule are the
<b>$useroption</b>,<b>$userswitch</b> and <b>$longoption</b>
directives; these are used during the initial early scan of
the first .rwl file, during which <b>$if $then</b>
processing does <i>not</i> take place. Effectively, these
directives dealing with options cannot be excluded using
conditional compilation.</p>
<p style="margin-left:11%; margin-top: 1em">The <b>$if
$then $else $endif</b> directives can be nested under the
conditions mentioned below under BUGS.</p>
<p style="margin-left:11%; margin-top: 1em">Except that
<b>$if</b> and <b>$then</b> and the expression <i>must</i>
be on the same line, these directives are not line oriented
like processing in the C-preprocessor is.</p>
<h2>OPERATING SYSTEM
<a name="OPERATING SYSTEM"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Inside <b>$if
$then</b> you have access to the four special identifiers
<b>$linux $solaris $macos $windows</b> which effectively are
integer constants. They will have a non-zero value if the
Operating System you are running on is respectively Linux,
Solaris, macOS or Microsoft Windows. Othewise, the value is
zero. In some future version of rwloadsim, the non-zero
value may give more precise information about the Operating
System version. Note that these are not available outside
<b>$if $then</b> directives.</p>
<h2>EXAMPLES
<a name="EXAMPLES"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Use an
environment variable to control some behavior</p>
<p style="margin-left:17%; margin-top: 1em">$if $PRECISION
= "HIGH" $then $dformat:%.8f $endif</p>
<p style="margin-left:11%; margin-top: 1em">Include a file
if it actually exists preventing errors about non existing
file:</p>
<pre style="margin-left:17%; margin-top: 1em">$if access("myfile.rwl","rf") $then
$include:"myfile.rwl"
$endif</pre>
<p style="margin-left:11%; margin-top: 1em">This example
shows that you can very well use the values of variables
that have been calculated earlier in your main program; the
call to <b>system</b> is performed directly as it is being
parsed and the value of the userid variable is therefore
available for the <b>$if $then</b> directive.</p>
<pre style="margin-left:17%; margin-top: 1em">string userid;
null system("id -nu",userid);
$if userid = "root" $then
# This part is compiled if root
$else
# This part is compiled otherwise
$endif</pre>
<p style="margin-left:11%; margin-top: 1em">This last
example shows that conditional compilation can be used to
include or exclude single keywords. The example will declare
a variable if it has not already been declared and in either
case assign 0 to it.</p>
<p style="margin-left:17%; margin-top: 1em">$if
!defined(counter) $then integer $endif counter := 0;</p>
<h2>BUGS
<a name="BUGS"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Due to the way
input scanning takes place, you cannot have <i>multiple</i>
$if $then on the <i>same</i> input line. If you need nested
$if $then constructs to achieve nesting, simply use multiple
input lines such that each $if $then is on its own. An
example of this is the following:</p>
<pre style="margin-left:17%; margin-top: 1em">$if not $windows $then
string userid;
null system("id -nu",userid);
$if userid = "root" $then
# This part is compiled if root
$else
# This part is compiled otherwise
$endif
$else
# This part is compiled on Microsoft Windows
$endif</pre>
<h2>COPYRIGHT
<a name="COPYRIGHT"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em">Copyright
© 2023 Oracle Corporation</p>
<p style="margin-left:11%; margin-top: 1em">Licensed under
the Universal Permissive License v 1.0 as shown at
https://oss.oracle.com/licenses/upl</p>
<h2>SEE ALSO
<a name="SEE ALSO"></a>
</h2>
<p style="margin-left:11%; margin-top: 1em"><a href="rwloadsim.html">rwloadsim(1rwl)</a>,
<a href="directive.html">directive(1rwl)</a>, <a href="include.html">include(1rwl)</a>, <a href="function.html">function(1rwl)</a></p>
<hr>
</body>
</html>