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, 2016, 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 */ 313