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