1 diff -u -x CVS -x work -x core -x *.core -x #* -x *~ -x *.orig -x *.rej -I $Id.*$ -I $.+BSD.*$ defs.h.orig defs.h
2 --- defs.h.orig	Tue Jun 22 01:43:19 2004
3 +++ defs.h	Tue Jun 22 01:55:49 2004
4 @@ -1,8 +1,32 @@
5  #
6  /*
7   *	UNIX shell
8 + *
9 + *	S. R. Bourne
10 + *	Bell Telephone Laboratories
11 + *
12   */
13 
14 +#include	<sys/types.h>
15 +#include	<sys/stat.h>
16 +#include	<sys/times.h>
17 +#include	<sys/wait.h>
18 +#include	<dirent.h>
19 +#include	<errno.h>
20 +#include	<fcntl.h>
21 +#include	<setjmp.h>
22 +#include	<signal.h>
23 +#include	<stdlib.h>
24 +#include	<string.h>
25 +#if defined(ULTRIX)
26 +#if (__FreeBSD_version - 0) >= 500005
27 +#include	<ulimit.h>
28 +#else
29 +#include	"ulimit.h"
30 +#endif
31 +#endif
32 +#include	<unistd.h>
33 +
34  /* error exits from various parts of shell */
35  #define ERROR	1
36  #define SYNBAD	2
37 @@ -51,11 +75,22 @@
38  #define SYSNULL 16
39  #define SYSREAD 17
40  #define SYSTST	18
41 -#define	SYSUMASK	19
42 +#define	SYSUMASK 19
43 +#if defined(SYSIII)
44 +#define SYSNEWGRP 20
45 +#endif
46 +#if defined(ULTRIX)
47 +#define SYSULIMIT 21
48 +#endif
49 +
50 +#if defined(SYSIII)
51 +/*	builtin table	*/
52 +#define TEST	127
53 +#endif
54 
55  /* used for input and output of shell */
56 -#define INIO 10
57 -#define OTIO 11
58 +#define INIO	18	/* V7 - 10 */
59 +#define OTIO	19	/* V7 - 11 */
60 
61  /*io nodes*/
62  #define USERIO	10
63 @@ -77,35 +112,145 @@
64 
65 
66  /* result type declarations */
67 -#define alloc malloc
68 -ADDRESS		alloc();
69 -VOID		addblok();
70 -STRING		make();
71 -STRING		movstr();
72 -TREPTR		cmd();
73 -TREPTR		makefork();
74 -NAMPTR		lookup();
75 -VOID		setname();
76 -VOID		setargs();
77 -DOLPTR		useargs();
78 -REAL		expr();
79 -STRING		catpath();
80 -STRING		getpath();
81 -STRING		*scan();
82 -STRING		mactrim();
83 -STRING		macro();
84 -STRING		execs();
85 -VOID		await();
86 -VOID		post();
87 -STRING		copyto();
88 -VOID		exname();
89 -STRING		staknam();
90 -VOID		printnam();
91 -VOID		printflg();
92 -VOID		prs();
93 -VOID		prc();
94 -VOID		getenv();
95 -STRING		*setenv();
96 +/* args.c */
97 +PROC INT	options(INT, STRING *);
98 +PROC VOID	setargs(STRING *);
99 +PROC DOLPTR	freeargs(DOLPTR);
100 +PROC VOID	clearup(VOID);
101 +PROC DOLPTR	useargs(VOID);
102 +/* blok.c */
103 +PROC ADDRESS	alloc(POS);
104 +PROC VOID	addblok(POS);
105 +#define free	free_
106 +PROC VOID	free(BLKPTR);
107 +/* builtin.c */
108 +#if defined(SYSIII)
109 +PROC VOID	builtin(INT, INT, STRING *);
110 +#else /* V7 */
111 +PROC INT	builtin(INT, STRING *);
112 +#endif
113 +PROC VOID	bfailed(CSTRING, CSTRING, CSTRING);
114 +/* cmd.c */
115 +PROC TREPTR	makefork(INT, TREPTR);
116 +PROC TREPTR	cmd(INT, INT);
117 +/* error.c */
118 +PROC VOID	exitset(VOID);
119 +PROC VOID	sigchk(VOID);
120 +PROC VOID	failed(CSTRING, CSTRING);
121 +PROC VOID	error(CSTRING);
122 +PROC VOID	exitsh(INT);
123 +PROC VOID	done(VOID);
124 +PROC VOID	rmtemp(IOPTR);
125 +/* expand.c */
126 +PROC INT	expand(STRING, INT);
127 +PROC INT	gmatch(STRING, STRING);
128 +PROC VOID	makearg(ARGPTR);
129 +/* expr.c */
130 +/* PROC REAL	expr(); */
131 +/* fault.c */
132 +PROC VOID	fault(INT);
133 +PROC VOID	stdsigs(VOID);
134 +PROC SIGPTR	ignsig(INT);
135 +PROC VOID	getsig(INT);
136 +PROC VOID	oldsigs(VOID);
137 +PROC VOID	clrsig(INT);
138 +PROC VOID	chktrap(VOID);
139 +/* io.c */
140 +PROC VOID	initf(UFD);
141 +PROC INT	estabf(STRING);
142 +PROC VOID	push(FILEPTR);
143 +PROC INT	pop(VOID);
144 +PROC VOID	chkpipe(INT *);
145 +PROC INT	chkopen(CSTRING);
146 +#define rename	rename_
147 +PROC VOID	rename(INT, INT);
148 +PROC INT	create(STRING);
149 +PROC INT	tmpfil(VOID);
150 +PROC VOID	copy(IOPTR);
151 +/* macro.c */
152 +PROC STRING	macro(STRING);
153 +PROC VOID	subst(INT, INT);
154 +/* main.c */
155 +PROC VOID	chkpr(INT);
156 +PROC VOID	settmp(VOID);
157 +/* name.c */
158 +PROC INT	syslook(STRING, SYSTAB);
159 +PROC VOID	setlist(ARGPTR, INT);
160 +#if defined(SYSIII)
161 +PROC INT	setname(STRING, INT);
162 +#else /* V7 */
163 +PROC VOID	setname(STRING, INT);
164 +#endif
165 +PROC VOID	replace(STRING *, CSTRING);
166 +PROC VOID	dfault(NAMPTR, CSTRING);
167 +PROC VOID	assign(NAMPTR, CSTRING);
168 +PROC INT	readvar(STRING *);
169 +PROC VOID	assnum(STRING *, INT);
170 +PROC STRING	make(CSTRING);
171 +PROC NAMPTR	lookup(CSTRING);
172 +PROC VOID	namscan(VOID(*)(NAMPTR));
173 +PROC VOID	printnam(NAMPTR);
174 +PROC VOID	exname(NAMPTR);
175 +PROC VOID	printflg(NAMPTR);
176 +#define getenv getenv_
177 +#if defined(SYSIII)
178 +PROC INT	getenv(VOID);
179 +#else /* V7 */
180 +PROC VOID	getenv(VOID);
181 +#endif
182 +#define setenv setenv_
183 +PROC STRING	*setenv(VOID);
184 +/* print.c */
185 +PROC VOID	newline(VOID);
186 +PROC VOID	blank(VOID);
187 +PROC VOID	prp(VOID);
188 +PROC VOID	prs(CSTRING);
189 +PROC VOID	prc(INT);
190 +PROC VOID	prt(CLOCK);
191 +PROC VOID	prn(INT);
192 +PROC VOID	prl(LONG);
193 +PROC VOID	itos(INT);
194 +PROC VOID	ltos(LONG);
195 +PROC INT	stoi(CSTRING);
196 +/* service.c */
197 +PROC VOID	initio(IOPTR);
198 +#if defined(SYSIII)
199 +PROC CSTRING	simple(CSTRING);
200 +#endif
201 +PROC CSTRING	getpath(CSTRING);
202 +PROC INT	pathopen(CSTRING, CSTRING);
203 +PROC CSTRING	catpath(CSTRING, CSTRING);
204 +PROC VOID	execa(STRING *);
205 +PROC VOID	postclr(VOID);
206 +PROC VOID	post(INT);
207 +#if defined(SYSIII)
208 +PROC VOID	await(INT, INT);
209 +#else /* V7 */
210 +PROC VOID	await(INT);
211 +#endif
212 +PROC VOID	trim(STRING);
213 +PROC STRING	mactrim(STRING);
214 +PROC STRING	*scan(INT);
215 +PROC INT	getarg(COMPTR);
216 +/* setbrk.c */
217 +PROC BYTPTR	setbrk(INT);
218 +/* stak.c -> stak.h */
219 +/* string.c */
220 +PROC STRING	movstr(CSTRING, STRING);
221 +PROC INT	any(INT, CSTRING);
222 +PROC INT	cf(CSTRING, CSTRING);
223 +PROC INT	length(CSTRING);
224 +/* test.c */
225 +#if defined(SYSIII)
226 +PROC INT	test(INT, STRING *);
227 +#endif
228 +/* word.c */
229 +PROC INT	word(VOID);
230 +PROC INT	nextc(INT);
231 +PROC INT	readc(VOID);
232 +/* xec.c */
233 +PROC INT	execute(TREPTR, INT, INT *, INT *);
234 +PROC VOID	execexp(STRING, UFD);
235 
236  #define attrib(n,f)	(n->namflg |= f)
237  #define round(a,b)	(((int)((ADR(a)+b)-1))&~((b)-1))
238 @@ -115,16 +260,20 @@
239  #define assert(x)	;
240 
241  /* temp files and io */
242 -UFD		output;
243 -INT		ioset;
244 -IOPTR		iotemp;		/* files to be deleted sometime */
245 -IOPTR		iopend;		/* documents waiting to be read at NL */
246 +EXTERN UFD	output;
247 +EXTERN INT	ioset;
248 +EXTERN IOPTR	iotemp;		/* files to be deleted sometime */
249 +EXTERN IOPTR	iopend;		/* documents waiting to be read at NL */
250 +#if defined(SYSIII)
251 +EXTERN INT	stripflg;
252 +#endif
253 +EXTERN BOOL	nosubst;
254 
255  /* substitution */
256 -INT		dolc;
257 -STRING		*dolv;
258 -DOLPTR		argfor;
259 -ARGPTR		gchain;
260 +EXTERN INT	dolc;
261 +EXTERN STRING	*dolv;
262 +EXTERN DOLPTR	argfor;
263 +EXTERN ARGPTR	gchain;
264 
265  /* stack */
266  #define		BLK(x)	((BLKPTR)(x))
267 @@ -136,68 +285,77 @@
268  #include	"stak.h"
269 
270  /* string constants */
271 -MSG		atline;
272 -MSG		readmsg;
273 -MSG		colon;
274 -MSG		minus;
275 -MSG		nullstr;
276 -MSG		sptbnl;
277 -MSG		unexpected;
278 -MSG		endoffile;
279 -MSG		synmsg;
280 +EXTERN CMSG	atline;
281 +EXTERN CMSG	readmsg;
282 +EXTERN CMSG	colon;
283 +EXTERN CMSG	minus;
284 +EXTERN CMSG	nullstr;
285 +EXTERN CMSG	sptbnl;
286 +EXTERN CMSG	unexpected;
287 +EXTERN CMSG	endoffile;
288 +EXTERN CMSG	endofline;
289 +EXTERN CMSG	synmsg;
290 
291  /* name tree and words */
292 -SYSTAB		reserved;
293 -INT		wdval;
294 -INT		wdnum;
295 -ARGPTR		wdarg;
296 -INT		wdset;
297 -BOOL		reserv;
298 +EXTERN SYSTAB	reserved;
299 +EXTERN SYSTAB	commands;
300 +#if defined(SYSIII)
301 +EXTERN SYSTAB	builtins;
302 +#endif
303 +EXTERN INT	wdval;
304 +EXTERN INT	wdnum;
305 +EXTERN ARGPTR	wdarg;
306 +EXTERN INT	wdset;
307 +EXTERN BOOL	reserv;
308 
309  /* prompting */
310 -MSG		stdprompt;
311 -MSG		supprompt;
312 -MSG		profile;
313 +EXTERN CMSG	stdprompt;
314 +EXTERN CMSG	supprompt;
315 +EXTERN CMSG	profile;
316 +#if defined(SYSIII)
317 +EXTERN CMSG	sysprofile;
318 +#endif
319 
320  /* built in names */
321 -NAMNOD		fngnod;
322 -NAMNOD		ifsnod;
323 -NAMNOD		homenod;
324 -NAMNOD		mailnod;
325 -NAMNOD		pathnod;
326 -NAMNOD		ps1nod;
327 -NAMNOD		ps2nod;
328 +EXTERN NAMNOD	fngnod;
329 +EXTERN NAMNOD	ifsnod;
330 +EXTERN NAMNOD	homenod;
331 +EXTERN NAMNOD	mailnod;
332 +EXTERN NAMNOD	pathnod;
333 +EXTERN NAMNOD	ps1nod;
334 +EXTERN NAMNOD	ps2nod;
335 
336  /* special names */
337 -MSG		flagadr;
338 -STRING		cmdadr;
339 -STRING		exitadr;
340 -STRING		dolladr;
341 -STRING		pcsadr;
342 -STRING		pidadr;
343 +EXTERN MSG	flagadr;
344 +EXTERN STRING	cmdadr;
345 +EXTERN STRING	exitadr;
346 +EXTERN STRING	dolladr;
347 +EXTERN STRING	pcsadr;
348 +EXTERN STRING	pidadr;
349 
350 -MSG		defpath;
351 +EXTERN CMSG	defpath;
352 
353  /* names always present */
354 -MSG		mailname;
355 -MSG		homename;
356 -MSG		pathname;
357 -MSG		fngname;
358 -MSG		ifsname;
359 -MSG		ps1name;
360 -MSG		ps2name;
361 +EXTERN CMSG	mailname;
362 +EXTERN CMSG	homename;
363 +EXTERN CMSG	pathname;
364 +EXTERN CMSG	fngname;
365 +EXTERN CMSG	ifsname;
366 +EXTERN CMSG	ps1name;
367 +EXTERN CMSG	ps2name;
368 
369  /* transput */
370 -CHAR		tmpout[];
371 -STRING		tmpnam;
372 -INT		serial;
373 +EXTERN CHAR	tmpout[];
374 +#define tmpnam	tmpnam_
375 +EXTERN STRING	tmpnam;
376 +EXTERN INT	serial;
377  #define		TMPNAM 7
378 -FILE		standin;
379 +EXTERN FILEPTR	standin;
380  #define input	(standin->fdes)
381  #define eof	(standin->feof)
382 -INT		peekc;
383 -STRING		comdiv;
384 -MSG		devnull;
385 +EXTERN INT	peekc;
386 +EXTERN STRING	comdiv;
387 +EXTERN CMSG	devnull;
388 
389  /* flags */
390  #define		noexec	01
391 @@ -211,77 +369,122 @@
392  #define		rshflg	0400
393  #define		waiting	01000
394  #define		stdflg	02000
395 +#define		STDFLG	's'
396 +#define		STDFLGLOC 4
397  #define		execpr	04000
398  #define		readpr	010000
399  #define		keyflg	020000
400 -INT		flags;
401 +EXTERN INT	flags;
402 +#if defined(SYSIII)
403 +EXTERN BOOL	rwait;
404 +EXTERN BOOL	wasintr;	/*	used to tell if break or delete is hit
405 +					while executing a wait	*/
406 +#endif
407 
408  /* error exits from various parts of shell */
409 -#include	<setjmp.h>
410 -jmp_buf		subshell;
411 -jmp_buf		errshell;
412 +EXTERN jmp_buf	subshell;
413 +EXTERN jmp_buf	errshell;
414 +#if defined(RENO)
415 +EXTERN jmp_buf	INTbuf;
416 +#endif
417 
418  /* fault handling */
419  #include	"brkincr.h"
420 -POS		brkincr;
421 +EXTERN INT	brkincr;
422 
423  #define MINTRAP	0
424 -#define MAXTRAP	17
425 +#define MAXTRAP	33
426 
427 -#define INTR	2
428 -#define QUIT	3
429 -#define MEMF	11
430 -#define ALARM	14
431 -#define KILL	15
432 +#define INTR	SIGINT
433 +#define QUIT	SIGQUIT
434 +#define MEMF	SIGSEGV
435 +#define ALARM	SIGALRM
436 +#define KILL	SIGTERM
437  #define TRAPSET	2
438  #define SIGSET	4
439  #define SIGMOD	8
440 -
441 -VOID		fault();
442 -BOOL		trapnote;
443 -STRING		trapcom[];
444 -BOOL		trapflg[];
445 +#if defined(SYSIII)
446 +#define SIGCAUGHT 16
447 +#endif
448 +
449 +EXTERN BOOL	trapnote;
450 +EXTERN STRING	trapcom[];
451 +EXTERN BOOL	trapflg[];
452 +#if defined(RENO)
453 +EXTERN BOOL	trapjmp[];
454 +#endif
455 
456  /* name tree and words */
457 -STRING		*environ;
458 -CHAR		numbuf[];
459 -MSG		export;
460 -MSG		readonly;
461 +EXTERN STRING	*environ;
462 +EXTERN CHAR	numbuf[];
463 +EXTERN CMSG	export;
464 +EXTERN CMSG	readonly;
465 
466  /* execflgs */
467 -INT		exitval;
468 -BOOL		execbrk;
469 -INT		loopcnt;
470 -INT		breakcnt;
471 +EXTERN INT	exitval;
472 +EXTERN BOOL	execbrk;
473 +EXTERN INT	loopcnt;
474 +EXTERN INT	breakcnt;
475 
476  /* messages */
477 -MSG		mailmsg;
478 -MSG		coredump;
479 -MSG		badopt;
480 -MSG		badparam;
481 -MSG		badsub;
482 -MSG		nospace;
483 -MSG		notfound;
484 -MSG		badtrap;
485 -MSG		baddir;
486 -MSG		badshift;
487 -MSG		illegal;
488 -MSG		restricted;
489 -MSG		execpmsg;
490 -MSG		notid;
491 -MSG		wtfailed;
492 -MSG		badcreate;
493 -MSG		piperr;
494 -MSG		badopen;
495 -MSG		badnum;
496 -MSG		arglist;
497 -MSG		txtbsy;
498 -MSG		toobig;
499 -MSG		badexec;
500 -MSG		notfound;
501 -MSG		badfile;
502 +EXTERN CMSG	mailmsg;
503 +EXTERN CMSG	coredump;
504 +EXTERN CMSG	badopt;
505 +EXTERN CMSG	badparam;
506 +#if defined(SYSIII)
507 +EXTERN CMSG	unset;
508 +#endif
509 +EXTERN CMSG	badsub;
510 +EXTERN CMSG	nospace;
511 +EXTERN CMSG	badtrap;
512 +EXTERN CMSG	memfault;
513 +EXTERN CMSG	baddir;
514 +EXTERN CMSG	badshift;
515 +EXTERN CMSG	illegal;
516 +EXTERN CMSG	restricted;
517 +EXTERN CMSG	execpmsg;
518 +EXTERN CMSG	notid;
519 +EXTERN CMSG	badulimit;
520 +EXTERN CMSG	wtfailed;
521 +EXTERN CMSG	badcreate;
522 +#if defined(SYSIII)
523 +EXTERN CMSG	nofork;
524 +EXTERN CMSG	noswap;
525 +#endif
526 +EXTERN CMSG	piperr;
527 +EXTERN CMSG	badopen;
528 +EXTERN CMSG	badnum;
529 +EXTERN CMSG	arglist;
530 +#if defined(SYSIII)
531 +EXTERN CMSG	argcount;
532 +#endif
533 +EXTERN CMSG	txtbsy;
534 +EXTERN CMSG	toobig;
535 +EXTERN CMSG	badexec;
536 +EXTERN CMSG	notfound;
537 +EXTERN CMSG	badfile;
538 +EXTERN CSTRING	sysmsg[];
539 +#if defined(RENO)
540 +EXTERN INT	num_sysmsg;
541 +#endif
542 +
543 +#if defined(SYSIII)
544 +/*	'builtin' error messages	*/
545 +EXTERN CMSG	btest;
546 +EXTERN CMSG	badop;
547 +#endif
548 +
549 +#if defined(SYSIII)
550 +/*	fork constant	*/
551 +#define FORKLIM	32
552 +#endif
553 +
554 +#if defined(SYSIII) || defined(RENO)
555 +/*	comment delimeter	*/
556 +#define COMCHAR	'#'
557 +#endif
558 
559 -address	end[];
560 +EXTERN address	end[];
561 
562  #include	"ctype.h"
563 
564