1 /* defs 4.2 85/10/28 */ 2 #define _POSIX_SOURCE 3 #define _RESEARCH_SOURCE 4 5 #include <stdlib.h> 6 #include <string.h> 7 #include <sys/types.h> 8 #include <unistd.h> 9 #include <signal.h> 10 #include <time.h> 11 #include <dirent.h> 12 #include <limits.h> 13 #include <stdio.h> 14 #include <ctype.h> 15 16 #ifndef SHELLCOM 17 #define SHELLCOM "/bin/sh" 18 #endif 19 20 typedef char flag; /* represent a few bit flag */ 21 22 #define NO 0 23 #define YES 1 24 25 #define equal(a,b) (! strcmp(a,b)) 26 #define HASHSIZE 1021 27 #define NLEFTS 512 28 #define NCHARS 500 29 #define NINTS 250 30 31 /* cranked these up, we're not on the pdp-11 any more */ 32 #define INMAX 80000 33 #define OUTMAX 80000 34 #define QBUFMAX 80000 35 #define MAXDIR 30 36 #define MAXPROC 200 37 #define MAXINCLUDE 32 38 #define PROCLIMIT 3 39 40 #define ALLDEPS 1 41 #define SOMEDEPS 2 42 43 #define META 01 44 #define TERMINAL 02 45 extern char funny[128]; 46 47 48 #define ALLOC(x) (struct x *) ckalloc(sizeof(struct x)) 49 #define CHNULL (char *) NULL 50 51 extern int sigivalue; 52 extern int sigqvalue; 53 extern int dbgflag; 54 extern int prtrflag; 55 extern int silflag; 56 extern int noexflag; 57 extern int keepgoing; 58 extern int noruleflag; 59 extern int touchflag; 60 extern int questflag; 61 extern int oldflag; 62 extern int ndocoms; 63 extern int ignerr; 64 extern int okdel; 65 extern int forceshell; 66 extern int inarglist; 67 extern char **envpp; /* points to slot in environment vector */ 68 extern char *prompt; 69 extern int nopdir; 70 71 typedef struct nameblock *nameblkp; 72 typedef struct depblock *depblkp; 73 typedef struct lineblock *lineblkp; 74 typedef struct chain *chainp; 75 76 struct nameblock 77 { 78 nameblkp nxtnameblock; 79 char *namep; 80 lineblkp linep; 81 flag done; 82 flag septype; 83 flag isarch; 84 flag isdir; 85 time_t modtime; 86 }; 87 88 extern nameblkp mainname; 89 extern nameblkp firstname; 90 extern nameblkp *hashtab; 91 extern int nhashed; 92 extern int hashsize; 93 extern int hashthresh; 94 95 struct lineblock 96 { 97 lineblkp nxtlineblock; 98 struct depblock *depp; 99 struct shblock *shp; 100 }; 101 extern lineblkp sufflist; 102 103 struct depblock 104 { 105 depblkp nxtdepblock; 106 nameblkp depname; 107 char nowait; 108 } ; 109 110 struct shblock 111 { 112 struct shblock *nxtshblock; 113 char *shbp; 114 }; 115 116 struct varblock 117 { 118 struct varblock *nxtvarblock; 119 char *varname; 120 char *varval; 121 char **export; 122 flag noreset; 123 flag used; 124 }; 125 extern struct varblock *firstvar; 126 127 struct pattern 128 { 129 struct pattern *nxtpattern; 130 char *patval; 131 }; 132 extern struct pattern *firstpat; 133 134 struct dirhd 135 { 136 struct dirhd *nxtdirhd; 137 time_t dirtime; 138 int dirok; 139 DIR * dirfc; 140 char *dirn; 141 }; 142 extern struct dirhd *firstod; 143 144 145 struct chain 146 { 147 chainp nextp; 148 char *datap; 149 }; 150 151 struct wild 152 { 153 struct wild *next; 154 lineblkp linep; 155 char *left; 156 char *right; 157 int llen; 158 int rlen; 159 int totlen; 160 }; 161 162 typedef struct wild *wildp; 163 extern wildp firstwild; 164 extern wildp lastwild; 165 166 167 /* date for processes */ 168 extern int proclimit; /* maximum spawned processes allowed alive at one time */ 169 extern int proclive; /* number of spawned processes awaited */ 170 extern int nproc; /* next slot in process stack to use */ 171 extern struct process 172 { 173 int pid; 174 flag nohalt; 175 flag nowait; 176 flag done; 177 } procstack[ ]; 178 179 extern void intrupt(int); 180 extern void enbint(void (*)(int)); 181 extern int doname(nameblkp, int, time_t *, int); 182 extern int docom(struct shblock *, int, int); 183 extern int dosys(char *, int, int, char *); 184 extern int waitstack(int); 185 extern void touch(int, char*); 186 extern time_t exists(char *); 187 extern time_t prestime(void); 188 extern depblkp srchdir(char*, int, depblkp); 189 extern time_t lookarch(char *); 190 extern void dirsrch(char *); 191 extern void baddirs(void); 192 extern nameblkp srchname(char *); 193 extern nameblkp makename(char *); 194 extern int hasparen(char *); 195 extern void newhash(int); 196 extern nameblkp chkname(char *); 197 extern char *copys(char *); 198 extern char *concat(char *, char *, char *); 199 extern int suffix(char *, char *, char *); 200 extern int *ckalloc(int); 201 extern char *subst(char *, char *, char *); 202 extern void setvar(char *, char *, int); 203 extern void set3var(char *, char *); 204 extern int eqsign(char *); 205 extern struct varblock *varptr(char *); 206 extern int dynmacro(char *); 207 extern void fatal1(char *, char *); 208 extern void fatal(char *); 209 extern chainp appendq(chainp, char *); 210 extern char *mkqlist(chainp, char *); 211 extern wildp iswild(char *); 212 extern char *wildmatch(wildp, char *, int); 213 extern char *wildsub(char *, char *); 214 extern int parse(char *); 215 extern int yylex(void); 216