Standards-Version: 3.9.6 (no changes)
[ckermit.git] / ckucmd.h
1 /*  C K U C M D . H  --  Header file for Unix cmd package  */
2
3 /*
4   Author: Frank da Cruz <fdc@columbia.edu>
5   Columbia University Kermit Project, New York City.
6
7   Copyright (C) 1985, 2009,
8     Trustees of Columbia University in the City of New York.
9     All rights reserved.  See the C-Kermit COPYING.TXT file or the
10     copyright text in the ckcmai.c module for disclaimer and permissions.
11 */
12
13 #ifndef CKUCMD_H
14 #define CKUCMD_H
15
16 /* Command recall */
17
18 #ifdef pdp11                            /* Not enough room for this */
19 #ifndef NORECALL
20 #define NORECALL
21 #endif /* NORECALL */
22 #endif /* pdp11 */
23
24 #ifdef DYNAMIC                          /* Dynamic command buffers */
25 /*
26   Use malloc() to allocate the many command-related buffers in ckucmd.c.
27 */
28 #ifndef DCMDBUF
29 #ifndef NORECALL
30 #define NORECALL
31 #endif /* NORECALL */
32 #endif /* DCMDBUF */
33
34 #ifndef NORECALL
35 #define CK_RECALL
36 #else
37 #ifdef CK_RECALL
38 #undef CK_RECALL
39 #endif /* CK_RECALL */
40 #endif /* NORECALL */
41 #else
42 #ifndef NORECALL
43 #define NORECALL
44 #endif /*  NORECALL */
45 #endif /* DYNAMIC */
46
47 #ifdef NORECALL
48 #ifdef CK_RECALL
49 #undef CK_RECALL
50 #endif /* CK_RECALL */
51 #endif /* NORECALL */
52
53 #ifdef NORECALL
54 #ifndef NOARROWKEYS
55 #define NOARROWKEYS
56 #endif /* NOARROWKEYS */
57 #endif /* NORECALL */
58
59 /* Special getchars */
60
61 #ifdef VMS
62 #ifdef getchar                          /* This is for VMS GCC */
63 #undef getchar
64 #endif /* getchar */
65 #define getchar()   vms_getchar()
66 int vms_getchar(void);
67 #endif /* VMS */
68
69 #ifdef aegis
70 #undef getchar
71 #define getchar()   coninc(0)
72 #endif /* aegis */
73
74 #ifdef AMIGA
75 #undef getchar
76 #define getchar() coninc(0)
77 #endif /* AMIGA */
78
79 #ifdef Plan9
80 #undef getchar
81 #define getchar() coninc(0)
82 #undef putchar
83 #define putchar(c) conoc(c)
84 #undef printf
85 #define printf conprint
86 #endif /* Plan9 */
87
88 /* Sizes of things */
89
90 #ifndef CMDDEP
91 #ifdef BIGBUFOK
92 #define CMDDEP  64                      /* Maximum command recursion depth */
93 #else
94 #define CMDDEP  20
95 #endif /* BIGBUFOK */
96 #endif /* CMDDEP */
97 #define HLPLW   78                      /* Width of ?-help line */
98 #define HLPCW   19                      /* Width of ?-help column */
99 #define HLPBL  100                      /* Help string buffer length */
100 #ifdef BIGBUFOK
101 #define ATMBL 10238                     /* Command atom buffer length*/
102 #else
103 #ifdef NOSPL
104 #define ATMBL  256
105 #else
106 #define ATMBL  1024
107 #endif /* NOSPL */
108 #endif /* BIGBUFOK */
109
110 #ifndef CMDBL
111 #ifdef NOSPL
112 /* No script programming language, save some space */
113 #define CMDBL 608                       /* Command buffer length */
114 #else
115 #ifdef BIGBUFOK
116 #define CMDBL 32763
117 #else
118 #define CMDBL 4092
119 #endif /* OS2 */
120 #endif /* NOSPL */
121 #endif /* CMDBL */
122
123 /* Special characters */
124
125 #define RDIS 0022                       /* Redisplay   (^R) */
126 #define LDEL 0025                       /* Delete line (^U) */
127 #define WDEL 0027                       /* Delete word (^W) */
128 #ifdef CK_RECALL
129 #define C_UP 0020                       /* Go Up in recall buffer (^P) */
130 #define C_UP2 0002                      /* Alternate Go Up (^B) for VMS */
131 #define C_DN 0016                       /* Go Down in recall buffer (^N) */
132 #endif /* CK_RECALL */
133
134 /* Keyword flags (bits, powers of 2) */
135
136 #define CM_INV 1                        /* Invisible keyword */
137 #define CM_ABR 2                        /* Abbreviation for another keyword */
138 #define CM_HLP 4                        /* Help-only keyword */
139 #define CM_ARG 8                        /* An argument is required */
140 #define CM_NOR 16                       /* No recall for this command */
141 #define CM_PRE 32                       /* Long-form cmdline arg for prescan */
142 #define CM_PSH 64                       /* Command disabled if nopush */
143 #define CM_LOC 128                      /* Command disabled if nolocal */
144
145 /*
146   A long-form command line option is a keyword using the regular struct keytab
147   and lookup mechanisms.  Flags that make sense in this context are CM_ARG,
148   indicating this option requires an argument (operand), and CM_PRE, which
149   means this option must be processed before the initialization file.  The
150   absence of CM_PRE means the option is to be processed after the
151   initialization file in the normal manner.
152 */
153
154 /* Token flags (numbers) */
155
156 #define CMT_COM 0                       /* Comment (; or #) */
157 #define CMT_SHE 1                       /* Shell escape (!) */
158 #define CMT_LBL 2                       /* Label (:) */
159 #define CMT_FIL 3                       /* Indirect filespec (@) (not used) */
160
161 /* Path separator for path searches */
162
163 #ifdef OS2
164 #define PATHSEP ';'
165 #else
166 #ifdef UNIX
167 #define PATHSEP ':'
168 #else
169 #define PATHSEP ','
170 #endif /* UNIX */
171 #endif /* OS2 */
172
173 #ifndef CK_KEYTAB
174 #define CK_KEYTAB
175
176 /* Keyword Table Template perhaps already defined in ckcdeb.h */
177
178 struct keytab {                         /* Keyword table */
179     char *kwd;                          /* Pointer to keyword string */
180     int kwval;                          /* Associated value */
181     int flgs;                           /* Flags (as defined above) */
182 };
183 #endif /* CK_KEYTAB */
184
185 /* String preprocessing function */
186
187 #ifdef CK_ANSIC                         /* ANSI C */
188 #ifdef M_SYSV                           /* SCO Microsoft C wants no args */
189 typedef int (*xx_strp)();
190 #else
191 typedef int (*xx_strp)(char *, char **, int *);
192 #endif /* M_SYSV */
193 #else                                   /* Not ANSI C */
194 typedef int (*xx_strp)();
195 #endif /* CK_ANSIC */
196
197 /* FLDDB struct */
198
199 typedef struct FDB {
200     int fcode;                          /* Function code */
201     char * hlpmsg;                      /* Help message */
202     char * dflt;                        /* Default */
203     char * sdata;                       /* Additional string data */
204     int ndata1;                         /* Additional numeric data 1 */
205     int ndata2;                         /* Additional numeric data 2 */
206     xx_strp spf;                        /* String processing function */
207     struct keytab * kwdtbl;             /* Keyword table */
208     struct FDB * nxtfdb;                /* Pointer to next alternative */
209 } fdb;
210
211 typedef struct OFDB {
212     struct FDB * fdbaddr;               /* Address of succeeding FDB struct */
213     int fcode;                          /* Function code */
214     char * sresult;                     /* String result */
215     int nresult;                        /* Integer result */
216     int kflags;                         /* Keyword flags if any */
217     CK_OFF_T wresult;                   /* Long integer ("wide") result */
218 } ofdb;
219
220 #ifndef CKUCMD_C
221 extern struct OFDB cmresult;
222 #endif /* CKUCMD_C */
223
224 /* Codes for primary parsing function  */
225
226 #define _CMNUM 0                        /* Number */
227 #define _CMOFI 1                        /* Output file */
228 #define _CMIFI 2                        /* Input file */
229 #define _CMFLD 3                        /* Arbitrary field */
230 #define _CMTXT 4                        /* Text string */
231 #define _CMKEY 5                        /* Keyword */
232 #define _CMCFM 6                        /* Confirmation */
233 #define _CMDAT 7                        /* Date/time */
234 #define _CMNUW 8                        /* Wide version of cmnum */
235
236 /* Function prototypes */
237
238 _PROTOTYP( int xxesc, (char **) );
239 _PROTOTYP( int cmrini, (int) );
240 _PROTOTYP( VOID cmsetp, (char *) );
241 _PROTOTYP( VOID cmsavp, (char [], int) );
242 _PROTOTYP( char * cmgetp, (void) );
243 _PROTOTYP( VOID prompt, (xx_strp) );
244 _PROTOTYP( VOID pushcmd, (char *) );
245 _PROTOTYP( VOID cmres, (void) );
246 _PROTOTYP( VOID cmini, (int) );
247 _PROTOTYP( int cmgbrk, (void) );
248 _PROTOTYP( int cmgkwflgs, (void) );
249 _PROTOTYP( int cmpush, (void) );
250 _PROTOTYP( int cmpop, (void) );
251 _PROTOTYP( VOID untab, (char *) );
252 _PROTOTYP( int cmnum, (char *, char *, int, int *, xx_strp ) );
253 _PROTOTYP( int cmnumw, (char *, char *, int, CK_OFF_T *, xx_strp ) );
254 _PROTOTYP( int cmofi, (char *, char *, char **, xx_strp ) );
255 _PROTOTYP( int cmifi, (char *, char *, char **, int *, xx_strp ) );
256 _PROTOTYP( int cmiofi, (char *, char *, char **, int *, xx_strp ) );
257 _PROTOTYP( int cmifip,(char *, char *, char **, int *, int, char *, xx_strp ));
258 _PROTOTYP( int cmifi2,(char *,char *,char **,int *,int,char *,xx_strp,int ));
259 _PROTOTYP( int cmdir, (char *, char *, char **, xx_strp ) );
260 _PROTOTYP( int cmdirp, (char *, char *, char **, char *, xx_strp ) );
261 _PROTOTYP( int cmfld, (char *, char *, char **, xx_strp ) );
262 _PROTOTYP( int cmtxt, (char *, char *, char **, xx_strp ) );
263 _PROTOTYP( int cmkey,  (struct keytab [], int, char *, char *, xx_strp) );
264 _PROTOTYP( int cmkeyx, (struct keytab [], int, char *, char *, xx_strp) );
265 _PROTOTYP( int cmkey2,(struct keytab [],int,char *,char *,char *,xx_strp,int));
266 _PROTOTYP( int cmswi,  (struct keytab [], int, char *, char *, xx_strp) );
267 _PROTOTYP( int cmdate,(char *, char *, char **, int, xx_strp) );
268 _PROTOTYP( char * cmpeek, (void) );
269 _PROTOTYP( int cmfdb, (struct FDB *) );
270 _PROTOTYP( VOID cmfdbi, (struct FDB *,
271                         int, char *, char *, char *, int, int, xx_strp,
272                         struct keytab *, struct FDB *) );
273 _PROTOTYP( int chktok, (char *) );
274 _PROTOTYP( int cmcfm, (void) );
275 _PROTOTYP( int lookup, (struct keytab [], char *, int, int *) );
276 _PROTOTYP( VOID kwdhelp, (struct keytab[],int,char *,char *,char *,int,int) );
277 _PROTOTYP( int ungword, (void) );
278 _PROTOTYP( VOID unungw, (void) );
279 _PROTOTYP( int cmdsquo, (int) );
280 _PROTOTYP( int cmdgquo, (void) );
281 _PROTOTYP( char * ckcvtdate, (char *, int) );
282 _PROTOTYP( int cmdgetc, (int));
283 #ifndef NOARROWKEYS
284 _PROTOTYP( int cmdconchk, (void) );
285 #endif /* NOARROWKEYS */
286
287 #ifdef CK_RECALL
288 _PROTOTYP( char * cmgetcmd, (char *) );
289 _PROTOTYP( VOID addcmd, (char *) );
290 _PROTOTYP( VOID cmaddnext, (void) );
291 #endif /* CK_RECALL */
292 _PROTOTYP( char * cmcvtdate, (char *, int) );
293 _PROTOTYP( char * cmdiffdate, (char *, char *) );
294 _PROTOTYP( char * cmdelta, (int,
295                             int,int,int,int,int,int,int,int,int,int,int,int ));
296 _PROTOTYP( char * shuffledate, (char *, int) );
297 _PROTOTYP( int filhelp, (int, char *, char *, int, int) );
298 _PROTOTYP( int xfilhelp, (int, char *, char *, int, int,
299                           int,
300                           char *, char *, char *, char *,
301                           CK_OFF_T, CK_OFF_T,
302                           int, int,
303                           char **) );
304 _PROTOTYP( int delta2sec, (char *, long *) );
305
306 #ifdef DCMDBUF
307 _PROTOTYP( int cmsetup, (void) );
308 #endif /* DCMDBUF */
309
310 #endif /* CKUCMD_H */
311
312 /* End of ckucmd.h */