KeywordConstants.cpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.oorexx.org/license.html */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /******************************************************************************/
39 /* REXX Kernel */
40 /* */
41 /* Parser keyword constants */
42 /* */
43 /* NOTE!!! It is critical for all the following tables to be */
44 /* in ASCII alphabetic order. */
45 /* */
46 /******************************************************************************/
47 
48 #define DEFINING
49 #include "RexxCore.h"
50 #include "SourceFile.hpp"
51 #include "Token.hpp"
52 
53 /*********************************************************************/
54 /* */
55 /* Table of directive instructions used for translation */
56 /* */
57 /*********************************************************************/
58 
59 KeywordEntry RexxSource::directives[] = { /* language directive table */
60  KeywordEntry(CHAR_ATTRIBUTE, DIRECTIVE_ATTRIBUTE),
61  KeywordEntry(CHAR_CLASS, DIRECTIVE_CLASS),
62  KeywordEntry(CHAR_CONSTANT, DIRECTIVE_CONSTANT),
63  KeywordEntry(CHAR_EXTENSION, DIRECTIVE_EXTENSION),
64  KeywordEntry(CHAR_METHOD, DIRECTIVE_METHOD),
65  KeywordEntry(CHAR_OPTIONS, DIRECTIVE_OPTIONS),
66  KeywordEntry(CHAR_REQUIRES, DIRECTIVE_REQUIRES),
67  KeywordEntry(CHAR_ROUTINE, DIRECTIVE_ROUTINE),
68 };
69 
70 /*********************************************************************/
71 /* */
72 /* Table of keyword instructions used for translation */
73 /* */
74 /*********************************************************************/
75 
76 KeywordEntry RexxSource::keywordInstructions[] = { /* language keyword table */
77  KeywordEntry(CHAR_ADDRESS, KEYWORD_ADDRESS),
78  KeywordEntry(CHAR_ARG, KEYWORD_ARG),
79  KeywordEntry(CHAR_CALL, KEYWORD_CALL),
80  KeywordEntry(CHAR_DO, KEYWORD_DO),
81  KeywordEntry(CHAR_DROP, KEYWORD_DROP),
82  KeywordEntry(CHAR_ELSE, KEYWORD_ELSE),
83  KeywordEntry(CHAR_END, KEYWORD_END),
84  KeywordEntry(CHAR_EXIT, KEYWORD_EXIT),
85  KeywordEntry(CHAR_EXPOSE, KEYWORD_EXPOSE),
86  KeywordEntry(CHAR_FORWARD, KEYWORD_FORWARD),
87  KeywordEntry(CHAR_GUARD, KEYWORD_GUARD),
88  KeywordEntry(CHAR_IF, KEYWORD_IF),
89  KeywordEntry(CHAR_INTERPRET, KEYWORD_INTERPRET),
90  KeywordEntry(CHAR_ITERATE, KEYWORD_ITERATE),
91  KeywordEntry(CHAR_LEAVE, KEYWORD_LEAVE),
92  KeywordEntry(CHAR_LOOP, KEYWORD_LOOP),
93  KeywordEntry(CHAR_NOP, KEYWORD_NOP),
94  KeywordEntry(CHAR_NUMERIC, KEYWORD_NUMERIC),
95  KeywordEntry(CHAR_OPTIONS, KEYWORD_OPTIONS),
96  KeywordEntry(CHAR_OTHERWISE, KEYWORD_OTHERWISE),
97  KeywordEntry(CHAR_PARSE, KEYWORD_PARSE),
98  KeywordEntry(CHAR_PROCEDURE, KEYWORD_PROCEDURE),
99  KeywordEntry(CHAR_PULL, KEYWORD_PULL),
100  KeywordEntry(CHAR_PUSH, KEYWORD_PUSH),
101  KeywordEntry(CHAR_QUEUE, KEYWORD_QUEUE),
102  KeywordEntry(CHAR_RAISE, KEYWORD_RAISE),
103  KeywordEntry(CHAR_REPLY, KEYWORD_REPLY),
104  KeywordEntry(CHAR_RETURN, KEYWORD_RETURN),
105  KeywordEntry(CHAR_SAY, KEYWORD_SAY),
106  KeywordEntry(CHAR_SELECT, KEYWORD_SELECT),
107  KeywordEntry(CHAR_SIGNAL, KEYWORD_SIGNAL),
108  KeywordEntry(CHAR_THEN, KEYWORD_THEN),
109  KeywordEntry(CHAR_TRACE, KEYWORD_TRACE),
110  KeywordEntry(CHAR_UPPER, KEYWORD_UPPER),
111  KeywordEntry(CHAR_USE, KEYWORD_USE),
112  KeywordEntry(CHAR_WHEN, KEYWORD_WHEN),
113 };
114 
115 /*********************************************************************/
116 /* */
117 /* Table of instruction subkeywords used for translation */
118 /* */
119 /*********************************************************************/
120 
121 KeywordEntry RexxSource::subKeywords[] = { /* language keyword table */
122  KeywordEntry(CHAR_ADDITIONAL, SUBKEY_ADDITIONAL),
123  KeywordEntry(CHAR_ARG, SUBKEY_ARG),
124  KeywordEntry(CHAR_ARGUMENTS, SUBKEY_ARGUMENTS),
125  KeywordEntry(CHAR_ARRAY, SUBKEY_ARRAY),
126  KeywordEntry(CHAR_AUTO, SUBKEY_AUTO),
127  KeywordEntry(CHAR_BY, SUBKEY_BY),
128  KeywordEntry(CHAR_CLASS, SUBKEY_CLASS),
129  KeywordEntry(CHAR_CONTINUE, SUBKEY_CONTINUE),
130  KeywordEntry(CHAR_DESCRIPTION, SUBKEY_DESCRIPTION),
131  KeywordEntry(CHAR_DIGITS, SUBKEY_DIGITS),
132  KeywordEntry(CHAR_ENGINEERING, SUBKEY_ENGINEERING),
133  KeywordEntry(CHAR_EXIT, SUBKEY_EXIT),
134  KeywordEntry(CHAR_EXPOSE, SUBKEY_EXPOSE),
135  KeywordEntry(CHAR_FALSE, SUBKEY_FALSE),
136  KeywordEntry(CHAR_FOR, SUBKEY_FOR),
137  KeywordEntry(CHAR_FOREVER, SUBKEY_FOREVER),
138  KeywordEntry(CHAR_FORM, SUBKEY_FORM),
139  KeywordEntry(CHAR_FUZZ, SUBKEY_FUZZ),
140  KeywordEntry(CHAR_LABEL, SUBKEY_LABEL),
141  KeywordEntry(CHAR_MESSAGE, SUBKEY_MESSAGE),
142  KeywordEntry(CHAR_NAME, SUBKEY_NAME),
143  KeywordEntry(CHAR_NAMED, SUBKEY_NAMED),
144  KeywordEntry(CHAR_NAMEDARGUMENTS, SUBKEY_NAMEDARGUMENTS),
145  KeywordEntry(CHAR_OFF, SUBKEY_OFF),
146  KeywordEntry(CHAR_ON, SUBKEY_ON),
147  KeywordEntry(CHAR_OVER, SUBKEY_OVER),
148  KeywordEntry(CHAR_PROPAGATE, SUBKEY_PROPAGATE),
149  KeywordEntry(CHAR_RETURN, SUBKEY_RETURN),
150  KeywordEntry(CHAR_SCIENTIFIC, SUBKEY_SCIENTIFIC),
151  KeywordEntry(CHAR_STRICT, SUBKEY_STRICT),
152  KeywordEntry(CHAR_THEN, SUBKEY_THEN),
153  KeywordEntry(CHAR_TO, SUBKEY_TO),
154  KeywordEntry(CHAR_TRUE, SUBKEY_TRUE),
155  KeywordEntry(CHAR_UNTIL, SUBKEY_UNTIL),
156  KeywordEntry(CHAR_VALUE, SUBKEY_VALUE),
157  KeywordEntry(CHAR_WHEN, SUBKEY_WHEN),
158  KeywordEntry(CHAR_WHILE, SUBKEY_WHILE),
159  KeywordEntry(CHAR_WITH, SUBKEY_WITH),
160 };
161 
162 /*************************************************************************/
163 /* */
164 /* Table of built-in functions used for translation */
165 /* */
166 /*********************************************************************/
167 
168 KeywordEntry RexxSource::builtinFunctions[] = { /* built-in function table */
169 #ifdef EBCDIC
170  KeywordEntry(CHAR_QUEUEEXIT, BUILTIN_QUEUEEXIT),
171  KeywordEntry(CHAR_ABBREV, BUILTIN_ABBREV),
172  KeywordEntry(CHAR_ABS, BUILTIN_ABS),
173  KeywordEntry(CHAR_ADDRESS, BUILTIN_ADDRESS),
174  KeywordEntry(CHAR_ARG, BUILTIN_ARG),
175  KeywordEntry(CHAR_BITAND, BUILTIN_BITAND),
176  KeywordEntry(CHAR_BITOR, BUILTIN_BITOR),
177  KeywordEntry(CHAR_BITXOR, BUILTIN_BITXOR),
178  KeywordEntry(CHAR_B2X, BUILTIN_B2X),
179  KeywordEntry(CHAR_CENTER, BUILTIN_CENTER),
180  KeywordEntry(CHAR_CENTRE, BUILTIN_CENTRE),
181  KeywordEntry(CHAR_CHANGESTR, BUILTIN_CHANGESTR),
182  KeywordEntry(CHAR_CHARIN, BUILTIN_CHARIN),
183  KeywordEntry(CHAR_CHAROUT, BUILTIN_CHAROUT),
184  KeywordEntry(CHAR_CHARS, BUILTIN_CHARS),
185  KeywordEntry(CHAR_COMPARE, BUILTIN_COMPARE),
186  KeywordEntry(CHAR_CONDITION, BUILTIN_CONDITION),
187  KeywordEntry(CHAR_COPIES, BUILTIN_COPIES),
188  KeywordEntry(CHAR_COUNTSTR, BUILTIN_COUNTSTR),
189  KeywordEntry(CHAR_DATATYPE, BUILTIN_DATATYPE),
190  KeywordEntry(CHAR_C2D, BUILTIN_C2D),
191  KeywordEntry(CHAR_C2X, BUILTIN_C2X),
192  KeywordEntry(CHAR_DATE, BUILTIN_DATE),
193  KeywordEntry(CHAR_DELSTR, BUILTIN_DELSTR),
194  KeywordEntry(CHAR_DELWORD, BUILTIN_DELWORD),
195  KeywordEntry(CHAR_DIGITS, BUILTIN_DIGITS),
196  KeywordEntry(CHAR_D2C, BUILTIN_D2C),
197  KeywordEntry(CHAR_D2X, BUILTIN_D2X),
198  KeywordEntry(CHAR_ENDLOCAL, BUILTIN_ENDLOCAL),
199  KeywordEntry(CHAR_ERRORTEXT, BUILTIN_ERRORTEXT),
200  KeywordEntry(CHAR_FORM, BUILTIN_FORM),
201  KeywordEntry(CHAR_FORMAT, BUILTIN_FORMAT),
202  KeywordEntry(CHAR_FUZZ, BUILTIN_FUZZ),
203  KeywordEntry(CHAR_INSERT, BUILTIN_INSERT),
204  KeywordEntry(CHAR_LASTPOS, BUILTIN_LASTPOS),
205  KeywordEntry(CHAR_LEFT, BUILTIN_LEFT),
206  KeywordEntry(CHAR_LENGTH, BUILTIN_LENGTH),
207  KeywordEntry(CHAR_LINEIN, BUILTIN_LINEIN),
208  KeywordEntry(CHAR_LINEOUT, BUILTIN_LINEOUT),
209  KeywordEntry(CHAR_LINES, BUILTIN_LINES),
210  KeywordEntry(CHAR_LOWER, BUILTIN_LOWER),
211  KeywordEntry(CHAR_ORXMAX, BUILTIN_MAX),
212  KeywordEntry(CHAR_ORXMIN, BUILTIN_MIN),
213  KeywordEntry(CHAR_OVERLAY, BUILTIN_OVERLAY),
214  KeywordEntry(CHAR_POS, BUILTIN_POS),
215  KeywordEntry(CHAR_QUALIFY, BUILTIN_QUALIFY),
216  KeywordEntry(CHAR_QUEUED, BUILTIN_QUEUED),
217  KeywordEntry(CHAR_RANDOM, BUILTIN_RANDOM),
218  KeywordEntry(CHAR_REVERSE, BUILTIN_REVERSE),
219  KeywordEntry(CHAR_RIGHT, BUILTIN_RIGHT),
220  KeywordEntry(CHAR_RXFUNCADD, BUILTIN_RXFUNCADD),
221  KeywordEntry(CHAR_RXFUNCDROP, BUILTIN_RXFUNCDROP),
222  KeywordEntry(CHAR_RXFUNCQUERY, BUILTIN_RXFUNCQUERY),
223  KeywordEntry(CHAR_SETLOCAL, BUILTIN_SETLOCAL),
224  KeywordEntry(CHAR_SIGN, BUILTIN_SIGN),
225  KeywordEntry(CHAR_SOURCELINE, BUILTIN_SOURCELINE),
226  KeywordEntry(CHAR_SPACE, BUILTIN_SPACE),
227  KeywordEntry(CHAR_STREAM, BUILTIN_STREAM),
228  KeywordEntry(CHAR_STRIP, BUILTIN_STRIP),
229  KeywordEntry(CHAR_SUBSTR, BUILTIN_SUBSTR),
230  KeywordEntry(CHAR_SUBWORD, BUILTIN_SUBWORD),
231  KeywordEntry(CHAR_SYMBOL, BUILTIN_SYMBOL),
232  KeywordEntry(CHAR_TIME, BUILTIN_TIME),
233  KeywordEntry(CHAR_TRACE, BUILTIN_TRACE),
234  KeywordEntry(CHAR_TRANSLATE, BUILTIN_TRANSLATE),
235  KeywordEntry(CHAR_TRUNC, BUILTIN_TRUNC),
236  KeywordEntry(CHAR_UPPER, BUILTIN_UPPER),
237  KeywordEntry(CHAR_USERID, BUILTIN_USERID),
238  KeywordEntry(CHAR_VALUE, BUILTIN_VALUE),
239  KeywordEntry(CHAR_VAR, BUILTIN_VAR),
240  KeywordEntry(CHAR_VERIFY, BUILTIN_VERIFY),
241  KeywordEntry(CHAR_WORD, BUILTIN_WORD),
242  KeywordEntry(CHAR_WORDINDEX, BUILTIN_WORDINDEX),
243  KeywordEntry(CHAR_WORDLENGTH, BUILTIN_WORDLENGTH),
244  KeywordEntry(CHAR_WORDPOS, BUILTIN_WORDPOS),
245  KeywordEntry(CHAR_WORDS, BUILTIN_WORDS),
246  KeywordEntry(CHAR_XRANGE, BUILTIN_XRANGE),
247  KeywordEntry(CHAR_X2B, BUILTIN_X2B),
248  KeywordEntry(CHAR_X2C, BUILTIN_X2C),
249  KeywordEntry(CHAR_X2D, BUILTIN_X2D),
250 #else
251  KeywordEntry(CHAR_QUEUEEXIT, BUILTIN_QUEUEEXIT),
252  KeywordEntry(CHAR_ABBREV, BUILTIN_ABBREV),
253  KeywordEntry(CHAR_ABS, BUILTIN_ABS),
254  KeywordEntry(CHAR_ADDRESS, BUILTIN_ADDRESS),
255  KeywordEntry(CHAR_ARG, BUILTIN_ARG),
256  KeywordEntry(CHAR_B2X, BUILTIN_B2X),
257  KeywordEntry(CHAR_BITAND, BUILTIN_BITAND),
258  KeywordEntry(CHAR_BITOR, BUILTIN_BITOR),
259  KeywordEntry(CHAR_BITXOR, BUILTIN_BITXOR),
260  KeywordEntry(CHAR_C2D, BUILTIN_C2D),
261  KeywordEntry(CHAR_C2X, BUILTIN_C2X),
262  KeywordEntry(CHAR_CENTER, BUILTIN_CENTER),
263  KeywordEntry(CHAR_CENTRE, BUILTIN_CENTRE),
264  KeywordEntry(CHAR_CHANGESTR, BUILTIN_CHANGESTR),
265  KeywordEntry(CHAR_CHARIN, BUILTIN_CHARIN),
266  KeywordEntry(CHAR_CHAROUT, BUILTIN_CHAROUT),
267  KeywordEntry(CHAR_CHARS, BUILTIN_CHARS),
268  KeywordEntry(CHAR_COMPARE, BUILTIN_COMPARE),
269  KeywordEntry(CHAR_CONDITION, BUILTIN_CONDITION),
270  KeywordEntry(CHAR_COPIES, BUILTIN_COPIES),
271  KeywordEntry(CHAR_COUNTSTR, BUILTIN_COUNTSTR),
272  KeywordEntry(CHAR_D2C, BUILTIN_D2C),
273  KeywordEntry(CHAR_D2X, BUILTIN_D2X),
274  KeywordEntry(CHAR_DATATYPE, BUILTIN_DATATYPE),
275  KeywordEntry(CHAR_DATE, BUILTIN_DATE),
276  KeywordEntry(CHAR_DELSTR, BUILTIN_DELSTR),
277  KeywordEntry(CHAR_DELWORD, BUILTIN_DELWORD),
278  KeywordEntry(CHAR_DIGITS, BUILTIN_DIGITS),
279  KeywordEntry(CHAR_ENDLOCAL, BUILTIN_ENDLOCAL),
280  KeywordEntry(CHAR_ERRORTEXT, BUILTIN_ERRORTEXT),
281  KeywordEntry(CHAR_FORM, BUILTIN_FORM),
282  KeywordEntry(CHAR_FORMAT, BUILTIN_FORMAT),
283  KeywordEntry(CHAR_FUZZ, BUILTIN_FUZZ),
284  KeywordEntry(CHAR_INSERT, BUILTIN_INSERT),
285  KeywordEntry(CHAR_LASTPOS, BUILTIN_LASTPOS),
286  KeywordEntry(CHAR_LEFT, BUILTIN_LEFT),
287  KeywordEntry(CHAR_LENGTH, BUILTIN_LENGTH),
288  KeywordEntry(CHAR_LINEIN, BUILTIN_LINEIN),
289  KeywordEntry(CHAR_LINEOUT, BUILTIN_LINEOUT),
290  KeywordEntry(CHAR_LINES, BUILTIN_LINES),
291  KeywordEntry(CHAR_LOWER, BUILTIN_LOWER),
292  KeywordEntry(CHAR_ORXMAX, BUILTIN_MAX),
293  KeywordEntry(CHAR_ORXMIN, BUILTIN_MIN),
294  KeywordEntry(CHAR_OVERLAY, BUILTIN_OVERLAY),
295  KeywordEntry(CHAR_POS, BUILTIN_POS),
296  KeywordEntry(CHAR_QUALIFY, BUILTIN_QUALIFY),
297  KeywordEntry(CHAR_QUEUED, BUILTIN_QUEUED),
298  KeywordEntry(CHAR_RANDOM, BUILTIN_RANDOM),
299  KeywordEntry(CHAR_REVERSE, BUILTIN_REVERSE),
300  KeywordEntry(CHAR_RIGHT, BUILTIN_RIGHT),
301  KeywordEntry(CHAR_RXFUNCADD, BUILTIN_RXFUNCADD),
302  KeywordEntry(CHAR_RXFUNCDROP, BUILTIN_RXFUNCDROP),
303  KeywordEntry(CHAR_RXFUNCQUERY, BUILTIN_RXFUNCQUERY),
304  KeywordEntry(CHAR_SETLOCAL, BUILTIN_SETLOCAL),
305  KeywordEntry(CHAR_SIGN, BUILTIN_SIGN),
306  KeywordEntry(CHAR_SOURCELINE, BUILTIN_SOURCELINE),
307  KeywordEntry(CHAR_SPACE, BUILTIN_SPACE),
308  KeywordEntry(CHAR_STREAM, BUILTIN_STREAM),
309  KeywordEntry(CHAR_STRIP, BUILTIN_STRIP),
310  KeywordEntry(CHAR_SUBSTR, BUILTIN_SUBSTR),
311  KeywordEntry(CHAR_SUBWORD, BUILTIN_SUBWORD),
312  KeywordEntry(CHAR_SYMBOL, BUILTIN_SYMBOL),
313  KeywordEntry(CHAR_TIME, BUILTIN_TIME),
314  KeywordEntry(CHAR_TRACE, BUILTIN_TRACE),
315  KeywordEntry(CHAR_TRANSLATE, BUILTIN_TRANSLATE),
316  KeywordEntry(CHAR_TRUNC, BUILTIN_TRUNC),
317  KeywordEntry(CHAR_UPPER, BUILTIN_UPPER),
318  KeywordEntry(CHAR_USERID, BUILTIN_USERID),
319  KeywordEntry(CHAR_VALUE, BUILTIN_VALUE),
320  KeywordEntry(CHAR_VAR, BUILTIN_VAR),
321  KeywordEntry(CHAR_VERIFY, BUILTIN_VERIFY),
322  KeywordEntry(CHAR_WORD, BUILTIN_WORD),
323  KeywordEntry(CHAR_WORDINDEX, BUILTIN_WORDINDEX),
324  KeywordEntry(CHAR_WORDLENGTH, BUILTIN_WORDLENGTH),
325  KeywordEntry(CHAR_WORDPOS, BUILTIN_WORDPOS),
326  KeywordEntry(CHAR_WORDS, BUILTIN_WORDS),
327  KeywordEntry(CHAR_X2B, BUILTIN_X2B),
328  KeywordEntry(CHAR_X2C, BUILTIN_X2C),
329  KeywordEntry(CHAR_X2D, BUILTIN_X2D),
330  KeywordEntry(CHAR_XRANGE, BUILTIN_XRANGE),
331 #endif
332 };
333 
334 /*********************************************************************/
335 /* */
336 /* Table of condition keywords used for translation */
337 /* */
338 /*********************************************************************/
339 
340 KeywordEntry RexxSource::conditionKeywords[] = { /* condition option table */
341  KeywordEntry(CHAR_ANY, CONDITION_ANY),
342  KeywordEntry(CHAR_ERROR, CONDITION_ERROR),
343  KeywordEntry(CHAR_FAILURE, CONDITION_FAILURE),
344  KeywordEntry(CHAR_HALT, CONDITION_HALT),
345  KeywordEntry(CHAR_LOSTDIGITS, CONDITION_LOSTDIGITS),
346  KeywordEntry(CHAR_NOMETHOD, CONDITION_NOMETHOD),
347  KeywordEntry(CHAR_NOSTRING, CONDITION_NOSTRING),
348  KeywordEntry(CHAR_NOTREADY, CONDITION_NOTREADY),
349  KeywordEntry(CHAR_NOVALUE, CONDITION_NOVALUE),
350  KeywordEntry(CHAR_PROPAGATE, CONDITION_PROPAGATE),
351  KeywordEntry(CHAR_SYNTAX, CONDITION_SYNTAX),
352  KeywordEntry(CHAR_USER, CONDITION_USER),
353 };
354 
355 /*********************************************************************/
356 /* */
357 /* Table of parse options used for translation */
358 /* */
359 /*********************************************************************/
360 
361 KeywordEntry RexxSource::parseOptions[] = { /* parse option table */
362  KeywordEntry(CHAR_ARG, SUBKEY_ARG),
363  KeywordEntry(CHAR_CASELESS, SUBKEY_CASELESS),
364  KeywordEntry(CHAR_LINEIN, SUBKEY_LINEIN),
365  KeywordEntry(CHAR_LOWER, SUBKEY_LOWER),
366  KeywordEntry(CHAR_PULL, SUBKEY_PULL),
367  KeywordEntry(CHAR_SOURCE, SUBKEY_SOURCE),
368  KeywordEntry(CHAR_UPPER, SUBKEY_UPPER),
369  KeywordEntry(CHAR_VALUE, SUBKEY_VALUE),
370  KeywordEntry(CHAR_VAR, SUBKEY_VAR),
371  KeywordEntry(CHAR_VERSION, SUBKEY_VERSION),
372 };
373 
374 /*********************************************************************/
375 /* */
376 /* Table of directive subkeywords used for translation */
377 /* */
378 /*********************************************************************/
379 
380 KeywordEntry RexxSource::subDirectives[] = { /* language directive subkeywords */
381  KeywordEntry(CHAR_ABSTRACT, SUBDIRECTIVE_ABSTRACT),
382  KeywordEntry(CHAR_ATTRIBUTE, SUBDIRECTIVE_ATTRIBUTE),
383  KeywordEntry(CHAR_CLASS, SUBDIRECTIVE_CLASS),
384  KeywordEntry(CHAR_COMMANDS, SUBDIRECTIVE_COMMANDS),
385  KeywordEntry(CHAR_DIGITS, SUBDIRECTIVE_DIGITS),
386  KeywordEntry(CHAR_EXTERNAL, SUBDIRECTIVE_EXTERNAL),
387  KeywordEntry(CHAR_FORM, SUBDIRECTIVE_FORM),
388  KeywordEntry(CHAR_FUZZ, SUBDIRECTIVE_FUZZ),
389  KeywordEntry(CHAR_GET, SUBDIRECTIVE_GET),
390  KeywordEntry(CHAR_GUARDED, SUBDIRECTIVE_GUARDED),
391  KeywordEntry(CHAR_INHERIT, SUBDIRECTIVE_INHERIT),
392  KeywordEntry(CHAR_LIBRARY, SUBDIRECTIVE_LIBRARY),
393  KeywordEntry(CHAR_MACROSPACE, SUBDIRECTIVE_MACROSPACE),
394  KeywordEntry(CHAR_METACLASS, SUBDIRECTIVE_METACLASS),
395  KeywordEntry(CHAR_MIXINCLASS, SUBDIRECTIVE_MIXINCLASS),
396  KeywordEntry(CHAR_NOCOMMANDS, SUBDIRECTIVE_NOCOMMANDS),
397  KeywordEntry(CHAR_NOMACROSPACE,SUBDIRECTIVE_NOMACROSPACE),
398  KeywordEntry(CHAR_PRIVATE, SUBDIRECTIVE_PRIVATE),
399  KeywordEntry(CHAR_PROTECTED, SUBDIRECTIVE_PROTECTED),
400  KeywordEntry(CHAR_PUBLIC, SUBDIRECTIVE_PUBLIC),
401  KeywordEntry(CHAR_SET, SUBDIRECTIVE_SET),
402  KeywordEntry(CHAR_SUBCLASS, SUBDIRECTIVE_SUBCLASS),
403  KeywordEntry(CHAR_TRACE, SUBDIRECTIVE_TRACE),
404  KeywordEntry(CHAR_UNGUARDED, SUBDIRECTIVE_UNGUARDED),
405  KeywordEntry(CHAR_UNPROTECTED, SUBDIRECTIVE_UNPROTECTED),
406 };
407 
408 /**
409  * Resolve a token to a potential subkeyword.
410  *
411  * @param token The token to resolve.
412  * @param Table The table to search.
413  * @param Table_Size The size of the table.
414  *
415  * @return The numeric identifier for the constant. Returns 0 if not
416  * found in the target table.
417  */
418 int RexxSource::resolveKeyword(RexxString *token, KeywordEntry *Table, int Table_Size)
419 {
420  const char *Name = token->getStringData();
421  stringsizeB_t Length = token->getBLength();
422 
423  int Lower = 0; /* set initial lower bound */
424  int Upper = Table_Size - 1; /* set the upper bound */
425  char FirstChar = *Name; /* get the first character */ // todo m17n
426 
427  while (Lower <= Upper)
428  { /* while still a range */
429  /* set new middle location */
430  int Middle = Lower + ((Upper - Lower) / 2);
431  /* if first character matches */
432  if (*Table[Middle].name == FirstChar)
433  {
434  int rc = memcmp(Name, Table[Middle].name, Numerics::minVal(Length, Table[Middle].length)); // todo m17n
435  if (!rc)
436  { /* compared equal */
437  /* lengths equal? */
438  if (Length == Table[Middle].length)
439  {
440  /* return this keyword code */
441  return Table[Middle].keyword_code;
442  }
443  /* have to go up? */
444  else if (Length > Table[Middle].length)
445  {
446  Lower = Middle + 1; /* set new lower bound */
447  }
448  else /* going down */
449  {
450  Upper = Middle - 1; /* set new upper bound */
451  }
452  }
453  else if (rc > 0) /* name is larger */
454  {
455  Lower = Middle + 1; /* set new lower bound */
456  }
457  else /* going down */
458  {
459  Upper = Middle - 1; /* set new upper bound */
460  }
461  }
462  /* name is larger */
463  else if (*Table[Middle].name < FirstChar)
464  {
465  Lower = Middle + 1; /* set new lower bound */
466  }
467  else /* going down */
468  {
469  Upper = Middle - 1; /* set new upper bound */
470  }
471  }
472  return 0; /* return failure flag */
473 }
474 
475 #define tabSize(t) (sizeof(t)/sizeof(t[0]))
476 
477 
479  RexxToken *token) /* token to check */
480 /******************************************************************************/
481 /* Function: Return a numeric subkeyword identifier for a token */
482 /******************************************************************************/
483 {
484  // not a symbol? not a keyword
485  if (!token->isSymbol())
486  {
487  return 0;
488  }
490 }
491 
493  RexxToken *token) /* token to check */
494 /****************************************************************************/
495 /* Function: Return a numeric keyword identifier for a token */
496 /****************************************************************************/
497 {
498  // not a symbol? not a keyword
499  if (!token->isSymbol())
500  {
501  return 0;
502  }
504 }
505 
507  RexxToken *token) /* token to check */
508 /****************************************************************************/
509 /* Function: Return a numeric builtin function identifier for a token */
510 /****************************************************************************/
511 {
512  // This can be a symbol or a literal
513  if (!token->isSymbolOrLiteral())
514  {
515  return 0;
516  }
518 }
519 
520 
522  RexxString *value) /* name to check */
523 /******************************************************************************/
524 /* Function: Return a numeric keyword identifier for a string */
525 /******************************************************************************/
526 {
527  return (size_t)resolveKeyword(value, builtinFunctions, tabSize(builtinFunctions));
528 }
529 
530 
532  RexxToken *token) /* token to check */
533 /****************************************************************************/
534 /* Function: Return a numeric condition identifier for a token */
535 /****************************************************************************/
536 {
537  // not a symbol? not a keyword
538  if (!token->isSymbol())
539  {
540  return 0;
541  }
543 }
544 
546  RexxToken *token) /* token to check */
547 /****************************************************************************/
548 /* Function: Return a numeric condition identifier for a token */
549 /****************************************************************************/
550 {
551  // not a symbol? not a keyword
552  if (!token->isSymbol())
553  {
554  return 0;
555  }
557 }
558 
560  RexxToken *token) /* token to check */
561 /****************************************************************************/
562 /* Function: Return a numeric directive identifier for a token */
563 /****************************************************************************/
564 {
565  // not a symbol? not a keyword
566  if (!token->isSymbol())
567  {
568  return 0;
569  }
571 }
572 
574  RexxToken *token) /* token to check */
575 /****************************************************************************/
576 /* Function: Return a numeric directive option identifier for a token */
577 /****************************************************************************/
578 {
579  // not a symbol? not a keyword
580  if (!token->isSymbol())
581  {
582  return 0;
583  }
585 }
#define tabSize(t)
#define BUILTIN_SPACE
Definition: Token.hpp:370
#define SUBKEY_UNTIL
Definition: Token.hpp:230
#define SUBKEY_CLASS
Definition: Token.hpp:245
#define BUILTIN_TIME
Definition: Token.hpp:376
#define SUBKEY_WHILE
Definition: Token.hpp:236
#define SUBDIRECTIVE_NOCOMMANDS
Definition: Token.hpp:298
#define SUBDIRECTIVE_EXTERNAL
Definition: Token.hpp:282
#define KEYWORD_OTHERWISE
Definition: Token.hpp:180
#define SUBKEY_VAR
Definition: Token.hpp:233
#define KEYWORD_PULL
Definition: Token.hpp:162
#define KEYWORD_SELECT
Definition: Token.hpp:168
#define SUBDIRECTIVE_LIBRARY
Definition: Token.hpp:292
#define BUILTIN_MAX
Definition: Token.hpp:360
#define SUBKEY_EXIT
Definition: Token.hpp:243
#define CONDITION_NOSTRING
Definition: Token.hpp:309
#define BUILTIN_XRANGE
Definition: Token.hpp:391
#define BUILTIN_QUEUEEXIT
Definition: Token.hpp:406
#define SUBKEY_SCIENTIFIC
Definition: Token.hpp:226
#define BUILTIN_FORM
Definition: Token.hpp:350
#define KEYWORD_UPPER
Definition: Token.hpp:201
#define BUILTIN_LOWER
Definition: Token.hpp:399
#define CONDITION_LOSTDIGITS
Definition: Token.hpp:315
#define SUBDIRECTIVE_MIXINCLASS
Definition: Token.hpp:285
#define KEYWORD_PARSE
Definition: Token.hpp:160
#define DIRECTIVE_CLASS
Definition: Token.hpp:266
#define SUBKEY_MESSAGE
Definition: Token.hpp:246
#define CONDITION_SYNTAX
Definition: Token.hpp:313
#define SUBKEY_LOWER
Definition: Token.hpp:217
#define BUILTIN_CHAROUT
Definition: Token.hpp:336
#define SUBKEY_LABEL
Definition: Token.hpp:248
#define SUBDIRECTIVE_FORM
Definition: Token.hpp:294
#define KEYWORD_NOP
Definition: Token.hpp:157
#define BUILTIN_X2D
Definition: Token.hpp:390
#define SUBKEY_BY
Definition: Token.hpp:206
#define SUBKEY_EXPOSE
Definition: Token.hpp:211
#define BUILTIN_CENTER
Definition: Token.hpp:332
#define KEYWORD_REPLY
Definition: Token.hpp:165
#define KEYWORD_SIGNAL
Definition: Token.hpp:169
#define SUBKEY_DESCRIPTION
Definition: Token.hpp:238
#define SUBKEY_RETURN
Definition: Token.hpp:242
#define DIRECTIVE_METHOD
Definition: Token.hpp:267
#define BUILTIN_LENGTH
Definition: Token.hpp:356
#define SUBDIRECTIVE_COMMANDS
Definition: Token.hpp:297
#define DIRECTIVE_EXTENSION
Definition: Token.hpp:272
#define SUBDIRECTIVE_MACROSPACE
Definition: Token.hpp:299
#define SUBKEY_AUTO
Definition: Token.hpp:254
#define KEYWORD_RETURN
Definition: Token.hpp:166
#define BUILTIN_CHANGESTR
Definition: Token.hpp:334
#define BUILTIN_SYMBOL
Definition: Token.hpp:375
#define BUILTIN_RANDOM
Definition: Token.hpp:365
#define DIRECTIVE_REQUIRES
Definition: Token.hpp:265
#define KEYWORD_DO
Definition: Token.hpp:149
#define KEYWORD_OPTIONS
Definition: Token.hpp:159
#define SUBKEY_STRICT
Definition: Token.hpp:249
#define BUILTIN_ABS
Definition: Token.hpp:323
#define KEYWORD_CALL
Definition: Token.hpp:148
#define KEYWORD_PUSH
Definition: Token.hpp:163
#define SUBKEY_ARGUMENTS
Definition: Token.hpp:247
#define BUILTIN_QUALIFY
Definition: Token.hpp:407
#define KEYWORD_ITERATE
Definition: Token.hpp:154
#define SUBDIRECTIVE_SET
Definition: Token.hpp:291
#define SUBKEY_WHEN
Definition: Token.hpp:235
#define SUBKEY_THEN
Definition: Token.hpp:228
#define SUBKEY_ADDITIONAL
Definition: Token.hpp:239
#define BUILTIN_QUEUED
Definition: Token.hpp:364
#define SUBKEY_TRUE
Definition: Token.hpp:250
#define CONDITION_USER
Definition: Token.hpp:314
#define SUBDIRECTIVE_GUARDED
Definition: Token.hpp:280
#define DIRECTIVE_ROUTINE
Definition: Token.hpp:268
#define SUBKEY_ARRAY
Definition: Token.hpp:241
#define BUILTIN_CONDITION
Definition: Token.hpp:339
#define BUILTIN_DIGITS
Definition: Token.hpp:348
#define BUILTIN_BITOR
Definition: Token.hpp:328
#define BUILTIN_COMPARE
Definition: Token.hpp:338
#define KEYWORD_PROCEDURE
Definition: Token.hpp:161
#define KEYWORD_LEAVE
Definition: Token.hpp:155
#define SUBDIRECTIVE_UNGUARDED
Definition: Token.hpp:284
#define BUILTIN_ENDLOCAL
Definition: Token.hpp:404
#define BUILTIN_SUBWORD
Definition: Token.hpp:374
#define SUBDIRECTIVE_INHERIT
Definition: Token.hpp:278
#define BUILTIN_FUZZ
Definition: Token.hpp:352
#define SUBDIRECTIVE_SUBCLASS
Definition: Token.hpp:283
#define BUILTIN_VAR
Definition: Token.hpp:381
#define CONDITION_ANY
Definition: Token.hpp:304
#define BUILTIN_MIN
Definition: Token.hpp:361
#define BUILTIN_REVERSE
Definition: Token.hpp:366
#define SUBDIRECTIVE_ATTRIBUTE
Definition: Token.hpp:286
#define BUILTIN_LEFT
Definition: Token.hpp:355
#define BUILTIN_SIGN
Definition: Token.hpp:368
#define CONDITION_PROPAGATE
Definition: Token.hpp:312
#define SUBKEY_ENGINEERING
Definition: Token.hpp:210
#define SUBDIRECTIVE_UNPROTECTED
Definition: Token.hpp:289
#define KEYWORD_WHEN
Definition: Token.hpp:183
#define SUBKEY_NAMED
Definition: Token.hpp:253
#define KEYWORD_NUMERIC
Definition: Token.hpp:158
#define BUILTIN_ARG
Definition: Token.hpp:325
#define CONDITION_NOMETHOD
Definition: Token.hpp:308
#define KEYWORD_ADDRESS
Definition: Token.hpp:146
#define CONDITION_NOVALUE
Definition: Token.hpp:311
#define SUBDIRECTIVE_TRACE
Definition: Token.hpp:296
#define SUBKEY_FOR
Definition: Token.hpp:212
#define BUILTIN_TRACE
Definition: Token.hpp:377
#define SUBDIRECTIVE_FUZZ
Definition: Token.hpp:295
#define BUILTIN_DELSTR
Definition: Token.hpp:346
#define BUILTIN_CHARIN
Definition: Token.hpp:335
#define KEYWORD_QUEUE
Definition: Token.hpp:164
#define CONDITION_ERROR
Definition: Token.hpp:305
#define BUILTIN_LINEIN
Definition: Token.hpp:357
#define BUILTIN_VALUE
Definition: Token.hpp:380
#define KEYWORD_ARG
Definition: Token.hpp:147
#define BUILTIN_RXFUNCDROP
Definition: Token.hpp:402
#define BUILTIN_RXFUNCADD
Definition: Token.hpp:401
#define BUILTIN_WORDINDEX
Definition: Token.hpp:384
#define BUILTIN_WORDLENGTH
Definition: Token.hpp:385
#define KEYWORD_ELSE
Definition: Token.hpp:177
#define KEYWORD_IF
Definition: Token.hpp:152
#define KEYWORD_USE
Definition: Token.hpp:173
#define SUBKEY_FUZZ
Definition: Token.hpp:215
#define BUILTIN_DATE
Definition: Token.hpp:345
#define SUBKEY_FOREVER
Definition: Token.hpp:213
#define CONDITION_FAILURE
Definition: Token.hpp:306
#define SUBDIRECTIVE_DIGITS
Definition: Token.hpp:293
#define SUBDIRECTIVE_NOMACROSPACE
Definition: Token.hpp:300
#define BUILTIN_B2X
Definition: Token.hpp:326
#define BUILTIN_TRANSLATE
Definition: Token.hpp:378
#define KEYWORD_FORWARD
Definition: Token.hpp:198
#define SUBKEY_OVER
Definition: Token.hpp:224
#define DIRECTIVE_ATTRIBUTE
Definition: Token.hpp:269
#define SUBDIRECTIVE_GET
Definition: Token.hpp:290
#define BUILTIN_USERID
Definition: Token.hpp:398
#define BUILTIN_ADDRESS
Definition: Token.hpp:324
#define BUILTIN_LASTPOS
Definition: Token.hpp:354
#define SUBKEY_VERSION
Definition: Token.hpp:234
#define BUILTIN_ABBREV
Definition: Token.hpp:322
#define SUBDIRECTIVE_ABSTRACT
Definition: Token.hpp:288
#define DIRECTIVE_OPTIONS
Definition: Token.hpp:271
#define BUILTIN_RXFUNCQUERY
Definition: Token.hpp:403
#define SUBDIRECTIVE_CLASS
Definition: Token.hpp:281
#define BUILTIN_D2C
Definition: Token.hpp:342
#define KEYWORD_GUARD
Definition: Token.hpp:172
#define BUILTIN_WORDS
Definition: Token.hpp:387
#define BUILTIN_X2B
Definition: Token.hpp:388
#define BUILTIN_COPIES
Definition: Token.hpp:340
#define BUILTIN_WORD
Definition: Token.hpp:383
#define BUILTIN_FORMAT
Definition: Token.hpp:351
#define SUBKEY_NAMEDARGUMENTS
Definition: Token.hpp:252
#define BUILTIN_STREAM
Definition: Token.hpp:371
#define SUBDIRECTIVE_PRIVATE
Definition: Token.hpp:279
#define BUILTIN_LINEOUT
Definition: Token.hpp:358
#define KEYWORD_EXPOSE
Definition: Token.hpp:175
#define BUILTIN_STRIP
Definition: Token.hpp:372
#define BUILTIN_TRUNC
Definition: Token.hpp:379
#define BUILTIN_CHARS
Definition: Token.hpp:337
#define SUBKEY_TO
Definition: Token.hpp:229
#define KEYWORD_THEN
Definition: Token.hpp:178
#define SUBKEY_DIGITS
Definition: Token.hpp:207
#define KEYWORD_INTERPRET
Definition: Token.hpp:153
#define BUILTIN_X2C
Definition: Token.hpp:389
#define SUBKEY_SOURCE
Definition: Token.hpp:227
#define SUBKEY_LINEIN
Definition: Token.hpp:216
#define KEYWORD_RAISE
Definition: Token.hpp:176
#define SUBKEY_NAME
Definition: Token.hpp:219
#define SUBKEY_OFF
Definition: Token.hpp:221
#define CONDITION_NOTREADY
Definition: Token.hpp:310
#define BUILTIN_OVERLAY
Definition: Token.hpp:362
#define BUILTIN_SETLOCAL
Definition: Token.hpp:405
#define KEYWORD_EXIT
Definition: Token.hpp:151
#define SUBKEY_UPPER
Definition: Token.hpp:231
#define BUILTIN_CENTRE
Definition: Token.hpp:333
#define SUBKEY_ARG
Definition: Token.hpp:205
#define KEYWORD_DROP
Definition: Token.hpp:150
#define SUBKEY_WITH
Definition: Token.hpp:237
#define SUBDIRECTIVE_PUBLIC
Definition: Token.hpp:276
#define BUILTIN_DATATYPE
Definition: Token.hpp:344
#define SUBKEY_PULL
Definition: Token.hpp:225
#define SUBDIRECTIVE_METACLASS
Definition: Token.hpp:277
#define BUILTIN_POS
Definition: Token.hpp:363
#define BUILTIN_D2X
Definition: Token.hpp:343
#define SUBKEY_VALUE
Definition: Token.hpp:232
#define KEYWORD_TRACE
Definition: Token.hpp:170
#define BUILTIN_C2D
Definition: Token.hpp:330
#define SUBKEY_PROPAGATE
Definition: Token.hpp:255
#define SUBKEY_FALSE
Definition: Token.hpp:251
#define KEYWORD_LOOP
Definition: Token.hpp:199
#define KEYWORD_SAY
Definition: Token.hpp:167
#define BUILTIN_BITAND
Definition: Token.hpp:327
#define BUILTIN_SUBSTR
Definition: Token.hpp:373
#define DIRECTIVE_CONSTANT
Definition: Token.hpp:270
#define BUILTIN_RIGHT
Definition: Token.hpp:367
#define BUILTIN_C2X
Definition: Token.hpp:331
#define SUBKEY_ON
Definition: Token.hpp:222
#define BUILTIN_LINES
Definition: Token.hpp:359
#define BUILTIN_VERIFY
Definition: Token.hpp:382
#define SUBKEY_CASELESS
Definition: Token.hpp:218
#define BUILTIN_COUNTSTR
Definition: Token.hpp:341
#define SUBDIRECTIVE_PROTECTED
Definition: Token.hpp:287
#define BUILTIN_UPPER
Definition: Token.hpp:400
#define KEYWORD_END
Definition: Token.hpp:179
#define BUILTIN_DELWORD
Definition: Token.hpp:347
#define BUILTIN_SOURCELINE
Definition: Token.hpp:369
#define CONDITION_HALT
Definition: Token.hpp:307
#define BUILTIN_INSERT
Definition: Token.hpp:353
#define BUILTIN_WORDPOS
Definition: Token.hpp:386
#define BUILTIN_BITXOR
Definition: Token.hpp:329
#define SUBKEY_FORM
Definition: Token.hpp:214
#define BUILTIN_ERRORTEXT
Definition: Token.hpp:349
#define SUBKEY_CONTINUE
Definition: Token.hpp:244
Definition: SourceFile.hpp:118
int keyword_code
Definition: SourceFile.hpp:129
static wholenumber_t minVal(wholenumber_t n1, wholenumber_t n2)
Definition: Numerics.hpp:116
static size_t resolveBuiltin(RexxString *)
static int condition(RexxToken *)
static KeywordEntry subKeywords[]
Definition: SourceFile.hpp:539
static int subDirective(RexxToken *)
static int keyDirective(RexxToken *)
static KeywordEntry directives[]
Definition: SourceFile.hpp:537
static int subKeyword(RexxToken *)
static int resolveKeyword(RexxString *token, KeywordEntry *Table, int Table_Size)
static KeywordEntry parseOptions[]
Definition: SourceFile.hpp:542
static KeywordEntry keywordInstructions[]
Definition: SourceFile.hpp:538
static KeywordEntry subDirectives[]
Definition: SourceFile.hpp:543
static KeywordEntry builtinFunctions[]
Definition: SourceFile.hpp:540
static KeywordEntry conditionKeywords[]
Definition: SourceFile.hpp:541
static int builtin(RexxToken *)
static int parseOption(RexxToken *)
static int keyword(RexxToken *)
const char * getStringData()
sizeB_t getBLength()
RexxString * value
Definition: Token.hpp:447
bool isSymbol()
Definition: Token.hpp:438
bool isSymbolOrLiteral()
Definition: Token.hpp:436
stringsize_t stringsizeB_t
Definition: rexx.h:247