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