1*2802Swnjstatic char *sccsid = "@(#)defs 4.1 (Berkeley) 81/02/28"; 2*2802Swnj#include <stdio.h> 3*2802Swnj#include <ctype.h> 4*2802Swnj 5*2802Swnj#define SHELLCOM "/bin/sh" 6*2802Swnj 7*2802Swnjtypedef long int TIMETYPE; 8*2802Swnj 9*2802Swnj#ifdef unix 10*2802Swnj/* to install metering, add a statement like */ 11*2802Swnj#define METERFILE "/usr/sif/make/Meter" 12*2802Swnj/* to turn metering on, set external variable meteron to 1 */ 13*2802Swnj#endif 14*2802Swnj 15*2802Swnj/* define FSTATIC to be static on systems with C compilers 16*2802Swnj supporting file-static; otherwise define it to be null 17*2802Swnj*/ 18*2802Swnj#define FSTATIC static 19*2802Swnj 20*2802Swnj#define NO 0 21*2802Swnj#define YES 1 22*2802Swnj 23*2802Swnj#define unequal strcmp 24*2802Swnj#define HASHSIZE 1021 25*2802Swnj#define NLEFTS 512 26*2802Swnj#define NCHARS 500 27*2802Swnj#define NINTS 250 28*2802Swnj#define INMAX 2500 29*2802Swnj#define OUTMAX 3500 30*2802Swnj#define QBUFMAX 2500 31*2802Swnj#define MAXDIR 10 32*2802Swnj 33*2802Swnj#define ALLDEPS 1 34*2802Swnj#define SOMEDEPS 2 35*2802Swnj 36*2802Swnj#define META 01 37*2802Swnj#define TERMINAL 02 38*2802Swnjextern char funny[128]; 39*2802Swnj 40*2802Swnj 41*2802Swnj#define ALLOC(x) (struct x *) ckalloc(sizeof(struct x)) 42*2802Swnj 43*2802Swnjextern int sigivalue; 44*2802Swnjextern int sigqvalue; 45*2802Swnjextern int waitpid; 46*2802Swnjextern int dbgflag; 47*2802Swnjextern int prtrflag; 48*2802Swnjextern int silflag; 49*2802Swnjextern int noexflag; 50*2802Swnjextern int keepgoing; 51*2802Swnjextern int noruleflag; 52*2802Swnjextern int touchflag; 53*2802Swnjextern int questflag; 54*2802Swnjextern int ndocoms; 55*2802Swnjextern int ignerr; 56*2802Swnjextern int okdel; 57*2802Swnjextern int inarglist; 58*2802Swnjextern char *prompt; 59*2802Swnjextern int nopdir; 60*2802Swnjextern char junkname[ ]; 61*2802Swnj 62*2802Swnj 63*2802Swnj 64*2802Swnjstruct nameblock 65*2802Swnj { 66*2802Swnj struct nameblock *nxtnameblock; 67*2802Swnj char *namep; 68*2802Swnj struct lineblock *linep; 69*2802Swnj int done:3; 70*2802Swnj int septype:3; 71*2802Swnj TIMETYPE modtime; 72*2802Swnj }; 73*2802Swnj 74*2802Swnjextern struct nameblock *mainname ; 75*2802Swnjextern struct nameblock *firstname; 76*2802Swnj 77*2802Swnjstruct lineblock 78*2802Swnj { 79*2802Swnj struct lineblock *nxtlineblock; 80*2802Swnj struct depblock *depp; 81*2802Swnj struct shblock *shp; 82*2802Swnj }; 83*2802Swnjextern struct lineblock *sufflist; 84*2802Swnj 85*2802Swnjstruct depblock 86*2802Swnj { 87*2802Swnj struct depblock *nxtdepblock; 88*2802Swnj struct nameblock *depname; 89*2802Swnj }; 90*2802Swnj 91*2802Swnjstruct shblock 92*2802Swnj { 93*2802Swnj struct shblock *nxtshblock; 94*2802Swnj char *shbp; 95*2802Swnj }; 96*2802Swnj 97*2802Swnjstruct varblock 98*2802Swnj { 99*2802Swnj struct varblock *nxtvarblock; 100*2802Swnj char *varname; 101*2802Swnj char *varval; 102*2802Swnj int noreset:1; 103*2802Swnj int used:1; 104*2802Swnj }; 105*2802Swnjextern struct varblock *firstvar; 106*2802Swnj 107*2802Swnjstruct pattern 108*2802Swnj { 109*2802Swnj struct pattern *nxtpattern; 110*2802Swnj char *patval; 111*2802Swnj }; 112*2802Swnjextern struct pattern *firstpat; 113*2802Swnj 114*2802Swnjstruct opendir 115*2802Swnj { 116*2802Swnj struct opendir *nxtopendir; 117*2802Swnj FILE * dirfc; 118*2802Swnj char *dirn; 119*2802Swnj }; 120*2802Swnjextern struct opendir *firstod; 121*2802Swnj 122*2802Swnj 123*2802Swnjstruct chain 124*2802Swnj { 125*2802Swnj struct chain *nextp; 126*2802Swnj char *datap; 127*2802Swnj }; 128*2802Swnj 129*2802Swnjchar *copys(), *concat(), *subst(); 130*2802Swnjint *ckalloc(); 131*2802Swnjstruct nameblock *srchname(), *makename(); 132*2802SwnjTIMETYPE exists(); 133