rexx.h
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.ibm.com/developerworks/oss/CPLv1.0.htm */
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 /*----------------------------------------------------------------------------*/
40 /* */
41 /* Module Name: rexx.h */
42 /* */
43 /* ooRexx Common Definitions File */
44 /* */
45 /* Note: This is a revision of the original IBM rexx.h header file. All of the*/
46 /* conditional sections have been removed and it has been split into multiple */
47 /* header files, some of which are platform specific. Many of the types have */
48 /* been changed to more portable types. */
49 /* */
50 /*----------------------------------------------------------------------------*/
51 
52 #ifndef REXXSAA_INCLUDED
53 #define REXXSAA_INCLUDED
54 
55 
56 #ifdef __cplusplus
57 #define BEGIN_EXTERN_C() extern "C" {
58 #define END_EXTERN_C() }
59 #else
60 #define BEGIN_EXTERN_C()
61 #define END_EXTERN_C()
62 #endif
63 
64 
65 #include "rexxapitypes.h" // Platform specific stuff
66 
67 /*----------------------------------------------------------------------------*/
68 /* */
69 /* Common */
70 /* */
71 /*----------------------------------------------------------------------------*/
72 
73 typedef int RexxReturnCode; // API return type
74 
75 /******************************************************************************/
76 /* Types (for general use) */
77 /******************************************************************************/
78 typedef const char *CSTRING; /* pointer to zero-terminated string */
79 typedef void *POINTER;
80 
81 #ifdef __cplusplus
82 
83 class _RexxObjectPtr {};
84 class _RexxStringObject : public _RexxObjectPtr {};
85 class _RexxBufferStringObject : public _RexxStringObject {};
86 class _RexxArrayObject : public _RexxObjectPtr {};
87 class _RexxBufferObject : public _RexxObjectPtr {};
88 class _RexxPointerObject : public _RexxObjectPtr {};
89 class _RexxMethodObject : public _RexxObjectPtr {};
90 class _RexxRoutineObject : public _RexxObjectPtr {};
91 class _RexxPackageObject : public _RexxObjectPtr {};
92 class _RexxClassObject : public _RexxObjectPtr {};
93 class _RexxDirectoryObject : public _RexxObjectPtr {};
94 class _RexxSupplierObject : public _RexxObjectPtr {};
95 class _RexxStemObject : public _RexxObjectPtr {};
96 class _RexxMutableBufferObject : public _RexxObjectPtr {};
97 
98 typedef _RexxObjectPtr *RexxObjectPtr;
99 typedef _RexxStringObject *RexxStringObject;
100 typedef _RexxBufferStringObject *RexxBufferStringObject;
101 typedef _RexxArrayObject *RexxArrayObject;
102 typedef _RexxBufferObject *RexxBufferObject;
103 typedef _RexxPointerObject *RexxPointerObject;
104 typedef _RexxMethodObject *RexxMethodObject;
105 typedef _RexxRoutineObject *RexxRoutineObject;
106 typedef _RexxPackageObject *RexxPackageObject;
107 typedef _RexxClassObject *RexxClassObject;
108 typedef _RexxDirectoryObject *RexxDirectoryObject;
109 typedef _RexxSupplierObject *RexxSupplierObject;
110 typedef _RexxStemObject *RexxStemObject;
111 typedef _RexxMutableBufferObject *RexxMutableBufferObject;
112 #else
113 struct _RexxObjectPtr;
114 struct _RexxStringObject;
115 struct _RexxArrayObject;
116 struct _RexxBufferObject;
117 struct _RexxPointerObject;
118 struct _RexxMethodObject;
119 struct _RexxRoutineObject;
120 struct _RexxPackageObject;
121 struct _RexxClassObject;
122 struct _RexxDirectoryObject;
123 struct _RexxSupplierObject;
124 struct _RexxStemObject;
125 struct _RexxMutableBufferObject;
126 
127 typedef struct _RexxObjectPtr *RexxObjectPtr;
128 typedef struct _RexxStringObject *RexxStringObject;
129 typedef struct _RexxBufferStringObject *RexxBufferStringObject;
130 typedef struct _RexxArrayObject *RexxArrayObject;
131 typedef struct _RexxBufferObject *RexxBufferObject;
132 typedef struct _RexxPointerObject *RexxPointerObject;
133 typedef struct _RexxMethodObject *RexxMethodObject;
134 typedef struct _RexxRoutineObject *RexxRoutineObject;
135 typedef struct _RexxPackageObject *RexxPackageObject;
136 typedef struct _RexxClassObject *RexxClassObject;
137 typedef struct _RexxDirectoryObject *RexxDirectoryObject;
138 typedef struct _RexxSupplierObject *RexxSupplierObject;
139 typedef struct _RexxStemObject *RexxStemObject;
140 typedef struct _RexxMutableBufferObject *RexxMutableBufferObject;
141 #endif
142 
143 /******************************************************************************/
144 /* Constant values (for general use) */
145 /******************************************************************************/
146 #define NO_CSTRING NULL
147 #define NULLOBJECT NULL
148 
149 
150 /*----------------------------------------------------------------------------*/
151 /*** RXSTRING defines */
152 /*----------------------------------------------------------------------------*/
153 
154 /*** Structure for external interface string (RXSTRING) */
155 
156 typedef struct _RXSTRING { /* rxstr */
157  size_t strlength; /* length of string */
158  char *strptr; /* pointer to string */
160 
161 typedef struct _CONSTRXSTRING { /* const rxstr */
162  size_t strlength; /* length of string */
163  const char *strptr; /* pointer to string */
165 
166 #ifndef OOREXX_COMPATIBILITY
167 #define CONSTANT_RXSTRING CONSTRXSTRING
168 #define CONSTANT_STRING CSTRING
169 #else
170 typedef char *PSZ;
171 #define CONSTANT_RXSTRING RXSTRING
172 #define CONSTANT_STRING PSZ
173 #endif
174 
175 /*** Macros for RexxString manipulation */
176 
177 #define RXNULLSTRING(r) ((r).strptr == NULL)
178 #define RXZEROLENSTRING(r) ((r).strptr != NULL && (r).strlength == 0)
179 #define RXVALIDSTRING(r) ((r).strptr != NULL && (r).strlength != 0)
180 #define RXSTRLEN(r) (RXNULLSTRING(r) ? 0 : (r).strlength)
181 #define RXSTRPTR(r) ((r).strptr)
182 #define MAKERXSTRING(r,p,l) { (r).strptr = p; (r).strlength = l; }
183 
184 
185 typedef RXSTRING *PRXSTRING; /* pointer to a RXSTRING */
186 typedef CONSTANT_RXSTRING *PCONSTRXSTRING; /* pointer to a RXSTRING */
187 
188 /*** Structure for system exit block (RXSYSEXIT) */
189 
190 typedef struct _RXSYSEXIT { /* syse */
191  CONSTANT_STRING sysexit_name; /* subcom enviro for sysexit */
192  int sysexit_code; /* sysexit function code */
194 typedef RXSYSEXIT *PRXSYSEXIT; /* pointer to a RXSYSEXIT */
195 
196 
197 
198 /*----------------------------------------------------------------------------*/
199 /*** Shared Variable Pool Interface defines */
200 /*----------------------------------------------------------------------------*/
201 
202 /*** Structure of Shared Variable Request Block (SHVBLOCK) */
203 
204 typedef struct _SHVBLOCK { /* shvb */
205  struct _SHVBLOCK *shvnext; /* pointer to the next block */
206  CONSTANT_RXSTRING shvname; /* Pointer to the name buffer */
207  RXSTRING shvvalue; /* Pointer to the value buffer */
208  size_t shvnamelen; /* Length of the name value */
209  size_t shvvaluelen; /* Length of the fetch value */
210  unsigned char shvcode; /* Function code for this block*/
211  unsigned char shvret; /* Individual Return Code Flags*/
214 
215 typedef char *PEXIT; /* ptr to exit parameter block */
216 
217 
218 
219 
220 /*----------------------------------------------------------------------------*/
221 /*** Include the other common and platform specific stuff */
222 /*----------------------------------------------------------------------------*/
223 
224 /* These must be placed after RXSTRING and CONSTRXSTRING are defined */
225 #include "rexxapidefs.h"
226 #include "rexxplatformdefs.h" // Platform specific stuff
227 
228 typedef size_t stringsize_t; // a Rexx string size
229 typedef size_t uwholenumber_t; // a Rexx whole number (unsigned)
230 typedef ssize_t wholenumber_t; // a Rexx whole number (signed)
231 typedef size_t logical_t; // a Rexx logical (1 or 0) value
232 typedef ssize_t codepoint_t; // a Rexx signed codepoint, which allows to pass -1 as default value or return -1 when error
233 
234 #ifndef STRONG_TYPES
235 
236 // Convert helpers (cast), to provide same services for weak and strong types
237 #define size_v(X) size_t(X)
238 #define stringsize_v(X) stringsize_t(X)
239 
240 // Weak type for string's size in chars
242 typedef stringsizeC_t sizeC_t; // Often size_t is used instead of stringsize_t --> create a similar name
243 #define stringsizeC_v(X) stringsizeC_t(X)
244 #define sizeC_v(X) sizeC_t(X)
245 
246 // Weak type for string's size in bytes
249 #define stringsizeB_v(X) stringsizeB_t(X)
250 #define sizeB_v(X) sizeB_t(X)
251 
252 #else
253 
254 // Temporary strong types to detect misuse between 'size in bytes' and 'size in chars'
255 
256 // D is a discriminant wich is used to create different types for the same type T :
257 // 'unsigned size in bytes' and 'unsigned size in chars' are both of type stringsize_t.
258 // But I want two different types to let the compiler complain when I pass an 'unsigned size in bytes'
259 // to a method wich expects an 'unsigned size in chars'.
260 enum Discriminant {stringsizeC, stringsizeB};
261 
262 // T is supposed to be size_t.
263 // That's why I add overloadings with int, to support constants like 0 or 1 or ... (whose implicit type is int, not size_t)
264 // That really removes errors of kind "ambiguous..."
265 template <typename T, int D>
266 class rxStringSize
267 {
268 public:
269  static const int ident=D;
270  static rxStringSize value(T s) { return rxStringSize<T, D>(s); }
271 public:
272  rxStringSize() /* : size(0) */ {} // Must NOT assign 0 because some constructors are sometimes called directly, and this assignement overrides some values already assigned... Strange practice, but...
273  rxStringSize(T t) : size(t) {}
274  rxStringSize(int t) : size(t) {}
275  rxStringSize(const rxStringSize<T, D> &s) : size(s.size) {}
276  T value() const { return size; }
277 
278  rxStringSize<T, D> &operator =(const rxStringSize<T, D> &other) { size = other.size; return *this; }
279  rxStringSize<T, D> &operator =(const T &other) { size = other; return *this; }
280 
281  rxStringSize<T, D> &operator +=(const rxStringSize<T, D> &other) { size += other.size; return *this; }
282  rxStringSize<T, D> &operator +=(const T &other) { size += other; return *this; }
283 
284  rxStringSize<T, D> &operator -=(const rxStringSize<T, D> &other) { size -= other.size; return *this; }
285  rxStringSize<T, D> &operator -=(const T &other) { size -= other; return *this; }
286 
287  rxStringSize<T, D> &operator *=(const rxStringSize<T, D> &other) { size *= other.size; return *this; }
288  rxStringSize<T, D> &operator *=(const T &other) { size *= other; return *this; }
289 
290  rxStringSize<T, D> &operator >>=(const rxStringSize<T, D> &other) { size >>= other.size; return *this; }
291  rxStringSize<T, D> &operator >>=(const T &other) { size >>= other; return *this; }
292 
293  // prefix
294  rxStringSize<T, D> &operator ++() { ++size; return *this; }
295  rxStringSize<T, D> &operator --() { --size; return *this; }
296 
297  // suffix
298  rxStringSize<T, D> operator ++(int) { return size++; }
299  rxStringSize<T, D> operator --(int) { return size--; }
300 protected:
301  T size;
302 };
303 
304 template <typename T, int D> bool operator ==(T t, const rxStringSize<T, D> &s) { return t == s.value(); }
305 template <typename T, int D> bool operator ==(int t, const rxStringSize<T, D> &s) { return t == s.value(); }
306 template <typename T, int D> bool operator ==(const rxStringSize<T, D> &s, T t) { return s.value() == t; }
307 template <typename T, int D> bool operator ==(const rxStringSize<T, D> &s, int t) { return s.value() == t; }
308 template <typename T, int D> bool operator ==(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() == s2.value(); }
309 
310 template <typename T, int D> bool operator !=(T t, const rxStringSize<T, D> &s) { return t != s.value(); }
311 template <typename T, int D> bool operator !=(int t, const rxStringSize<T, D> &s) { return t != s.value(); }
312 template <typename T, int D> bool operator !=(const rxStringSize<T, D> &s, T t) { return s.value() != t; }
313 template <typename T, int D> bool operator !=(const rxStringSize<T, D> &s, int t) { return s.value() != t; }
314 template <typename T, int D> bool operator !=(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() != s2.value(); }
315 
316 template <typename T, int D> bool operator <(T t, const rxStringSize<T, D> &s) { return t < s.value(); }
317 template <typename T, int D> bool operator <(int t, const rxStringSize<T, D> &s) { return t < (ssize_t)s.value(); }
318 template <typename T, int D> bool operator <(const rxStringSize<T, D> &s, T t) { return s.value() < t; }
319 template <typename T, int D> bool operator <(const rxStringSize<T, D> &s, int t) { return (ssize_t)s.value() < t; }
320 template <typename T, int D> bool operator <(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() < s2.value(); }
321 
322 template <typename T, int D> bool operator <=(T t, const rxStringSize<T, D> &s) { return t <= s.value(); }
323 template <typename T, int D> bool operator <=(int t, const rxStringSize<T, D> &s) { return t <= (ssize_t)s.value(); }
324 template <typename T, int D> bool operator <=(const rxStringSize<T, D> &s, T t) { return s.value() <= t; }
325 template <typename T, int D> bool operator <=(const rxStringSize<T, D> &s, int t) { return (ssize_t)s.value() <= t; }
326 template <typename T, int D> bool operator <=(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() <= s2.value(); }
327 
328 template <typename T, int D> bool operator >(T t, const rxStringSize<T, D> &s) { return t > s.value(); }
329 template <typename T, int D> bool operator >(int t, const rxStringSize<T, D> &s) { return t > (ssize_t)s.value(); }
330 template <typename T, int D> bool operator >(const rxStringSize<T, D> &s, T t) { return s.value() > t; }
331 template <typename T, int D> bool operator >(const rxStringSize<T, D> &s, int t) { return (ssize_t)s.value() > t; }
332 template <typename T, int D> bool operator >(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() > s2.value(); }
333 
334 template <typename T, int D> bool operator >=(T t, const rxStringSize<T, D> &s) { return t >= s.value(); }
335 template <typename T, int D> bool operator >=(int t, const rxStringSize<T, D> &s) { return t >= (ssize_t)s.value(); }
336 template <typename T, int D> bool operator >=(const rxStringSize<T, D> &s, T t) { return s.value() >= t; }
337 template <typename T, int D> bool operator >=(const rxStringSize<T, D> &s, int t) { return (ssize_t)s.value() >= t; }
338 template <typename T, int D> bool operator >=(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return s1.value() >= s2.value(); }
339 
340 template <typename T, int D> rxStringSize<T, D> operator +(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t + s.value()); }
341 template <typename T, int D> rxStringSize<T, D> operator +(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t + s.value()); }
342 template <typename T, int D> rxStringSize<T, D> operator +(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() + t); }
343 template <typename T, int D> rxStringSize<T, D> operator +(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() + t); }
344 template <typename T, int D> rxStringSize<T, D> operator +(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() + s2.value()); }
345 
346 template <typename T, int D> rxStringSize<T, D> operator -(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t - s.value()); }
347 template <typename T, int D> rxStringSize<T, D> operator -(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t - s.value()); }
348 template <typename T, int D> rxStringSize<T, D> operator -(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() - t); }
349 template <typename T, int D> rxStringSize<T, D> operator -(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() - t); }
350 template <typename T, int D> rxStringSize<T, D> operator -(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() - s2.value()); }
351 
352 template <typename T, int D> rxStringSize<T, D> operator *(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t * s.value()); }
353 template <typename T, int D> rxStringSize<T, D> operator *(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t * s.value()); }
354 template <typename T, int D> rxStringSize<T, D> operator *(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() * t); }
355 template <typename T, int D> rxStringSize<T, D> operator *(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() * t); }
356 template <typename T, int D> rxStringSize<T, D> operator *(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() * s2.value()); }
357 
358 template <typename T, int D> rxStringSize<T, D> operator /(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t / s.value()); }
359 template <typename T, int D> rxStringSize<T, D> operator /(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t / s.value()); }
360 template <typename T, int D> rxStringSize<T, D> operator /(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() / t); }
361 template <typename T, int D> rxStringSize<T, D> operator /(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() / t); }
362 template <typename T, int D> rxStringSize<T, D> operator /(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() / s2.value()); }
363 
364 template <typename T, int D> rxStringSize<T, D> operator %(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t % s.value()); }
365 template <typename T, int D> rxStringSize<T, D> operator %(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t % s.value()); }
366 template <typename T, int D> rxStringSize<T, D> operator %(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() % t); }
367 template <typename T, int D> rxStringSize<T, D> operator %(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() % t); }
368 template <typename T, int D> rxStringSize<T, D> operator %(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() % s2.value()); }
369 
370 template <typename T, int D> rxStringSize<T, D> operator &(T t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t & s.value()); }
371 template <typename T, int D> rxStringSize<T, D> operator &(int t, const rxStringSize<T, D> &s) { return rxStringSize<T, D>::value(t & s.value()); }
372 template <typename T, int D> rxStringSize<T, D> operator &(const rxStringSize<T, D> &s, T t) { return rxStringSize<T, D>::value(s.value() & t); }
373 template <typename T, int D> rxStringSize<T, D> operator &(const rxStringSize<T, D> &s, int t) { return rxStringSize<T, D>::value(s.value() & t); }
374 template <typename T, int D> rxStringSize<T, D> operator &(const rxStringSize<T, D> &s1, const rxStringSize<T, D> &s2) { return rxStringSize<T, D>::value(s1.value() & s2.value()); }
375 
376 // Convert helpers (cast), to provide same services for weak and strong types
377 #define size_v(X) size_t((X).value())
378 #define stringsize_v(X) stringsize_t((X).value())
379 
380 // Strong type for string's size in chars
381 typedef rxStringSize<stringsize_t, stringsizeC> stringsizeC_t;
382 typedef stringsizeC_t sizeC_t; // Often size_t is used instead of stringsize_t --> create a similar name for the strong type
383 #define stringsizeC_v(X) stringsizeC_t::value(X)
384 #define sizeC_v(X) sizeC_t::value(X)
385 
386 // Strong type for string's size in bytes
387 typedef rxStringSize<stringsize_t, stringsizeB> stringsizeB_t;
388 typedef stringsizeB_t sizeB_t;
389 #define stringsizeB_v(X) stringsizeB_t::value(X)
390 #define sizeB_v(X) sizeB_t::value(X)
391 
392 inline char *&operator +=(char *&str, sizeB_t s) { str += s.value(); return str; }
393 inline const char *&operator +=(const char *&str, sizeB_t s) { str += s.value(); return str; }
394 
395 inline char *operator +(char *str, sizeB_t s) { return str + s.value(); }
396 inline const char *operator +(const char *str, sizeB_t s) { return str + s.value(); }
397 
398 inline char *operator -(char *str, sizeB_t s) { return str - s.value(); }
399 inline const char *operator -(const char *str, sizeB_t s) { return str - s.value(); }
400 
401 #include <string.h>
402 inline int memcmp(const void *s1, const void *s2, sizeB_t n) { return memcmp(s1, s2, size_v(n)); }
403 inline void *memcpy(void *dest, const void *src, sizeB_t n) { return memcpy(dest, src, size_v(n)); }
404 inline void *memmove(void *dest, const void *src, sizeB_t n) { return memmove(dest, src, size_v(n)); }
405 inline void *memset(void *s, int c, sizeB_t n) { return memset(s, c, size_v(n)); }
406 inline const void *memchr(const void *s, int c, sizeB_t n) { return memchr(s, c, size_v(n)); }
407 
408 #endif
409 
410 
411 // a synonym for readability
412 #define RexxEntry REXXENTRY
413 
414 
415 /*** RexxPullFromQueue - Retrieve data from an External Data Queue */
416 typedef struct _RexxQueueTime { /* REXX time stamp format */
417  uint16_t hours; /* hour of the day (24-hour) */
418  uint16_t minutes; /* minute of the hour */
419  uint16_t seconds; /* second of the minute */
420  uint16_t hundredths; /* hundredths of a second */
421  uint16_t day; /* day of the month */
422  uint16_t month; /* month of the year */
423  uint16_t year; /* current year */
424  uint16_t weekday; /* day of the week */
425  uint32_t microseconds; /* microseconds */
426  uint32_t yearday; /* day number within the year */
428 
429 
430 typedef struct _RexxConditionData
431 {
432  wholenumber_t code; // The condition CODE information
433  wholenumber_t rc; // The condition RC value
434  RXSTRING message; // The condition secondary message text
435  RXSTRING errortext; // The condition error text.
436  size_t position; // The failure line number value
437  RXSTRING program; // The running program name
439 
440 /*----------------------------------------------------------------------------*/
441 /* */
442 /* 32-bit */
443 /* */
444 /*----------------------------------------------------------------------------*/
445 
446 /*----------------------------------------------------------------------------*/
447 /*** Main Entry Point to the Rexx Interpreter */
448 /*----------------------------------------------------------------------------*/
449 
451 
453  size_t, /* Num of args passed to rexx */
454  PCONSTRXSTRING, /* Array of args passed to rex */
455  CONSTANT_STRING, /* [d:][path] filename[.ext] */
456  PRXSTRING, /* Loc of rexx proc in memory */
457  CONSTANT_STRING, /* ASCIIZ initial environment.*/
458  int, /* type (command,subrtn,funct) */
459  PRXSYSEXIT, /* SysExit env. names & codes */
460  short *, /* Ret code from if numeric */
461  PRXSTRING ); /* Retvalue from the rexx proc */
463  CONSTANT_STRING, int, PRXSYSEXIT, short *,
464  PRXSTRING);
465 #define REXXSTART RexxStart
466 
467 // the following APIs are deprecated, and are included only for binary compatibility.
468 // These are nops if called.
470 typedef void (REXXENTRY *PFNREXXWAITFORTERMINATION)(void);
471 #define REXXWAITFORTERMINATION RexxWaitForTermination
472 
475 #define REXXDIDREXXTERMINATE RexxDidRexxTerminate
476 
479 #define REXXSHUTDOWNAPI RexxShutDownAPI
480 
481 
483  CONSTANT_STRING, // input program name
484  CONSTANT_STRING, // output file name
485  PRXSYSEXIT); // system exits to use during translation
486 
487 
489 
490 #define REXXTRANSLATEPROGRAM RexxTranslateProgram
491 
492 
494  CONSTANT_STRING, // input program name
495  CONSTANT_RXSTRING *, // program source
496  RXSTRING *); // returned image
497 
498 
500 
501 #define REXXTRANSLATEINSTOREPROGRAM RexxTranslateInstoreProgram
502 
503 
505 
506 typedef char *(REXXENTRY *PFNGETVERSIONINFORMATION)(void);
507 
508 #define REXXGETVERSIONINFORMATON RexxGetVersionInformation
509 
510 
511 /*----------------------------------------------------------------------------*/
512 /*** Subcommand Interface */
513 /*----------------------------------------------------------------------------*/
514 
515 /* This typedef simplifies coding of a Subcommand handler. */
517  unsigned short *,
518  PRXSTRING);
519 
520 /*** RexxRegisterSubcomDll -- Register a DLL entry point */
521 /*** as a Subcommand handler */
522 
524  CONSTANT_STRING, /* Name of subcom handler */
525  CONSTANT_STRING, /* Name of DLL */
526  CONSTANT_STRING, /* Name of procedure in DLL */
527  CONSTANT_STRING, /* User area */
528  size_t ); /* Drop authority. */
530  char *, size_t);
531 #define REXXREGISTERSUBCOMDLL RexxRegisterSubcomDll
532 
533 
534 /*** RexxRegisterSubcomExe -- Register an EXE entry point */
535 /*** as a Subcommand handler */
536 
538  CONSTANT_STRING, /* Name of subcom handler */
539  REXXPFN, /* address of handler in EXE */
540  CONSTANT_STRING); /* User area */
542 #define REXXREGISTERSUBCOMEXE RexxRegisterSubcomExe
543 
544 
545 /*** RexxQuerySubcom - Query an environment for Existance */
546 
548  CONSTANT_STRING, /* Name of the Environment */
549  CONSTANT_STRING, /* DLL Module Name */
550  unsigned short *, /* Stor for existance code */
551  char *); /* Stor for user word */
553  char *);
554 #define REXXQUERYSUBCOM RexxQuerySubcom
555 
556 
557 /*** RexxDeregisterSubcom - Drop registration of a Subcommand */
558 /*** environment */
559 
561  CONSTANT_STRING, /* Name of the Environment */
562  CONSTANT_STRING); /* DLL Module Name */
564 #define REXXDEREGISTERSUBCOM RexxDeregisterSubcom
565 
566 
567 /*----------------------------------------------------------------------------*/
568 /*** Shared Variable Pool Interface */
569 /*----------------------------------------------------------------------------*/
570 
571 /*** RexxVariablePool - Request Variable Pool Service */
572 
574  PSHVBLOCK); /* Pointer to list of SHVBLOCKs*/
576 #define REXXVARIABLEPOOL RexxVariablePool
577 
578 
579 /*----------------------------------------------------------------------------*/
580 /*** External Function Interface */
581 /*----------------------------------------------------------------------------*/
582 
583 /* This typedef simplifies coding of an External Function. */
584 
586  size_t,
589  PRXSTRING);
590 
592  size_t,
595  PRXSTRING);
596 
597 /*** RexxRegisterFunctionDll - Register a function in the AFT */
598 
600  CONSTANT_STRING, /* Name of function to add */
601  CONSTANT_STRING, /* Dll file name (if in dll) */
602  CONSTANT_STRING); /* Entry in dll */
604 #define REXXREGISTERFUNCTIONDLL RexxRegisterFunctionDll
605 
606 
607 /*** RexxRegisterFunctionExe - Register a function in the AFT */
608 
610  CONSTANT_STRING, /* Name of function to add */
611  REXXPFN); /* Entry point in EXE */
613 #define REXXREGISTERFUNCTIONEXE RexxRegisterFunctionExe
614 
615 
616 /*** RexxDeregisterFunction - Delete a function from the AFT */
617 
619  CONSTANT_STRING ); /* Name of function to remove */
621 #define REXXDEREGISTERFUNCTION RexxDeregisterFunction
622 
623 
624 /*** RexxQueryFunction - Scan the AFT for a function */
625 
627  CONSTANT_STRING ); /* Name of function to find */
629 #define REXXQUERYFUNCTION RexxQueryFunction
630 
631 
632 /*----------------------------------------------------------------------------*/
633 /*** System Exits */
634 /*----------------------------------------------------------------------------*/
635 
636 /*** Subfunction RXFNCCAL - External Function Calls */
637 
638 typedef struct _RXFNC_FLAGS { /* fl */
639  unsigned rxfferr : 1; /* Invalid call to routine. */
640  unsigned rxffnfnd : 1; /* Function not found. */
641  unsigned rxffsub : 1; /* Called as a subroutine */
643 
644 typedef struct _RXFNCCAL_PARM { /* fnc */
645  RXFNC_FLAGS rxfnc_flags ; /* function flags */
646  CONSTANT_STRING rxfnc_name; /* Pointer to function name. */
647  unsigned short rxfnc_namel; /* Length of function name. */
648  CONSTANT_STRING rxfnc_que; /* Current queue name. */
649  unsigned short rxfnc_quel; /* Length of queue name. */
650  unsigned short rxfnc_argc; /* Number of args in list. */
651  PCONSTRXSTRING rxfnc_argv; /* Pointer to argument list. */
652  RXSTRING rxfnc_retc; /* Return value. */
654 
655 
656 /*** Subfunction RXOFNCCAL - Object valued external function call */
657 
658 typedef struct _RXOFNC_FLAGS { /* fl */
659  unsigned rxfferr : 1; /* Invalid call to routine. */
660  unsigned rxffnfnd : 1; /* Function not found. */
661  unsigned rxffsub : 1; /* Called as a subroutine */
663 
664 typedef struct _RXOFNCCAL_PARM { /* fnc */
665  RXOFNC_FLAGS rxfnc_flags ; /* function flags */
666  CONSTANT_RXSTRING rxfnc_name; // the called function name
667  size_t rxfnc_argc; /* Number of args in list. */
668  RexxObjectPtr *rxfnc_argv; /* Pointer to argument list. */
669  RexxObjectPtr rxfnc_retc; /* Return value. */
671 
672 
673 
674 /*** Subfunction RXEXFCAL - Scripting Function Calls */
675 
676 typedef struct _RXEXF_FLAGS { /* fl */
677  unsigned rxfferr : 1; /* Invalid call to routine. */
678  unsigned rxffnfnd : 1; /* Function not found. */
679  unsigned rxffsub : 1; /* Called as a subroutine */
681 
682 typedef struct _RXEXFCAL_PARM { /* fnc */
683  RXEXF_FLAGS rxfnc_flags ; /* function flags */
684  CONSTANT_RXSTRING rxfnc_name; // the called function name
685  size_t rxfnc_argc; /* Number of args in list. */
686  RexxObjectPtr *rxfnc_argv; /* Pointer to argument list. */
687  RexxObjectPtr rxfnc_retc; /* Return value. */
689 
690 /*** Subfunction RXCMDHST -- Process Host Commands */
691 
692 typedef struct _RXCMD_FLAGS { /* fl */
693  unsigned rxfcfail : 1; /* Command failed. */
694  unsigned rxfcerr : 1; /* Command ERROR occurred. */
696 
697 typedef struct _RXCMDHST_PARM { /* rx */
698  RXCMD_FLAGS rxcmd_flags; /* error/failure flags */
699  CONSTANT_STRING rxcmd_address; /* Pointer to address name. */
700  unsigned short rxcmd_addressl; /* Length of address name. */
701  CONSTANT_STRING rxcmd_dll; /* dll name for command. */
702  unsigned short rxcmd_dll_len; /* Length of dll name. */
703  CONSTANT_RXSTRING rxcmd_command; /* The command string. */
704  RXSTRING rxcmd_retc; /* Pointer to return buffer */
706 
707 
708 /*** Subfunction RXMSQPLL -- Pull Entry from Queue */
709 
710 typedef struct _RXMSQPLL_PARM { /* pll */
711  RXSTRING rxmsq_retc; /* Pointer to dequeued entry */
712  /* buffer. User allocated. */
714 
715 
716 /*** Subfunction RXMSQPSH -- Push Entry on Queue */
717 typedef struct _RXMSQ_FLAGS { /* fl */
718  unsigned rxfmlifo : 1; /* Stack entry LIFO if set */
720 
721 
722 typedef struct _RXMSQPSH_PARM { /* psh */
723  RXMSQ_FLAGS rxmsq_flags; /* LIFO/FIFO flag */
724  CONSTANT_RXSTRING rxmsq_value; /* The entry to be pushed. */
726 
727 
728 /*** Subfunction RXMSQSIZ -- Return the Current Queue Size */
729 
730 typedef struct _RXMSQSIZ_PARM { /* siz */
731  size_t rxmsq_size; /* Number of Lines in Queue */
733 
734 
735 /*** Subfunction RXMSQNAM -- Set Current Queue Name */
736 
737 typedef struct _RXMSQNAM_PARM { /* nam */
738  RXSTRING rxmsq_name; /* RXSTRING containing */
739  /* queue name. */
741 
742 
743 /*** Subfunction RXSIOSAY -- Perform SAY Clause */
744 
745 typedef struct _RXSIOSAY_PARM { /* say */
746  CONSTANT_RXSTRING rxsio_string; /* String to display. */
748 
749 
750 /*** Subfunction RXSIOTRC -- Write Trace Output */
751 
752 typedef struct _RXSIOTRC_PARM { /* trcparm */
753  CONSTANT_RXSTRING rxsio_string; /* Trace line to display. */
755 
756 
757 /*** Subfunction RXSIOTRD -- Read Input from the Terminal */
758 
759 typedef struct _RXSIOTRD_PARM { /* trd */
760  RXSTRING rxsiotrd_retc; /* RXSTRING for output. */
762 
763 
764 /*** Subfunction RXSIODTR -- Read Debug Input from the Terminal */
765 
766 typedef struct _RXSIODTR_PARM { /* dtr */
767  RXSTRING rxsiodtr_retc; /* RXSTRING for output. */
769 
770 
771 /*** Subfunction RXHSTTST -- Test for HALT Condition */
772 
773 typedef struct _RXHLT_FLAGS { /* fl Halt flag */
774  unsigned rxfhhalt : 1; /* Set if HALT occurred. */
776 
777 typedef struct _RXHLTTST_PARM { /* tst */
778  RXHLT_FLAGS rxhlt_flags; /* Set if HALT occurred */
780 
781 
782 /*** Subfunction RXTRCTST -- Test for TRACE Condition */
783 
784 typedef struct _RXTRC_FLAGS { /* fl Trace flags */
785  unsigned rxftrace : 1; /* Set to run external trace. */
787 
788 
789 typedef struct _RXTRCTST_PARM { /* tst */
790  RXTRC_FLAGS rxtrc_flags; /* Set to run external trace */
792 
793 
794 typedef struct _RXVARNOVALUE_PARM { /* var */
795  RexxStringObject variable_name; // the request variable name
796  RexxObjectPtr value; // returned variable value
798 
799 
800 typedef struct _RXVALCALL_PARM { /* val */
801  RexxStringObject selector; // the environment selector name
802  RexxStringObject variable_name; // the request variable name
803  RexxObjectPtr value; // returned variable value
805 
806 /* This typedef simplifies coding of an Exit handler. */
807 typedef int REXXENTRY RexxExitHandler(int, int, PEXIT);
808 
809 
810 /*** RexxRegisterExitDll - Register a system exit. */
811 
813  CONSTANT_STRING, /* Name of the exit handler */
814  CONSTANT_STRING, /* Name of the DLL */
815  CONSTANT_STRING, /* Name of the procedure */
816  CONSTANT_STRING, /* User area */
817  size_t); /* Drop authority */
819  char *, size_t);
820 #define REXXREGISTEREXITDLL RexxRegisterExitDll
821 
822 
823 /*** RexxRegisterExitExe - Register a system exit. */
824 
826  CONSTANT_STRING, /* Name of the exit handler */
827  REXXPFN, /* Address of exit handler */
828  CONSTANT_STRING); /* User area */
830 #define REXXREGISTEREXITEXE RexxRegisterExitExe
831 
832 
833 /*** RexxDeregisterExit - Drop registration of a system exit. */
834 
836  CONSTANT_STRING, /* Exit name */
837  CONSTANT_STRING) ; /* DLL module name */
839 #define REXXDEREGISTEREXIT RexxDeregisterExit
840 
841 
842 /*** RexxQueryExit - Query an exit for existance. */
843 
845  CONSTANT_STRING, /* Exit name */
846  CONSTANT_STRING, /* DLL Module name. */
847  unsigned short *, /* Existance flag. */
848  char * ); /* User data. */
850 #define REXXQUERYEXIT RexxQueryExit
851 
852 
853 /*----------------------------------------------------------------------------*/
854 /*** Asynchronous Request Interface */
855 /*----------------------------------------------------------------------------*/
856 
857 /*** RexxSetHalt - Request Program Halt */
858 
860  process_id_t, /* Process Id */
861  thread_id_t); /* Thread Id */
863 #define REXXSETHALT RexxSetHalt
864 
865 
866 /*** RexxSetTrace - Request Program Trace */
867 
869  process_id_t, /* Process Id */
870  thread_id_t); /* Thread Id */
872 #define REXXSETTRACE RexxSetTrace
873 
874 
875 /*** RexxResetTrace - Turn Off Program Trace */
876 
878  process_id_t, /* Process Id */
879  thread_id_t); /* Thread Id */
881 #define REXXRESETTRACE RexxResetTrace
882 
883 
884 /*----------------------------------------------------------------------------*/
885 /*** Macro Space Interface */
886 /*----------------------------------------------------------------------------*/
887 
888 /*** RexxAddMacro - Register a function in the Macro Space */
889 
891  CONSTANT_STRING, /* Function to add or change */
892  CONSTANT_STRING, /* Name of file to get function*/
893  size_t); /* Flag indicating search pos */
895 #define REXXADDMACRO RexxAddMacro
896 
897 
898 /*** RexxDropMacro - Remove a function from the Macro Space */
899 
901  CONSTANT_STRING); /* Name of function to remove */
903 #define REXXDROPMACRO RexxDropMacro
904 
905 
906 /*** RexxSaveMacroSpace - Save Macro Space functions to a file */
907 
909  size_t, /* Argument count (0==save all)*/
910  CONSTANT_STRING *, /* List of funct names to save */
911  CONSTANT_STRING); /* File to save functions in */
913 #define REXXSAVEMACROSPACE RexxSaveMacroSpace
914 
915 
916 /*** RexxLoadMacroSpace - Load Macro Space functions from a file */
917 
919  size_t, /* Argument count (0==load all)*/
920  CONSTANT_STRING *, /* List of funct names to load */
921  CONSTANT_STRING); /* File to load functions from */
923 #define REXXLOADMACROSPACE RexxLoadMacroSpace
924 
925 
926 /*** RexxQueryMacro - Find a function's search-order position */
927 
929  CONSTANT_STRING, /* Function to search for */
930  unsigned short * ); /* Ptr for position flag return*/
932 #define REXXQUERYMACRO RexxQueryMacro
933 
934 
935 /*** RexxReorderMacro - Change a function's search-order */
936 /*** position */
937 
939  CONSTANT_STRING, /* Name of funct change order */
940  size_t); /* New position for function */
942 #define REXXREORDERMACRO RexxReorderMacro
943 
944 
945 /*** RexxClearMacroSpace - Remove all functions from a MacroSpace */
946 
948  void ); /* No Arguments. */
950 #define REXXCLEARMACROSPACE RexxClearMacroSpace
951 
952 
953 /*----------------------------------------------------------------------------*/
954 /*** Queing Services */
955 /*----------------------------------------------------------------------------*/
956 
957 #define MAX_QUEUE_NAME_LENGTH 250
958 
959 /*** RexxCreateQueue - Create an External Data Queue */
960 
962  char *, /* Name of queue created */
963  size_t, /* Size of buf for ret name */
964  CONSTANT_STRING, /* Requested name for queue */
965  size_t *); /* Duplicate name flag. */
966 typedef RexxReturnCode (REXXENTRY *PFNREXXCREATEQUEUE)(char *, size_t, CONSTANT_STRING, size_t);
967 
968 /*** RexxOpenQueue - Create a named external queue, if necessary */
969 
971  CONSTANT_STRING, /* Requested name for queue */
972  size_t *); /* Flag for already created queue */
974 
975 
976 /*** RexxQueueExists - Check for the existance of an external data queue */
977 
979  CONSTANT_STRING); /* Name of queue to be deleted */
981 
982 /*** RexxDeleteQueue - Delete an External Data Queue */
983 
985  CONSTANT_STRING); /* Name of queue to be deleted */
987 
988 
989 /*** RexxQueryQueue - Query an External Data Queue for number of */
990 /*** entries */
991 
993  CONSTANT_STRING, /* Name of queue to query */
994  size_t *); /* Place to put element count */
996 
997 
998 /*** RexxAddQueue - Add an entry to an External Data Queue */
999 
1001  CONSTANT_STRING, /* Name of queue to add to */
1002  PCONSTRXSTRING, /* Data string to add */
1003  size_t); /* Queue type (FIFO|LIFO) */
1005 
1006 /*** RexxPullFromQueue - Retrieve data from an External Data Queue */
1008  CONSTANT_STRING, /* Name of queue to read from */
1009  PRXSTRING, /* RXSTRING to receive data */
1010  RexxQueueTime *, /* Stor for data date/time */
1011  size_t); /* wait status (WAIT|NOWAIT) */
1013  size_t);
1014 
1015 /*** RexxClearQueue - Clear all lines in a queue */
1016 
1018  CONSTANT_STRING ); /* Name of queue to be deleted */
1020 
1021 
1022 #include "rexxplatformapis.h"
1023 
1024 /*----------------------------------------------------------------------------*/
1025 /*** Memory Allocation Services */
1026 /*----------------------------------------------------------------------------*/
1027 
1028 /*** RexxAllocateMemory */
1029 
1031  size_t); /* number of bytes to allocate */
1032 typedef void *(REXXENTRY *PFNREXXALLOCATEMEMORY)(size_t );
1033 
1034 
1035 /*** RexxFreeMemory */
1036 
1038  void *); /* pointer to the memory returned by */
1039  /* RexxAllocateMemory */
1041 
1042 
1043 /*----------------------------------------------------------------------------*/
1044 /*** Monitoring */
1045 /*----------------------------------------------------------------------------*/
1046 
1048 
1049 END_EXTERN_C()
1050 
1051 #endif /* REXXSAA_INCLUDED */
1052 
RexxReturnCode REXXENTRY RexxDeregisterFunction(CONSTANT_STRING)
wholenumber_t REXXENTRY getAPIManagerCounter()
struct _RXMSQNAM_PARM RXMSQNAM_PARM
struct _RXVALCALL_PARM RXVALCALL_PARM
#define END_EXTERN_C()
Definition: rexx.h:61
RexxReturnCode(REXXENTRY * PFNREXXQUERYFUNCTION)(CONSTANT_STRING)
Definition: rexx.h:628
RexxReturnCode(REXXENTRY * PFNREXXDEREGISTERFUNCTION)(CONSTANT_STRING)
Definition: rexx.h:620
#define CONSTANT_STRING
Definition: rexx.h:168
RexxReturnCode REXXENTRY RexxRegisterSubcomExe(CONSTANT_STRING, REXXPFN, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXDIDREXXTERMINATE)(void)
Definition: rexx.h:474
RexxReturnCode REXXENTRY RexxDidRexxTerminate(void)
RexxReturnCode(REXXENTRY * PFNREXXCLEARMACROSPACE)(void)
Definition: rexx.h:949
RexxReturnCode(REXXENTRY * PFNREXXSETTRACE)(process_id_t, thread_id_t)
Definition: rexx.h:871
RexxReturnCode(REXXENTRY * PFNREXXQUERYEXIT)(CONSTANT_STRING, CONSTANT_STRING, unsigned short *, char *)
Definition: rexx.h:849
stringsize_t stringsizeC_t
Definition: rexx.h:241
struct _RexxPackageObject * RexxPackageObject
Definition: rexx.h:135
#define CONSTANT_RXSTRING
Definition: rexx.h:167
struct _RexxClassObject * RexxClassObject
Definition: rexx.h:136
RexxReturnCode(REXXENTRY * PFNREXXVARIABLEPOOL)(PSHVBLOCK)
Definition: rexx.h:575
RexxReturnCode REXXENTRY RexxQueryExit(CONSTANT_STRING, CONSTANT_STRING, unsigned short *, char *)
RexxReturnCode(REXXENTRY * PFNREXXADDMACRO)(CONSTANT_STRING, CONSTANT_STRING, size_t)
Definition: rexx.h:894
RexxReturnCode REXXENTRY RexxVariablePool(PSHVBLOCK)
size_t REXXENTRY RexxRoutineHandler(CONSTANT_STRING, size_t, PCONSTRXSTRING, CONSTANT_STRING, PRXSTRING)
Definition: rexx.h:585
RexxReturnCode REXXENTRY RexxQuerySubcom(CONSTANT_STRING, CONSTANT_STRING, unsigned short *, char *)
struct _RXVARNOVALUE_PARM RXVARNOVALUE_PARM
struct _RXCMDHST_PARM RXCMDHST_PARM
RexxReturnCode(REXXENTRY * PFNREXXTRANSLATEPROGRAM)(CONSTANT_STRING, CONSTANT_STRING, PRXSYSEXIT)
Definition: rexx.h:488
struct _RXMSQPLL_PARM RXMSQPLL_PARM
RexxReturnCode REXXENTRY RexxQueryFunction(CONSTANT_STRING)
stringsize_t stringsizeB_t
Definition: rexx.h:247
RexxReturnCode(REXXENTRY * PFNREXXDROPMACRO)(CONSTANT_STRING)
Definition: rexx.h:902
RexxReturnCode REXXENTRY RexxPullFromQueue(CONSTANT_STRING, PRXSTRING, RexxQueueTime *, size_t)
char *(REXXENTRY * PFNGETVERSIONINFORMATION)(void)
Definition: rexx.h:506
RexxReturnCode REXXENTRY RexxLoadMacroSpace(size_t, CONSTANT_STRING *, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXQUERYMACRO)(CONSTANT_STRING, unsigned short *)
Definition: rexx.h:931
RexxReturnCode REXXENTRY RexxAddMacro(CONSTANT_STRING, CONSTANT_STRING, size_t)
RexxReturnCode REXXENTRY RexxTranslateInstoreProgram(CONSTANT_STRING, CONSTANT_RXSTRING *, RXSTRING *)
void *(REXXENTRY * PFNREXXALLOCATEMEMORY)(size_t)
Definition: rexx.h:1032
struct _RXEXFCAL_PARM RXEXFCAL_PARM
SHVBLOCK * PSHVBLOCK
Definition: rexx.h:213
RexxReturnCode REXXENTRY RexxDeregisterSubcom(CONSTANT_STRING, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXSTART)(size_t, PCONSTRXSTRING, CONSTANT_STRING, PRXSTRING, CONSTANT_STRING, int, PRXSYSEXIT, short *, PRXSTRING)
Definition: rexx.h:462
RexxReturnCode REXXENTRY RexxClearQueue(CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXOPENQUEUE)(CONSTANT_STRING, size_t)
Definition: rexx.h:973
const char * CSTRING
Definition: rexx.h:78
stringsizeC_t sizeC_t
Definition: rexx.h:242
RexxReturnCode(REXXENTRY * PFNREXXCREATEQUEUE)(char *, size_t, CONSTANT_STRING, size_t)
Definition: rexx.h:966
RexxReturnCode REXXENTRY RexxSubcomHandler(PCONSTRXSTRING, unsigned short *, PRXSTRING)
Definition: rexx.h:516
RexxReturnCode(REXXENTRY * PFNREXXQUERYQUEUE)(CONSTANT_STRING, size_t *)
Definition: rexx.h:995
RexxReturnCode REXXENTRY RexxFreeMemory(void *)
size_t logical_t
Definition: rexx.h:231
RexxReturnCode(REXXENTRY * PFNREXXCLEARQUEUE)(CONSTANT_STRING)
Definition: rexx.h:1019
struct _RexxMutableBufferObject * RexxMutableBufferObject
Definition: rexx.h:140
RexxReturnCode REXXENTRY RexxResetTrace(process_id_t, thread_id_t)
struct _RexxStringObject * RexxStringObject
Definition: rexx.h:128
RexxReturnCode(REXXENTRY * PFNREXXRESETTRACE)(process_id_t, thread_id_t)
Definition: rexx.h:880
ssize_t codepoint_t
Definition: rexx.h:232
struct _RXSTRING RXSTRING
RexxReturnCode(REXXENTRY * PFNREXXQUERYSUBCOM)(CONSTANT_STRING, CONSTANT_STRING, unsigned short *, char *)
Definition: rexx.h:552
struct _RexxArrayObject * RexxArrayObject
Definition: rexx.h:130
RexxReturnCode REXXENTRY RexxDeleteQueue(CONSTANT_STRING)
RexxReturnCode REXXENTRY RexxSaveMacroSpace(size_t, CONSTANT_STRING *, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXREGISTERFUNCTIONEXE)(CONSTANT_STRING, REXXPFN)
Definition: rexx.h:612
RexxReturnCode REXXENTRY RexxRegisterFunctionExe(CONSTANT_STRING, REXXPFN)
RexxReturnCode(REXXENTRY * PFNREXXREGISTERSUBCOMDLL)(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, char *, size_t)
Definition: rexx.h:529
RXSTRING * PRXSTRING
Definition: rexx.h:185
size_t REXXENTRY RexxFunctionHandler(CONSTANT_STRING, size_t, PCONSTRXSTRING, CONSTANT_STRING, PRXSTRING)
Definition: rexx.h:591
struct _RexxBufferStringObject * RexxBufferStringObject
Definition: rexx.h:129
RexxReturnCode REXXENTRY RexxRegisterFunctionDll(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXREGISTERSUBCOMEXE)(CONSTANT_STRING, REXXPFN, char *)
Definition: rexx.h:541
RexxReturnCode REXXENTRY RexxRegisterSubcomDll(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, size_t)
RexxReturnCode REXXENTRY RexxRegisterExitDll(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, size_t)
RexxReturnCode REXXENTRY RexxOpenQueue(CONSTANT_STRING, size_t *)
RexxReturnCode REXXENTRY RexxAddQueue(CONSTANT_STRING, PCONSTRXSTRING, size_t)
struct _RXSIODTR_PARM RXSIODTR_PARM
struct _SHVBLOCK SHVBLOCK
RexxReturnCode REXXENTRY RexxQueryMacro(CONSTANT_STRING, unsigned short *)
RexxReturnCode REXXENTRY RexxDeregisterExit(CONSTANT_STRING, CONSTANT_STRING)
CONSTANT_RXSTRING * PCONSTRXSTRING
Definition: rexx.h:186
RexxReturnCode(REXXENTRY * PFNREXXSHUTDOWNAPI)(void)
Definition: rexx.h:478
RexxReturnCode REXXENTRY RexxRegisterExitExe(CONSTANT_STRING, REXXPFN, CONSTANT_STRING)
RexxReturnCode(REXXENTRY * PFNREXXREGISTERFUNCTIONDLL)(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING)
Definition: rexx.h:603
RexxReturnCode REXXENTRY RexxShutDownAPI(void)
struct _RexxObjectPtr * RexxObjectPtr
Definition: rexx.h:127
RexxReturnCode(REXXENTRY * PFNREXXADDQUEUE)(CONSTANT_STRING, PCONSTRXSTRING, size_t)
Definition: rexx.h:1004
struct _RXFNCCAL_PARM RXFNCCAL_PARM
struct _RXOFNC_FLAGS RXOFNC_FLAGS
RexxReturnCode(REXXENTRY * PFNREXXREGISTEREXITDLL)(CONSTANT_STRING, CONSTANT_STRING, CONSTANT_STRING, char *, size_t)
Definition: rexx.h:818
RexxReturnCode REXXENTRY RexxReorderMacro(CONSTANT_STRING, size_t)
ssize_t wholenumber_t
Definition: rexx.h:230
RexxReturnCode(REXXENTRY * PFNREXXQUEUEEXISTS)(CONSTANT_STRING)
Definition: rexx.h:980
RXSYSEXIT * PRXSYSEXIT
Definition: rexx.h:194
#define size_v(X)
Definition: rexx.h:237
struct _RXMSQSIZ_PARM RXMSQSIZ_PARM
void(REXXENTRY * PFNREXXWAITFORTERMINATION)(void)
Definition: rexx.h:470
int REXXENTRY RexxStart(size_t, PCONSTRXSTRING, CONSTANT_STRING, PRXSTRING, CONSTANT_STRING, int, PRXSYSEXIT, short *, PRXSTRING)
struct _RexxRoutineObject * RexxRoutineObject
Definition: rexx.h:134
char * PEXIT
Definition: rexx.h:215
struct _RXCMD_FLAGS RXCMD_FLAGS
struct _RXHLT_FLAGS RXHLT_FLAGS
struct _RexxConditionData RexxConditionData
RexxReturnCode(REXXENTRY * PFNREXXDELETEQUEUE)(CONSTANT_STRING)
Definition: rexx.h:986
struct _RXOFNCCAL_PARM RXOFNCCAL_PARM
RexxReturnCode(REXXENTRY * PFNREXXTRANSLATEINSTOREPROGRAM)(CONSTANT_STRING, CONSTANT_RXSTRING *, RXSTRING *)
Definition: rexx.h:499
struct _RXSIOTRC_PARM RXSIOTRC_PARM
struct _RXMSQPSH_PARM RXMSQPSH_PARM
struct _RexxDirectoryObject * RexxDirectoryObject
Definition: rexx.h:137
struct _RexxSupplierObject * RexxSupplierObject
Definition: rexx.h:138
RexxReturnCode REXXENTRY RexxQueryQueue(CONSTANT_STRING, size_t *)
int REXXENTRY RexxExitHandler(int, int, PEXIT)
Definition: rexx.h:807
struct _RXMSQ_FLAGS RXMSQ_FLAGS
struct _RXTRC_FLAGS RXTRC_FLAGS
void *REXXENTRY RexxAllocateMemory(size_t)
int RexxReturnCode
Definition: rexx.h:73
RexxReturnCode(REXXENTRY * PFNREXXLOADMACROSPACE)(size_t, CONSTANT_STRING *, CONSTANT_STRING)
Definition: rexx.h:922
RexxReturnCode(REXXENTRY * PFNREXXREGISTEREXITEXE)(CONSTANT_STRING, REXXPFN, char *)
Definition: rexx.h:829
struct _RexxMethodObject * RexxMethodObject
Definition: rexx.h:133
struct _RXSYSEXIT RXSYSEXIT
stringsizeB_t sizeB_t
Definition: rexx.h:248
RexxReturnCode(REXXENTRY * PFNREXXSAVEMACROSPACE)(size_t, CONSTANT_STRING *, CONSTANT_STRING)
Definition: rexx.h:912
RexxReturnCode(REXXENTRY * PFNREXXREORDERMACRO)(CONSTANT_STRING, size_t)
Definition: rexx.h:941
RexxReturnCode REXXENTRY RexxClearMacroSpace(void)
struct _CONSTRXSTRING CONSTRXSTRING
struct _RexxBufferObject * RexxBufferObject
Definition: rexx.h:131
RexxReturnCode REXXENTRY RexxTranslateProgram(CONSTANT_STRING, CONSTANT_STRING, PRXSYSEXIT)
struct _RXSIOTRD_PARM RXSIOTRD_PARM
void * POINTER
Definition: rexx.h:79
RexxReturnCode REXXENTRY RexxQueueExists(CONSTANT_STRING)
char *REXXENTRY RexxGetVersionInformation(void)
RexxReturnCode REXXENTRY RexxCreateQueue(char *, size_t, CONSTANT_STRING, size_t *)
size_t stringsize_t
Definition: rexx.h:228
struct _RexxPointerObject * RexxPointerObject
Definition: rexx.h:132
RexxReturnCode(REXXENTRY * PFNREXXFREEMEMORY)(void *)
Definition: rexx.h:1040
RexxReturnCode REXXENTRY RexxSetTrace(process_id_t, thread_id_t)
struct _RXHLTTST_PARM RXHLTTST_PARM
struct _RXFNC_FLAGS RXFNC_FLAGS
RexxReturnCode REXXENTRY RexxDropMacro(CONSTANT_STRING)
struct _RXTRCTST_PARM RXTRCTST_PARM
RexxReturnCode(REXXENTRY * PFNREXXSETHALT)(process_id_t, thread_id_t)
Definition: rexx.h:862
void REXXENTRY RexxWaitForTermination(void)
RexxReturnCode(REXXENTRY * PFNREXXDEREGISTERSUBCOM)(CONSTANT_STRING, CONSTANT_STRING)
Definition: rexx.h:563
struct _RexxStemObject * RexxStemObject
Definition: rexx.h:139
struct _RexxQueueTime RexxQueueTime
#define BEGIN_EXTERN_C()
Definition: rexx.h:60
size_t uwholenumber_t
Definition: rexx.h:229
RexxReturnCode REXXENTRY RexxSetHalt(process_id_t, thread_id_t)
struct _RXSIOSAY_PARM RXSIOSAY_PARM
struct _RXEXF_FLAGS RXEXF_FLAGS
RexxReturnCode(REXXENTRY * PFNREXXDEREGISTEREXIT)(CONSTANT_STRING, CONSTANT_STRING)
Definition: rexx.h:838
RexxReturnCode(REXXENTRY * PFNREXXPULLFROMQUEUE)(CONSTANT_STRING, PRXSTRING, RexxQueueTime *, size_t)
Definition: rexx.h:1012
const char * strptr
Definition: rexx.h:163
size_t strlength
Definition: rexx.h:162
unsigned rxfcfail
Definition: rexx.h:693
unsigned rxfcerr
Definition: rexx.h:694
RXSTRING rxcmd_retc
Definition: rexx.h:704
RXCMD_FLAGS rxcmd_flags
Definition: rexx.h:698
CONSTANT_STRING rxcmd_address
Definition: rexx.h:699
unsigned short rxcmd_dll_len
Definition: rexx.h:702
unsigned short rxcmd_addressl
Definition: rexx.h:700
CONSTANT_STRING rxcmd_dll
Definition: rexx.h:701
CONSTANT_RXSTRING rxcmd_command
Definition: rexx.h:703
unsigned rxfferr
Definition: rexx.h:677
unsigned rxffsub
Definition: rexx.h:679
unsigned rxffnfnd
Definition: rexx.h:678
CONSTANT_RXSTRING rxfnc_name
Definition: rexx.h:684
RexxObjectPtr rxfnc_retc
Definition: rexx.h:687
RexxObjectPtr * rxfnc_argv
Definition: rexx.h:686
size_t rxfnc_argc
Definition: rexx.h:685
RXEXF_FLAGS rxfnc_flags
Definition: rexx.h:683
unsigned rxfferr
Definition: rexx.h:639
unsigned rxffsub
Definition: rexx.h:641
unsigned rxffnfnd
Definition: rexx.h:640
PCONSTRXSTRING rxfnc_argv
Definition: rexx.h:651
unsigned short rxfnc_namel
Definition: rexx.h:647
RXSTRING rxfnc_retc
Definition: rexx.h:652
RXFNC_FLAGS rxfnc_flags
Definition: rexx.h:645
CONSTANT_STRING rxfnc_que
Definition: rexx.h:648
unsigned short rxfnc_quel
Definition: rexx.h:649
unsigned short rxfnc_argc
Definition: rexx.h:650
CONSTANT_STRING rxfnc_name
Definition: rexx.h:646
unsigned rxfhhalt
Definition: rexx.h:774
RXHLT_FLAGS rxhlt_flags
Definition: rexx.h:778
unsigned rxfmlifo
Definition: rexx.h:718
RXSTRING rxmsq_name
Definition: rexx.h:738
RXSTRING rxmsq_retc
Definition: rexx.h:711
RXMSQ_FLAGS rxmsq_flags
Definition: rexx.h:723
CONSTANT_RXSTRING rxmsq_value
Definition: rexx.h:724
size_t rxmsq_size
Definition: rexx.h:731
unsigned rxfferr
Definition: rexx.h:659
unsigned rxffnfnd
Definition: rexx.h:660
unsigned rxffsub
Definition: rexx.h:661
CONSTANT_RXSTRING rxfnc_name
Definition: rexx.h:666
RexxObjectPtr rxfnc_retc
Definition: rexx.h:669
RexxObjectPtr * rxfnc_argv
Definition: rexx.h:668
RXOFNC_FLAGS rxfnc_flags
Definition: rexx.h:665
size_t rxfnc_argc
Definition: rexx.h:667
RXSTRING rxsiodtr_retc
Definition: rexx.h:767
CONSTANT_RXSTRING rxsio_string
Definition: rexx.h:746
CONSTANT_RXSTRING rxsio_string
Definition: rexx.h:753
RXSTRING rxsiotrd_retc
Definition: rexx.h:760
size_t strlength
Definition: rexx.h:157
char * strptr
Definition: rexx.h:158
CONSTANT_STRING sysexit_name
Definition: rexx.h:191
int sysexit_code
Definition: rexx.h:192
unsigned rxftrace
Definition: rexx.h:785
RXTRC_FLAGS rxtrc_flags
Definition: rexx.h:790
RexxStringObject variable_name
Definition: rexx.h:802
RexxStringObject selector
Definition: rexx.h:801
RexxObjectPtr value
Definition: rexx.h:803
RexxStringObject variable_name
Definition: rexx.h:795
RexxObjectPtr value
Definition: rexx.h:796
RXSTRING errortext
Definition: rexx.h:435
wholenumber_t rc
Definition: rexx.h:433
wholenumber_t code
Definition: rexx.h:432
RXSTRING message
Definition: rexx.h:434
size_t position
Definition: rexx.h:436
RXSTRING program
Definition: rexx.h:437
uint32_t microseconds
Definition: rexx.h:425
uint16_t year
Definition: rexx.h:423
uint16_t seconds
Definition: rexx.h:419
uint16_t day
Definition: rexx.h:421
uint32_t yearday
Definition: rexx.h:426
uint16_t month
Definition: rexx.h:422
uint16_t hours
Definition: rexx.h:417
uint16_t hundredths
Definition: rexx.h:420
uint16_t minutes
Definition: rexx.h:418
uint16_t weekday
Definition: rexx.h:424
size_t shvvaluelen
Definition: rexx.h:209
CONSTANT_RXSTRING shvname
Definition: rexx.h:206
unsigned char shvret
Definition: rexx.h:211
unsigned char shvcode
Definition: rexx.h:210
RXSTRING shvvalue
Definition: rexx.h:207
size_t shvnamelen
Definition: rexx.h:208
struct _SHVBLOCK * shvnext
Definition: rexx.h:205
pid_t process_id_t
void * REXXPFN
#define REXXENTRY
pthread_t thread_id_t
unsigned short uint16_t
unsigned int uint32_t
SSIZE_T ssize_t