xref: /plan9/sys/src/ape/cmd/make/defs.h (revision 9b7bf7df4595c26f1e9b67beb0c6e44c9876fb05)
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