Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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);