Initial import of the CDE 2.1.30 sources from the Open Group.
[oweals/cde.git] / cde / programs / dtksh / exksh.h
1 /* $XConsortium: exksh.h /main/3 1995/11/01 15:54:01 rswiston $ */
2 /* "%W%" */
3
4 /*      Copyright (c) 1991, 1992 UNIX System Laboratories, Inc. */
5 /*      All Rights Reserved     */
6
7 /*      THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF    */
8 /*      UNIX System Laboratories, Inc.                  */
9 /*      The copyright notice above does not evidence any       */
10 /*      actual or intended publication of such source code.    */
11
12 #ifndef _Dtksh_exksh_h
13 #define _Dtksh_exksh_h
14
15 #include <sys/types.h>
16
17 #ifndef SYMS_ONLY
18
19 #define SH_FAIL 1
20 #define SH_SUCC 0
21
22 #define PRSYMBOLIC                      1
23 #define PRMIXED                         2
24 #define PRDECIMAL                       4
25 #define PRHEX                           8
26 #define PRMIXED_SYMBOLIC        16
27 #define PRNAMES                         32
28
29 #define UPP(CH) (islower(CH) ? toupper(CH) : (CH))
30 #define C_PAIR(STR, CH1, CH2) (((STR)[0] == (CH1)) && ((STR)[1] == (CH2)))
31 #define XK_USAGE(X) return(xk_usage(X), SH_FAIL);
32
33 /* In the future, this will require following pointers, unless we
34 ** can always trace back types to typedefs.  For example, unsigned long is
35 ** a typedef, but it is simple because it is really just a long.
36 */
37 #define IS_SIMPLE(TBL) ((TBL)->flags & F_SIMPLE)
38
39 #ifndef N_DEFAULT /* From name.h */
40 /* Stolen out of include/name.h, the problems of including things
41 ** out of the ksh code is major.  Hence, the copy rather than the
42 ** include.
43 */
44
45 struct Bfunction {
46         long    (*f_vp)();              /* value function */
47         long    (*f_ap)();              /* assignment function */
48 };
49
50 #endif /* N_DEFAULT: From name.h */
51
52 #define ALLDATA         INT_MAX
53
54 #define BIGBUFSIZ (10 * BUFSIZ)
55
56 #define IN_BAND         1
57 #define OUT_BAND        2
58 #define NEW_PRIM        4
59
60 struct fd {
61         int vfd;
62         int flags;
63         char mode;
64         struct strbuf *lastrcv;
65         int rcvcount;
66         int sndcount;
67         int uflags;
68 };
69
70 struct vfd {
71         int fd;
72 };
73
74 extern struct fd *Fds;
75 extern struct vfd *Vfds;
76
77 struct libdesc {
78         char *name;
79         void *handle;
80 };
81 struct libstruct {
82         char *prefix;
83         int nlibs;
84         struct libdesc *libs;
85 };
86
87
88 #ifndef OSI_LIB_CODE
89 #define PARPEEK(b, s) (((b)[0][0] == s[0]) ? 1 :  0 )
90 #define PAREXPECT(b, s) (((b)[0][0] == s[0]) ? 0 : -1 )
91 #define OFFSET(T, M) ((int)(&((T)NULL)->M))
92
93 typedef char *string_t;
94
95 /*
96  * Structures for driving generic print/parse/copy/free routines
97  */
98
99 typedef struct memtbl {
100         char *name;     /* name of the member */
101         char *tname;    /* name of the typedef */
102         char  kind;     /* kind of member, see #defines below */
103         char  flags;    /* flags for member, see #defines below */
104         short  tbl;     /* -1 or index into ASL_allmems[] array */
105         short  ptr;     /* number of "*" in front of member */
106         short  subscr;  /* 0 if no subscript, else max number of elems */
107         short  delim;   /* 0 if no length delim, +1 if next field, -1 if prev */
108         short  id;      /* Id of the ASL in which this def is made */
109         short  offset;  /* offset into the C structure */
110         short  size;    /* size of this member, for easy malloc'ing */
111         long  choice;   /* def of tag indicating field chosen for unions */
112 } memtbl_t;
113
114 struct envsymbols {
115         char *name;
116         int  id;
117         int  (*parsefunc)();
118         int  (*printfunc)();
119         char *tname;
120         int  intlike;
121         int  string;
122         int  topptr;
123         int  valbits;
124         struct {
125                 char *name;
126                 unsigned long val;
127                 int  cover;
128         } vals[64];
129 }; 
130
131
132 /*
133  * Definitions for the kind field of the above structure 
134  */
135
136 #define K_CHAR          (0)     /* char or unchar */
137 #define K_SHORT         (1)     /* short or ushort */
138 #define K_INT           (2)     /* int or uint */
139 #define K_LONG          (3)     /* long, unsigned long, PRIM, etc. */
140 #define K_STRING        (4)     /* char * or char [] */
141 #define K_OBJID         (5)     /* objid_t *, note the star is included */
142 #define K_ANY           (6)     /* any_t */
143 #define K_STRUCT        (7)     /* struct { } */
144 #define K_UNION         (8)     /* union { } */
145 #define K_TYPEDEF       (9)     /* typedef */
146 #define K_DSHORT        (10)    /* short delimiter */
147 #define K_DINT  (11)    /* int delimiter */
148 #define K_DLONG (12)    /* long delimiter */
149
150 /*
151  * Definitions for the flags field of the above structure, bitmask
152  */
153
154 #define F_SIMPLE                (1)     /* simple, flat type */
155 #define F_FIELD                 (2) /* memtbl is a field of a structure, not the
156                                                                 name of a type */
157 #define F_TBL_IS_PTR    (4) /* tbl field is pointer, not number; */
158 #define F_TYPE_IS_PTR   (8) /* type is built-in, but is already a pointer, like K_STRING */
159
160 #define SUCCESS 0
161 #define FAIL    (-1)
162
163 #define TRUE    1
164 #define FALSE   0
165
166 /* The following macro, RIF, stands for Return If Fail.  Practically
167  * every line of encode/decode functions need to do this, so it aids
168  * in readability.
169  */
170 #define RIF(X) do { if ((X) == FAIL) return(FAIL); } while(0)
171
172 #endif /* not OSI_LIB_CODE */
173
174 #if !defined(OSI_LIB_CODE) || defined(NEED_SYMLIST)
175 struct symlist {
176         struct memtbl tbl;
177         int isflag;
178         int nsyms;
179         struct symarray *syms;
180 };
181 #endif
182
183 #define DYNMEM_ID               (1)
184 #define BASE_ID                 (2)
185
186 #define ALTPUTS(STR) puts(STR)
187
188 #ifndef NULL
189 #define NULL    (0)
190 #endif
191
192 #ifdef SPRINTF_RET_LEN
193 #define lsprintf sprintf
194 #endif
195
196 #define MAX_CALL_ARGS 15
197
198 #define TREAT_SIMPLE(TBL) ((TBL)->ptr || IS_SIMPLE(TBL))
199
200 #ifdef EXKSH_INCLUDED
201 #define XK_PRINT(ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) (_Delim = 0, xk_print(ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7))
202 #define XK_PARSE(ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7) (_Delim = 0, xk_parse(ARG1, ARG2, ARG3, ARG4, ARG5, ARG6, ARG7))
203 #define XK_FREE(ARG1, ARG2, ARG3, ARG4, ARG5) (_Delim = 0, xk_free(ARG1, ARG2, ARG3, ARG4, ARG5))
204 #endif
205
206 #define NOHASH          1
207 #define TYPEONLY        2
208 #define STRUCTONLY      4
209
210 #endif /* not SYMS_ONLY */
211
212 struct symarray {
213         const char *str;
214         unsigned long addr;
215 };
216
217 #endif /* _Dtksh_exksh_h */
218 /* DON'T ADD ANYTHING AFTER THIS #endif */