summaryrefslogtreecommitdiff
path: root/sys/src/ape/cmd/make/defs.h
blob: d7ce537f5a9cd4b21bcc809cef45f9f95271cfda (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
/* defs 4.2 85/10/28 */
#define _POSIX_SOURCE
#define _RESEARCH_SOURCE

#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>
#include <time.h>
#include <dirent.h>
#include <limits.h>
#include <stdio.h>
#include <ctype.h>

#ifndef SHELLCOM
#define SHELLCOM "/bin/sh"
#endif

typedef char flag;	/* represent a few bit flag */

#define NO	0
#define YES	1

#define equal(a,b)	(! strcmp(a,b))
#define HASHSIZE	1021
#define NLEFTS	512
#define NCHARS	500
#define NINTS	250
#define INMAX	20000
#define OUTMAX	20000
#define QBUFMAX	20000
#define MAXDIR	10
#define MAXPROC	100
#define MAXINCLUDE	17
#define PROCLIMIT	3

#define ALLDEPS	1
#define SOMEDEPS	2

#define META	01
#define TERMINAL	02
extern char funny[128];


#define ALLOC(x) (struct x *) ckalloc(sizeof(struct x))
#define CHNULL	(char *) NULL

extern int sigivalue;
extern int sigqvalue;
extern int dbgflag;
extern int prtrflag;
extern int silflag;
extern int noexflag;
extern int keepgoing;
extern int noruleflag;
extern int touchflag;
extern int questflag;
extern int oldflag;
extern int ndocoms;
extern int ignerr;
extern int okdel;
extern int forceshell;
extern int inarglist;
extern char **envpp;	/* points to slot in environment vector */
extern char *prompt;
extern int nopdir;

typedef struct nameblock *nameblkp;
typedef struct depblock *depblkp;
typedef struct lineblock *lineblkp;
typedef struct chain *chainp;

struct nameblock
	{
	nameblkp nxtnameblock;
	char *namep;
	lineblkp linep;
	flag done;
	flag septype;
	flag isarch;
	flag isdir;
	time_t modtime;
	};

extern nameblkp mainname;
extern nameblkp firstname;
extern nameblkp *hashtab;
extern int nhashed;
extern int hashsize;
extern int hashthresh;

struct lineblock
	{
	lineblkp nxtlineblock;
	struct depblock *depp;
	struct shblock *shp;
	};
extern lineblkp sufflist;

struct depblock
	{
	depblkp nxtdepblock;
	nameblkp depname;
	char nowait;
	} ;

struct shblock
	{
	struct shblock *nxtshblock;
	char *shbp;
	};

struct varblock
	{
	struct varblock *nxtvarblock;
	char *varname;
	char *varval;
	char **export;
	flag noreset;
	flag used;
	};
extern struct varblock *firstvar;

struct pattern
	{
	struct pattern *nxtpattern;
	char *patval;
	};
extern struct pattern *firstpat;

struct dirhd
	{
	struct dirhd *nxtdirhd;
	time_t dirtime;
	int dirok;
	DIR * dirfc;
	char *dirn;
	};
extern struct dirhd *firstod;


struct chain
	{
	chainp nextp;
	char *datap;
	};

struct wild
	{
	struct wild *next;
	lineblkp linep;
	char *left;
	char *right;
	int llen;
	int rlen;
	int totlen;
	};

typedef struct wild *wildp;
extern wildp firstwild;
extern wildp lastwild;


/* date for processes */
extern int proclimit;	/* maximum spawned processes allowed alive at one time */
extern int proclive;	/* number of spawned processes awaited */
extern int nproc;	/* next slot in process stack to use */
extern struct process
	{
	int pid;
	flag nohalt;
	flag nowait;
	flag done;
	} procstack[ ];

extern void	intrupt(int);
extern void	enbint(void (*)(int));
extern int	doname(nameblkp, int, time_t *, int);
extern int	docom(struct shblock *, int, int);
extern int	dosys(char *, int, int, char *);
extern int	waitstack(int);
extern void	touch(int, char*);
extern time_t	exists(char *);
extern time_t	prestime(void);
extern depblkp	srchdir(char*, int, depblkp);
extern time_t	lookarch(char *);
extern void	dirsrch(char *);
extern void	baddirs(void);
extern nameblkp	srchname(char *);
extern nameblkp	makename(char *);
extern int	hasparen(char *);
extern void	newhash(int);
extern nameblkp	chkname(char *);
extern char	*copys(char *);
extern char	*concat(char *, char *, char *);
extern int	suffix(char *, char *, char *);
extern int	*ckalloc(int);
extern char	*subst(char *, char *);
extern void	setvar(char *, char *, int);
extern void	set3var(char *, char *);
extern int	eqsign(char *);
extern struct varblock *varptr(char *);
extern int	dynmacro(char *);
extern void	fatal1(char *, char *);
extern void	fatal(char *);
extern chainp	appendq(chainp, char *);
extern char	*mkqlist(chainp, char *);
extern wildp	iswild(char *);
extern char	*wildmatch(wildp, char *, int);
extern char	*wildsub(char *, char *);
extern int	parse(char *);
extern int	yylex(void);