1219b2ee8SDavid du Colombier /* defs 4.2 85/10/28 */ 2219b2ee8SDavid du Colombier #define _POSIX_SOURCE 3219b2ee8SDavid du Colombier #define _RESEARCH_SOURCE 4219b2ee8SDavid du Colombier 5219b2ee8SDavid du Colombier #include <stdlib.h> 6219b2ee8SDavid du Colombier #include <string.h> 7219b2ee8SDavid du Colombier #include <sys/types.h> 8219b2ee8SDavid du Colombier #include <unistd.h> 9219b2ee8SDavid du Colombier #include <signal.h> 10219b2ee8SDavid du Colombier #include <time.h> 11219b2ee8SDavid du Colombier #include <dirent.h> 12219b2ee8SDavid du Colombier #include <limits.h> 13219b2ee8SDavid du Colombier #include <stdio.h> 14219b2ee8SDavid du Colombier #include <ctype.h> 15219b2ee8SDavid du Colombier 16219b2ee8SDavid du Colombier #ifndef SHELLCOM 17219b2ee8SDavid du Colombier #define SHELLCOM "/bin/sh" 18219b2ee8SDavid du Colombier #endif 19219b2ee8SDavid du Colombier 20219b2ee8SDavid du Colombier typedef char flag; /* represent a few bit flag */ 21219b2ee8SDavid du Colombier 22219b2ee8SDavid du Colombier #define NO 0 23219b2ee8SDavid du Colombier #define YES 1 24219b2ee8SDavid du Colombier 25219b2ee8SDavid du Colombier #define equal(a,b) (! strcmp(a,b)) 26219b2ee8SDavid du Colombier #define HASHSIZE 1021 27219b2ee8SDavid du Colombier #define NLEFTS 512 28219b2ee8SDavid du Colombier #define NCHARS 500 29219b2ee8SDavid du Colombier #define NINTS 250 30*9b7bf7dfSDavid du Colombier 31*9b7bf7dfSDavid du Colombier /* cranked these up, we're not on the pdp-11 any more */ 32*9b7bf7dfSDavid du Colombier #define INMAX 80000 33*9b7bf7dfSDavid du Colombier #define OUTMAX 80000 34*9b7bf7dfSDavid du Colombier #define QBUFMAX 80000 35*9b7bf7dfSDavid du Colombier #define MAXDIR 30 36*9b7bf7dfSDavid du Colombier #define MAXPROC 200 37*9b7bf7dfSDavid du Colombier #define MAXINCLUDE 32 38219b2ee8SDavid du Colombier #define PROCLIMIT 3 39219b2ee8SDavid du Colombier 40219b2ee8SDavid du Colombier #define ALLDEPS 1 41219b2ee8SDavid du Colombier #define SOMEDEPS 2 42219b2ee8SDavid du Colombier 43219b2ee8SDavid du Colombier #define META 01 44219b2ee8SDavid du Colombier #define TERMINAL 02 45219b2ee8SDavid du Colombier extern char funny[128]; 46219b2ee8SDavid du Colombier 47219b2ee8SDavid du Colombier 48219b2ee8SDavid du Colombier #define ALLOC(x) (struct x *) ckalloc(sizeof(struct x)) 49219b2ee8SDavid du Colombier #define CHNULL (char *) NULL 50219b2ee8SDavid du Colombier 51219b2ee8SDavid du Colombier extern int sigivalue; 52219b2ee8SDavid du Colombier extern int sigqvalue; 53219b2ee8SDavid du Colombier extern int dbgflag; 54219b2ee8SDavid du Colombier extern int prtrflag; 55219b2ee8SDavid du Colombier extern int silflag; 56219b2ee8SDavid du Colombier extern int noexflag; 57219b2ee8SDavid du Colombier extern int keepgoing; 58219b2ee8SDavid du Colombier extern int noruleflag; 59219b2ee8SDavid du Colombier extern int touchflag; 60219b2ee8SDavid du Colombier extern int questflag; 61219b2ee8SDavid du Colombier extern int oldflag; 62219b2ee8SDavid du Colombier extern int ndocoms; 63219b2ee8SDavid du Colombier extern int ignerr; 64219b2ee8SDavid du Colombier extern int okdel; 65219b2ee8SDavid du Colombier extern int forceshell; 66219b2ee8SDavid du Colombier extern int inarglist; 67219b2ee8SDavid du Colombier extern char **envpp; /* points to slot in environment vector */ 68219b2ee8SDavid du Colombier extern char *prompt; 69219b2ee8SDavid du Colombier extern int nopdir; 70219b2ee8SDavid du Colombier 71219b2ee8SDavid du Colombier typedef struct nameblock *nameblkp; 72219b2ee8SDavid du Colombier typedef struct depblock *depblkp; 73219b2ee8SDavid du Colombier typedef struct lineblock *lineblkp; 74219b2ee8SDavid du Colombier typedef struct chain *chainp; 75219b2ee8SDavid du Colombier 76219b2ee8SDavid du Colombier struct nameblock 77219b2ee8SDavid du Colombier { 78219b2ee8SDavid du Colombier nameblkp nxtnameblock; 79219b2ee8SDavid du Colombier char *namep; 80219b2ee8SDavid du Colombier lineblkp linep; 81219b2ee8SDavid du Colombier flag done; 82219b2ee8SDavid du Colombier flag septype; 83219b2ee8SDavid du Colombier flag isarch; 84219b2ee8SDavid du Colombier flag isdir; 85219b2ee8SDavid du Colombier time_t modtime; 86219b2ee8SDavid du Colombier }; 87219b2ee8SDavid du Colombier 88219b2ee8SDavid du Colombier extern nameblkp mainname; 89219b2ee8SDavid du Colombier extern nameblkp firstname; 90219b2ee8SDavid du Colombier extern nameblkp *hashtab; 91219b2ee8SDavid du Colombier extern int nhashed; 92219b2ee8SDavid du Colombier extern int hashsize; 93219b2ee8SDavid du Colombier extern int hashthresh; 94219b2ee8SDavid du Colombier 95219b2ee8SDavid du Colombier struct lineblock 96219b2ee8SDavid du Colombier { 97219b2ee8SDavid du Colombier lineblkp nxtlineblock; 98219b2ee8SDavid du Colombier struct depblock *depp; 99219b2ee8SDavid du Colombier struct shblock *shp; 100219b2ee8SDavid du Colombier }; 101219b2ee8SDavid du Colombier extern lineblkp sufflist; 102219b2ee8SDavid du Colombier 103219b2ee8SDavid du Colombier struct depblock 104219b2ee8SDavid du Colombier { 105219b2ee8SDavid du Colombier depblkp nxtdepblock; 106219b2ee8SDavid du Colombier nameblkp depname; 107219b2ee8SDavid du Colombier char nowait; 108219b2ee8SDavid du Colombier } ; 109219b2ee8SDavid du Colombier 110219b2ee8SDavid du Colombier struct shblock 111219b2ee8SDavid du Colombier { 112219b2ee8SDavid du Colombier struct shblock *nxtshblock; 113219b2ee8SDavid du Colombier char *shbp; 114219b2ee8SDavid du Colombier }; 115219b2ee8SDavid du Colombier 116219b2ee8SDavid du Colombier struct varblock 117219b2ee8SDavid du Colombier { 118219b2ee8SDavid du Colombier struct varblock *nxtvarblock; 119219b2ee8SDavid du Colombier char *varname; 120219b2ee8SDavid du Colombier char *varval; 121219b2ee8SDavid du Colombier char **export; 122219b2ee8SDavid du Colombier flag noreset; 123219b2ee8SDavid du Colombier flag used; 124219b2ee8SDavid du Colombier }; 125219b2ee8SDavid du Colombier extern struct varblock *firstvar; 126219b2ee8SDavid du Colombier 127219b2ee8SDavid du Colombier struct pattern 128219b2ee8SDavid du Colombier { 129219b2ee8SDavid du Colombier struct pattern *nxtpattern; 130219b2ee8SDavid du Colombier char *patval; 131219b2ee8SDavid du Colombier }; 132219b2ee8SDavid du Colombier extern struct pattern *firstpat; 133219b2ee8SDavid du Colombier 134219b2ee8SDavid du Colombier struct dirhd 135219b2ee8SDavid du Colombier { 136219b2ee8SDavid du Colombier struct dirhd *nxtdirhd; 137219b2ee8SDavid du Colombier time_t dirtime; 138219b2ee8SDavid du Colombier int dirok; 139219b2ee8SDavid du Colombier DIR * dirfc; 140219b2ee8SDavid du Colombier char *dirn; 141219b2ee8SDavid du Colombier }; 142219b2ee8SDavid du Colombier extern struct dirhd *firstod; 143219b2ee8SDavid du Colombier 144219b2ee8SDavid du Colombier 145219b2ee8SDavid du Colombier struct chain 146219b2ee8SDavid du Colombier { 147219b2ee8SDavid du Colombier chainp nextp; 148219b2ee8SDavid du Colombier char *datap; 149219b2ee8SDavid du Colombier }; 150219b2ee8SDavid du Colombier 151219b2ee8SDavid du Colombier struct wild 152219b2ee8SDavid du Colombier { 153219b2ee8SDavid du Colombier struct wild *next; 154219b2ee8SDavid du Colombier lineblkp linep; 155219b2ee8SDavid du Colombier char *left; 156219b2ee8SDavid du Colombier char *right; 157219b2ee8SDavid du Colombier int llen; 158219b2ee8SDavid du Colombier int rlen; 159219b2ee8SDavid du Colombier int totlen; 160219b2ee8SDavid du Colombier }; 161219b2ee8SDavid du Colombier 162219b2ee8SDavid du Colombier typedef struct wild *wildp; 163219b2ee8SDavid du Colombier extern wildp firstwild; 164219b2ee8SDavid du Colombier extern wildp lastwild; 165219b2ee8SDavid du Colombier 166219b2ee8SDavid du Colombier 167219b2ee8SDavid du Colombier /* date for processes */ 168219b2ee8SDavid du Colombier extern int proclimit; /* maximum spawned processes allowed alive at one time */ 169219b2ee8SDavid du Colombier extern int proclive; /* number of spawned processes awaited */ 170219b2ee8SDavid du Colombier extern int nproc; /* next slot in process stack to use */ 171219b2ee8SDavid du Colombier extern struct process 172219b2ee8SDavid du Colombier { 173219b2ee8SDavid du Colombier int pid; 174219b2ee8SDavid du Colombier flag nohalt; 175219b2ee8SDavid du Colombier flag nowait; 176219b2ee8SDavid du Colombier flag done; 177219b2ee8SDavid du Colombier } procstack[ ]; 178219b2ee8SDavid du Colombier 179219b2ee8SDavid du Colombier extern void intrupt(int); 180219b2ee8SDavid du Colombier extern void enbint(void (*)(int)); 181219b2ee8SDavid du Colombier extern int doname(nameblkp, int, time_t *, int); 182219b2ee8SDavid du Colombier extern int docom(struct shblock *, int, int); 183219b2ee8SDavid du Colombier extern int dosys(char *, int, int, char *); 184219b2ee8SDavid du Colombier extern int waitstack(int); 185219b2ee8SDavid du Colombier extern void touch(int, char*); 186219b2ee8SDavid du Colombier extern time_t exists(char *); 187219b2ee8SDavid du Colombier extern time_t prestime(void); 188219b2ee8SDavid du Colombier extern depblkp srchdir(char*, int, depblkp); 189219b2ee8SDavid du Colombier extern time_t lookarch(char *); 190219b2ee8SDavid du Colombier extern void dirsrch(char *); 191219b2ee8SDavid du Colombier extern void baddirs(void); 192219b2ee8SDavid du Colombier extern nameblkp srchname(char *); 193219b2ee8SDavid du Colombier extern nameblkp makename(char *); 194219b2ee8SDavid du Colombier extern int hasparen(char *); 195219b2ee8SDavid du Colombier extern void newhash(int); 196219b2ee8SDavid du Colombier extern nameblkp chkname(char *); 197219b2ee8SDavid du Colombier extern char *copys(char *); 198219b2ee8SDavid du Colombier extern char *concat(char *, char *, char *); 199219b2ee8SDavid du Colombier extern int suffix(char *, char *, char *); 200219b2ee8SDavid du Colombier extern int *ckalloc(int); 201*9b7bf7dfSDavid du Colombier extern char *subst(char *, char *, char *); 202219b2ee8SDavid du Colombier extern void setvar(char *, char *, int); 203219b2ee8SDavid du Colombier extern void set3var(char *, char *); 204219b2ee8SDavid du Colombier extern int eqsign(char *); 205219b2ee8SDavid du Colombier extern struct varblock *varptr(char *); 206219b2ee8SDavid du Colombier extern int dynmacro(char *); 207219b2ee8SDavid du Colombier extern void fatal1(char *, char *); 208219b2ee8SDavid du Colombier extern void fatal(char *); 209219b2ee8SDavid du Colombier extern chainp appendq(chainp, char *); 210219b2ee8SDavid du Colombier extern char *mkqlist(chainp, char *); 211219b2ee8SDavid du Colombier extern wildp iswild(char *); 212219b2ee8SDavid du Colombier extern char *wildmatch(wildp, char *, int); 213219b2ee8SDavid du Colombier extern char *wildsub(char *, char *); 214219b2ee8SDavid du Colombier extern int parse(char *); 215219b2ee8SDavid du Colombier extern int yylex(void); 216