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