1 /* Definitions for the SAA REXX API (supplied with REXX/imc) */
2 
3 #ifdef __STDC__
4 #define Args(a) a
5 #else
6 #define Args(a) ()
7 #endif
8 
9 #ifdef INCL_REXXSAA
10 #define INCL_RXSHV
11 #define INCL_RXSUBCOM
12 #define INCL_RXSYSEXIT
13 #define INCL_RXFUNC
14 #endif
15 
16 typedef char CHAR;
17 typedef short SHORT;
18 typedef long LONG;
19 typedef char *PSZ;
20 typedef CHAR *PCHAR;
21 typedef SHORT *PSHORT;
22 typedef LONG *PLONG;
23 typedef unsigned char UCHAR;
24 typedef unsigned short USHORT;
25 typedef unsigned long ULONG;
26 typedef USHORT *PUSHORT;
27 typedef char *PCH;
28 typedef unsigned char *PUCHAR;
29 
30 typedef struct _RXSTRING {
31         ULONG strlength;
32         char *strptr;
33 } RXSTRING;
34 typedef RXSTRING *PRXSTRING;
35 
36 #define MAKERXSTRING(x,c,l)   ((x).strptr=(c),(x).strlength=(l))
37 #define RXNULLSTRING(x)       (!(x).strptr)
38 #define RXSTRLEN(x)           ((x).strptr ? (x).strlength : 0UL)
39 #define RXSTRPTR(x)           ((x).strptr)
40 #define RXVALIDSTRING(x)      ((x).strptr && (x).strlength)
41 #define RXZEROLENSTRING(x)    ((x).strptr && !(x).strlength)
42 #define RXRESULTLEN           256
43 
44 #define APIRET ULONG     /* some apps use these to get correct */
45 #define APIENTRY         /* function linkage */
46 typedef ULONG (*PFN)();
47 
48 #define RXCOMMAND         1
49 #define RXSUBROUTINE      2
50 #define RXFUNCTION        4
51 
52 #ifdef INCL_RXSYSEXIT
53 
54 #define RXCMD        0
55 #define RXCMDHST        1
56 
57 #define RXSIO        1
58 #define RXSIOSAY        1
59 #define RXSIOTRC        2
60 #define RXSIOTRD        3
61 #define RXSIODTR        4
62 
63 #define RXINI        2
64 #define RXINIEXT        1
65 
66 #define RXTER        3
67 #define RXTEREXT        1
68 
69 #define RXEXITNUM    4   /* number of  main exits */
70 
71 #define RXENDLST    100
72 
73 #define RXEXIT_OK         0
74 #define RXEXIT_NOTREG    30
75 #define RXEXIT_NOEMEM  1002
76 #define RXEXIT_BADTYPE 1003
77 
78 #define RXEXIT_HANDLED       0
79 #define RXEXIT_NOT_HANDLED   1
80 #define RXEXIT_RAISE_ERROR (-1)
81 
82 typedef struct {
83    struct {
84       unsigned int rxfcfail:1;
85       unsigned int rxfcerr:1;
86    } rxcmd_flags;
87    char *rxcmd_address;
88    unsigned short rxcmd_addressl;
89    char *rxcmd_dll;
90    unsigned short rxcmd_dll_len;
91    RXSTRING rxcmd_command;
92    RXSTRING rxcmd_retc;
93 } RXCMDHST_PARM;
94 
95 typedef struct {
96    RXSTRING rxsio_string;
97 } RXSIOSAY_PARM;
98 
99 typedef struct {
100    RXSTRING rxsio_string;
101 } RXSIOTRC_PARM;
102 
103 typedef struct {
104    RXSTRING rxsiotrd_retc;
105 } RXSIOTRD_PARM;
106 
107 typedef struct {
108    RXSTRING rxsiodtr_retc;
109 } RXSIODTR_PARM;
110 
111 typedef union {
112    RXCMDHST_PARM cmdhst;
113    RXSIOSAY_PARM siosay;
114    RXSIOTRC_PARM siotrc;
115    RXSIOTRD_PARM siotrd;
116    RXSIODTR_PARM siodtr;
117 } EXIT_PARM;
118 typedef EXIT_PARM *PEXIT;
119 
120 typedef struct {
121    char *sysexit_name;
122    short sysexit_code;
123 } RXSYSEXIT;
124 typedef RXSYSEXIT *PRXSYSEXIT;
125 
126 typedef LONG (RexxExitHandler) Args((LONG,LONG,PEXIT));
127 
128 ULONG RexxRegisterExitExe Args((PSZ EnvName,RexxExitHandler *EntryPoint,
129       PUCHAR UserArea));
130 
131 ULONG RexxDeregisterExit Args((PSZ EnvName,PSZ ModuleName));
132 
133 ULONG RexxQueryExit Args((PSZ EnvName,PSZ ModuleName,
134       unsigned short *flag, unsigned char *area));
135 
136 #else  /* INCL_RXSYSEXIT */
137 typedef void *PRXSYSEXIT;
138 #endif /* INCL_RXSYSEXIT */
139 
140 /* Now RXSYSEXIT is defined, we can declare RexxStart... */
141 long RexxStart Args((long argc, PRXSTRING argv, char *name,
142      PRXSTRING instore, PSZ envname, long calltype, PRXSYSEXIT exits,
143      short *rc, PRXSTRING result));
144 
145 long RexxStartProgram Args((char *argv0, long argc, PRXSTRING argv, char *name,
146      char *callname, PRXSTRING instore, PSZ envname, long calltype,
147      int flags, PRXSYSEXIT exits, short *rc, PRXSTRING result));
148 
149 #ifdef INCL_RXSHV
150 
151 #define RXSHV_OK       0x00    /* OK */
152 #define RXSHV_NEWV     0x01    /* New variable */
153 #define RXSHV_LVAR     0x02    /* Last variable */
154 #define RXSHV_TRUNC    0x04    /* Name or value has been truncated */
155 #define RXSHV_BADN     0x08    /* Invalid name */
156 #define RXSHV_MEMFL    0x10    /* Out of memory */
157 #define RXSHV_BADF     0x20    /* Invalid function code */
158 
159 #define RXSHV_NOAVL    0x90    /* Interface not available */
160 
161 #define RXSHV_SET      0x00    /* Set direct variable */
162 #define RXSHV_FETCH    0x01    /* Fetch direct variable */
163 #define RXSHV_DROPV    0x02    /* Drop direct variable */
164 #define RXSHV_SYSET    0x03    /* Set symbolic variable */
165 #define RXSHV_SYFET    0x04    /* Fetch symbolic variable */
166 #define RXSHV_SYDRO    0x05    /* Drop symbolic variable */
167 #define RXSHV_NEXTV    0x06    /* Get next variable */
168 #define RXSHV_PRIV     0x07    /* Get private information */
169 #define RXSHV_EXIT     0x08    /* Set function exit value */
170 
171 typedef struct shvnode
172 {
173    struct shvnode *shvnext;
174    RXSTRING shvname, shvvalue;
175    ULONG shvnamelen, shvvaluelen;
176    UCHAR shvcode, shvret;
177 } SHVBLOCK;
178 typedef struct shvnode *PSHVBLOCK;
179 
180 ULONG RexxVariablePool Args((PSHVBLOCK RequestBlockList));
181 
182 #endif /* INCL_RXSHV */
183 
184 #ifdef INCL_RXSUBCOM
185 
186 typedef ULONG RexxSubcomHandler Args((PRXSTRING,PUSHORT,PRXSTRING));
187 
188 ULONG RexxRegisterSubcomExe Args((PSZ EnvName,
189       RexxSubcomHandler *EntryPoint, PUCHAR UserArea));
190 
191 ULONG RexxDeregisterSubcom Args((PSZ EnvName, PSZ ModuleName));
192 
193 ULONG RexxQuerySubcom Args((PSZ Envname, PSZ ModuleName,
194       PUSHORT flag, PUCHAR UserArea));
195 
196 #define RXSUBCOM_OK           0
197 #define RXSUBCOM_DUP         10
198 #define RXSUBCOM_NOTREG      30
199 #define RXSUBCOM_NOCANDROP   40
200 #define RXSUBCOM_BADTYPE   1003
201 #define RXSUBCOM_NOEMEM    1002
202 
203 #define RXSUBCOM_ERROR        1
204 #define RXSUBCOM_FAILURE      2
205 
206 #endif /* INCL_RXSUBCOM */
207 
208 #ifdef INCL_RXFUNC
209 
210 typedef ULONG (RexxFunctionHandler) Args((PSZ name, ULONG argc,
211         RXSTRING argv[], PSZ QueueName, PRXSTRING Retstr));
212 
213 ULONG RexxRegisterFunctionDll Args((PSZ name, PSZ dllname, PSZ entryname));
214 
215 ULONG RexxRegisterFunctionExe Args((PSZ name,
216       RexxFunctionHandler *EntryPoint));
217 
218 ULONG RexxDeregisterFunction Args((PSZ name));
219 
220 ULONG RexxQueryFunction Args((PSZ name));
221 
222 #define RXFUNC_OK         0
223 #define RXFUNC_DEFINED   10
224 #define RXFUNC_NOTREG    30
225 #define RXFUNC_NOMEM     20
226 
227 #endif /* INCL_RXFUNC */
228