1*6688Smckusick /* defs.h 4.1 82/05/07 */ 2*6688Smckusick 3*6688Smckusick # 4*6688Smckusick /* 5*6688Smckusick * UNIX shell 6*6688Smckusick */ 7*6688Smckusick 8*6688Smckusick /* error exits from various parts of shell */ 9*6688Smckusick #define ERROR 1 10*6688Smckusick #define SYNBAD 2 11*6688Smckusick #define SIGFAIL 3 12*6688Smckusick #define SIGFLG 0200 13*6688Smckusick 14*6688Smckusick /* command tree */ 15*6688Smckusick #define FPRS 020 16*6688Smckusick #define FINT 040 17*6688Smckusick #define FAMP 0100 18*6688Smckusick #define FPIN 0400 19*6688Smckusick #define FPOU 01000 20*6688Smckusick #define FPCL 02000 21*6688Smckusick #define FCMD 04000 22*6688Smckusick #define COMMSK 017 23*6688Smckusick 24*6688Smckusick #define TCOM 0 25*6688Smckusick #define TPAR 1 26*6688Smckusick #define TFIL 2 27*6688Smckusick #define TLST 3 28*6688Smckusick #define TIF 4 29*6688Smckusick #define TWH 5 30*6688Smckusick #define TUN 6 31*6688Smckusick #define TSW 7 32*6688Smckusick #define TAND 8 33*6688Smckusick #define TORF 9 34*6688Smckusick #define TFORK 10 35*6688Smckusick #define TFOR 11 36*6688Smckusick 37*6688Smckusick /* execute table */ 38*6688Smckusick #define SYSSET 1 39*6688Smckusick #define SYSCD 2 40*6688Smckusick #define SYSEXEC 3 41*6688Smckusick #define SYSLOGIN 4 42*6688Smckusick #define SYSTRAP 5 43*6688Smckusick #define SYSEXIT 6 44*6688Smckusick #define SYSSHFT 7 45*6688Smckusick #define SYSWAIT 8 46*6688Smckusick #define SYSCONT 9 47*6688Smckusick #define SYSBREAK 10 48*6688Smckusick #define SYSEVAL 11 49*6688Smckusick #define SYSDOT 12 50*6688Smckusick #define SYSRDONLY 13 51*6688Smckusick #define SYSTIMES 14 52*6688Smckusick #define SYSXPORT 15 53*6688Smckusick #define SYSNULL 16 54*6688Smckusick #define SYSREAD 17 55*6688Smckusick #define SYSTST 18 56*6688Smckusick #define SYSUMASK 19 57*6688Smckusick 58*6688Smckusick /* used for input and output of shell */ 59*6688Smckusick #define INIO 10 60*6688Smckusick #define OTIO 11 61*6688Smckusick 62*6688Smckusick /*io nodes*/ 63*6688Smckusick #define USERIO 10 64*6688Smckusick #define IOUFD 15 65*6688Smckusick #define IODOC 16 66*6688Smckusick #define IOPUT 32 67*6688Smckusick #define IOAPP 64 68*6688Smckusick #define IOMOV 128 69*6688Smckusick #define IORDW 256 70*6688Smckusick #define INPIPE 0 71*6688Smckusick #define OTPIPE 1 72*6688Smckusick 73*6688Smckusick /* arg list terminator */ 74*6688Smckusick #define ENDARGS 0 75*6688Smckusick 76*6688Smckusick #include "mac.h" 77*6688Smckusick #include "mode.h" 78*6688Smckusick #include "name.h" 79*6688Smckusick 80*6688Smckusick 81*6688Smckusick /* result type declarations */ 82*6688Smckusick #define alloc malloc 83*6688Smckusick ADDRESS alloc(); 84*6688Smckusick VOID addblok(); 85*6688Smckusick STRING make(); 86*6688Smckusick STRING movstr(); 87*6688Smckusick TREPTR cmd(); 88*6688Smckusick TREPTR makefork(); 89*6688Smckusick NAMPTR lookup(); 90*6688Smckusick VOID setname(); 91*6688Smckusick VOID setargs(); 92*6688Smckusick DOLPTR useargs(); 93*6688Smckusick REAL expr(); 94*6688Smckusick STRING catpath(); 95*6688Smckusick STRING getpath(); 96*6688Smckusick STRING *scan(); 97*6688Smckusick STRING mactrim(); 98*6688Smckusick STRING macro(); 99*6688Smckusick STRING execs(); 100*6688Smckusick VOID await(); 101*6688Smckusick VOID post(); 102*6688Smckusick STRING copyto(); 103*6688Smckusick VOID exname(); 104*6688Smckusick STRING staknam(); 105*6688Smckusick VOID printnam(); 106*6688Smckusick VOID printflg(); 107*6688Smckusick VOID prs(); 108*6688Smckusick VOID prc(); 109*6688Smckusick VOID getenv(); 110*6688Smckusick STRING *setenv(); 111*6688Smckusick 112*6688Smckusick #define attrib(n,f) (n->namflg |= f) 113*6688Smckusick #define round(a,b) (((int)((ADR(a)+b)-1))&~((b)-1)) 114*6688Smckusick #define closepipe(x) (close(x[INPIPE]), close(x[OTPIPE])) 115*6688Smckusick #define eq(a,b) (cf(a,b)==0) 116*6688Smckusick #define max(a,b) ((a)>(b)?(a):(b)) 117*6688Smckusick #define assert(x) ; 118*6688Smckusick 119*6688Smckusick /* temp files and io */ 120*6688Smckusick UFD output; 121*6688Smckusick INT ioset; 122*6688Smckusick IOPTR iotemp; /* files to be deleted sometime */ 123*6688Smckusick IOPTR iopend; /* documents waiting to be read at NL */ 124*6688Smckusick 125*6688Smckusick /* substitution */ 126*6688Smckusick INT dolc; 127*6688Smckusick STRING *dolv; 128*6688Smckusick DOLPTR argfor; 129*6688Smckusick ARGPTR gchain; 130*6688Smckusick 131*6688Smckusick /* stack */ 132*6688Smckusick #define BLK(x) ((BLKPTR)(x)) 133*6688Smckusick #define BYT(x) ((BYTPTR)(x)) 134*6688Smckusick #define STK(x) ((STKPTR)(x)) 135*6688Smckusick #define ADR(x) ((char*)(x)) 136*6688Smckusick 137*6688Smckusick /* stak stuff */ 138*6688Smckusick #include "stak.h" 139*6688Smckusick 140*6688Smckusick /* string constants */ 141*6688Smckusick MSG atline; 142*6688Smckusick MSG readmsg; 143*6688Smckusick MSG colon; 144*6688Smckusick MSG minus; 145*6688Smckusick MSG nullstr; 146*6688Smckusick MSG sptbnl; 147*6688Smckusick MSG unexpected; 148*6688Smckusick MSG endoffile; 149*6688Smckusick MSG synmsg; 150*6688Smckusick 151*6688Smckusick /* name tree and words */ 152*6688Smckusick SYSTAB reserved; 153*6688Smckusick INT wdval; 154*6688Smckusick INT wdnum; 155*6688Smckusick ARGPTR wdarg; 156*6688Smckusick INT wdset; 157*6688Smckusick BOOL reserv; 158*6688Smckusick 159*6688Smckusick /* prompting */ 160*6688Smckusick MSG stdprompt; 161*6688Smckusick MSG supprompt; 162*6688Smckusick MSG profile; 163*6688Smckusick 164*6688Smckusick /* built in names */ 165*6688Smckusick NAMNOD fngnod; 166*6688Smckusick NAMNOD ifsnod; 167*6688Smckusick NAMNOD homenod; 168*6688Smckusick NAMNOD mailnod; 169*6688Smckusick NAMNOD pathnod; 170*6688Smckusick NAMNOD ps1nod; 171*6688Smckusick NAMNOD ps2nod; 172*6688Smckusick 173*6688Smckusick /* special names */ 174*6688Smckusick MSG flagadr; 175*6688Smckusick STRING cmdadr; 176*6688Smckusick STRING exitadr; 177*6688Smckusick STRING dolladr; 178*6688Smckusick STRING pcsadr; 179*6688Smckusick STRING pidadr; 180*6688Smckusick 181*6688Smckusick MSG defpath; 182*6688Smckusick 183*6688Smckusick /* names always present */ 184*6688Smckusick MSG mailname; 185*6688Smckusick MSG homename; 186*6688Smckusick MSG pathname; 187*6688Smckusick MSG fngname; 188*6688Smckusick MSG ifsname; 189*6688Smckusick MSG ps1name; 190*6688Smckusick MSG ps2name; 191*6688Smckusick 192*6688Smckusick /* transput */ 193*6688Smckusick CHAR tmpout[]; 194*6688Smckusick STRING tmpnam; 195*6688Smckusick INT serial; 196*6688Smckusick #define TMPNAM 7 197*6688Smckusick FILE standin; 198*6688Smckusick #define input (standin->fdes) 199*6688Smckusick #define eof (standin->feof) 200*6688Smckusick INT peekc; 201*6688Smckusick STRING comdiv; 202*6688Smckusick MSG devnull; 203*6688Smckusick 204*6688Smckusick /* flags */ 205*6688Smckusick #define noexec 01 206*6688Smckusick #define intflg 02 207*6688Smckusick #define prompt 04 208*6688Smckusick #define setflg 010 209*6688Smckusick #define errflg 020 210*6688Smckusick #define ttyflg 040 211*6688Smckusick #define forked 0100 212*6688Smckusick #define oneflg 0200 213*6688Smckusick #define rshflg 0400 214*6688Smckusick #define waiting 01000 215*6688Smckusick #define stdflg 02000 216*6688Smckusick #define execpr 04000 217*6688Smckusick #define readpr 010000 218*6688Smckusick #define keyflg 020000 219*6688Smckusick INT flags; 220*6688Smckusick 221*6688Smckusick /* error exits from various parts of shell */ 222*6688Smckusick #include <setjmp.h> 223*6688Smckusick jmp_buf subshell; 224*6688Smckusick jmp_buf errshell; 225*6688Smckusick 226*6688Smckusick /* fault handling */ 227*6688Smckusick #include "brkincr.h" 228*6688Smckusick POS brkincr; 229*6688Smckusick 230*6688Smckusick #define MINTRAP 0 231*6688Smckusick #define MAXTRAP 17 232*6688Smckusick 233*6688Smckusick #define INTR 2 234*6688Smckusick #define QUIT 3 235*6688Smckusick #define MEMF 11 236*6688Smckusick #define ALARM 14 237*6688Smckusick #define KILL 15 238*6688Smckusick #define TRAPSET 2 239*6688Smckusick #define SIGSET 4 240*6688Smckusick #define SIGMOD 8 241*6688Smckusick 242*6688Smckusick VOID fault(); 243*6688Smckusick BOOL trapnote; 244*6688Smckusick STRING trapcom[]; 245*6688Smckusick BOOL trapflg[]; 246*6688Smckusick 247*6688Smckusick /* name tree and words */ 248*6688Smckusick STRING *environ; 249*6688Smckusick CHAR numbuf[]; 250*6688Smckusick MSG export; 251*6688Smckusick MSG readonly; 252*6688Smckusick 253*6688Smckusick /* execflgs */ 254*6688Smckusick INT exitval; 255*6688Smckusick BOOL execbrk; 256*6688Smckusick INT loopcnt; 257*6688Smckusick INT breakcnt; 258*6688Smckusick 259*6688Smckusick /* messages */ 260*6688Smckusick MSG mailmsg; 261*6688Smckusick MSG coredump; 262*6688Smckusick MSG badopt; 263*6688Smckusick MSG badparam; 264*6688Smckusick MSG badsub; 265*6688Smckusick MSG nospace; 266*6688Smckusick MSG notfound; 267*6688Smckusick MSG badtrap; 268*6688Smckusick MSG baddir; 269*6688Smckusick MSG badshift; 270*6688Smckusick MSG illegal; 271*6688Smckusick MSG restricted; 272*6688Smckusick MSG execpmsg; 273*6688Smckusick MSG notid; 274*6688Smckusick MSG wtfailed; 275*6688Smckusick MSG badcreate; 276*6688Smckusick MSG piperr; 277*6688Smckusick MSG badopen; 278*6688Smckusick MSG badnum; 279*6688Smckusick MSG arglist; 280*6688Smckusick MSG txtbsy; 281*6688Smckusick MSG toobig; 282*6688Smckusick MSG badexec; 283*6688Smckusick MSG notfound; 284*6688Smckusick MSG badfile; 285*6688Smckusick 286*6688Smckusick address end[]; 287*6688Smckusick 288*6688Smckusick #include "ctype.h" 289*6688Smckusick 290