1 /*
2  *  The Regina Rexx Interpreter
3  *  Copyright (C) 1992-1994  Anders Christensen <anders@pvv.unit.no>
4  *
5  *  This library is free software; you can redistribute it and/or
6  *  modify it under the terms of the GNU Library General Public
7  *  License as published by the Free Software Foundation; either
8  *  version 2 of the License, or (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  *  Library General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Library General Public
16  *  License along with this library; if not, write to the Free
17  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19 #define X_NULL            1
20 #define X_PROGRAM         2
21 #define X_STATS           3
22 #define X_COMMAND         4
23 #define X_ADDR_V          5
24 #define X_ADDR_N          6
25 #define X_ADDR_S          7
26 #define X_CALL            8
27 #define X_DO              9
28 #define X_REP            10
29 #define X_REP_FOREVER    11
30 #define X_DO_TO          12
31 #define X_DO_BY          13
32 #define X_DO_FOR         14
33 #define X_WHILE          15
34 #define X_UNTIL          16
35 #define X_DROP           17
36 #define X_EXIT           18
37 #define X_IF             19
38 #define X_IPRET          20
39 #define X_ITERATE        21
40 #define X_LABEL          22
41 #define X_LEAVE          23
42 #define X_NUM_D          24
43 #define X_NUM_F          25
44 #define X_NUM_FUZZ       26
45 #define X_NUM_SCI        27
46 #define X_NUM_ENG        28
47 #define X_PARSE          29
48 #define X_PARSE_ARG      30
49 #define X_PARSE_EXT      31
50 #define X_PARSE_PULL     32
51 #define X_PARSE_SRC      33
52 #define X_PARSE_VAR      34
53 #define X_PARSE_VAL      35
54 #define X_PARSE_VER      36
55 #define X_PROC           37
56 #define X_PULL           38
57 #define X_PUSH           39
58 #define X_QUEUE          40
59 #define X_RETURN         41
60 #define X_SAY            42
61 #define X_SELECT         43
62 #define X_WHENS          44
63 #define X_WHEN           45
64 #define X_OTHERWISE      46
65 #define X_SIG_VAL        47
66 #define X_SIG_LAB        48
67 #define X_SIG_SET        49
68 #define X_ON             50
69 #define X_OFF            51
70 #define X_S_ERROR        52
71 #define X_S_HALT         53
72 #define X_S_NOVALUE      54
73 #define X_S_SYNTAX       55
74 #define X_TRACE          56
75 #define X_UPPER_VAR      57
76 #define X_ASSIGN         58
77 #define X_LOG_NOT        59
78 #define X_PLUSS          60
79 #define X_EQUAL          61
80 #define X_MINUS          62
81 #define X_MULT           63
82 #define X_DEVIDE         64
83 #define X_MODULUS        65
84 #define X_LOG_OR         66
85 #define X_LOG_AND        67
86 #define X_LOG_XOR        68
87 #define X_EXP            69
88 #define X_CONCAT         70
89 #define X_SPACE          71
90 #define X_GTE            72
91 #define X_LTE            73
92 #define X_GT             74
93 #define X_LT             75
94 #define X_DIFF           76
95 #define X_SIM_SYMBOL     77
96 #define X_CON_SYMBOL     78
97 #define X_STRING         79
98 #define X_U_MINUS        80
99 #define X_S_EQUAL        81
100 #define X_S_DIFF         82
101 #define X_INTDIV         83
102 #define X_EX_FUNC        84
103 #define X_IN_FUNC        85
104 #define X_TPL_SOLID      86
105 #define X_TPL_MVE        87
106 #define X_TPL_VAR        88
107 #define X_TPL_SYMBOL     89
108 #define X_TPL_POINT      90
109 #define X_POS_OFFS       91
110 #define X_NEG_OFFS       92
111 #define X_ABS_OFFS       93
112 #define X_EXPRLIST       94
113 #define X_S_NOTREADY     95
114 #define X_S_FAILURE      96
115 #define X_END            97
116 #define X_CALL_SET       98
117 #define X_NO_OTHERWISE   99
118 #define X_IND_SYMBOL    100
119 #define X_IS_INTERNAL   101
120 #define X_IS_BUILTIN    102
121 #define X_IS_EXTERNAL   103
122 #define X_CTAIL_SYMBOL  104
123 #define X_VTAIL_SYMBOL  105
124 #define X_HEAD_SYMBOL   106
125 #define X_STEM_SYMBOL   107
126 #define X_SEQUAL        108
127 #define X_SDIFF         109
128 #define X_SGT           110
129 #define X_SGTE          111
130 #define X_SLT           112
131 #define X_SLTE          113
132 #define X_NEQUAL        114
133 #define X_NDIFF         115
134 #define X_NGT           116
135 #define X_NGTE          117
136 #define X_NLT           118
137 #define X_NLTE          119
138 #define X_NASSIGN       120
139 #define X_CEXPRLIST     121
140 #define X_U_PLUSS       122
141 #define X_OPTIONS       123
142 #define X_NUM_V         124
143 #define X_NUM_DDEF      125
144 #define X_NUM_FDEF      126
145 #define X_NUM_FRMDEF    127
146 #define X_S_NGT         128
147 #define X_S_NLT         129
148 #define X_S_GT          130
149 #define X_S_GTE         131
150 #define X_S_LT          132
151 #define X_S_LTE         133
152 #define X_ADDR_WITH     134
153 #define X_S_LOSTDIGITS  135
154 #define X_DO_EXPR       136
155 #define X_PLUSASSIGN    137
156 #define X_MINUSASSIGN   138
157 #define X_MULTASSIGN    139
158 #define X_DIVASSIGN     140
159 #define X_INTDIVASSIGN  141
160 #define X_MODULUSASSIGN 142
161 #define X_ORASSIGN      143
162 #define X_XORASSIGN     144
163 #define X_ANDASSIGN     145
164 #define X_CONCATASSIGN  146
165 
166 
167 /* The three first two numbers have not errortext attched to them */
168 #define ERR_PROG_UNREADABLE     3
169 #define ERR_PROG_INTERRUPT      4
170 #define ERR_STORAGE_EXHAUSTED   5
171 #define ERR_UNMATCHED_QUOTE     6
172 #define ERR_WHEN_EXPECTED       7
173 #define ERR_THEN_UNEXPECTED     8
174 #define ERR_WHEN_UNEXPECTED     9
175 #define ERR_UNMATCHED_END       10
176 #define ERR_FULL_CTRL_STACK     11
177 #define ERR_TOO_LONG_LINE       12
178 #define ERR_INVALID_CHAR        13
179 #define ERR_INCOMPLETE_STRUCT   14
180 #define ERR_INVALID_HEX_CONST   15
181 #define ERR_UNEXISTENT_LABEL    16
182 #define ERR_UNEXPECTED_PROC     17
183 #define ERR_THEN_EXPECTED       18
184 #define ERR_STRING_EXPECTED     19
185 #define ERR_SYMBOL_EXPECTED     20
186 #define ERR_EXTRA_DATA          21
187 /* The next to number have not been assigned an errortext */
188 #define ERR_INVALID_TRACE       24
189 #define ERR_INV_SUBKEYWORD      25
190 #define ERR_INVALID_INTEGER     26
191 #define ERR_INVALID_DO_SYNTAX   27
192 #define ERR_INVALID_LEAVE       28
193 #define ERR_ENVIRON_TOO_LONG    29
194 #define ERR_TOO_LONG_STRING     30
195 #define ERR_INVALID_START       31
196 #define ERR_INVALID_STEM        32
197 #define ERR_INVALID_RESULT      33
198 #define ERR_UNLOGICAL_VALUE     34
199 #define ERR_INVALID_EXPRESSION  35
200 #define ERR_UNMATCHED_PARAN     36
201 #define ERR_UNEXPECTED_PARAN    37
202 #define ERR_INVALID_TEMPLATE    38
203 #define ERR_STACK_OVERFLOW      39
204 #define ERR_INCORRECT_CALL      40
205 #define ERR_BAD_ARITHMETIC      41
206 #define ERR_ARITH_OVERFLOW      42
207 #define ERR_ROUTINE_NOT_FOUND   43
208 #define ERR_NO_DATA_RETURNED    44
209 #define ERR_DATA_NOT_SPEC       45
210 /* No errortexts have not been defined to the next to numbers */
211 #define ERR_SYSTEM_FAILURE      48
212 #define ERR_INTERPRETER_FAILURE 49
213 #define ERR_RESERVED_SYMBOL     50
214 #define ERR_UNQUOTED_FUNC_STOP  51
215 #define ERR_INVALID_OPTION      53
216 #define ERR_INVALID_STEM_OPTION 54
217 
218 #define ERR_CANT_REWIND         60
219 #define ERR_IMPROPER_SEEK       61
220 
221 #define ERR_YACC_SYNTAX         64
222 
223 #define ERR_NON_ANSI_FEATURE    90
224 #define ERR_STREAM_COMMAND      93
225 #define ERR_EXTERNAL_QUEUE      94
226 
227 #define ERR_RESTRICTED          95
228 
229 #define ERR_UNKNOWN_FS_ERROR    100
230 
231 #define ERR_MAX_NUMBER          100
232 /*
233  #define ENV_BOURNE_SH  0
234  #define ENV_C_SHELL    1
235  #define ENV_COMMAND     2
236  #define ENV_PATH        3
237  #define ENV_SYSTEM      4
238  */
239 
240 #ifdef TRACEMEM
241 /*
242  * NOTE: There is a close correspondance between these and the char
243  *       array alloc in memory.c
244  */
245 # define TRC_LEAKED     0 /*  "leaked",   status unknown, probably leaked */
246 # define TRC_HASHTAB    1 /*  "hashtab",  holds hashtable in variable subsystem */
247 # define TRC_PROCBOX    2 /*  "procbox",  the info local to a single routine */
248 # define TRC_SOURCE     3 /*  "source",   a line of source code */
249 # define TRC_SOURCEL    4 /*  "srcbox",   box in list of source lines */
250 # define TRC_TREENODE   5 /*  "treenode", node in the parse three */
251 # define TRC_VARVALUE   6 /*  "var_val",  value of a variable */
252 # define TRC_VARNAME    7 /*  "var_nam",  name of a variable */
253 # define TRC_VARBOX     8 /*  "var_box",  other structure in the variable subsystem */
254 # define TRC_STACKBOX   9 /*  "stc_box",  box in linked list of the stack lines */
255 # define TRC_STACKLINE 10 /*  "stc_line", stack line */
256 # define TRC_SYSINFO   11 /*  "sys_info", the common info for a whole program */
257 # define TRC_FILEPTR   12 /*  "file_ptr", holds the filetable */
258 # define TRC_PROCARG   13 /*  "proc_arg", holds arguments for internal or builtin functions */
259 # define TRC_LABEL     14 /*  "label",    holds info about labels */
260 # define TRC_STATIC    15 /*  "static",   names of special variables */
261 # define TRC_P_CACHE   16 /*  "argcache", the proc argument cache */
262 # define TRC_MATH      17 /*  "math",     dynamic workarrays in the math funcstion */
263 # define TRC_ENVIRBOX  18 /*  "envirbx",  box holding environment definition */
264 # define TRC_ENVIRNAME 19 /*  "envirnm",  name in a box holding environment definition */
265 # define TRC_SPCV_BOX  20 /*  "spcvarbx", special variable box */
266 # define TRC_SPCV_NAME 21 /*  "spcvarnm", special variable name */
267 # define TRC_SPCV_NUMB 22 /*  "spcnumbx", special number box */
268 # define TRC_SPCV_NUMC 23 /*  "spcnumnm", special number contents */
269 
270 
271 
272 # define MEMTRC_NONE    0
273 # define MEMTRC_ALL     1
274 # define MEMTRC_LEAKED  2
275 
276 # define MEM_ALLOC      0
277 # define MEM_CURRENT    1
278 # define MEM_LEAKED     2
279 #endif /* TRACEMEM */
280 
281 
282 /*
283  * Note: must match the definition of  numeric_forms  in rexx.c
284  */
285 #define NUM_FORM_SCI    0
286 #define NUM_FORM_ENG    1
287 
288 
289 #define SIGNAL_FATAL     -1
290 #define SIGNAL_ERROR      0
291 #define SIGNAL_FAILURE    1
292 #define SIGNAL_HALT       2
293 #define SIGNAL_NOVALUE    3
294 #define SIGNAL_NOTREADY   4
295 #define SIGNAL_SYNTAX     5
296 #define SIGNAL_LOSTDIGITS 6
297 #define SIGNALS           7
298 
299 #define SIGTYPE_ON    0
300 #define SIGTYPE_OFF   1
301 #define SIGTYPE_DELAY 2
302 
303 
304 #define ENVIR_SHELL 1
305 #define ENVIR_PIPE 2
306 
307 #define SUBENVIR_PATH 1
308 #define SUBENVIR_SYSTEM 2
309 #define SUBENVIR_COMMAND 3
310 #define SUBENVIR_REXX 4
311 
312 
313 #define REDIR_NONE      0x00000000
314 #define REDIR_INPUT     0x00000001
315 #define REDIR_OUTLIFO   0x00000002
316 #define REDIR_OUTFIFO   0x00000004
317 #define REDIR_OUTPUT    0x00000006
318 #define REDIR_CLEAR     0x00000008
319 #define REDIR_OUTSTRING 0x00000010
320 
321 
322 #define HOOK_LINEFEED  1
323 #define HOOK_NOLF      0
324 
325 #define HOOK_GO_ON     1
326 #define HOOK_NOPE      0
327 
328 #define HOOK_STDOUT    0
329 #define HOOK_STDERR    1
330 #define HOOK_TRCIN     2
331 #define HOOK_PULL      3
332 #define HOOK_INIT      4
333 #define HOOK_TERMIN    5
334 #define HOOK_SUBCOM    6
335 #define HOOK_FUNC      7
336 #define HOOK_GETENV    8
337 #define HOOK_SETENV    9
338 #define HOOK_GETCWD   10
339 #define HOOK_SETCWD   11
340 
341 #define HOOK_MASK(a)   (1<<(a))
342 
343 #define PARAM_TYPE_HARD 0
344 #define PARAM_TYPE_SOFT 1
345 
346 #define INVO_COMMAND    0
347 #define INVO_FUNCTION   1
348 #define INVO_SUBROUTINE 2
349 
350 #define SYMBOL_BAD      0
351 #define SYMBOL_CONSTANT 1
352 #define SYMBOL_STEM     2
353 #define SYMBOL_SIMPLE   3
354 #define SYMBOL_COMPOUND 4
355 #define SYMBOL_NUMBER   5
356 
357 
358 #define VFLAG_NONE   0x0000
359 #define VFLAG_STR    0x0001
360 #define VFLAG_NUM    0x0002
361 
362 #define VFLAG_BOTH   (VFLAG_STR | VFLAG_NUM)
363 
364 #define UNKNOWN_QUEUE -1
365 /*
366  * For refering to the extensions.
367  */
368 #define EXT_FLUSHSTACK                       0
369 #define EXT_LINEOUTTRUNC                     1
370 #define EXT_BUFTYPE_BIF                      2
371 #define EXT_DESBUF_BIF                       3
372 #define EXT_DROPBUF_BIF                      4
373 #define EXT_MAKEBUF_BIF                      5
374 #define EXT_CACHEEXT                         6
375 #define EXT_PRUNE_TRACE                      7
376 #define EXT_EXT_COMMANDS_AS_FUNCS            8
377 #define EXT_STDOUT_FOR_STDERR                9
378 #define EXT_TRACE_HTML                      10
379 #define EXT_FAST_LINES_BIF_DEFAULT          11
380 #define EXT_STRICT_ANSI                     12
381 #define EXT_INTERNAL_QUEUES                 13
382 #define EXT_REGINA_BIFS                     14
383 #define EXT_STRICT_WHITE_SPACE_COMPARISONS  15
384 #define EXT_AREXX_SEMANTICS                 16
385 #define EXT_AREXX_BIFS                      17
386 #define EXT_BROKEN_ADDRESS_COMMAND          18
387 #define EXT_CALLS_AS_FUNCS                  19
388 #define EXT_QUEUES_301                      20
389 #define EXT_HALT_ON_EXT_CALL_FAIL           21
390 #define EXT_SINGLE_INTERPRETER              22
391 #define EXT_SINGLE_LINE_COMMENTS            23
392 
393 /*
394  * Regina 3.1 introduced "pool 0" variables. There exist only some and they
395  * can be determined by known_reserved_variable. Here are the return
396  * values of this function.
397  */
398 #define POOL0_NOT_RESERVED    0  /* must be 0, following must be consecutive */
399 #define POOL0_RC              1  /* Never change the order, it is hard-wired */
400 #define POOL0_RESULT          2  /* used in variable.c                       */
401 #define POOL0_SIGL            3
402 #define POOL0_RS              4
403 #define POOL0_MN              5
404 #define POOL0_LINE            6
405 #define POOL0_FILE            7
406 #define POOL0_DIRSEP          8
407 #define POOL0_ENDOFLINE       9
408 #define POOL0_CNT             ( POOL0_ENDOFLINE + 1 )
409 
410 /*
411  * treenode.u.parseflags values which may be or'ed.
412  */
413 #define PARSE_NORMAL    0
414 #define PARSE_UPPER     1
415 #define PARSE_LOWER     2
416 #define PARSE_CASELESS  4
417 
418 #define SIDE_LEFT  1
419 #define SIDE_RIGHT 2
420