xref: /illumos-gate/usr/src/contrib/ast/src/cmd/INIT/proto.c (revision b30d1939)
1*b30d1939SAndy Fiddaman /***********************************************************************
2*b30d1939SAndy Fiddaman *                                                                      *
3*b30d1939SAndy Fiddaman *               This software is part of the ast package               *
4*b30d1939SAndy Fiddaman *          Copyright (c) 1990-2012 AT&T Intellectual Property          *
5*b30d1939SAndy Fiddaman *                      and is licensed under the                       *
6*b30d1939SAndy Fiddaman *                 Eclipse Public License, Version 1.0                  *
7*b30d1939SAndy Fiddaman *                    by AT&T Intellectual Property                     *
8*b30d1939SAndy Fiddaman *                                                                      *
9*b30d1939SAndy Fiddaman *                A copy of the License is available at                 *
10*b30d1939SAndy Fiddaman *          http://www.eclipse.org/org/documents/epl-v10.html           *
11*b30d1939SAndy Fiddaman *         (with md5 checksum b35adb5213ca9657e911e9befb180842)         *
12*b30d1939SAndy Fiddaman *                                                                      *
13*b30d1939SAndy Fiddaman *              Information and Software Systems Research               *
14*b30d1939SAndy Fiddaman *                            AT&T Research                             *
15*b30d1939SAndy Fiddaman *                           Florham Park NJ                            *
16*b30d1939SAndy Fiddaman *                                                                      *
17*b30d1939SAndy Fiddaman *                 Glenn Fowler <gsf@research.att.com>                  *
18*b30d1939SAndy Fiddaman *                                                                      *
19*b30d1939SAndy Fiddaman ***********************************************************************/
20*b30d1939SAndy Fiddaman 
21*b30d1939SAndy Fiddaman /* : : generated by proto : : */
22*b30d1939SAndy Fiddaman 
23*b30d1939SAndy Fiddaman #if !defined(__PROTO__)
24*b30d1939SAndy Fiddaman #  if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)
25*b30d1939SAndy Fiddaman #    if defined(__cplusplus)
26*b30d1939SAndy Fiddaman #      define __LINKAGE__	"C"
27*b30d1939SAndy Fiddaman #    else
28*b30d1939SAndy Fiddaman #      define __LINKAGE__
29*b30d1939SAndy Fiddaman #    endif
30*b30d1939SAndy Fiddaman #    define __STDARG__
31*b30d1939SAndy Fiddaman #    define __PROTO__(x)	x
32*b30d1939SAndy Fiddaman #    define __OTORP__(x)
33*b30d1939SAndy Fiddaman #    define __PARAM__(n,o)	n
34*b30d1939SAndy Fiddaman #    if !defined(__STDC__) && !defined(__cplusplus)
35*b30d1939SAndy Fiddaman #      if !defined(c_plusplus)
36*b30d1939SAndy Fiddaman #      	define const
37*b30d1939SAndy Fiddaman #      endif
38*b30d1939SAndy Fiddaman #      define signed
39*b30d1939SAndy Fiddaman #      define void		int
40*b30d1939SAndy Fiddaman #      define volatile
41*b30d1939SAndy Fiddaman #      define __V_		char
42*b30d1939SAndy Fiddaman #    else
43*b30d1939SAndy Fiddaman #      define __V_		void
44*b30d1939SAndy Fiddaman #    endif
45*b30d1939SAndy Fiddaman #  else
46*b30d1939SAndy Fiddaman #    define __PROTO__(x)	()
47*b30d1939SAndy Fiddaman #    define __OTORP__(x)	x
48*b30d1939SAndy Fiddaman #    define __PARAM__(n,o)	o
49*b30d1939SAndy Fiddaman #    define __LINKAGE__
50*b30d1939SAndy Fiddaman #    define __V_		char
51*b30d1939SAndy Fiddaman #    define const
52*b30d1939SAndy Fiddaman #    define signed
53*b30d1939SAndy Fiddaman #    define void		int
54*b30d1939SAndy Fiddaman #    define volatile
55*b30d1939SAndy Fiddaman #  endif
56*b30d1939SAndy Fiddaman #  define __MANGLE__	__LINKAGE__
57*b30d1939SAndy Fiddaman #  if defined(__cplusplus) || defined(c_plusplus)
58*b30d1939SAndy Fiddaman #    define __VARARG__	...
59*b30d1939SAndy Fiddaman #  else
60*b30d1939SAndy Fiddaman #    define __VARARG__
61*b30d1939SAndy Fiddaman #  endif
62*b30d1939SAndy Fiddaman #  if defined(__STDARG__)
63*b30d1939SAndy Fiddaman #    define __VA_START__(p,a)	va_start(p,a)
64*b30d1939SAndy Fiddaman #  else
65*b30d1939SAndy Fiddaman #    define __VA_START__(p,a)	va_start(p)
66*b30d1939SAndy Fiddaman #  endif
67*b30d1939SAndy Fiddaman #  if !defined(__INLINE__)
68*b30d1939SAndy Fiddaman #    if defined(__cplusplus)
69*b30d1939SAndy Fiddaman #      define __INLINE__	extern __MANGLE__ inline
70*b30d1939SAndy Fiddaman #    else
71*b30d1939SAndy Fiddaman #      if defined(_WIN32) && !defined(__GNUC__)
72*b30d1939SAndy Fiddaman #      	define __INLINE__	__inline
73*b30d1939SAndy Fiddaman #      endif
74*b30d1939SAndy Fiddaman #    endif
75*b30d1939SAndy Fiddaman #  endif
76*b30d1939SAndy Fiddaman #endif
77*b30d1939SAndy Fiddaman #if !defined(__LINKAGE__)
78*b30d1939SAndy Fiddaman #define __LINKAGE__		/* 2004-08-11 transition */
79*b30d1939SAndy Fiddaman #endif
80*b30d1939SAndy Fiddaman #line 1 "proto.c"
81*b30d1939SAndy Fiddaman 
82*b30d1939SAndy Fiddaman 
83*b30d1939SAndy Fiddaman #line 151
84*b30d1939SAndy Fiddaman # ifndef __STDC__
85*b30d1939SAndy Fiddaman # ifndef creat
86*b30d1939SAndy Fiddaman # define creat		_huh_creat
87*b30d1939SAndy Fiddaman # endif
88*b30d1939SAndy Fiddaman # if 1
89*b30d1939SAndy Fiddaman # ifndef access
90*b30d1939SAndy Fiddaman # define access		_huh_access
91*b30d1939SAndy Fiddaman # endif
92*b30d1939SAndy Fiddaman # ifndef ctime
93*b30d1939SAndy Fiddaman # define ctime		_huh_ctime
94*b30d1939SAndy Fiddaman # endif
95*b30d1939SAndy Fiddaman # ifndef mkdir
96*b30d1939SAndy Fiddaman # define mkdir		_huh_mkdir
97*b30d1939SAndy Fiddaman # endif
98*b30d1939SAndy Fiddaman # endif
99*b30d1939SAndy Fiddaman # endif
100*b30d1939SAndy Fiddaman 
101*b30d1939SAndy Fiddaman # include <sys/types.h>
102*b30d1939SAndy Fiddaman # include <sys/stat.h>
103*b30d1939SAndy Fiddaman # include <fcntl.h>
104*b30d1939SAndy Fiddaman # if 1
105*b30d1939SAndy Fiddaman # include <stdio.h>
106*b30d1939SAndy Fiddaman # else
107*b30d1939SAndy Fiddaman # include <time.h>
108*b30d1939SAndy Fiddaman # endif
109*b30d1939SAndy Fiddaman 
110*b30d1939SAndy Fiddaman # ifndef __STDC__
111*b30d1939SAndy Fiddaman # undef	access
112*b30d1939SAndy Fiddaman # undef	ctime
113*b30d1939SAndy Fiddaman # undef	creat
114*b30d1939SAndy Fiddaman # undef	mkdir
115*b30d1939SAndy Fiddaman # endif
116*b30d1939SAndy Fiddaman 
117*b30d1939SAndy Fiddaman # ifndef O_RDONLY
118*b30d1939SAndy Fiddaman # define O_RDONLY	0
119*b30d1939SAndy Fiddaman # endif
120*b30d1939SAndy Fiddaman 
121*b30d1939SAndy Fiddaman # ifndef S_IRUSR
122*b30d1939SAndy Fiddaman # define S_IRUSR		0400
123*b30d1939SAndy Fiddaman # endif
124*b30d1939SAndy Fiddaman # ifndef S_IWUSR
125*b30d1939SAndy Fiddaman # define S_IWUSR		0200
126*b30d1939SAndy Fiddaman # endif
127*b30d1939SAndy Fiddaman # ifndef S_IXUSR
128*b30d1939SAndy Fiddaman # define S_IXUSR		0100
129*b30d1939SAndy Fiddaman # endif
130*b30d1939SAndy Fiddaman # ifndef S_IRGRP
131*b30d1939SAndy Fiddaman # define S_IRGRP		0040
132*b30d1939SAndy Fiddaman # endif
133*b30d1939SAndy Fiddaman # ifndef S_IWGRP
134*b30d1939SAndy Fiddaman # define S_IWGRP		0020
135*b30d1939SAndy Fiddaman # endif
136*b30d1939SAndy Fiddaman # ifndef S_IXGRP
137*b30d1939SAndy Fiddaman # define S_IXGRP		0010
138*b30d1939SAndy Fiddaman # endif
139*b30d1939SAndy Fiddaman # ifndef S_IROTH
140*b30d1939SAndy Fiddaman # define S_IROTH		0004
141*b30d1939SAndy Fiddaman # endif
142*b30d1939SAndy Fiddaman # ifndef S_IWOTH
143*b30d1939SAndy Fiddaman # define S_IWOTH		0002
144*b30d1939SAndy Fiddaman # endif
145*b30d1939SAndy Fiddaman # ifndef S_IXOTH
146*b30d1939SAndy Fiddaman # define S_IXOTH		0001
147*b30d1939SAndy Fiddaman # endif
148*b30d1939SAndy Fiddaman 
149*b30d1939SAndy Fiddaman # ifndef __STDC__
150*b30d1939SAndy Fiddaman # if !_WIN32 && !_WINIX
151*b30d1939SAndy Fiddaman # define remove(x)	unlink(x)
152*b30d1939SAndy Fiddaman # define rename(x,y)	((link(x,y)||remove(x))?-1:0)
153*b30d1939SAndy Fiddaman # endif
154*b30d1939SAndy Fiddaman 
155*b30d1939SAndy Fiddaman # if 1
156*b30d1939SAndy Fiddaman extern __MANGLE__ int	access __PROTO__((const char*, int));
157*b30d1939SAndy Fiddaman extern __MANGLE__ int	mkdir __PROTO__((const char*, int));
158*b30d1939SAndy Fiddaman # endif
159*b30d1939SAndy Fiddaman 
160*b30d1939SAndy Fiddaman # endif
161*b30d1939SAndy Fiddaman 
162*b30d1939SAndy Fiddaman # if 1
163*b30d1939SAndy Fiddaman extern __MANGLE__ int	utime __PROTO__((const char*, time_t*));
164*b30d1939SAndy Fiddaman # endif
165*b30d1939SAndy Fiddaman 
166*b30d1939SAndy Fiddaman 
167*b30d1939SAndy Fiddaman 
168*b30d1939SAndy Fiddaman 
169*b30d1939SAndy Fiddaman 
170*b30d1939SAndy Fiddaman 
171*b30d1939SAndy Fiddaman int
__OTORP__(const char * newfile;const char * oldfile;int preserve;)172*b30d1939SAndy Fiddaman replace __PARAM__((const char* newfile, const char* oldfile, int preserve), (newfile, oldfile, preserve)) __OTORP__(const char* newfile; const char* oldfile; int preserve;){
173*b30d1939SAndy Fiddaman 	struct stat	st;
174*b30d1939SAndy Fiddaman 	time_t		ut[2];
175*b30d1939SAndy Fiddaman 
176*b30d1939SAndy Fiddaman 	if (stat(oldfile, &st))
177*b30d1939SAndy Fiddaman 	{
178*b30d1939SAndy Fiddaman 		if (preserve)
179*b30d1939SAndy Fiddaman 			return -1;
180*b30d1939SAndy Fiddaman 		st.st_mode = 0;
181*b30d1939SAndy Fiddaman 	}
182*b30d1939SAndy Fiddaman 	if (remove(oldfile) || rename(newfile, oldfile))
183*b30d1939SAndy Fiddaman 		return -1;
184*b30d1939SAndy Fiddaman 	if (st.st_mode &= (S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IXGRP|S_IROTH|S_IWOTH|S_IXOTH))
185*b30d1939SAndy Fiddaman 		chmod(oldfile, st.st_mode);
186*b30d1939SAndy Fiddaman 	if (preserve)
187*b30d1939SAndy Fiddaman 	{
188*b30d1939SAndy Fiddaman 		ut[0] = st.st_atime;
189*b30d1939SAndy Fiddaman 		ut[1] = st.st_mtime;
190*b30d1939SAndy Fiddaman 		preserve = utime(oldfile, ut);
191*b30d1939SAndy Fiddaman 	}
192*b30d1939SAndy Fiddaman 	return preserve;
193*b30d1939SAndy Fiddaman }
194*b30d1939SAndy Fiddaman 
195*b30d1939SAndy Fiddaman # undef	utime
196*b30d1939SAndy Fiddaman # define utime		______utime
197*b30d1939SAndy Fiddaman 
198*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/ppproto.c"
199*b30d1939SAndy Fiddaman 
200*b30d1939SAndy Fiddaman #line 13
201*b30d1939SAndy Fiddaman static const char id[] = "\n@(#)$Id: proto (AT&T Research) 2012-04-14 $\000\n";
202*b30d1939SAndy Fiddaman 
203*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/ppfsm.c"
204*b30d1939SAndy Fiddaman 
205*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/pplib.h"
206*b30d1939SAndy Fiddaman 
207*b30d1939SAndy Fiddaman #line 108
208*b30d1939SAndy Fiddaman struct ppsymbol;
209*b30d1939SAndy Fiddaman struct ppindex;
210*b30d1939SAndy Fiddaman 
211*b30d1939SAndy Fiddaman typedef char*	(*PPBUILTIN) __PROTO__((char*, const char*, const char*));
212*b30d1939SAndy Fiddaman typedef void	(*PPCOMMENT) __PROTO__((const char*, const char*, const char*, int));
213*b30d1939SAndy Fiddaman typedef void	(*PPINCREF) __PROTO__((const char*, const char*, int, int));
214*b30d1939SAndy Fiddaman typedef void	(*PPLINESYNC) __PROTO__((int, const char*));
215*b30d1939SAndy Fiddaman typedef void	(*PPMACREF) __PROTO__((struct ppsymbol*, const char*, int, int, unsigned long));
216*b30d1939SAndy Fiddaman typedef int	(*PPOPTARG) __PROTO__((int, int, const char*));
217*b30d1939SAndy Fiddaman typedef void	(*PPPRAGMA) __PROTO__((const char*, const char*, const char*, const char*, int));
218*b30d1939SAndy Fiddaman 
219*b30d1939SAndy Fiddaman struct ppinstk
220*b30d1939SAndy Fiddaman {
221*b30d1939SAndy Fiddaman 	char*		nextchr;
222*b30d1939SAndy Fiddaman 	struct ppinstk*	next;
223*b30d1939SAndy Fiddaman 	struct ppinstk*	prev;
224*b30d1939SAndy Fiddaman 	long*		control;
225*b30d1939SAndy Fiddaman 	char*		buffer;
226*b30d1939SAndy Fiddaman 	char*		file;
227*b30d1939SAndy Fiddaman 	char*		prefix;
228*b30d1939SAndy Fiddaman 	struct ppsymbol* symbol;
229*b30d1939SAndy Fiddaman 
230*b30d1939SAndy Fiddaman 	struct ppindex*	index;
231*b30d1939SAndy Fiddaman 	int		buflen;
232*b30d1939SAndy Fiddaman 
233*b30d1939SAndy Fiddaman 	int		line;
234*b30d1939SAndy Fiddaman 	int		vendor;
235*b30d1939SAndy Fiddaman 	short		fd;
236*b30d1939SAndy Fiddaman 	short		hide;
237*b30d1939SAndy Fiddaman 	short		flags;
238*b30d1939SAndy Fiddaman 	char		type;
239*b30d1939SAndy Fiddaman };
240*b30d1939SAndy Fiddaman 
241*b30d1939SAndy Fiddaman 
242*b30d1939SAndy Fiddaman 
243*b30d1939SAndy Fiddaman 
244*b30d1939SAndy Fiddaman 
245*b30d1939SAndy Fiddaman 
246*b30d1939SAndy Fiddaman 
247*b30d1939SAndy Fiddaman 
248*b30d1939SAndy Fiddaman 
249*b30d1939SAndy Fiddaman struct pplist
250*b30d1939SAndy Fiddaman {
251*b30d1939SAndy Fiddaman 	char*		value;
252*b30d1939SAndy Fiddaman 	struct pplist*	next;
253*b30d1939SAndy Fiddaman };
254*b30d1939SAndy Fiddaman 
255*b30d1939SAndy Fiddaman struct oplist
256*b30d1939SAndy Fiddaman {
257*b30d1939SAndy Fiddaman 	int		op;
258*b30d1939SAndy Fiddaman 	char*		value;
259*b30d1939SAndy Fiddaman 	struct oplist*	next;
260*b30d1939SAndy Fiddaman };
261*b30d1939SAndy Fiddaman 
262*b30d1939SAndy Fiddaman struct pphide
263*b30d1939SAndy Fiddaman {
264*b30d1939SAndy Fiddaman 	struct ppmacro*	macro;
265*b30d1939SAndy Fiddaman 	unsigned long	flags;
266*b30d1939SAndy Fiddaman 	int		level;
267*b30d1939SAndy Fiddaman };
268*b30d1939SAndy Fiddaman 
269*b30d1939SAndy Fiddaman struct ppmacstk
270*b30d1939SAndy Fiddaman {
271*b30d1939SAndy Fiddaman 	struct ppmacstk* next;
272*b30d1939SAndy Fiddaman 	struct ppmacstk* prev;
273*b30d1939SAndy Fiddaman 	int		line;
274*b30d1939SAndy Fiddaman 	char*		arg[1];
275*b30d1939SAndy Fiddaman };
276*b30d1939SAndy Fiddaman 
277*b30d1939SAndy Fiddaman struct ppmember
278*b30d1939SAndy Fiddaman {
279*b30d1939SAndy Fiddaman 	struct ppdirs*	archive;
280*b30d1939SAndy Fiddaman 	unsigned long	offset;
281*b30d1939SAndy Fiddaman 	unsigned long	size;
282*b30d1939SAndy Fiddaman };
283*b30d1939SAndy Fiddaman 
284*b30d1939SAndy Fiddaman struct counter
285*b30d1939SAndy Fiddaman {
286*b30d1939SAndy Fiddaman 	int		candidate;
287*b30d1939SAndy Fiddaman 	int		function;
288*b30d1939SAndy Fiddaman 	int		macro;
289*b30d1939SAndy Fiddaman 	int		pplex;
290*b30d1939SAndy Fiddaman 	int		push;
291*b30d1939SAndy Fiddaman 	int		terminal;
292*b30d1939SAndy Fiddaman 	int		token;
293*b30d1939SAndy Fiddaman };
294*b30d1939SAndy Fiddaman 
295*b30d1939SAndy Fiddaman struct pptuple
296*b30d1939SAndy Fiddaman {
297*b30d1939SAndy Fiddaman 	struct pptuple*	nomatch;
298*b30d1939SAndy Fiddaman 	struct pptuple*	match;
299*b30d1939SAndy Fiddaman 	char		token[1];
300*b30d1939SAndy Fiddaman };
301*b30d1939SAndy Fiddaman 
302*b30d1939SAndy Fiddaman struct ppfileid
303*b30d1939SAndy Fiddaman {
304*b30d1939SAndy Fiddaman 	unsigned long	st_dev;
305*b30d1939SAndy Fiddaman 	unsigned long	st_ino;
306*b30d1939SAndy Fiddaman };
307*b30d1939SAndy Fiddaman 
308*b30d1939SAndy Fiddaman struct pathid
309*b30d1939SAndy Fiddaman {
310*b30d1939SAndy Fiddaman 	char*		path;
311*b30d1939SAndy Fiddaman 	struct ppfileid	id;
312*b30d1939SAndy Fiddaman };
313*b30d1939SAndy Fiddaman 
314*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/pp.h"
315*b30d1939SAndy Fiddaman 
316*b30d1939SAndy Fiddaman #line 206
317*b30d1939SAndy Fiddaman 
318*b30d1939SAndy Fiddaman #line 217
319*b30d1939SAndy Fiddaman 
320*b30d1939SAndy Fiddaman #line 329
321*b30d1939SAndy Fiddaman struct ppdirs
322*b30d1939SAndy Fiddaman {
323*b30d1939SAndy Fiddaman 	char*		name;
324*b30d1939SAndy Fiddaman 	struct ppdirs*	next;
325*b30d1939SAndy Fiddaman 
326*b30d1939SAndy Fiddaman 
327*b30d1939SAndy Fiddaman 	unsigned char c; unsigned char index; unsigned char type; union { char* buffer; char* sp; struct ppdirs* subdir; } info; struct ppfileid id;
328*b30d1939SAndy Fiddaman 
329*b30d1939SAndy Fiddaman 
330*b30d1939SAndy Fiddaman };
331*b30d1939SAndy Fiddaman 
332*b30d1939SAndy Fiddaman struct ppkeyword
333*b30d1939SAndy Fiddaman {
334*b30d1939SAndy Fiddaman 	char*		name;
335*b30d1939SAndy Fiddaman 	int		value;
336*b30d1939SAndy Fiddaman };
337*b30d1939SAndy Fiddaman 
338*b30d1939SAndy Fiddaman struct ppmacro
339*b30d1939SAndy Fiddaman {
340*b30d1939SAndy Fiddaman 	int		arity;
341*b30d1939SAndy Fiddaman 	char*		value;
342*b30d1939SAndy Fiddaman 
343*b30d1939SAndy Fiddaman 
344*b30d1939SAndy Fiddaman 	struct pptuple* tuple; char* formals; int size;
345*b30d1939SAndy Fiddaman 
346*b30d1939SAndy Fiddaman 
347*b30d1939SAndy Fiddaman };
348*b30d1939SAndy Fiddaman 
349*b30d1939SAndy Fiddaman struct ppsymbol
350*b30d1939SAndy Fiddaman {
351*b30d1939SAndy Fiddaman 	int hash_header;
352*b30d1939SAndy Fiddaman 	unsigned long	flags;
353*b30d1939SAndy Fiddaman 	struct ppmacro*	macro;
354*b30d1939SAndy Fiddaman 	__V_*		value;
355*b30d1939SAndy Fiddaman 
356*b30d1939SAndy Fiddaman 
357*b30d1939SAndy Fiddaman 	struct pphide* hidden;
358*b30d1939SAndy Fiddaman 
359*b30d1939SAndy Fiddaman 
360*b30d1939SAndy Fiddaman };
361*b30d1939SAndy Fiddaman 
362*b30d1939SAndy Fiddaman #line 378
363*b30d1939SAndy Fiddaman struct ppglobals
364*b30d1939SAndy Fiddaman {
365*b30d1939SAndy Fiddaman 	const char*	version;
366*b30d1939SAndy Fiddaman 	char*		lineid;
367*b30d1939SAndy Fiddaman 	char*		outfile;
368*b30d1939SAndy Fiddaman 	char*		pass;
369*b30d1939SAndy Fiddaman 	char*		token;
370*b30d1939SAndy Fiddaman 	struct ppsymbol* symbol;
371*b30d1939SAndy Fiddaman 
372*b30d1939SAndy Fiddaman 
373*b30d1939SAndy Fiddaman 
374*b30d1939SAndy Fiddaman 	char*		outb;
375*b30d1939SAndy Fiddaman 	char*		outbuf;
376*b30d1939SAndy Fiddaman 	char*		outp;
377*b30d1939SAndy Fiddaman 	char*		oute;
378*b30d1939SAndy Fiddaman 	unsigned long	offset;
379*b30d1939SAndy Fiddaman 
380*b30d1939SAndy Fiddaman 
381*b30d1939SAndy Fiddaman 	struct ppdirs* lcldirs; struct ppdirs* stddirs; int flags; char* symtab;
382*b30d1939SAndy Fiddaman 
383*b30d1939SAndy Fiddaman 
384*b30d1939SAndy Fiddaman 
385*b30d1939SAndy Fiddaman 	struct ppcontext* context; long state; long mode; long option; long test; struct { char* sp; long flags; } filedeps; struct ppdirs* firstdir; struct ppdirs* lastdir; int hide; int column; int pending; char* firstfile; char* lastfile; char* ignore; char* probe; char* filtab; char* prdtab; char* date; char* time; char* maps; long ro_state; long ro_mode; long ro_option; long ro_op[2]; struct pathid cdir; struct pathid hostdir; char* ppdefault; struct ppindex* firstindex; struct ppindex* lastindex; struct oplist* firstop; struct oplist* lastop; struct oplist* firsttx; struct oplist* lasttx; unsigned char arg_file; unsigned char arg_mode; unsigned char arg_style; unsigned char c; unsigned char hosted; unsigned char ignoresrc; unsigned char initialized; unsigned char standalone; unsigned char spare_1;
386*b30d1939SAndy Fiddaman 
387*b30d1939SAndy Fiddaman 
388*b30d1939SAndy Fiddaman 
389*b30d1939SAndy Fiddaman 	char* checkpoint; int constack; struct ppinstk* in; char* addp; char* args; char* addbuf; char* catbuf; char* hdrbuf; char* hidebuf; char* path; char* tmpbuf; char* valbuf; char* optflags; int lastout; char* include; char* prefix; struct ppmember* member; int hidden; int hiding; int level; struct { int input; int output; } pool; struct { long ro_state; long ro_mode; long ro_option; long ro_op[2]; int on; char* symtab; } reset; int truncate; struct ppmacstk* macp; char* maxmac; char* mactop; char* toknxt; long* control; long* maxcon; struct oplist* chop; struct ppfile* insert; struct ppfile* original; struct ppdirs* found; int vendor; char* dirtab; char* strtab; PPBUILTIN builtin; PPCOMMENT comment; PPINCREF incref; PPLINESYNC linesync; PPLINESYNC olinesync; PPMACREF macref; PPOPTARG optarg; PPPRAGMA pragma; struct counter counter; char funbuf[256];
390*b30d1939SAndy Fiddaman 
391*b30d1939SAndy Fiddaman 
392*b30d1939SAndy Fiddaman };
393*b30d1939SAndy Fiddaman 
394*b30d1939SAndy Fiddaman 
395*b30d1939SAndy Fiddaman 
396*b30d1939SAndy Fiddaman 
397*b30d1939SAndy Fiddaman 
398*b30d1939SAndy Fiddaman 
399*b30d1939SAndy Fiddaman 
400*b30d1939SAndy Fiddaman extern __MANGLE__ struct ppglobals	pp;
401*b30d1939SAndy Fiddaman extern __MANGLE__ char		_pp_ctype[];
402*b30d1939SAndy Fiddaman 
403*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppargs __PROTO__((char**, int));
404*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppcpp __PROTO__((void));
405*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppcomment __PROTO__((char*, char*, char*, int));
406*b30d1939SAndy Fiddaman extern __MANGLE__ __V_*		ppcontext __PROTO__((__V_*, int));
407*b30d1939SAndy Fiddaman extern __MANGLE__ void		pperror __PROTO__((int, ...));
408*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppincref __PROTO__((char*, char*, int, int));
409*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppinput __PROTO__((char*, char*, int));
410*b30d1939SAndy Fiddaman extern __MANGLE__ int		pplex __PROTO__((void));
411*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppline __PROTO__((int, char*));
412*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppmacref __PROTO__((struct ppsymbol*, char*, int, int, unsigned long));
413*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppop __PROTO__((int, ...));
414*b30d1939SAndy Fiddaman extern __MANGLE__ void		pppragma __PROTO__((char*, char*, char*, char*, int));
415*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppprintf __PROTO__((char*, ...));
416*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppsync __PROTO__((void));
417*b30d1939SAndy Fiddaman 
418*b30d1939SAndy Fiddaman #line 368 "../../lib/libpp/pplib.h"
419*b30d1939SAndy Fiddaman 
420*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/ppdef.h"
421*b30d1939SAndy Fiddaman 
422*b30d1939SAndy Fiddaman #line 369 "../../lib/libpp/pplib.h"
423*b30d1939SAndy Fiddaman 
424*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/ppkey.h"
425*b30d1939SAndy Fiddaman 
426*b30d1939SAndy Fiddaman #line 16
427*b30d1939SAndy Fiddaman 
428*b30d1939SAndy Fiddaman #line 125
429*b30d1939SAndy Fiddaman extern __MANGLE__ struct ppkeyword	ppkey[];
430*b30d1939SAndy Fiddaman 
431*b30d1939SAndy Fiddaman #line 370 "../../lib/libpp/pplib.h"
432*b30d1939SAndy Fiddaman 
433*b30d1939SAndy Fiddaman #line 683
434*b30d1939SAndy Fiddaman struct ppcontext
435*b30d1939SAndy Fiddaman {
436*b30d1939SAndy Fiddaman 	struct ppdirs* lcldirs; struct ppdirs* stddirs; int flags; char* symtab;
437*b30d1939SAndy Fiddaman 	struct ppcontext* context; long state; long mode; long option; long test; struct { char* sp; long flags; } filedeps; struct ppdirs* firstdir; struct ppdirs* lastdir; int hide; int column; int pending; char* firstfile; char* lastfile; char* ignore; char* probe; char* filtab; char* prdtab; char* date; char* time; char* maps; long ro_state; long ro_mode; long ro_option; long ro_op[2]; struct pathid cdir; struct pathid hostdir; char* ppdefault; struct ppindex* firstindex; struct ppindex* lastindex; struct oplist* firstop; struct oplist* lastop; struct oplist* firsttx; struct oplist* lasttx; unsigned char arg_file; unsigned char arg_mode; unsigned char arg_style; unsigned char c; unsigned char hosted; unsigned char ignoresrc; unsigned char initialized; unsigned char standalone; unsigned char spare_1;
438*b30d1939SAndy Fiddaman };
439*b30d1939SAndy Fiddaman 
440*b30d1939SAndy Fiddaman struct ppfile
441*b30d1939SAndy Fiddaman {
442*b30d1939SAndy Fiddaman 	int hash_header;
443*b30d1939SAndy Fiddaman 	struct ppsymbol* guard;
444*b30d1939SAndy Fiddaman 	struct ppfile*	bound[4];
445*b30d1939SAndy Fiddaman 	int		flags;
446*b30d1939SAndy Fiddaman };
447*b30d1939SAndy Fiddaman 
448*b30d1939SAndy Fiddaman 
449*b30d1939SAndy Fiddaman 
450*b30d1939SAndy Fiddaman struct ppindex
451*b30d1939SAndy Fiddaman {
452*b30d1939SAndy Fiddaman 	struct ppindex*	next;
453*b30d1939SAndy Fiddaman 	struct ppfile*	file;
454*b30d1939SAndy Fiddaman 	unsigned long	begin;
455*b30d1939SAndy Fiddaman 	unsigned long	end;
456*b30d1939SAndy Fiddaman };
457*b30d1939SAndy Fiddaman 
458*b30d1939SAndy Fiddaman 
459*b30d1939SAndy Fiddaman 
460*b30d1939SAndy Fiddaman struct ppsymkey
461*b30d1939SAndy Fiddaman {
462*b30d1939SAndy Fiddaman 	struct ppsymbol	sym;
463*b30d1939SAndy Fiddaman 	int		lex;
464*b30d1939SAndy Fiddaman };
465*b30d1939SAndy Fiddaman 
466*b30d1939SAndy Fiddaman #line 729
467*b30d1939SAndy Fiddaman # ifdef __STDC__
468*b30d1939SAndy Fiddaman 
469*b30d1939SAndy Fiddaman # include <stdlib.h>
470*b30d1939SAndy Fiddaman # include <unistd.h>
471*b30d1939SAndy Fiddaman # include <time.h>
472*b30d1939SAndy Fiddaman # include <string.h>
473*b30d1939SAndy Fiddaman 
474*b30d1939SAndy Fiddaman # else
475*b30d1939SAndy Fiddaman 
476*b30d1939SAndy Fiddaman # define size_t		int
477*b30d1939SAndy Fiddaman 
478*b30d1939SAndy Fiddaman extern __MANGLE__ __V_*		realloc __PROTO__((__V_*, size_t));
479*b30d1939SAndy Fiddaman extern __MANGLE__ __V_*		calloc __PROTO__((size_t, size_t));
480*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ctime __PROTO__((time_t*));
481*b30d1939SAndy Fiddaman extern __MANGLE__ void		free __PROTO__((__V_*));
482*b30d1939SAndy Fiddaman 
483*b30d1939SAndy Fiddaman # ifndef O_RDONLY
484*b30d1939SAndy Fiddaman 
485*b30d1939SAndy Fiddaman extern __MANGLE__ int		access __PROTO__((const char*, int));
486*b30d1939SAndy Fiddaman extern __MANGLE__ int		close __PROTO__((int));
487*b30d1939SAndy Fiddaman extern __MANGLE__ int		creat __PROTO__((const char*, int));
488*b30d1939SAndy Fiddaman extern __MANGLE__ void		exit __PROTO__((int));
489*b30d1939SAndy Fiddaman extern __MANGLE__ int		link __PROTO__((const char*, const char*));
490*b30d1939SAndy Fiddaman extern __MANGLE__ int		open __PROTO__((const char*, int, ...));
491*b30d1939SAndy Fiddaman extern __MANGLE__ int		read __PROTO__((int, __V_*, int));
492*b30d1939SAndy Fiddaman extern __MANGLE__ time_t		time __PROTO__((time_t*));
493*b30d1939SAndy Fiddaman extern __MANGLE__ int		unlink __PROTO__((const char*));
494*b30d1939SAndy Fiddaman extern __MANGLE__ int		write __PROTO__((int, const __V_*, int));
495*b30d1939SAndy Fiddaman 
496*b30d1939SAndy Fiddaman # endif
497*b30d1939SAndy Fiddaman 
498*b30d1939SAndy Fiddaman # endif
499*b30d1939SAndy Fiddaman 
500*b30d1939SAndy Fiddaman #line 802
501*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppassert __PROTO__((int, char*, char*));
502*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppbuiltin __PROTO__((void));
503*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppcall __PROTO__((struct ppsymbol*, int));
504*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppcontrol __PROTO__((void));
505*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppdump __PROTO__((void));
506*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppexpand __PROTO__((char*));
507*b30d1939SAndy Fiddaman extern __MANGLE__ long		ppexpr __PROTO__((int*));
508*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppfsm __PROTO__((int, char*));
509*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppinstr __PROTO__((struct ppinstk*));
510*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppkeyname __PROTO__((int, int));
511*b30d1939SAndy Fiddaman extern __MANGLE__ char*		pplexstr __PROTO__((int));
512*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppload __PROTO__((char*));
513*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppmapinclude __PROTO__((char*, char*));
514*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppmodestr __PROTO__((long));
515*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppmultiple __PROTO__((struct ppfile*, struct ppsymbol*));
516*b30d1939SAndy Fiddaman extern __MANGLE__ void		ppnest __PROTO__((void));
517*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppoption __PROTO__((char*));
518*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppoptionstr __PROTO__((long));
519*b30d1939SAndy Fiddaman extern __MANGLE__ void		pppclose __PROTO__((char*));
520*b30d1939SAndy Fiddaman extern __MANGLE__ int		pppdrop __PROTO__((char*));
521*b30d1939SAndy Fiddaman extern __MANGLE__ char*		pppopen __PROTO__((char*, int, char*, char*, char*, char*, int));
522*b30d1939SAndy Fiddaman extern __MANGLE__ int		pppread __PROTO__((char*));
523*b30d1939SAndy Fiddaman extern __MANGLE__ int		pppredargs __PROTO__((void));
524*b30d1939SAndy Fiddaman extern __MANGLE__ void		pppush __PROTO__((int, char*, char*, int));
525*b30d1939SAndy Fiddaman extern __MANGLE__ struct ppsymbol*	pprefmac __PROTO__((char*, int));
526*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppsearch __PROTO__((char*, int, int));
527*b30d1939SAndy Fiddaman extern __MANGLE__ int		ppset __PROTO__((long*, long, int));
528*b30d1939SAndy Fiddaman extern __MANGLE__ char*		ppstatestr __PROTO__((long));
529*b30d1939SAndy Fiddaman extern __MANGLE__ char*		pptokstr __PROTO__((char*, int));
530*b30d1939SAndy Fiddaman extern __MANGLE__ void		pptrace __PROTO__((int));
531*b30d1939SAndy Fiddaman 
532*b30d1939SAndy Fiddaman #line 11 "../../lib/libpp/ppfsm.c"
533*b30d1939SAndy Fiddaman 
534*b30d1939SAndy Fiddaman #line 1 "../../lib/libpp/ppfsm.h"
535*b30d1939SAndy Fiddaman 
536*b30d1939SAndy Fiddaman #line 185
537*b30d1939SAndy Fiddaman 
538*b30d1939SAndy Fiddaman #line 249
539*b30d1939SAndy Fiddaman extern __MANGLE__ short		_pp_fsmtab[(0+28)+1][255+1];
540*b30d1939SAndy Fiddaman 
541*b30d1939SAndy Fiddaman 
542*b30d1939SAndy Fiddaman 
543*b30d1939SAndy Fiddaman 
544*b30d1939SAndy Fiddaman 
545*b30d1939SAndy Fiddaman extern __MANGLE__ char		_pp_trigraph[255+1];
546*b30d1939SAndy Fiddaman 
547*b30d1939SAndy Fiddaman extern __MANGLE__ void		_pp_refill __PROTO__((int));
548*b30d1939SAndy Fiddaman 
549*b30d1939SAndy Fiddaman #line 12 "../../lib/libpp/ppfsm.c"
550*b30d1939SAndy Fiddaman 
551*b30d1939SAndy Fiddaman 
552*b30d1939SAndy Fiddaman #line 67
553*b30d1939SAndy Fiddaman struct fsminit
554*b30d1939SAndy Fiddaman {
555*b30d1939SAndy Fiddaman 	int		state;
556*b30d1939SAndy Fiddaman 	unsigned char	ch[4];
557*b30d1939SAndy Fiddaman 	int		nextstate;
558*b30d1939SAndy Fiddaman };
559*b30d1939SAndy Fiddaman 
560*b30d1939SAndy Fiddaman static struct fsminit	fsminit[] =
561*b30d1939SAndy Fiddaman {
562*b30d1939SAndy Fiddaman 
563*b30d1939SAndy Fiddaman 	{	0,	{ 023 },		((0+28)+11),			},
564*b30d1939SAndy Fiddaman 	{	0,	{ 002 },		(0),			},
565*b30d1939SAndy Fiddaman 	{	0,	{ 001 },		(0+23),			},
566*b30d1939SAndy Fiddaman 	{	0,	{ '.' },		(0+25),			},
567*b30d1939SAndy Fiddaman 	{	0,	{ 021 },		(0+19),			},
568*b30d1939SAndy Fiddaman 	{	0,	{ 'L' },		(0+20),			},
569*b30d1939SAndy Fiddaman 	{	0,	{ 'd', 'e', 'f', 'i' },	(0+1),			},
570*b30d1939SAndy Fiddaman 	{	0,	{ 'r', 's', 't', 'v' },	(0+1),			},
571*b30d1939SAndy Fiddaman 	{	0,	{ 'w', 'N' },		(0+1),			},
572*b30d1939SAndy Fiddaman 	{	0,	{ '"', '\'' },		((0+28)+3),		},
573*b30d1939SAndy Fiddaman 	{	0,	{ '/' },		(0+12),			},
574*b30d1939SAndy Fiddaman 	{	0,	{ '\n' },		((0+28)+7),			},
575*b30d1939SAndy Fiddaman 	{	0,	{ ' ','\t','\f','\013' },	(0+27),			},
576*b30d1939SAndy Fiddaman 
577*b30d1939SAndy Fiddaman 
578*b30d1939SAndy Fiddaman 	{	(0+1),	{ 023 },		((0+28)+6),		},
579*b30d1939SAndy Fiddaman 	{	(0+1),	{ 021, 001 },	(0+19),			},
580*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'a' },		(0+2),			},
581*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'e' },		(0+3),			},
582*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'f' },		(0+4),			},
583*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'h' },		(0+5),			},
584*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'l' },		(0+6),			},
585*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'n' },		(0+7),			},
586*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'o' },		(0+8),			},
587*b30d1939SAndy Fiddaman 	{	(0+1),	{ 't' },		(0+9),			},
588*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'x' },		(0+10),			},
589*b30d1939SAndy Fiddaman 	{	(0+1),	{ 'y' },		(0+11),			},
590*b30d1939SAndy Fiddaman 
591*b30d1939SAndy Fiddaman 
592*b30d1939SAndy Fiddaman 	{	(0+2),	{ 023 },		(((0+28)+12)),		},
593*b30d1939SAndy Fiddaman 	{	(0+2),	{ 021, 001 },	(0+19),			},
594*b30d1939SAndy Fiddaman 	{	(0+2),	{ '_','s','t','a' },	(0+2),			},
595*b30d1939SAndy Fiddaman 	{	(0+2),	{ 'r' },		(0+2),			},
596*b30d1939SAndy Fiddaman 
597*b30d1939SAndy Fiddaman 
598*b30d1939SAndy Fiddaman 	{	(0+3),	{ 023 },		(((0+28)+12)),		},
599*b30d1939SAndy Fiddaman 	{	(0+3),	{ 021, 001 },	(0+19),			},
600*b30d1939SAndy Fiddaman 	{	(0+3),	{ 't','u','r','n' },	(0+3),			},
601*b30d1939SAndy Fiddaman 
602*b30d1939SAndy Fiddaman 
603*b30d1939SAndy Fiddaman 	{	(0+4),	{ 023 },		(((0+28)+12)),		},
604*b30d1939SAndy Fiddaman 	{	(0+4),	{ 021, 001 },	(0+19),			},
605*b30d1939SAndy Fiddaman 
606*b30d1939SAndy Fiddaman 
607*b30d1939SAndy Fiddaman 	{	(0+5),	{ 023 },		(((0+28)+12)),		},
608*b30d1939SAndy Fiddaman 	{	(0+5),	{ 021, 001 },	(0+19),			},
609*b30d1939SAndy Fiddaman 	{	(0+5),	{ 'i','l','e' },	(0+5),			},
610*b30d1939SAndy Fiddaman 
611*b30d1939SAndy Fiddaman 
612*b30d1939SAndy Fiddaman 	{	(0+6),	{ 023 },		(((0+28)+12)),		},
613*b30d1939SAndy Fiddaman 	{	(0+6),	{ 021, 001 },	(0+19),			},
614*b30d1939SAndy Fiddaman 	{	(0+6),	{ 's','e' },		(0+6),			},
615*b30d1939SAndy Fiddaman 
616*b30d1939SAndy Fiddaman 
617*b30d1939SAndy Fiddaman 	{	(0+7),	{ 023 },		(((0+28)+12)),		},
618*b30d1939SAndy Fiddaman 	{	(0+7),	{ 021, 001 },	(0+19),			},
619*b30d1939SAndy Fiddaman 	{	(0+7),	{ 'l','i','n','e' },	(0+7),			},
620*b30d1939SAndy Fiddaman 
621*b30d1939SAndy Fiddaman 
622*b30d1939SAndy Fiddaman 	{	(0+8),	{ 023 },		(((0+28)+12)),		},
623*b30d1939SAndy Fiddaman 	{	(0+8),	{ 021, 001 },	(0+19),			},
624*b30d1939SAndy Fiddaman 	{	(0+8),	{ 'r','i','d','N' },	(0+8),			},
625*b30d1939SAndy Fiddaman 
626*b30d1939SAndy Fiddaman 
627*b30d1939SAndy Fiddaman 	{	(0+9),	{ 023 },		(((0+28)+12)),		},
628*b30d1939SAndy Fiddaman 	{	(0+9),	{ 021, 001 },	(0+19),			},
629*b30d1939SAndy Fiddaman 	{	(0+9),	{ 'a','t','i','c' },	(0+9),			},
630*b30d1939SAndy Fiddaman 
631*b30d1939SAndy Fiddaman 
632*b30d1939SAndy Fiddaman 	{	(0+10),	{ 023 },		(((0+28)+12)),		},
633*b30d1939SAndy Fiddaman 	{	(0+10),	{ 021, 001 },	(0+19),			},
634*b30d1939SAndy Fiddaman 	{	(0+10),	{ 't','e','r','n' },	(0+10),			},
635*b30d1939SAndy Fiddaman 
636*b30d1939SAndy Fiddaman 
637*b30d1939SAndy Fiddaman 	{	(0+11),	{ 023 },		(((0+28)+12)),		},
638*b30d1939SAndy Fiddaman 	{	(0+11),	{ 021, 001 },	(0+19),			},
639*b30d1939SAndy Fiddaman 	{	(0+11),	{ 'p','e','d','f' },	(0+11),			},
640*b30d1939SAndy Fiddaman 
641*b30d1939SAndy Fiddaman 
642*b30d1939SAndy Fiddaman 	{	(0+12),	{ 023 },		((0+28)+0),			},
643*b30d1939SAndy Fiddaman 	{	(0+12),	{ '*' },		(0+13),			},
644*b30d1939SAndy Fiddaman 
645*b30d1939SAndy Fiddaman 	{	(0+12),	{ '/' },		(0+16),			},
646*b30d1939SAndy Fiddaman 
647*b30d1939SAndy Fiddaman 
648*b30d1939SAndy Fiddaman 
649*b30d1939SAndy Fiddaman 	{	(0+13),	{ 023 },		(0+13),			},
650*b30d1939SAndy Fiddaman 	{	(0+13),	{ '\n', 002 },	((0+28)+1),		},
651*b30d1939SAndy Fiddaman 	{	(0+13),	{ '/' },		(0+15),			},
652*b30d1939SAndy Fiddaman 	{	(0+13),	{ '*' },		(0+14),			},
653*b30d1939SAndy Fiddaman 	{	(0+13),	{ '#', ';', ')' },	((( (0+13))<<(7+1))|(((0+28)+8))),		},
654*b30d1939SAndy Fiddaman 
655*b30d1939SAndy Fiddaman 
656*b30d1939SAndy Fiddaman 	{	(0+14),	{ 023 },		(0+13),			},
657*b30d1939SAndy Fiddaman 	{	(0+14),	{ '\n', 002 },	((0+28)+1),		},
658*b30d1939SAndy Fiddaman 	{	(0+14),	{ '#', ';', ')' },	((( (0+13))<<(7+1))|(((0+28)+8))),		},
659*b30d1939SAndy Fiddaman 	{	(0+14),	{ '*' },		(0+14),			},
660*b30d1939SAndy Fiddaman 	{	(0+14),	{ '/' },		((0+28)+1),		},
661*b30d1939SAndy Fiddaman 
662*b30d1939SAndy Fiddaman 
663*b30d1939SAndy Fiddaman 	{	(0+15),	{ 023 },		(0+13),			},
664*b30d1939SAndy Fiddaman 	{	(0+15),	{ '*', '\n', 002 },	((0+28)+1),		},
665*b30d1939SAndy Fiddaman 	{	(0+15),	{ '/' },		(0+15),			},
666*b30d1939SAndy Fiddaman 
667*b30d1939SAndy Fiddaman 
668*b30d1939SAndy Fiddaman 	{	(0+16),	{ 023 },		(0+16),			},
669*b30d1939SAndy Fiddaman 	{	(0+16),	{ '\n', 002 },	((0+28)+1),		},
670*b30d1939SAndy Fiddaman 	{	(0+16),	{ '/' },		(0+17),			},
671*b30d1939SAndy Fiddaman 	{	(0+16),	{ '*' },		(0+18),			},
672*b30d1939SAndy Fiddaman 
673*b30d1939SAndy Fiddaman 
674*b30d1939SAndy Fiddaman 	{	(0+17),	{ 023 },		(0+16),			},
675*b30d1939SAndy Fiddaman 	{	(0+17),	{ '*', '\n', 002 },	((0+28)+1),		},
676*b30d1939SAndy Fiddaman 	{	(0+17),	{ '/' },		(0+17),			},
677*b30d1939SAndy Fiddaman 
678*b30d1939SAndy Fiddaman 
679*b30d1939SAndy Fiddaman 	{	(0+18),	{ 023 },		(0+16),			},
680*b30d1939SAndy Fiddaman 	{	(0+18),	{ '\n', 002 },	((0+28)+1),		},
681*b30d1939SAndy Fiddaman 	{	(0+18),	{ '*' },		(0+18),			},
682*b30d1939SAndy Fiddaman 	{	(0+18),	{ '/' },		((0+28)+1),		},
683*b30d1939SAndy Fiddaman 
684*b30d1939SAndy Fiddaman 
685*b30d1939SAndy Fiddaman 	{	(0+19),	{ 023 },		((0+28)+6),		},
686*b30d1939SAndy Fiddaman 	{	(0+19),	{ 021, 001 },	(0+19),			},
687*b30d1939SAndy Fiddaman 
688*b30d1939SAndy Fiddaman 
689*b30d1939SAndy Fiddaman 	{	(0+25),	{ 023 },		((0+28)+0),			},
690*b30d1939SAndy Fiddaman 	{	(0+25),	{ '.' },		(0+26),			},
691*b30d1939SAndy Fiddaman 	{	(0+25),	{ 001 },		(0+23),			},
692*b30d1939SAndy Fiddaman 
693*b30d1939SAndy Fiddaman 
694*b30d1939SAndy Fiddaman 	{	(0+26),	{ 023 },		(((( (0401+1))-0401)<<(7+1))|( ((0+28)+14))),	},
695*b30d1939SAndy Fiddaman 	{	(0+26),	{ '.' },		(((( (0401+29))-0401)<<(7+1))|( ((0+28)+13))),	},
696*b30d1939SAndy Fiddaman 
697*b30d1939SAndy Fiddaman 
698*b30d1939SAndy Fiddaman 	{	(0+20),	{ 023 },		((0+28)+6),		},
699*b30d1939SAndy Fiddaman 	{	(0+20),	{ 021, 001 },	(0+19),			},
700*b30d1939SAndy Fiddaman 	{	(0+20),	{ '"', '\'' },		((( (0+21))<<(7+1))|(((0+28)+8))),		},
701*b30d1939SAndy Fiddaman 
702*b30d1939SAndy Fiddaman 
703*b30d1939SAndy Fiddaman 	{	(0+21),	{ 023 },		(0+21),			},
704*b30d1939SAndy Fiddaman 	{	(0+21),	{ '"', '\'' },		((0+28)+4),		},
705*b30d1939SAndy Fiddaman 	{	(0+21),	{ '\n', 002 },	((0+28)+4),		},
706*b30d1939SAndy Fiddaman 	{	(0+21),	{ '\\' },		(0+22),			},
707*b30d1939SAndy Fiddaman 
708*b30d1939SAndy Fiddaman 
709*b30d1939SAndy Fiddaman 	{	(0+22),	{ 023 },		((0+28)+5),		},
710*b30d1939SAndy Fiddaman 	{	(0+22),	{ '\n', 002 },	((0+28)+4),		},
711*b30d1939SAndy Fiddaman 
712*b30d1939SAndy Fiddaman 
713*b30d1939SAndy Fiddaman 	{	(0+23),	{ 023 },		(((( (0401+1))-0401)<<(7+1))|( ((0+28)+14))),	},
714*b30d1939SAndy Fiddaman 	{	(0+23),	{ 021, 001, '.' },	(0+23),			},
715*b30d1939SAndy Fiddaman 	{	(0+23),	{ 'e', 'E' },		(0+24),			},
716*b30d1939SAndy Fiddaman 
717*b30d1939SAndy Fiddaman 
718*b30d1939SAndy Fiddaman 	{	(0+24),	{ 023 },		(((( (0401+1))-0401)<<(7+1))|( ((0+28)+14))),	},
719*b30d1939SAndy Fiddaman 	{	(0+24),	{ 021, 001, '.' },	(0+23),			},
720*b30d1939SAndy Fiddaman 	{	(0+24),	{ '+', '-' },		(0+23),			},
721*b30d1939SAndy Fiddaman 
722*b30d1939SAndy Fiddaman 
723*b30d1939SAndy Fiddaman 	{	(0+27),	{ 023 },		((0+28)+15),			},
724*b30d1939SAndy Fiddaman 	{	(0+27),	{ ' ', '\t' },		(0+27),			},
725*b30d1939SAndy Fiddaman 	{	(0+27),	{ '\f', '\013' },		((0+28)+10),			},
726*b30d1939SAndy Fiddaman 
727*b30d1939SAndy Fiddaman 
728*b30d1939SAndy Fiddaman 
729*b30d1939SAndy Fiddaman 
730*b30d1939SAndy Fiddaman 
731*b30d1939SAndy Fiddaman 
732*b30d1939SAndy Fiddaman 
733*b30d1939SAndy Fiddaman 
734*b30d1939SAndy Fiddaman 
735*b30d1939SAndy Fiddaman 
736*b30d1939SAndy Fiddaman 
737*b30d1939SAndy Fiddaman 
738*b30d1939SAndy Fiddaman 
739*b30d1939SAndy Fiddaman 
740*b30d1939SAndy Fiddaman 
741*b30d1939SAndy Fiddaman 
742*b30d1939SAndy Fiddaman 
743*b30d1939SAndy Fiddaman 
744*b30d1939SAndy Fiddaman 
745*b30d1939SAndy Fiddaman 
746*b30d1939SAndy Fiddaman 
747*b30d1939SAndy Fiddaman 
748*b30d1939SAndy Fiddaman 
749*b30d1939SAndy Fiddaman 
750*b30d1939SAndy Fiddaman 
751*b30d1939SAndy Fiddaman 
752*b30d1939SAndy Fiddaman 
753*b30d1939SAndy Fiddaman 
754*b30d1939SAndy Fiddaman 
755*b30d1939SAndy Fiddaman 
756*b30d1939SAndy Fiddaman 
757*b30d1939SAndy Fiddaman 
758*b30d1939SAndy Fiddaman 
759*b30d1939SAndy Fiddaman 
760*b30d1939SAndy Fiddaman 
761*b30d1939SAndy Fiddaman 
762*b30d1939SAndy Fiddaman 
763*b30d1939SAndy Fiddaman 
764*b30d1939SAndy Fiddaman 
765*b30d1939SAndy Fiddaman 
766*b30d1939SAndy Fiddaman 
767*b30d1939SAndy Fiddaman 
768*b30d1939SAndy Fiddaman 
769*b30d1939SAndy Fiddaman 
770*b30d1939SAndy Fiddaman 
771*b30d1939SAndy Fiddaman 
772*b30d1939SAndy Fiddaman 
773*b30d1939SAndy Fiddaman 
774*b30d1939SAndy Fiddaman 
775*b30d1939SAndy Fiddaman 
776*b30d1939SAndy Fiddaman 
777*b30d1939SAndy Fiddaman 
778*b30d1939SAndy Fiddaman 
779*b30d1939SAndy Fiddaman 
780*b30d1939SAndy Fiddaman 
781*b30d1939SAndy Fiddaman 
782*b30d1939SAndy Fiddaman 
783*b30d1939SAndy Fiddaman 
784*b30d1939SAndy Fiddaman 
785*b30d1939SAndy Fiddaman 
786*b30d1939SAndy Fiddaman 
787*b30d1939SAndy Fiddaman 
788*b30d1939SAndy Fiddaman 
789*b30d1939SAndy Fiddaman 
790*b30d1939SAndy Fiddaman 
791*b30d1939SAndy Fiddaman 
792*b30d1939SAndy Fiddaman 
793*b30d1939SAndy Fiddaman 
794*b30d1939SAndy Fiddaman 
795*b30d1939SAndy Fiddaman 
796*b30d1939SAndy Fiddaman 
797*b30d1939SAndy Fiddaman 
798*b30d1939SAndy Fiddaman 
799*b30d1939SAndy Fiddaman 
800*b30d1939SAndy Fiddaman 
801*b30d1939SAndy Fiddaman 
802*b30d1939SAndy Fiddaman 
803*b30d1939SAndy Fiddaman 
804*b30d1939SAndy Fiddaman 
805*b30d1939SAndy Fiddaman 
806*b30d1939SAndy Fiddaman 
807*b30d1939SAndy Fiddaman 
808*b30d1939SAndy Fiddaman 
809*b30d1939SAndy Fiddaman 
810*b30d1939SAndy Fiddaman 
811*b30d1939SAndy Fiddaman 
812*b30d1939SAndy Fiddaman 
813*b30d1939SAndy Fiddaman 
814*b30d1939SAndy Fiddaman 
815*b30d1939SAndy Fiddaman 
816*b30d1939SAndy Fiddaman 
817*b30d1939SAndy Fiddaman 
818*b30d1939SAndy Fiddaman 
819*b30d1939SAndy Fiddaman 
820*b30d1939SAndy Fiddaman 
821*b30d1939SAndy Fiddaman 
822*b30d1939SAndy Fiddaman 
823*b30d1939SAndy Fiddaman 
824*b30d1939SAndy Fiddaman 
825*b30d1939SAndy Fiddaman 
826*b30d1939SAndy Fiddaman 
827*b30d1939SAndy Fiddaman 
828*b30d1939SAndy Fiddaman 
829*b30d1939SAndy Fiddaman 
830*b30d1939SAndy Fiddaman 
831*b30d1939SAndy Fiddaman 
832*b30d1939SAndy Fiddaman 
833*b30d1939SAndy Fiddaman 
834*b30d1939SAndy Fiddaman 
835*b30d1939SAndy Fiddaman 
836*b30d1939SAndy Fiddaman 
837*b30d1939SAndy Fiddaman 
838*b30d1939SAndy Fiddaman 
839*b30d1939SAndy Fiddaman 
840*b30d1939SAndy Fiddaman 
841*b30d1939SAndy Fiddaman 
842*b30d1939SAndy Fiddaman 
843*b30d1939SAndy Fiddaman 
844*b30d1939SAndy Fiddaman 
845*b30d1939SAndy Fiddaman 
846*b30d1939SAndy Fiddaman 
847*b30d1939SAndy Fiddaman 
848*b30d1939SAndy Fiddaman 
849*b30d1939SAndy Fiddaman 
850*b30d1939SAndy Fiddaman 
851*b30d1939SAndy Fiddaman 
852*b30d1939SAndy Fiddaman 
853*b30d1939SAndy Fiddaman 
854*b30d1939SAndy Fiddaman 
855*b30d1939SAndy Fiddaman 
856*b30d1939SAndy Fiddaman 
857*b30d1939SAndy Fiddaman 
858*b30d1939SAndy Fiddaman 
859*b30d1939SAndy Fiddaman 
860*b30d1939SAndy Fiddaman 
861*b30d1939SAndy Fiddaman 
862*b30d1939SAndy Fiddaman 
863*b30d1939SAndy Fiddaman 
864*b30d1939SAndy Fiddaman 
865*b30d1939SAndy Fiddaman 
866*b30d1939SAndy Fiddaman 
867*b30d1939SAndy Fiddaman 
868*b30d1939SAndy Fiddaman 
869*b30d1939SAndy Fiddaman 
870*b30d1939SAndy Fiddaman 
871*b30d1939SAndy Fiddaman 
872*b30d1939SAndy Fiddaman 
873*b30d1939SAndy Fiddaman 
874*b30d1939SAndy Fiddaman 
875*b30d1939SAndy Fiddaman 
876*b30d1939SAndy Fiddaman 
877*b30d1939SAndy Fiddaman 
878*b30d1939SAndy Fiddaman 
879*b30d1939SAndy Fiddaman 
880*b30d1939SAndy Fiddaman 
881*b30d1939SAndy Fiddaman 
882*b30d1939SAndy Fiddaman 
883*b30d1939SAndy Fiddaman 
884*b30d1939SAndy Fiddaman 
885*b30d1939SAndy Fiddaman 
886*b30d1939SAndy Fiddaman 
887*b30d1939SAndy Fiddaman 
888*b30d1939SAndy Fiddaman 
889*b30d1939SAndy Fiddaman 
890*b30d1939SAndy Fiddaman 
891*b30d1939SAndy Fiddaman 
892*b30d1939SAndy Fiddaman 
893*b30d1939SAndy Fiddaman 
894*b30d1939SAndy Fiddaman 
895*b30d1939SAndy Fiddaman 
896*b30d1939SAndy Fiddaman 
897*b30d1939SAndy Fiddaman 
898*b30d1939SAndy Fiddaman 
899*b30d1939SAndy Fiddaman 
900*b30d1939SAndy Fiddaman 
901*b30d1939SAndy Fiddaman 
902*b30d1939SAndy Fiddaman 
903*b30d1939SAndy Fiddaman 
904*b30d1939SAndy Fiddaman 
905*b30d1939SAndy Fiddaman 
906*b30d1939SAndy Fiddaman 
907*b30d1939SAndy Fiddaman 
908*b30d1939SAndy Fiddaman 
909*b30d1939SAndy Fiddaman 
910*b30d1939SAndy Fiddaman 
911*b30d1939SAndy Fiddaman 
912*b30d1939SAndy Fiddaman 
913*b30d1939SAndy Fiddaman 
914*b30d1939SAndy Fiddaman 
915*b30d1939SAndy Fiddaman 
916*b30d1939SAndy Fiddaman #line 528
917*b30d1939SAndy Fiddaman 	{	(-1),	{ 0 },			0,			}
918*b30d1939SAndy Fiddaman };
919*b30d1939SAndy Fiddaman 
920*b30d1939SAndy Fiddaman short		_pp_fsmtab[(0+28)+1][255+1];
921*b30d1939SAndy Fiddaman 
922*b30d1939SAndy Fiddaman char		_pp_trigraph[255+1];
923*b30d1939SAndy Fiddaman 
924*b30d1939SAndy Fiddaman 
925*b30d1939SAndy Fiddaman static char	spl[] = { '\\', '\r', 0 };
926*b30d1939SAndy Fiddaman static char	aln[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_$@";
927*b30d1939SAndy Fiddaman 
928*b30d1939SAndy Fiddaman 
929*b30d1939SAndy Fiddaman 
930*b30d1939SAndy Fiddaman 
931*b30d1939SAndy Fiddaman static char*	let = &aln[10];
932*b30d1939SAndy Fiddaman static char	hex[] = "fedcbaFEDCBA9876543210";
933*b30d1939SAndy Fiddaman static char*	dec = &hex[12];
934*b30d1939SAndy Fiddaman static char*	oct = &hex[14];
935*b30d1939SAndy Fiddaman 
936*b30d1939SAndy Fiddaman 
937*b30d1939SAndy Fiddaman 
938*b30d1939SAndy Fiddaman 
939*b30d1939SAndy Fiddaman 
940*b30d1939SAndy Fiddaman 
941*b30d1939SAndy Fiddaman void
__OTORP__(int op;register char * s;)942*b30d1939SAndy Fiddaman ppfsm __PARAM__((int op, register char* s), (op, s)) __OTORP__(int op; register char* s;){
943*b30d1939SAndy Fiddaman 	register int			c;
944*b30d1939SAndy Fiddaman 	register int			n;
945*b30d1939SAndy Fiddaman 	register int			i;
946*b30d1939SAndy Fiddaman 	register short*			rp;
947*b30d1939SAndy Fiddaman 	register struct fsminit*	fp;
948*b30d1939SAndy Fiddaman 
949*b30d1939SAndy Fiddaman 
950*b30d1939SAndy Fiddaman 
951*b30d1939SAndy Fiddaman 
952*b30d1939SAndy Fiddaman 
953*b30d1939SAndy Fiddaman 	switch (op)
954*b30d1939SAndy Fiddaman 	{
955*b30d1939SAndy Fiddaman 
956*b30d1939SAndy Fiddaman 
957*b30d1939SAndy Fiddaman 
958*b30d1939SAndy Fiddaman 
959*b30d1939SAndy Fiddaman 
960*b30d1939SAndy Fiddaman 
961*b30d1939SAndy Fiddaman 
962*b30d1939SAndy Fiddaman 
963*b30d1939SAndy Fiddaman 
964*b30d1939SAndy Fiddaman 
965*b30d1939SAndy Fiddaman 
966*b30d1939SAndy Fiddaman 
967*b30d1939SAndy Fiddaman 
968*b30d1939SAndy Fiddaman 
969*b30d1939SAndy Fiddaman 
970*b30d1939SAndy Fiddaman 
971*b30d1939SAndy Fiddaman 
972*b30d1939SAndy Fiddaman 
973*b30d1939SAndy Fiddaman 
974*b30d1939SAndy Fiddaman 
975*b30d1939SAndy Fiddaman 
976*b30d1939SAndy Fiddaman 
977*b30d1939SAndy Fiddaman 
978*b30d1939SAndy Fiddaman 
979*b30d1939SAndy Fiddaman 
980*b30d1939SAndy Fiddaman 
981*b30d1939SAndy Fiddaman 
982*b30d1939SAndy Fiddaman 
983*b30d1939SAndy Fiddaman 
984*b30d1939SAndy Fiddaman 	case 4:
985*b30d1939SAndy Fiddaman 		for (fp = fsminit;; fp++)
986*b30d1939SAndy Fiddaman 		{
987*b30d1939SAndy Fiddaman 			if ((n = fp->nextstate) >= (0+28)) n = ~n;
988*b30d1939SAndy Fiddaman 			if (fp->state == (-1))
989*b30d1939SAndy Fiddaman 			{
990*b30d1939SAndy Fiddaman 
991*b30d1939SAndy Fiddaman 
992*b30d1939SAndy Fiddaman 
993*b30d1939SAndy Fiddaman 
994*b30d1939SAndy Fiddaman 
995*b30d1939SAndy Fiddaman 
996*b30d1939SAndy Fiddaman 
997*b30d1939SAndy Fiddaman 
998*b30d1939SAndy Fiddaman 
999*b30d1939SAndy Fiddaman 
1000*b30d1939SAndy Fiddaman 
1001*b30d1939SAndy Fiddaman 
1002*b30d1939SAndy Fiddaman 
1003*b30d1939SAndy Fiddaman 				break;
1004*b30d1939SAndy Fiddaman 			}
1005*b30d1939SAndy Fiddaman 			rp = _pp_fsmtab[fp->state];
1006*b30d1939SAndy Fiddaman 			for (i = 0; i < sizeof(fp->ch) && (c = fp->ch[i]); i++)
1007*b30d1939SAndy Fiddaman 			{
1008*b30d1939SAndy Fiddaman 				switch (c)
1009*b30d1939SAndy Fiddaman 				{
1010*b30d1939SAndy Fiddaman 				case 023:
1011*b30d1939SAndy Fiddaman 					for (c = 0; c <= 255; c++)
1012*b30d1939SAndy Fiddaman 						rp[c] = n;
1013*b30d1939SAndy Fiddaman 
1014*b30d1939SAndy Fiddaman 
1015*b30d1939SAndy Fiddaman 				case 002:
1016*b30d1939SAndy Fiddaman 					_pp_fsmtab[(0+28)][fp->state+1] = n < 0 ? ~n : n;
1017*b30d1939SAndy Fiddaman 					continue;
1018*b30d1939SAndy Fiddaman 
1019*b30d1939SAndy Fiddaman 				case 021:
1020*b30d1939SAndy Fiddaman 					s = let;
1021*b30d1939SAndy Fiddaman 					break;
1022*b30d1939SAndy Fiddaman 
1023*b30d1939SAndy Fiddaman 				case 003:
1024*b30d1939SAndy Fiddaman 					s = hex;
1025*b30d1939SAndy Fiddaman 					break;
1026*b30d1939SAndy Fiddaman 
1027*b30d1939SAndy Fiddaman 				case 001:
1028*b30d1939SAndy Fiddaman 					s = dec;
1029*b30d1939SAndy Fiddaman 					break;
1030*b30d1939SAndy Fiddaman 
1031*b30d1939SAndy Fiddaman 				case 022:
1032*b30d1939SAndy Fiddaman 					s = oct;
1033*b30d1939SAndy Fiddaman 					break;
1034*b30d1939SAndy Fiddaman 
1035*b30d1939SAndy Fiddaman 				default:
1036*b30d1939SAndy Fiddaman 					rp[c] = n;
1037*b30d1939SAndy Fiddaman 					continue;
1038*b30d1939SAndy Fiddaman 				}
1039*b30d1939SAndy Fiddaman 				while (c = *s++)
1040*b30d1939SAndy Fiddaman 					rp[c] = n;
1041*b30d1939SAndy Fiddaman 			}
1042*b30d1939SAndy Fiddaman 		}
1043*b30d1939SAndy Fiddaman 
1044*b30d1939SAndy Fiddaman 
1045*b30d1939SAndy Fiddaman 
1046*b30d1939SAndy Fiddaman 
1047*b30d1939SAndy Fiddaman 
1048*b30d1939SAndy Fiddaman 
1049*b30d1939SAndy Fiddaman 		for (i = 0; i < (0+28); i++)
1050*b30d1939SAndy Fiddaman 		{
1051*b30d1939SAndy Fiddaman 			rp = _pp_fsmtab[i];
1052*b30d1939SAndy Fiddaman 			s = spl;
1053*b30d1939SAndy Fiddaman 			while (c = *s++)
1054*b30d1939SAndy Fiddaman 				if (c != '@' || !(( rp)>=_pp_fsmtab[(0+13)]&&( rp)<=_pp_fsmtab[(0+18)]))
1055*b30d1939SAndy Fiddaman 				{
1056*b30d1939SAndy Fiddaman 					if (rp[c] >= 0) rp[c] = ~rp[c];
1057*b30d1939SAndy Fiddaman 					rp[c] &= ~(1<<7);
1058*b30d1939SAndy Fiddaman 				}
1059*b30d1939SAndy Fiddaman 			rp[0] = ~((0+28)+2);
1060*b30d1939SAndy Fiddaman 			for (c = 0; c <= 255; c++)
1061*b30d1939SAndy Fiddaman 				if (rp[c] == i)
1062*b30d1939SAndy Fiddaman 					rp[c] = 0;
1063*b30d1939SAndy Fiddaman 		}
1064*b30d1939SAndy Fiddaman 		_pp_fsmtab[(0+28)][0] = ~((0+28)+2);
1065*b30d1939SAndy Fiddaman 
1066*b30d1939SAndy Fiddaman 
1067*b30d1939SAndy Fiddaman 
1068*b30d1939SAndy Fiddaman 
1069*b30d1939SAndy Fiddaman 
1070*b30d1939SAndy Fiddaman 
1071*b30d1939SAndy Fiddaman 
1072*b30d1939SAndy Fiddaman 
1073*b30d1939SAndy Fiddaman 
1074*b30d1939SAndy Fiddaman 
1075*b30d1939SAndy Fiddaman 
1076*b30d1939SAndy Fiddaman 
1077*b30d1939SAndy Fiddaman 
1078*b30d1939SAndy Fiddaman 
1079*b30d1939SAndy Fiddaman 
1080*b30d1939SAndy Fiddaman 
1081*b30d1939SAndy Fiddaman 
1082*b30d1939SAndy Fiddaman 
1083*b30d1939SAndy Fiddaman #line 707
1084*b30d1939SAndy Fiddaman 		break;
1085*b30d1939SAndy Fiddaman 
1086*b30d1939SAndy Fiddaman 
1087*b30d1939SAndy Fiddaman 
1088*b30d1939SAndy Fiddaman 
1089*b30d1939SAndy Fiddaman 
1090*b30d1939SAndy Fiddaman 
1091*b30d1939SAndy Fiddaman 
1092*b30d1939SAndy Fiddaman 
1093*b30d1939SAndy Fiddaman 
1094*b30d1939SAndy Fiddaman 
1095*b30d1939SAndy Fiddaman 
1096*b30d1939SAndy Fiddaman 
1097*b30d1939SAndy Fiddaman 
1098*b30d1939SAndy Fiddaman 
1099*b30d1939SAndy Fiddaman 
1100*b30d1939SAndy Fiddaman 
1101*b30d1939SAndy Fiddaman 
1102*b30d1939SAndy Fiddaman 
1103*b30d1939SAndy Fiddaman 
1104*b30d1939SAndy Fiddaman 
1105*b30d1939SAndy Fiddaman 
1106*b30d1939SAndy Fiddaman 
1107*b30d1939SAndy Fiddaman 
1108*b30d1939SAndy Fiddaman 
1109*b30d1939SAndy Fiddaman 
1110*b30d1939SAndy Fiddaman 
1111*b30d1939SAndy Fiddaman 
1112*b30d1939SAndy Fiddaman 
1113*b30d1939SAndy Fiddaman 
1114*b30d1939SAndy Fiddaman 
1115*b30d1939SAndy Fiddaman 
1116*b30d1939SAndy Fiddaman 
1117*b30d1939SAndy Fiddaman 
1118*b30d1939SAndy Fiddaman 
1119*b30d1939SAndy Fiddaman 
1120*b30d1939SAndy Fiddaman 
1121*b30d1939SAndy Fiddaman 
1122*b30d1939SAndy Fiddaman 
1123*b30d1939SAndy Fiddaman 
1124*b30d1939SAndy Fiddaman 
1125*b30d1939SAndy Fiddaman 
1126*b30d1939SAndy Fiddaman 
1127*b30d1939SAndy Fiddaman 
1128*b30d1939SAndy Fiddaman 
1129*b30d1939SAndy Fiddaman 
1130*b30d1939SAndy Fiddaman 
1131*b30d1939SAndy Fiddaman 
1132*b30d1939SAndy Fiddaman 
1133*b30d1939SAndy Fiddaman 
1134*b30d1939SAndy Fiddaman 
1135*b30d1939SAndy Fiddaman 
1136*b30d1939SAndy Fiddaman 
1137*b30d1939SAndy Fiddaman 
1138*b30d1939SAndy Fiddaman 
1139*b30d1939SAndy Fiddaman 
1140*b30d1939SAndy Fiddaman 
1141*b30d1939SAndy Fiddaman 
1142*b30d1939SAndy Fiddaman 
1143*b30d1939SAndy Fiddaman 
1144*b30d1939SAndy Fiddaman 
1145*b30d1939SAndy Fiddaman 
1146*b30d1939SAndy Fiddaman 
1147*b30d1939SAndy Fiddaman 
1148*b30d1939SAndy Fiddaman 
1149*b30d1939SAndy Fiddaman 
1150*b30d1939SAndy Fiddaman 
1151*b30d1939SAndy Fiddaman 
1152*b30d1939SAndy Fiddaman 
1153*b30d1939SAndy Fiddaman 
1154*b30d1939SAndy Fiddaman 
1155*b30d1939SAndy Fiddaman 
1156*b30d1939SAndy Fiddaman 
1157*b30d1939SAndy Fiddaman 
1158*b30d1939SAndy Fiddaman 
1159*b30d1939SAndy Fiddaman 
1160*b30d1939SAndy Fiddaman 
1161*b30d1939SAndy Fiddaman 
1162*b30d1939SAndy Fiddaman 
1163*b30d1939SAndy Fiddaman 
1164*b30d1939SAndy Fiddaman 
1165*b30d1939SAndy Fiddaman 
1166*b30d1939SAndy Fiddaman 
1167*b30d1939SAndy Fiddaman 
1168*b30d1939SAndy Fiddaman 
1169*b30d1939SAndy Fiddaman 
1170*b30d1939SAndy Fiddaman 
1171*b30d1939SAndy Fiddaman 
1172*b30d1939SAndy Fiddaman 
1173*b30d1939SAndy Fiddaman 
1174*b30d1939SAndy Fiddaman 
1175*b30d1939SAndy Fiddaman 
1176*b30d1939SAndy Fiddaman 
1177*b30d1939SAndy Fiddaman 
1178*b30d1939SAndy Fiddaman 
1179*b30d1939SAndy Fiddaman 
1180*b30d1939SAndy Fiddaman 
1181*b30d1939SAndy Fiddaman 
1182*b30d1939SAndy Fiddaman 
1183*b30d1939SAndy Fiddaman 
1184*b30d1939SAndy Fiddaman 
1185*b30d1939SAndy Fiddaman 
1186*b30d1939SAndy Fiddaman 
1187*b30d1939SAndy Fiddaman 
1188*b30d1939SAndy Fiddaman 
1189*b30d1939SAndy Fiddaman 
1190*b30d1939SAndy Fiddaman 
1191*b30d1939SAndy Fiddaman 
1192*b30d1939SAndy Fiddaman 
1193*b30d1939SAndy Fiddaman 
1194*b30d1939SAndy Fiddaman 
1195*b30d1939SAndy Fiddaman 
1196*b30d1939SAndy Fiddaman 
1197*b30d1939SAndy Fiddaman 
1198*b30d1939SAndy Fiddaman 
1199*b30d1939SAndy Fiddaman 
1200*b30d1939SAndy Fiddaman 
1201*b30d1939SAndy Fiddaman 
1202*b30d1939SAndy Fiddaman 
1203*b30d1939SAndy Fiddaman 
1204*b30d1939SAndy Fiddaman 
1205*b30d1939SAndy Fiddaman 
1206*b30d1939SAndy Fiddaman 
1207*b30d1939SAndy Fiddaman 
1208*b30d1939SAndy Fiddaman 
1209*b30d1939SAndy Fiddaman 
1210*b30d1939SAndy Fiddaman 
1211*b30d1939SAndy Fiddaman 
1212*b30d1939SAndy Fiddaman 
1213*b30d1939SAndy Fiddaman 
1214*b30d1939SAndy Fiddaman 
1215*b30d1939SAndy Fiddaman 
1216*b30d1939SAndy Fiddaman 
1217*b30d1939SAndy Fiddaman 
1218*b30d1939SAndy Fiddaman 
1219*b30d1939SAndy Fiddaman 
1220*b30d1939SAndy Fiddaman 
1221*b30d1939SAndy Fiddaman 
1222*b30d1939SAndy Fiddaman 
1223*b30d1939SAndy Fiddaman #line 860
1224*b30d1939SAndy Fiddaman 	}
1225*b30d1939SAndy Fiddaman }
1226*b30d1939SAndy Fiddaman 
1227*b30d1939SAndy Fiddaman 
1228*b30d1939SAndy Fiddaman 
1229*b30d1939SAndy Fiddaman 
1230*b30d1939SAndy Fiddaman 
1231*b30d1939SAndy Fiddaman 
1232*b30d1939SAndy Fiddaman 
1233*b30d1939SAndy Fiddaman 
1234*b30d1939SAndy Fiddaman 
1235*b30d1939SAndy Fiddaman 
1236*b30d1939SAndy Fiddaman 
1237*b30d1939SAndy Fiddaman 
1238*b30d1939SAndy Fiddaman 
1239*b30d1939SAndy Fiddaman 
1240*b30d1939SAndy Fiddaman 
1241*b30d1939SAndy Fiddaman 
1242*b30d1939SAndy Fiddaman 
1243*b30d1939SAndy Fiddaman 
1244*b30d1939SAndy Fiddaman 
1245*b30d1939SAndy Fiddaman 
1246*b30d1939SAndy Fiddaman 
1247*b30d1939SAndy Fiddaman 
1248*b30d1939SAndy Fiddaman 
1249*b30d1939SAndy Fiddaman 
1250*b30d1939SAndy Fiddaman 
1251*b30d1939SAndy Fiddaman 
1252*b30d1939SAndy Fiddaman 
1253*b30d1939SAndy Fiddaman 
1254*b30d1939SAndy Fiddaman 
1255*b30d1939SAndy Fiddaman 
1256*b30d1939SAndy Fiddaman 
1257*b30d1939SAndy Fiddaman 
1258*b30d1939SAndy Fiddaman 
1259*b30d1939SAndy Fiddaman 
1260*b30d1939SAndy Fiddaman 
1261*b30d1939SAndy Fiddaman 
1262*b30d1939SAndy Fiddaman 
1263*b30d1939SAndy Fiddaman 
1264*b30d1939SAndy Fiddaman 
1265*b30d1939SAndy Fiddaman 
1266*b30d1939SAndy Fiddaman 
1267*b30d1939SAndy Fiddaman 
1268*b30d1939SAndy Fiddaman 
1269*b30d1939SAndy Fiddaman 
1270*b30d1939SAndy Fiddaman 
1271*b30d1939SAndy Fiddaman 
1272*b30d1939SAndy Fiddaman 
1273*b30d1939SAndy Fiddaman 
1274*b30d1939SAndy Fiddaman 
1275*b30d1939SAndy Fiddaman 
1276*b30d1939SAndy Fiddaman #line 18 "../../lib/libpp/ppproto.c"
1277*b30d1939SAndy Fiddaman 
1278*b30d1939SAndy Fiddaman #line 1 "../../../include/ast/hashkey.h"
1279*b30d1939SAndy Fiddaman 
1280*b30d1939SAndy Fiddaman #line 24
1281*b30d1939SAndy Fiddaman 
1282*b30d1939SAndy Fiddaman 
1283*b30d1939SAndy Fiddaman #line 68
1284*b30d1939SAndy Fiddaman extern __MANGLE__  long	strkey  __PROTO__((const char*));
1285*b30d1939SAndy Fiddaman 
1286*b30d1939SAndy Fiddaman #line 20 "../../lib/libpp/ppproto.c"
1287*b30d1939SAndy Fiddaman 
1288*b30d1939SAndy Fiddaman #line 41
1289*b30d1939SAndy Fiddaman typedef struct Key_s
1290*b30d1939SAndy Fiddaman {
1291*b30d1939SAndy Fiddaman 	const char*	name;
1292*b30d1939SAndy Fiddaman 	size_t		size;
1293*b30d1939SAndy Fiddaman 	int		hit;
1294*b30d1939SAndy Fiddaman 	int		val;
1295*b30d1939SAndy Fiddaman } Key_t;
1296*b30d1939SAndy Fiddaman 
1297*b30d1939SAndy Fiddaman typedef struct Proto_s
1298*b30d1939SAndy Fiddaman {
1299*b30d1939SAndy Fiddaman 	int		brace;
1300*b30d1939SAndy Fiddaman 	int		call;
1301*b30d1939SAndy Fiddaman 	int		fd;
1302*b30d1939SAndy Fiddaman 	char*		file;
1303*b30d1939SAndy Fiddaman 	long		flags;
1304*b30d1939SAndy Fiddaman 	long		options;
1305*b30d1939SAndy Fiddaman 	char*		package;
1306*b30d1939SAndy Fiddaman 	int		line;
1307*b30d1939SAndy Fiddaman 	int		test;
1308*b30d1939SAndy Fiddaman 
1309*b30d1939SAndy Fiddaman 	char*		tp;
1310*b30d1939SAndy Fiddaman 
1311*b30d1939SAndy Fiddaman 	int		iz;
1312*b30d1939SAndy Fiddaman 	char*		ib;
1313*b30d1939SAndy Fiddaman 	char*		ip;
1314*b30d1939SAndy Fiddaman 
1315*b30d1939SAndy Fiddaman 	int		oz;
1316*b30d1939SAndy Fiddaman 	char*		ob;
1317*b30d1939SAndy Fiddaman 	char*		op;
1318*b30d1939SAndy Fiddaman 	char*		ox;
1319*b30d1939SAndy Fiddaman 
1320*b30d1939SAndy Fiddaman 	char		cc[3];
1321*b30d1939SAndy Fiddaman 	char		pushback[4];
1322*b30d1939SAndy Fiddaman 
1323*b30d1939SAndy Fiddaman 	char		variadic[256];
1324*b30d1939SAndy Fiddaman 
1325*b30d1939SAndy Fiddaman 
1326*b30d1939SAndy Fiddaman 
1327*b30d1939SAndy Fiddaman 
1328*b30d1939SAndy Fiddaman } Proto_t;
1329*b30d1939SAndy Fiddaman 
1330*b30d1939SAndy Fiddaman 
1331*b30d1939SAndy Fiddaman #line 171
1332*b30d1939SAndy Fiddaman static const Key_t	pragmas[] =
1333*b30d1939SAndy Fiddaman {
1334*b30d1939SAndy Fiddaman 	{ "prototyped",sizeof( "prototyped")-1, 0x01, 1},
1335*b30d1939SAndy Fiddaman 	{ "noprototyped",sizeof( "noprototyped")-1, 0x01, 0},
1336*b30d1939SAndy Fiddaman 	{ "noticed",sizeof( "noticed")-1, 0x02, 1},
1337*b30d1939SAndy Fiddaman 	{ "nonoticed",sizeof( "nonoticed")-1, 0x02, 0},
1338*b30d1939SAndy Fiddaman };
1339*b30d1939SAndy Fiddaman 
1340*b30d1939SAndy Fiddaman static const Key_t	notices[] =
1341*b30d1939SAndy Fiddaman {
1342*b30d1939SAndy Fiddaman 	{ "Copyright",sizeof( "Copyright")-1, 0x02, 1},
1343*b30d1939SAndy Fiddaman 	{ "COPYRIGHT",sizeof( "COPYRIGHT")-1, 0x02, 1},
1344*b30d1939SAndy Fiddaman 	{ "copyright",sizeof( "copyright")-1, 0x02, 1},
1345*b30d1939SAndy Fiddaman 	{ "Public Domain",sizeof( "Public Domain")-1, 0x02, 0},
1346*b30d1939SAndy Fiddaman 	{ "PUBLIC DOMAIN",sizeof( "PUBLIC DOMAIN")-1, 0x02, 0},
1347*b30d1939SAndy Fiddaman };
1348*b30d1939SAndy Fiddaman 
1349*b30d1939SAndy Fiddaman 
1350*b30d1939SAndy Fiddaman 
1351*b30d1939SAndy Fiddaman 
1352*b30d1939SAndy Fiddaman 
1353*b30d1939SAndy Fiddaman 
1354*b30d1939SAndy Fiddaman static char*
__OTORP__(register char * p;register long n;)1355*b30d1939SAndy Fiddaman number __PARAM__((register char* p, register long n), (p, n)) __OTORP__(register char* p; register long n;){
1356*b30d1939SAndy Fiddaman 	register long	d;
1357*b30d1939SAndy Fiddaman 
1358*b30d1939SAndy Fiddaman 	for (d = 1000000; d > 1; d /= 10)
1359*b30d1939SAndy Fiddaman 		if (n >= d) *p++ = '0' + (n / d) % 10;
1360*b30d1939SAndy Fiddaman 	*p++ = '0' + n % 10;
1361*b30d1939SAndy Fiddaman 	return p;
1362*b30d1939SAndy Fiddaman }
1363*b30d1939SAndy Fiddaman 
1364*b30d1939SAndy Fiddaman 
1365*b30d1939SAndy Fiddaman 
1366*b30d1939SAndy Fiddaman static int		errors;
1367*b30d1939SAndy Fiddaman 
1368*b30d1939SAndy Fiddaman 
1369*b30d1939SAndy Fiddaman #line 224
1370*b30d1939SAndy Fiddaman 
1371*b30d1939SAndy Fiddaman 
1372*b30d1939SAndy Fiddaman 
1373*b30d1939SAndy Fiddaman 
1374*b30d1939SAndy Fiddaman static int
__OTORP__(register const char * s;)1375*b30d1939SAndy Fiddaman sstrlen __PARAM__((register const char* s), (s)) __OTORP__(register const char* s;){
1376*b30d1939SAndy Fiddaman 	register const char*	b;
1377*b30d1939SAndy Fiddaman 
1378*b30d1939SAndy Fiddaman 	for (b = s; *s; s++);
1379*b30d1939SAndy Fiddaman 	return s - b;
1380*b30d1939SAndy Fiddaman }
1381*b30d1939SAndy Fiddaman 
1382*b30d1939SAndy Fiddaman 
1383*b30d1939SAndy Fiddaman 
1384*b30d1939SAndy Fiddaman 
1385*b30d1939SAndy Fiddaman 
1386*b30d1939SAndy Fiddaman static int
__OTORP__(register const char * s;register const char * t;register int n;)1387*b30d1939SAndy Fiddaman sstrncmp __PARAM__((register const char* s, register const char* t, register int n), (s, t, n)) __OTORP__(register const char* s; register const char* t; register int n;){
1388*b30d1939SAndy Fiddaman 	register const char*	e = s + n;
1389*b30d1939SAndy Fiddaman 
1390*b30d1939SAndy Fiddaman 	while (s < e)
1391*b30d1939SAndy Fiddaman 	{
1392*b30d1939SAndy Fiddaman 		if (*s != *t || !*s)
1393*b30d1939SAndy Fiddaman 			return *s - *t;
1394*b30d1939SAndy Fiddaman 		s++;
1395*b30d1939SAndy Fiddaman 		t++;
1396*b30d1939SAndy Fiddaman 	}
1397*b30d1939SAndy Fiddaman 	return 0;
1398*b30d1939SAndy Fiddaman }
1399*b30d1939SAndy Fiddaman 
1400*b30d1939SAndy Fiddaman 
1401*b30d1939SAndy Fiddaman 
1402*b30d1939SAndy Fiddaman 
1403*b30d1939SAndy Fiddaman 
1404*b30d1939SAndy Fiddaman static char*
__OTORP__(register char * s;register const char * t;)1405*b30d1939SAndy Fiddaman strcopy __PARAM__((register char* s, register const char* t), (s, t)) __OTORP__(register char* s; register const char* t;){
1406*b30d1939SAndy Fiddaman 	while (*s++ = *t++);
1407*b30d1939SAndy Fiddaman 	return s - 1;
1408*b30d1939SAndy Fiddaman }
1409*b30d1939SAndy Fiddaman 
1410*b30d1939SAndy Fiddaman 
1411*b30d1939SAndy Fiddaman 
1412*b30d1939SAndy Fiddaman static void
__OTORP__(char * iob;int level;char * msg;char * arg;)1413*b30d1939SAndy Fiddaman proto_error __PARAM__((char* iob, int level, char* msg, char* arg), (iob, level, msg, arg)) __OTORP__(char* iob; int level; char* msg; char* arg;){
1414*b30d1939SAndy Fiddaman 	register char*	p;
1415*b30d1939SAndy Fiddaman 	char		buf[1024];
1416*b30d1939SAndy Fiddaman 
1417*b30d1939SAndy Fiddaman 	p = strcopy(buf, "proto: ");
1418*b30d1939SAndy Fiddaman 	if (iob)
1419*b30d1939SAndy Fiddaman 	{
1420*b30d1939SAndy Fiddaman 		register Proto_t*	proto = (Proto_t*)(iob - sizeof(Proto_t));
1421*b30d1939SAndy Fiddaman 
1422*b30d1939SAndy Fiddaman 		if (proto->line)
1423*b30d1939SAndy Fiddaman 		{
1424*b30d1939SAndy Fiddaman 			if (proto->file)
1425*b30d1939SAndy Fiddaman 			{
1426*b30d1939SAndy Fiddaman 				*p++ = '"';
1427*b30d1939SAndy Fiddaman 				p = strcopy(p, proto->file);
1428*b30d1939SAndy Fiddaman 				*p++ = '"';
1429*b30d1939SAndy Fiddaman 				*p++ = ',';
1430*b30d1939SAndy Fiddaman 				*p++ = ' ';
1431*b30d1939SAndy Fiddaman 			}
1432*b30d1939SAndy Fiddaman 			p = strcopy(p, "line ");
1433*b30d1939SAndy Fiddaman 			p = number(p, proto->line);
1434*b30d1939SAndy Fiddaman 		}
1435*b30d1939SAndy Fiddaman 		else if (proto->file)
1436*b30d1939SAndy Fiddaman 			p = strcopy(p, proto->file);
1437*b30d1939SAndy Fiddaman 	}
1438*b30d1939SAndy Fiddaman 	else
1439*b30d1939SAndy Fiddaman 	{
1440*b30d1939SAndy Fiddaman 		p = strcopy(p, msg);
1441*b30d1939SAndy Fiddaman 		msg = arg;
1442*b30d1939SAndy Fiddaman 		arg = 0;
1443*b30d1939SAndy Fiddaman 	}
1444*b30d1939SAndy Fiddaman 	if (*(p - 1) != ' ')
1445*b30d1939SAndy Fiddaman 	{
1446*b30d1939SAndy Fiddaman 		*p++ = ':';
1447*b30d1939SAndy Fiddaman 		*p++ = ' ';
1448*b30d1939SAndy Fiddaman 	}
1449*b30d1939SAndy Fiddaman 	if (level == 1)
1450*b30d1939SAndy Fiddaman 		p = strcopy(p, "warning: ");
1451*b30d1939SAndy Fiddaman 	p = strcopy(p, msg);
1452*b30d1939SAndy Fiddaman 	if (arg)
1453*b30d1939SAndy Fiddaman 	{
1454*b30d1939SAndy Fiddaman 		*p++ = ' ';
1455*b30d1939SAndy Fiddaman 		p = strcopy(p, arg);
1456*b30d1939SAndy Fiddaman 	}
1457*b30d1939SAndy Fiddaman 	*p++ = '\n';
1458*b30d1939SAndy Fiddaman 	write(2, buf, p - buf);
1459*b30d1939SAndy Fiddaman 	if (level >= 3)
1460*b30d1939SAndy Fiddaman 		exit(level - 2);
1461*b30d1939SAndy Fiddaman 	if (level >= 2)
1462*b30d1939SAndy Fiddaman 		errors++;
1463*b30d1939SAndy Fiddaman }
1464*b30d1939SAndy Fiddaman 
1465*b30d1939SAndy Fiddaman 
1466*b30d1939SAndy Fiddaman 
1467*b30d1939SAndy Fiddaman 
1468*b30d1939SAndy Fiddaman 
1469*b30d1939SAndy Fiddaman static char*
__OTORP__(register char * s;register char * t;int n;)1470*b30d1939SAndy Fiddaman memcopy __PARAM__((register char* s, register char* t, int n), (s, t, n)) __OTORP__(register char* s; register char* t; int n;){
1471*b30d1939SAndy Fiddaman 	register char*	e = t + n;
1472*b30d1939SAndy Fiddaman 
1473*b30d1939SAndy Fiddaman 	while (t < e) *s++ = *t++;
1474*b30d1939SAndy Fiddaman 	return s;
1475*b30d1939SAndy Fiddaman }
1476*b30d1939SAndy Fiddaman 
1477*b30d1939SAndy Fiddaman #line 1 "../../lib/libast/port/astlicense.c"
1478*b30d1939SAndy Fiddaman 
1479*b30d1939SAndy Fiddaman 
1480*b30d1939SAndy Fiddaman 
1481*b30d1939SAndy Fiddaman #line 92
1482*b30d1939SAndy Fiddaman typedef struct Buffer_s
1483*b30d1939SAndy Fiddaman {
1484*b30d1939SAndy Fiddaman 	char*		buf;
1485*b30d1939SAndy Fiddaman 	char*		nxt;
1486*b30d1939SAndy Fiddaman 	char*		end;
1487*b30d1939SAndy Fiddaman 	int		siz;
1488*b30d1939SAndy Fiddaman } Buffer_t;
1489*b30d1939SAndy Fiddaman 
1490*b30d1939SAndy Fiddaman typedef struct Item_s
1491*b30d1939SAndy Fiddaman {
1492*b30d1939SAndy Fiddaman 	char*		data;
1493*b30d1939SAndy Fiddaman 	int		size;
1494*b30d1939SAndy Fiddaman 	int		quote;
1495*b30d1939SAndy Fiddaman } Item_t;
1496*b30d1939SAndy Fiddaman 
1497*b30d1939SAndy Fiddaman typedef struct Id_s
1498*b30d1939SAndy Fiddaman {
1499*b30d1939SAndy Fiddaman 	Item_t		name;
1500*b30d1939SAndy Fiddaman 	Item_t		value;
1501*b30d1939SAndy Fiddaman } Id_t;
1502*b30d1939SAndy Fiddaman 
1503*b30d1939SAndy Fiddaman 
1504*b30d1939SAndy Fiddaman 
1505*b30d1939SAndy Fiddaman 
1506*b30d1939SAndy Fiddaman 
1507*b30d1939SAndy Fiddaman 
1508*b30d1939SAndy Fiddaman 
1509*b30d1939SAndy Fiddaman static const Item_t	key[] =
1510*b30d1939SAndy Fiddaman {
1511*b30d1939SAndy Fiddaman 	{ "author",sizeof( "author")-1,0},
1512*b30d1939SAndy Fiddaman 	{ "class",sizeof( "class")-1,0},
1513*b30d1939SAndy Fiddaman 	{ "company",sizeof( "company")-1,0},
1514*b30d1939SAndy Fiddaman 	{ "component",sizeof( "component")-1,0},
1515*b30d1939SAndy Fiddaman 	{ "contributor",sizeof( "contributor")-1,0},
1516*b30d1939SAndy Fiddaman 	{ "corporation",sizeof( "corporation")-1,0},
1517*b30d1939SAndy Fiddaman 	{ "domain",sizeof( "domain")-1,0},
1518*b30d1939SAndy Fiddaman 	{ "id",sizeof( "id")-1,0},
1519*b30d1939SAndy Fiddaman 	{ "incorporation",sizeof( "incorporation")-1,0},
1520*b30d1939SAndy Fiddaman 	{ "license",sizeof( "license")-1,0},
1521*b30d1939SAndy Fiddaman 	{ "location",sizeof( "location")-1,0},
1522*b30d1939SAndy Fiddaman 	{ "name",sizeof( "name")-1,0},
1523*b30d1939SAndy Fiddaman 	{ "notice",sizeof( "notice")-1,0},
1524*b30d1939SAndy Fiddaman 	{ "organization",sizeof( "organization")-1,0},
1525*b30d1939SAndy Fiddaman 	{ "package",sizeof( "package")-1,0},
1526*b30d1939SAndy Fiddaman 	{ "parent",sizeof( "parent")-1,0},
1527*b30d1939SAndy Fiddaman 	{ "query",sizeof( "query")-1,0},
1528*b30d1939SAndy Fiddaman 	{ "since",sizeof( "since")-1,0},
1529*b30d1939SAndy Fiddaman 	{ "source",sizeof( "source")-1,0},
1530*b30d1939SAndy Fiddaman 	{ "start",sizeof( "start")-1,0},
1531*b30d1939SAndy Fiddaman 	{ "type",sizeof( "type")-1,0},
1532*b30d1939SAndy Fiddaman 	{ "url",sizeof( "url")-1,0},
1533*b30d1939SAndy Fiddaman 	{ "urlmd5",sizeof( "urlmd5")-1,0},
1534*b30d1939SAndy Fiddaman 	{ "version",sizeof( "version")-1,0},
1535*b30d1939SAndy Fiddaman 	{0}
1536*b30d1939SAndy Fiddaman };
1537*b30d1939SAndy Fiddaman 
1538*b30d1939SAndy Fiddaman 
1539*b30d1939SAndy Fiddaman 
1540*b30d1939SAndy Fiddaman 
1541*b30d1939SAndy Fiddaman 
1542*b30d1939SAndy Fiddaman static const Item_t	lic[] =
1543*b30d1939SAndy Fiddaman {
1544*b30d1939SAndy Fiddaman 	{ "none",sizeof( "none")-1, 0},
1545*b30d1939SAndy Fiddaman 	{ "inline",sizeof( "inline")-1, 12},
1546*b30d1939SAndy Fiddaman 	{ "test",sizeof( "test")-1, 2},
1547*b30d1939SAndy Fiddaman 	{ "verbose",sizeof( "verbose")-1, 3},
1548*b30d1939SAndy Fiddaman 	{ "usage",sizeof( "usage")-1, 4},
1549*b30d1939SAndy Fiddaman 	{ "open",sizeof( "open")-1, 5},
1550*b30d1939SAndy Fiddaman 	{ "cpl",sizeof( "cpl")-1, 5},
1551*b30d1939SAndy Fiddaman 	{ "epl",sizeof( "epl")-1, 5},
1552*b30d1939SAndy Fiddaman 	{ "bsd",sizeof( "bsd")-1, 5},
1553*b30d1939SAndy Fiddaman 	{ "zlib",sizeof( "zlib")-1, 5},
1554*b30d1939SAndy Fiddaman 	{ "mit",sizeof( "mit")-1, 5},
1555*b30d1939SAndy Fiddaman 	{ "gpl",sizeof( "gpl")-1, 11},
1556*b30d1939SAndy Fiddaman 	{ "special",sizeof( "special")-1, 12},
1557*b30d1939SAndy Fiddaman 	{ "nonexclusive",sizeof( "nonexclusive")-1, 12},
1558*b30d1939SAndy Fiddaman 	{ "noncommercial",sizeof( "noncommercial")-1, 12},
1559*b30d1939SAndy Fiddaman 	{ "proprietary",sizeof( "proprietary")-1, 15},
1560*b30d1939SAndy Fiddaman 	{0}
1561*b30d1939SAndy Fiddaman };
1562*b30d1939SAndy Fiddaman 
1563*b30d1939SAndy Fiddaman typedef struct Notice_s
1564*b30d1939SAndy Fiddaman {
1565*b30d1939SAndy Fiddaman 	int		test;
1566*b30d1939SAndy Fiddaman 	int		type;
1567*b30d1939SAndy Fiddaman 	int		verbose;
1568*b30d1939SAndy Fiddaman 	int		ids;
1569*b30d1939SAndy Fiddaman 	Item_t		item[(sizeof(key)/sizeof(key[0])-1)];
1570*b30d1939SAndy Fiddaman 	Id_t		id[64];
1571*b30d1939SAndy Fiddaman 	char		cc[3];
1572*b30d1939SAndy Fiddaman } Notice_t;
1573*b30d1939SAndy Fiddaman 
1574*b30d1939SAndy Fiddaman 
1575*b30d1939SAndy Fiddaman 
1576*b30d1939SAndy Fiddaman 
1577*b30d1939SAndy Fiddaman 
1578*b30d1939SAndy Fiddaman static int
__OTORP__(register const Item_t * item;const char * name;int size;)1579*b30d1939SAndy Fiddaman lookup __PARAM__((register const Item_t* item, const char* name, int size), (item, name, size)) __OTORP__(register const Item_t* item; const char* name; int size;){
1580*b30d1939SAndy Fiddaman 	register int	c;
1581*b30d1939SAndy Fiddaman 	register int	i;
1582*b30d1939SAndy Fiddaman 
1583*b30d1939SAndy Fiddaman 	c = name[0];
1584*b30d1939SAndy Fiddaman 	for (i = 0; item[i].data; i++)
1585*b30d1939SAndy Fiddaman 		if (c == item[i].data[0] && size == item[i].size && !sstrncmp( name, item[i].data, size))
1586*b30d1939SAndy Fiddaman 			return i;
1587*b30d1939SAndy Fiddaman 	return -1;
1588*b30d1939SAndy Fiddaman }
1589*b30d1939SAndy Fiddaman 
1590*b30d1939SAndy Fiddaman 
1591*b30d1939SAndy Fiddaman 
1592*b30d1939SAndy Fiddaman 
1593*b30d1939SAndy Fiddaman 
1594*b30d1939SAndy Fiddaman 
1595*b30d1939SAndy Fiddaman static void
__OTORP__(register Buffer_t * b;register char * s;int n;)1596*b30d1939SAndy Fiddaman copy __PARAM__((register Buffer_t* b, register char* s, int n), (b, s, n)) __OTORP__(register Buffer_t* b; register char* s; int n;){
1597*b30d1939SAndy Fiddaman 	if (n < 0)
1598*b30d1939SAndy Fiddaman 		n = sstrlen( s);
1599*b30d1939SAndy Fiddaman 	while (n--)
1600*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( *s++)):(( *s++),(-1)));
1601*b30d1939SAndy Fiddaman }
1602*b30d1939SAndy Fiddaman 
1603*b30d1939SAndy Fiddaman 
1604*b30d1939SAndy Fiddaman #line 225
1605*b30d1939SAndy Fiddaman static void
__OTORP__(Notice_t * notice;register Buffer_t * b;register char * s;register int n;int u;)1606*b30d1939SAndy Fiddaman comment __PARAM__((Notice_t* notice, register Buffer_t* b, register char* s, register int n, int u), (notice, b, s, n, u)) __OTORP__(Notice_t* notice; register Buffer_t* b; register char* s; register int n; int u;){
1607*b30d1939SAndy Fiddaman 	register int	i;
1608*b30d1939SAndy Fiddaman 	register int	m;
1609*b30d1939SAndy Fiddaman 	register int	x;
1610*b30d1939SAndy Fiddaman 	int		cc;
1611*b30d1939SAndy Fiddaman 
1612*b30d1939SAndy Fiddaman 	cc = notice->cc[1];
1613*b30d1939SAndy Fiddaman 	if (!s)
1614*b30d1939SAndy Fiddaman 	{
1615*b30d1939SAndy Fiddaman 		if (n)
1616*b30d1939SAndy Fiddaman 		{
1617*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( notice->cc[n > 0 ? 0 : 1])):(( notice->cc[n > 0 ? 0 : 1]),(-1)));
1618*b30d1939SAndy Fiddaman 			for (i = 0; i < 70; i++)
1619*b30d1939SAndy Fiddaman 				((( b)->nxt<( b)->end)?(*( b)->nxt++=( cc)):(( cc),(-1)));
1620*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( notice->cc[n > 0 ? 1 : 2])):(( notice->cc[n > 0 ? 1 : 2]),(-1)));
1621*b30d1939SAndy Fiddaman 		}
1622*b30d1939SAndy Fiddaman 		else
1623*b30d1939SAndy Fiddaman 			s = "";
1624*b30d1939SAndy Fiddaman 	}
1625*b30d1939SAndy Fiddaman 	if (s)
1626*b30d1939SAndy Fiddaman 	{
1627*b30d1939SAndy Fiddaman 		if (n > 70)
1628*b30d1939SAndy Fiddaman 			n = 70;
1629*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( cc)):(( cc),(-1)));
1630*b30d1939SAndy Fiddaman 		m = (u < 0) ? 1 : (70 - n) / 2;
1631*b30d1939SAndy Fiddaman 		if ((x = 70 - m - n) < 0)
1632*b30d1939SAndy Fiddaman 			n--;
1633*b30d1939SAndy Fiddaman 		while (m-- > 0)
1634*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1635*b30d1939SAndy Fiddaman 		while (n-- > 0)
1636*b30d1939SAndy Fiddaman 		{
1637*b30d1939SAndy Fiddaman 			i = *s++;
1638*b30d1939SAndy Fiddaman 			if (u > 0 && i >= 'a' && i <= 'z')
1639*b30d1939SAndy Fiddaman 				i = i - 'a' + 'A';
1640*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( i)):(( i),(-1)));
1641*b30d1939SAndy Fiddaman 		}
1642*b30d1939SAndy Fiddaman 		while (x-- > 0)
1643*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1644*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( cc)):(( cc),(-1)));
1645*b30d1939SAndy Fiddaman 	}
1646*b30d1939SAndy Fiddaman 	((( b)->nxt<( b)->end)?(*( b)->nxt++=( '\n')):(( '\n'),(-1)));
1647*b30d1939SAndy Fiddaman }
1648*b30d1939SAndy Fiddaman 
1649*b30d1939SAndy Fiddaman 
1650*b30d1939SAndy Fiddaman 
1651*b30d1939SAndy Fiddaman 
1652*b30d1939SAndy Fiddaman 
1653*b30d1939SAndy Fiddaman static void
__OTORP__(Notice_t * notice;register Buffer_t * b;const Item_t * item;)1654*b30d1939SAndy Fiddaman expand __PARAM__((Notice_t* notice, register Buffer_t* b, const Item_t* item), (notice, b, item)) __OTORP__(Notice_t* notice; register Buffer_t* b; const Item_t* item;){
1655*b30d1939SAndy Fiddaman 	register char*	t;
1656*b30d1939SAndy Fiddaman 	register char*	e;
1657*b30d1939SAndy Fiddaman 	register int	q;
1658*b30d1939SAndy Fiddaman 	register char*	x;
1659*b30d1939SAndy Fiddaman 	register char*	z;
1660*b30d1939SAndy Fiddaman 	register int	c;
1661*b30d1939SAndy Fiddaman 	int		m;
1662*b30d1939SAndy Fiddaman 	int		i;
1663*b30d1939SAndy Fiddaman 	int		k;
1664*b30d1939SAndy Fiddaman 
1665*b30d1939SAndy Fiddaman 	if (t = item->data)
1666*b30d1939SAndy Fiddaman 	{
1667*b30d1939SAndy Fiddaman 		q = item->quote;
1668*b30d1939SAndy Fiddaman 		e = t + item->size;
1669*b30d1939SAndy Fiddaman 		i = 0;
1670*b30d1939SAndy Fiddaman 		while (t < e)
1671*b30d1939SAndy Fiddaman 		{
1672*b30d1939SAndy Fiddaman 			if (*t == '$' && t < (e + 2) && *(t + 1) == '{')
1673*b30d1939SAndy Fiddaman 			{
1674*b30d1939SAndy Fiddaman 				k = m = 0;
1675*b30d1939SAndy Fiddaman 				x = t += 2;
1676*b30d1939SAndy Fiddaman 				while (t < e && (c = *t++) != '}')
1677*b30d1939SAndy Fiddaman 					if (c == '.')
1678*b30d1939SAndy Fiddaman 						x = t;
1679*b30d1939SAndy Fiddaman 					else if (c == '-')
1680*b30d1939SAndy Fiddaman 					{
1681*b30d1939SAndy Fiddaman 						k = 1;
1682*b30d1939SAndy Fiddaman 						break;
1683*b30d1939SAndy Fiddaman 					}
1684*b30d1939SAndy Fiddaman 					else if (c == '/')
1685*b30d1939SAndy Fiddaman 					{
1686*b30d1939SAndy Fiddaman 						m = 1;
1687*b30d1939SAndy Fiddaman 						break;
1688*b30d1939SAndy Fiddaman 					}
1689*b30d1939SAndy Fiddaman 				if ((c = lookup(key, x, t - x - 1)) >= 0 && (x = notice->item[c].data))
1690*b30d1939SAndy Fiddaman 				{
1691*b30d1939SAndy Fiddaman 					z = x + notice->item[c].size;
1692*b30d1939SAndy Fiddaman 					while (x < z)
1693*b30d1939SAndy Fiddaman 					{
1694*b30d1939SAndy Fiddaman 						c = *x++;
1695*b30d1939SAndy Fiddaman 						if (!m || c >= '0' && c <= '9')
1696*b30d1939SAndy Fiddaman 							((( b)->nxt<( b)->end)?(*( b)->nxt++=( c)):(( c),(-1)));
1697*b30d1939SAndy Fiddaman 					}
1698*b30d1939SAndy Fiddaman 				}
1699*b30d1939SAndy Fiddaman 				else if (k)
1700*b30d1939SAndy Fiddaman 				{
1701*b30d1939SAndy Fiddaman 					k = 0;
1702*b30d1939SAndy Fiddaman 					i++;
1703*b30d1939SAndy Fiddaman 				}
1704*b30d1939SAndy Fiddaman 				if (k || m)
1705*b30d1939SAndy Fiddaman 				{
1706*b30d1939SAndy Fiddaman 					k = 1;
1707*b30d1939SAndy Fiddaman 					while (t < e)
1708*b30d1939SAndy Fiddaman 						if ((c = *t++) == '{')
1709*b30d1939SAndy Fiddaman 							k++;
1710*b30d1939SAndy Fiddaman 						else if (c == '}' && !--k)
1711*b30d1939SAndy Fiddaman 							break;
1712*b30d1939SAndy Fiddaman 				}
1713*b30d1939SAndy Fiddaman 			}
1714*b30d1939SAndy Fiddaman 			else if (q > 0 && *t == '\\' && (*(t + 1) == q || *(t + 1) == '\\'))
1715*b30d1939SAndy Fiddaman 				t++;
1716*b30d1939SAndy Fiddaman 			else if (*t == '}' && i)
1717*b30d1939SAndy Fiddaman 			{
1718*b30d1939SAndy Fiddaman 				t++;
1719*b30d1939SAndy Fiddaman 				i--;
1720*b30d1939SAndy Fiddaman 			}
1721*b30d1939SAndy Fiddaman 			else
1722*b30d1939SAndy Fiddaman 				((( b)->nxt<( b)->end)?(*( b)->nxt++=( *t++)):(( *t++),(-1)));
1723*b30d1939SAndy Fiddaman 		}
1724*b30d1939SAndy Fiddaman 	}
1725*b30d1939SAndy Fiddaman }
1726*b30d1939SAndy Fiddaman 
1727*b30d1939SAndy Fiddaman 
1728*b30d1939SAndy Fiddaman 
1729*b30d1939SAndy Fiddaman 
1730*b30d1939SAndy Fiddaman 
1731*b30d1939SAndy Fiddaman static void
__OTORP__(Notice_t * notice;register Buffer_t * b;)1732*b30d1939SAndy Fiddaman copyright __PARAM__((Notice_t* notice, register Buffer_t* b), (notice, b)) __OTORP__(Notice_t* notice; register Buffer_t* b;){
1733*b30d1939SAndy Fiddaman 	register char*	x;
1734*b30d1939SAndy Fiddaman 	register char*	t;
1735*b30d1939SAndy Fiddaman 	time_t		clock;
1736*b30d1939SAndy Fiddaman 
1737*b30d1939SAndy Fiddaman 	copy(b, "Copyright (c) ", -1);
1738*b30d1939SAndy Fiddaman 	if (notice->test)
1739*b30d1939SAndy Fiddaman 	{
1740*b30d1939SAndy Fiddaman 		clock = (time_t)1000212300;
1741*b30d1939SAndy Fiddaman 		t = ctime(&clock) + 20;
1742*b30d1939SAndy Fiddaman 	}
1743*b30d1939SAndy Fiddaman 	else if (!(t = notice->item[18].data))
1744*b30d1939SAndy Fiddaman 	{
1745*b30d1939SAndy Fiddaman 		time(&clock);
1746*b30d1939SAndy Fiddaman 		t = ctime(&clock) + 20;
1747*b30d1939SAndy Fiddaman 	}
1748*b30d1939SAndy Fiddaman 	if ((x = notice->item[19].data) && sstrncmp( t, x, 4) < 0)
1749*b30d1939SAndy Fiddaman 		t = x;
1750*b30d1939SAndy Fiddaman 	if ((x = notice->item[17].data) && sstrncmp( x, t, 4) < 0)
1751*b30d1939SAndy Fiddaman 	{
1752*b30d1939SAndy Fiddaman 		expand(notice, b, &notice->item[17]);
1753*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( '-')):(( '-'),(-1)));
1754*b30d1939SAndy Fiddaman 	}
1755*b30d1939SAndy Fiddaman 	copy(b, t, 4);
1756*b30d1939SAndy Fiddaman 	if (notice->item[15].data)
1757*b30d1939SAndy Fiddaman 	{
1758*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1759*b30d1939SAndy Fiddaman 		expand(notice, b, &notice->item[15]);
1760*b30d1939SAndy Fiddaman 	}
1761*b30d1939SAndy Fiddaman 	if (notice->item[5].data)
1762*b30d1939SAndy Fiddaman 	{
1763*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1764*b30d1939SAndy Fiddaman 		expand(notice, b, &notice->item[5]);
1765*b30d1939SAndy Fiddaman 		if (notice->item[8].data)
1766*b30d1939SAndy Fiddaman 		{
1767*b30d1939SAndy Fiddaman 			((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1768*b30d1939SAndy Fiddaman 			expand(notice, b, &notice->item[8]);
1769*b30d1939SAndy Fiddaman 		}
1770*b30d1939SAndy Fiddaman 	}
1771*b30d1939SAndy Fiddaman 	else if (notice->item[2].data)
1772*b30d1939SAndy Fiddaman 	{
1773*b30d1939SAndy Fiddaman 		((( b)->nxt<( b)->end)?(*( b)->nxt++=( ' ')):(( ' '),(-1)));
1774*b30d1939SAndy Fiddaman 		expand(notice, b, &notice->item[2]);
1775*b30d1939SAndy Fiddaman 	}
1776*b30d1939SAndy Fiddaman }
1777*b30d1939SAndy Fiddaman 
1778*b30d1939SAndy Fiddaman typedef struct Stack_s
1779*b30d1939SAndy Fiddaman {
1780*b30d1939SAndy Fiddaman 	char*	info;
1781*b30d1939SAndy Fiddaman 	char*	file;
1782*b30d1939SAndy Fiddaman 	int	line;
1783*b30d1939SAndy Fiddaman 	int	size;
1784*b30d1939SAndy Fiddaman } Stack_t;
1785*b30d1939SAndy Fiddaman 
1786*b30d1939SAndy Fiddaman static int
__OTORP__(Stack_t * sp;char * file;char * parent;char * info;int size;Buffer_t * buf;)1787*b30d1939SAndy Fiddaman push __PARAM__((Stack_t* sp, char* file, char* parent, char* info, int size, Buffer_t* buf), (sp, file, parent, info, size, buf)) __OTORP__(Stack_t* sp; char* file; char* parent; char* info; int size; Buffer_t* buf;){
1788*b30d1939SAndy Fiddaman 	char*		s;
1789*b30d1939SAndy Fiddaman 	char*		t;
1790*b30d1939SAndy Fiddaman 	int		i;
1791*b30d1939SAndy Fiddaman 	int		n;
1792*b30d1939SAndy Fiddaman 	char		path[1024];
1793*b30d1939SAndy Fiddaman 
1794*b30d1939SAndy Fiddaman 	if (size <= 8)
1795*b30d1939SAndy Fiddaman 	{
1796*b30d1939SAndy Fiddaman 		copy(buf, file, -1);
1797*b30d1939SAndy Fiddaman 		copy(buf, ": no space", -1);
1798*b30d1939SAndy Fiddaman 		((( buf)->nxt<( buf)->end)?(*( buf)->nxt++=( 0)):(( 0),(-1)));
1799*b30d1939SAndy Fiddaman 		return -1;
1800*b30d1939SAndy Fiddaman 	}
1801*b30d1939SAndy Fiddaman 	if (*file != '/' && parent && (s = strrchr(parent, '/')))
1802*b30d1939SAndy Fiddaman 	{
1803*b30d1939SAndy Fiddaman 		n = s - parent + 1;
1804*b30d1939SAndy Fiddaman 		if ((sstrlen( file) + n + 1) <= sizeof(path))
1805*b30d1939SAndy Fiddaman 		{
1806*b30d1939SAndy Fiddaman 			memcopy( path, parent, n);
1807*b30d1939SAndy Fiddaman 			strcopy( path + n, file);
1808*b30d1939SAndy Fiddaman 			file = path;
1809*b30d1939SAndy Fiddaman 		}
1810*b30d1939SAndy Fiddaman 	}
1811*b30d1939SAndy Fiddaman 	if ((i = open(file, O_RDONLY|0)) < 0)
1812*b30d1939SAndy Fiddaman 	{
1813*b30d1939SAndy Fiddaman 
1814*b30d1939SAndy Fiddaman 		if (file == path)
1815*b30d1939SAndy Fiddaman 			for (s = path; *s; s++)
1816*b30d1939SAndy Fiddaman 				if (s[0] == '/' && s[1] == 'a' && s[2] == 'r' && s[3] == 'c' && s[4] == 'h' && s[5] == '/')
1817*b30d1939SAndy Fiddaman 				{
1818*b30d1939SAndy Fiddaman 					t = s;
1819*b30d1939SAndy Fiddaman 					for (s += 6; *s && *s != '/'; s++);
1820*b30d1939SAndy Fiddaman 					while (*t++ = *s++);
1821*b30d1939SAndy Fiddaman 					i = open(file, O_RDONLY|0);
1822*b30d1939SAndy Fiddaman 				}
1823*b30d1939SAndy Fiddaman 		if (i < 0)
1824*b30d1939SAndy Fiddaman 		{
1825*b30d1939SAndy Fiddaman 			copy(buf, file, -1);
1826*b30d1939SAndy Fiddaman 			copy(buf, ": cannot open", -1);
1827*b30d1939SAndy Fiddaman 			((( buf)->nxt<( buf)->end)?(*( buf)->nxt++=( 0)):(( 0),(-1)));
1828*b30d1939SAndy Fiddaman 			return -1;
1829*b30d1939SAndy Fiddaman 		}
1830*b30d1939SAndy Fiddaman 	}
1831*b30d1939SAndy Fiddaman 	n = read(i, info, size - 1);
1832*b30d1939SAndy Fiddaman 	close(i);
1833*b30d1939SAndy Fiddaman 	if (n < 0)
1834*b30d1939SAndy Fiddaman 	{
1835*b30d1939SAndy Fiddaman 		copy(buf, file, -1);
1836*b30d1939SAndy Fiddaman 		copy(buf, ": cannot read", -1);
1837*b30d1939SAndy Fiddaman 		((( buf)->nxt<( buf)->end)?(*( buf)->nxt++=( 0)):(( 0),(-1)));
1838*b30d1939SAndy Fiddaman 		return -1;
1839*b30d1939SAndy Fiddaman 	}
1840*b30d1939SAndy Fiddaman 	info[n++] = 0;
1841*b30d1939SAndy Fiddaman 	sp->file = file;
1842*b30d1939SAndy Fiddaman 	sp->info = info;
1843*b30d1939SAndy Fiddaman 	sp->line = 0;
1844*b30d1939SAndy Fiddaman 	sp->size = n;
1845*b30d1939SAndy Fiddaman 	return 0;
1846*b30d1939SAndy Fiddaman }
1847*b30d1939SAndy Fiddaman 
1848*b30d1939SAndy Fiddaman 
1849*b30d1939SAndy Fiddaman 
1850*b30d1939SAndy Fiddaman 
1851*b30d1939SAndy Fiddaman 
1852*b30d1939SAndy Fiddaman 
1853*b30d1939SAndy Fiddaman 
1854*b30d1939SAndy Fiddaman int
__OTORP__(char * p;int size;char * file;char * options;int cc1;int cc2;int cc3;)1855*b30d1939SAndy Fiddaman astlicense __PARAM__((char* p, int size, char* file, char* options, int cc1, int cc2, int cc3), (p, size, file, options, cc1, cc2, cc3)) __OTORP__(char* p; int size; char* file; char* options; int cc1; int cc2; int cc3;){
1856*b30d1939SAndy Fiddaman 	register char*	s;
1857*b30d1939SAndy Fiddaman 	register char*	v;
1858*b30d1939SAndy Fiddaman 	register char*	x;
1859*b30d1939SAndy Fiddaman 	register int	c;
1860*b30d1939SAndy Fiddaman 	int		i;
1861*b30d1939SAndy Fiddaman 	int		h;
1862*b30d1939SAndy Fiddaman 	int		k;
1863*b30d1939SAndy Fiddaman 	int		n;
1864*b30d1939SAndy Fiddaman 	int		q;
1865*b30d1939SAndy Fiddaman 	int		contributor;
1866*b30d1939SAndy Fiddaman 	int		first;
1867*b30d1939SAndy Fiddaman 	int		level;
1868*b30d1939SAndy Fiddaman 	int		quote;
1869*b30d1939SAndy Fiddaman 	char*		data;
1870*b30d1939SAndy Fiddaman 	char		tmpbuf[(70+4)];
1871*b30d1939SAndy Fiddaman 	char		info[8 * 1024];
1872*b30d1939SAndy Fiddaman 	Stack_t		input[4];
1873*b30d1939SAndy Fiddaman 	Notice_t	notice;
1874*b30d1939SAndy Fiddaman 	Item_t		item;
1875*b30d1939SAndy Fiddaman 	Buffer_t	buf;
1876*b30d1939SAndy Fiddaman 	Buffer_t	tmp;
1877*b30d1939SAndy Fiddaman 
1878*b30d1939SAndy Fiddaman 	buf.end = (buf.buf = buf.nxt = p) + size;
1879*b30d1939SAndy Fiddaman 	tmp.end = (tmp.buf = tmp.nxt = tmpbuf) + sizeof(tmpbuf);
1880*b30d1939SAndy Fiddaman 	level = 0;
1881*b30d1939SAndy Fiddaman 	data = info;
1882*b30d1939SAndy Fiddaman 	level = -1;
1883*b30d1939SAndy Fiddaman 	if (options)
1884*b30d1939SAndy Fiddaman 	{
1885*b30d1939SAndy Fiddaman 		level++;
1886*b30d1939SAndy Fiddaman 		input[level].file = "<options>";
1887*b30d1939SAndy Fiddaman 		input[level].info = options;
1888*b30d1939SAndy Fiddaman 		input[level].line = 0;
1889*b30d1939SAndy Fiddaman 	}
1890*b30d1939SAndy Fiddaman 	if (file && *file)
1891*b30d1939SAndy Fiddaman 	{
1892*b30d1939SAndy Fiddaman 		if (push(&input[++level], file, 0, data, &info[sizeof(info)] - data, &buf))
1893*b30d1939SAndy Fiddaman 			return -1;
1894*b30d1939SAndy Fiddaman 		data += input[level].size;
1895*b30d1939SAndy Fiddaman 	}
1896*b30d1939SAndy Fiddaman 	if (level < 0)
1897*b30d1939SAndy Fiddaman 		return 0;
1898*b30d1939SAndy Fiddaman 	s = input[level].info;
1899*b30d1939SAndy Fiddaman 	notice.test = 0;
1900*b30d1939SAndy Fiddaman 	notice.type = 0;
1901*b30d1939SAndy Fiddaman 	notice.verbose = 0;
1902*b30d1939SAndy Fiddaman 	notice.ids = 0;
1903*b30d1939SAndy Fiddaman 	notice.cc[0] = cc1;
1904*b30d1939SAndy Fiddaman 	notice.cc[1] = cc2;
1905*b30d1939SAndy Fiddaman 	notice.cc[2] = cc3;
1906*b30d1939SAndy Fiddaman 	for (i = 0; i < (sizeof(key)/sizeof(key[0])-1); i++)
1907*b30d1939SAndy Fiddaman 		notice.item[i].data = 0;
1908*b30d1939SAndy Fiddaman 	notice.item[20] = notice.item[1] = lic[notice.type];
1909*b30d1939SAndy Fiddaman 	notice.item[20].quote = notice.item[1].quote = 0;
1910*b30d1939SAndy Fiddaman 	contributor = i = k = 0;
1911*b30d1939SAndy Fiddaman 	for (;;)
1912*b30d1939SAndy Fiddaman 	{
1913*b30d1939SAndy Fiddaman 		first = 1;
1914*b30d1939SAndy Fiddaman 		while (c = *s)
1915*b30d1939SAndy Fiddaman 		{
1916*b30d1939SAndy Fiddaman 			while (c == ' ' || c == '\t' || c == '\n' && ++input[level].line || c == '\r' || c == ',' || c == ';' || c == ')')
1917*b30d1939SAndy Fiddaman 				c = *++s;
1918*b30d1939SAndy Fiddaman 			if (!c)
1919*b30d1939SAndy Fiddaman 				break;
1920*b30d1939SAndy Fiddaman 			if (c == '#')
1921*b30d1939SAndy Fiddaman 			{
1922*b30d1939SAndy Fiddaman 				while (*++s && *s != '\n');
1923*b30d1939SAndy Fiddaman 				if (*s)
1924*b30d1939SAndy Fiddaman 					s++;
1925*b30d1939SAndy Fiddaman 				input[level].line++;
1926*b30d1939SAndy Fiddaman 				continue;
1927*b30d1939SAndy Fiddaman 			}
1928*b30d1939SAndy Fiddaman 			if (c == '.')
1929*b30d1939SAndy Fiddaman 			{
1930*b30d1939SAndy Fiddaman 				while ((c = *++s) && (c == ' ' || c == '\t'));
1931*b30d1939SAndy Fiddaman 				file = s;
1932*b30d1939SAndy Fiddaman 				while (c && c != ' ' && c != '\t' && c != '\r' && c != '\n')
1933*b30d1939SAndy Fiddaman 					c = *++s;
1934*b30d1939SAndy Fiddaman 				*s = 0;
1935*b30d1939SAndy Fiddaman 				while (c && c != '\n')
1936*b30d1939SAndy Fiddaman 					c = *++s;
1937*b30d1939SAndy Fiddaman 				if (*file)
1938*b30d1939SAndy Fiddaman 				{
1939*b30d1939SAndy Fiddaman 					input[level].info = s + (c != 0);
1940*b30d1939SAndy Fiddaman 					if (++level >= (sizeof(input) / sizeof(input[0])) || push(&input[level], file, input[level-1].file, data, &info[sizeof(info)] - data, &buf))
1941*b30d1939SAndy Fiddaman 						return -1;
1942*b30d1939SAndy Fiddaman 					data += input[level].size;
1943*b30d1939SAndy Fiddaman 					s = input[level].info;
1944*b30d1939SAndy Fiddaman 				}
1945*b30d1939SAndy Fiddaman 				continue;
1946*b30d1939SAndy Fiddaman 			}
1947*b30d1939SAndy Fiddaman 			if (c == '\n')
1948*b30d1939SAndy Fiddaman 			{
1949*b30d1939SAndy Fiddaman 				s++;
1950*b30d1939SAndy Fiddaman 				input[level].line++;
1951*b30d1939SAndy Fiddaman 				continue;
1952*b30d1939SAndy Fiddaman 			}
1953*b30d1939SAndy Fiddaman 			if (c == '[')
1954*b30d1939SAndy Fiddaman 				c = *++s;
1955*b30d1939SAndy Fiddaman 			x = s;
1956*b30d1939SAndy Fiddaman 			n = 0;
1957*b30d1939SAndy Fiddaman 			while (c && c != '+' && c != '=' && c != ']' && c != ')' && c != ',' && c != ' ' && c != '\t' && c != '\n' && c != '\r')
1958*b30d1939SAndy Fiddaman 				c = *++s;
1959*b30d1939SAndy Fiddaman 			n = s - x;
1960*b30d1939SAndy Fiddaman 			h = lookup(key, x, n);
1961*b30d1939SAndy Fiddaman 			if (c == '+' || c == ']')
1962*b30d1939SAndy Fiddaman 				c = *++s;
1963*b30d1939SAndy Fiddaman 			quote = 0;
1964*b30d1939SAndy Fiddaman 			if (c == '=' || first)
1965*b30d1939SAndy Fiddaman 			{
1966*b30d1939SAndy Fiddaman 				if (c == '=')
1967*b30d1939SAndy Fiddaman 				{
1968*b30d1939SAndy Fiddaman 					q = ((c = *++s) == '"' || c == '\'') ? *s++ : 0;
1969*b30d1939SAndy Fiddaman 					if (c == '(')
1970*b30d1939SAndy Fiddaman 					{
1971*b30d1939SAndy Fiddaman 						s++;
1972*b30d1939SAndy Fiddaman 						if (h == 9)
1973*b30d1939SAndy Fiddaman 							contributor = 0;
1974*b30d1939SAndy Fiddaman 						else if (h == 4)
1975*b30d1939SAndy Fiddaman 							contributor = 1;
1976*b30d1939SAndy Fiddaman 						else
1977*b30d1939SAndy Fiddaman 						{
1978*b30d1939SAndy Fiddaman 							q = 1;
1979*b30d1939SAndy Fiddaman 							i = 0;
1980*b30d1939SAndy Fiddaman 							for (;;)
1981*b30d1939SAndy Fiddaman 							{
1982*b30d1939SAndy Fiddaman 								switch (*s++)
1983*b30d1939SAndy Fiddaman 								{
1984*b30d1939SAndy Fiddaman 								case 0:
1985*b30d1939SAndy Fiddaman 									s--;
1986*b30d1939SAndy Fiddaman 									break;
1987*b30d1939SAndy Fiddaman 								case '(':
1988*b30d1939SAndy Fiddaman 									if (!i)
1989*b30d1939SAndy Fiddaman 										q++;
1990*b30d1939SAndy Fiddaman 									continue;
1991*b30d1939SAndy Fiddaman 								case ')':
1992*b30d1939SAndy Fiddaman 									if (!i && !--q)
1993*b30d1939SAndy Fiddaman 										break;
1994*b30d1939SAndy Fiddaman 									continue;
1995*b30d1939SAndy Fiddaman 								case '"':
1996*b30d1939SAndy Fiddaman 								case '\'':
1997*b30d1939SAndy Fiddaman 									if (!i)
1998*b30d1939SAndy Fiddaman 										i = *(s - 1);
1999*b30d1939SAndy Fiddaman 									else if (i == *(s - 1))
2000*b30d1939SAndy Fiddaman 										i = 0;
2001*b30d1939SAndy Fiddaman 									continue;
2002*b30d1939SAndy Fiddaman 								case '\\':
2003*b30d1939SAndy Fiddaman 									if (*s == i && i == '"')
2004*b30d1939SAndy Fiddaman 										i++;
2005*b30d1939SAndy Fiddaman 									continue;
2006*b30d1939SAndy Fiddaman 								case '\n':
2007*b30d1939SAndy Fiddaman 									input[level].line++;
2008*b30d1939SAndy Fiddaman 									continue;
2009*b30d1939SAndy Fiddaman 								default:
2010*b30d1939SAndy Fiddaman 									continue;
2011*b30d1939SAndy Fiddaman 								}
2012*b30d1939SAndy Fiddaman 								break;
2013*b30d1939SAndy Fiddaman 							}
2014*b30d1939SAndy Fiddaman 						}
2015*b30d1939SAndy Fiddaman 						continue;
2016*b30d1939SAndy Fiddaman 					}
2017*b30d1939SAndy Fiddaman 					v = s;
2018*b30d1939SAndy Fiddaman 					while ((c = *s) && (q == '"' && (c == '\\' && (*(s + 1) == '"' || *(s + 1) == '\\') && s++ && (quote = q)) || q && c != q || !q && c != ' ' && c != '\t' && c != '\n' && c != '\r' && c != ',' && c != ';'))
2019*b30d1939SAndy Fiddaman 					{
2020*b30d1939SAndy Fiddaman 						if (c == '\n')
2021*b30d1939SAndy Fiddaman 							input[level].line++;
2022*b30d1939SAndy Fiddaman 						s++;
2023*b30d1939SAndy Fiddaman 					}
2024*b30d1939SAndy Fiddaman 				}
2025*b30d1939SAndy Fiddaman 				else
2026*b30d1939SAndy Fiddaman 				{
2027*b30d1939SAndy Fiddaman 					h = 20;
2028*b30d1939SAndy Fiddaman 					v = x;
2029*b30d1939SAndy Fiddaman 				}
2030*b30d1939SAndy Fiddaman 				if (c == '\n')
2031*b30d1939SAndy Fiddaman 					input[level].line++;
2032*b30d1939SAndy Fiddaman 				if (contributor)
2033*b30d1939SAndy Fiddaman 				{
2034*b30d1939SAndy Fiddaman 					for (i = 0; i < notice.ids; i++)
2035*b30d1939SAndy Fiddaman 						if (n == notice.id[i].name.size && !sstrncmp( x, notice.id[i].name.data, n))
2036*b30d1939SAndy Fiddaman 							break;
2037*b30d1939SAndy Fiddaman 					if (i < 64)
2038*b30d1939SAndy Fiddaman 					{
2039*b30d1939SAndy Fiddaman 						notice.id[i].name.data = x;
2040*b30d1939SAndy Fiddaman 						notice.id[i].name.size = n;
2041*b30d1939SAndy Fiddaman 						notice.id[i].name.quote = 0;
2042*b30d1939SAndy Fiddaman 						notice.id[i].value.data = v;
2043*b30d1939SAndy Fiddaman 						notice.id[i].value.size = s - v;
2044*b30d1939SAndy Fiddaman 						notice.id[i].value.quote = quote;
2045*b30d1939SAndy Fiddaman 						if (notice.ids <= i)
2046*b30d1939SAndy Fiddaman 							notice.ids = i + 1;
2047*b30d1939SAndy Fiddaman 					}
2048*b30d1939SAndy Fiddaman 				}
2049*b30d1939SAndy Fiddaman 				else if (h == 16)
2050*b30d1939SAndy Fiddaman 				{
2051*b30d1939SAndy Fiddaman 					if ((s - v) == 3 && v[0] == 'a' && v[1] == 'l' && v[2] == 'l')
2052*b30d1939SAndy Fiddaman 					{
2053*b30d1939SAndy Fiddaman 						for (i = 0; i < (sizeof(key)/sizeof(key[0])-1); i++)
2054*b30d1939SAndy Fiddaman 							if (notice.item[i].size)
2055*b30d1939SAndy Fiddaman 							{
2056*b30d1939SAndy Fiddaman 								expand(&notice, &buf, &key[i]);
2057*b30d1939SAndy Fiddaman 								((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '=')):(( '='),(-1)));
2058*b30d1939SAndy Fiddaman 								for (h = 0;; h++)
2059*b30d1939SAndy Fiddaman 									if (h >= notice.item[i].size)
2060*b30d1939SAndy Fiddaman 									{
2061*b30d1939SAndy Fiddaman 										h = 0;
2062*b30d1939SAndy Fiddaman 										break;
2063*b30d1939SAndy Fiddaman 									}
2064*b30d1939SAndy Fiddaman 									else if (notice.item[i].data[h] == ' ' || notice.item[i].data[h] == '\t')
2065*b30d1939SAndy Fiddaman 										break;
2066*b30d1939SAndy Fiddaman 								if (h)
2067*b30d1939SAndy Fiddaman 									((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '\'')):(( '\''),(-1)));
2068*b30d1939SAndy Fiddaman 								expand(&notice, &buf, &notice.item[i]);
2069*b30d1939SAndy Fiddaman 								if (h)
2070*b30d1939SAndy Fiddaman 									((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '\'')):(( '\''),(-1)));
2071*b30d1939SAndy Fiddaman 								((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '\n')):(( '\n'),(-1)));
2072*b30d1939SAndy Fiddaman 							}
2073*b30d1939SAndy Fiddaman 					}
2074*b30d1939SAndy Fiddaman 					else
2075*b30d1939SAndy Fiddaman 					{
2076*b30d1939SAndy Fiddaman 						if ((h = lookup(key, v, s - v)) < 0)
2077*b30d1939SAndy Fiddaman 						{
2078*b30d1939SAndy Fiddaman 							item.data = v;
2079*b30d1939SAndy Fiddaman 							item.size = s - v;
2080*b30d1939SAndy Fiddaman 							item.quote = 0;
2081*b30d1939SAndy Fiddaman 							expand(&notice, &buf, &item);
2082*b30d1939SAndy Fiddaman 						}
2083*b30d1939SAndy Fiddaman 						else
2084*b30d1939SAndy Fiddaman 							expand(&notice, &buf, &notice.item[h]);
2085*b30d1939SAndy Fiddaman 						((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '\n')):(( '\n'),(-1)));
2086*b30d1939SAndy Fiddaman 					}
2087*b30d1939SAndy Fiddaman 					return (*(( &buf)->nxt>=( &buf)->end?(( &buf)->nxt=( &buf)->end-1):( &buf)->nxt)=0,( &buf)->nxt-( &buf)->buf);
2088*b30d1939SAndy Fiddaman 				}
2089*b30d1939SAndy Fiddaman 				else
2090*b30d1939SAndy Fiddaman 				{
2091*b30d1939SAndy Fiddaman 					if (h == 20)
2092*b30d1939SAndy Fiddaman 						switch (c = lookup(lic, v, s - v))
2093*b30d1939SAndy Fiddaman 						{
2094*b30d1939SAndy Fiddaman 						case 0:
2095*b30d1939SAndy Fiddaman 							return 0;
2096*b30d1939SAndy Fiddaman 						case 2:
2097*b30d1939SAndy Fiddaman 							notice.test = 1;
2098*b30d1939SAndy Fiddaman 							h = -1;
2099*b30d1939SAndy Fiddaman 							break;
2100*b30d1939SAndy Fiddaman 						case 3:
2101*b30d1939SAndy Fiddaman 							notice.verbose = 1;
2102*b30d1939SAndy Fiddaman 							h = -1;
2103*b30d1939SAndy Fiddaman 							break;
2104*b30d1939SAndy Fiddaman 						case 4:
2105*b30d1939SAndy Fiddaman 							notice.type = c;
2106*b30d1939SAndy Fiddaman 							h = -1;
2107*b30d1939SAndy Fiddaman 							break;
2108*b30d1939SAndy Fiddaman 						case -1:
2109*b30d1939SAndy Fiddaman 							c = 12;
2110*b30d1939SAndy Fiddaman 
2111*b30d1939SAndy Fiddaman 						default:
2112*b30d1939SAndy Fiddaman 							notice.type = c;
2113*b30d1939SAndy Fiddaman 							notice.item[1].data = lic[lic[c].quote].data;
2114*b30d1939SAndy Fiddaman 							notice.item[1].size = lic[lic[c].quote].size;
2115*b30d1939SAndy Fiddaman 							if (notice.item[20].data != lic[0].data)
2116*b30d1939SAndy Fiddaman 								h = -1;
2117*b30d1939SAndy Fiddaman 							break;
2118*b30d1939SAndy Fiddaman 						}
2119*b30d1939SAndy Fiddaman 					if (h >= 0)
2120*b30d1939SAndy Fiddaman 					{
2121*b30d1939SAndy Fiddaman 						notice.item[h].data = (notice.item[h].size = s - v) ? v : (char*)0;
2122*b30d1939SAndy Fiddaman 						notice.item[h].quote = quote;
2123*b30d1939SAndy Fiddaman 						k = 1;
2124*b30d1939SAndy Fiddaman 					}
2125*b30d1939SAndy Fiddaman 				}
2126*b30d1939SAndy Fiddaman 			}
2127*b30d1939SAndy Fiddaman 			else
2128*b30d1939SAndy Fiddaman 			{
2129*b30d1939SAndy Fiddaman 				if (input[level].file)
2130*b30d1939SAndy Fiddaman 				{
2131*b30d1939SAndy Fiddaman 					copy(&buf, "\"", -1);
2132*b30d1939SAndy Fiddaman 					copy(&buf, input[level].file, -1);
2133*b30d1939SAndy Fiddaman 					copy(&buf, "\", line ", -1);
2134*b30d1939SAndy Fiddaman 					x = &tmpbuf[sizeof(tmpbuf)];
2135*b30d1939SAndy Fiddaman 					*--x = 0;
2136*b30d1939SAndy Fiddaman 					n = ++input[level].line;
2137*b30d1939SAndy Fiddaman 					do *--x = ("0123456789")[n % 10]; while (n /= 10);
2138*b30d1939SAndy Fiddaman 					copy(&buf, x, -1);
2139*b30d1939SAndy Fiddaman 					copy(&buf, ": ", -1);
2140*b30d1939SAndy Fiddaman 				}
2141*b30d1939SAndy Fiddaman 				copy(&buf, "option error: assignment expected", -1);
2142*b30d1939SAndy Fiddaman 				((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( 0)):(( 0),(-1)));
2143*b30d1939SAndy Fiddaman 				return -1;
2144*b30d1939SAndy Fiddaman 			}
2145*b30d1939SAndy Fiddaman 			if (*s)
2146*b30d1939SAndy Fiddaman 				s++;
2147*b30d1939SAndy Fiddaman 			first = 0;
2148*b30d1939SAndy Fiddaman 		}
2149*b30d1939SAndy Fiddaman 		if (!level--)
2150*b30d1939SAndy Fiddaman 			break;
2151*b30d1939SAndy Fiddaman 		s = input[level].info;
2152*b30d1939SAndy Fiddaman 	}
2153*b30d1939SAndy Fiddaman 	if (!k)
2154*b30d1939SAndy Fiddaman 		return 0;
2155*b30d1939SAndy Fiddaman 	if (notice.type == 1 && (!notice.verbose || !notice.item[12].data))
2156*b30d1939SAndy Fiddaman 		return 0;
2157*b30d1939SAndy Fiddaman 	if (notice.type != 4)
2158*b30d1939SAndy Fiddaman 	{
2159*b30d1939SAndy Fiddaman 		if (!notice.type)
2160*b30d1939SAndy Fiddaman 			notice.type = 12;
2161*b30d1939SAndy Fiddaman 		comment(&notice, &buf, ((char*)0), 1, 0);
2162*b30d1939SAndy Fiddaman 		comment(&notice, &buf, ((char*)0), 0, 0);
2163*b30d1939SAndy Fiddaman 		if (notice.item[14].data)
2164*b30d1939SAndy Fiddaman 		{
2165*b30d1939SAndy Fiddaman 			copy(&tmp, "This software is part of the ", -1);
2166*b30d1939SAndy Fiddaman 			expand(&notice, &tmp, &notice.item[14]);
2167*b30d1939SAndy Fiddaman 			copy(&tmp, " package", -1);
2168*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2169*b30d1939SAndy Fiddaman 		}
2170*b30d1939SAndy Fiddaman 		if (notice.type >= 5)
2171*b30d1939SAndy Fiddaman 		{
2172*b30d1939SAndy Fiddaman 			copyright(&notice, &tmp);
2173*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2174*b30d1939SAndy Fiddaman 			if (notice.type >= 12)
2175*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "All Rights Reserved",sizeof( "All Rights Reserved")-1, 0);
2176*b30d1939SAndy Fiddaman 		}
2177*b30d1939SAndy Fiddaman 		if (notice.type == 6 || notice.type == 7)
2178*b30d1939SAndy Fiddaman 		{
2179*b30d1939SAndy Fiddaman 			copy(&tmp, notice.item[14].data ? "and": "This software", -1);
2180*b30d1939SAndy Fiddaman 			copy(&tmp, " is licensed under the", -1);
2181*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2182*b30d1939SAndy Fiddaman 			if (notice.type == 7)
2183*b30d1939SAndy Fiddaman 				copy(&tmp, "Eclipse Public License", -1);
2184*b30d1939SAndy Fiddaman 			else
2185*b30d1939SAndy Fiddaman 				copy(&tmp, "Common Public License", -1);
2186*b30d1939SAndy Fiddaman 			if (notice.item[23].data)
2187*b30d1939SAndy Fiddaman 			{
2188*b30d1939SAndy Fiddaman 				copy(&tmp, ", Version ", -1);
2189*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[23]);
2190*b30d1939SAndy Fiddaman 			}
2191*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2192*b30d1939SAndy Fiddaman 			if (notice.item[5].data || notice.item[2].data)
2193*b30d1939SAndy Fiddaman 			{
2194*b30d1939SAndy Fiddaman 				copy(&tmp, "by ", -1);
2195*b30d1939SAndy Fiddaman 				if (notice.item[15].data)
2196*b30d1939SAndy Fiddaman 				{
2197*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[15]);
2198*b30d1939SAndy Fiddaman 					copy(&tmp, " ", -1);
2199*b30d1939SAndy Fiddaman 				}
2200*b30d1939SAndy Fiddaman 				if (notice.item[5].data)
2201*b30d1939SAndy Fiddaman 				{
2202*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[5]);
2203*b30d1939SAndy Fiddaman 					if (notice.item[8].data)
2204*b30d1939SAndy Fiddaman 					{
2205*b30d1939SAndy Fiddaman 						copy(&tmp, " ", -1);
2206*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[8]);
2207*b30d1939SAndy Fiddaman 					}
2208*b30d1939SAndy Fiddaman 				}
2209*b30d1939SAndy Fiddaman 				else if (notice.item[2].data)
2210*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[2]);
2211*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2212*b30d1939SAndy Fiddaman 			}
2213*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2214*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "A copy of the License is available at",sizeof( "A copy of the License is available at")-1, 0);
2215*b30d1939SAndy Fiddaman 			if (notice.item[21].data)
2216*b30d1939SAndy Fiddaman 			{
2217*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[21]);
2218*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2219*b30d1939SAndy Fiddaman 				if (notice.item[22].data)
2220*b30d1939SAndy Fiddaman 				{
2221*b30d1939SAndy Fiddaman 					copy(&tmp, "(with md5 checksum ", -1);
2222*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[22]);
2223*b30d1939SAndy Fiddaman 					copy(&tmp, ")", -1);
2224*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2225*b30d1939SAndy Fiddaman 				}
2226*b30d1939SAndy Fiddaman 			}
2227*b30d1939SAndy Fiddaman 			else if (notice.type == 7)
2228*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "http://www.eclipse.org/org/documents/epl-v10.html",sizeof( "http://www.eclipse.org/org/documents/epl-v10.html")-1, 0);
2229*b30d1939SAndy Fiddaman 			else
2230*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "http://www.opensource.org/licenses/cpl",sizeof( "http://www.opensource.org/licenses/cpl")-1, 0);
2231*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2232*b30d1939SAndy Fiddaman 		}
2233*b30d1939SAndy Fiddaman 		else if (notice.type == 5)
2234*b30d1939SAndy Fiddaman 		{
2235*b30d1939SAndy Fiddaman 			copy(&tmp, notice.item[14].data ? "and it": "This software", -1);
2236*b30d1939SAndy Fiddaman 			copy(&tmp, " may only be used by you under license from", -1);
2237*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2238*b30d1939SAndy Fiddaman 			if (notice.item[i = 5].data)
2239*b30d1939SAndy Fiddaman 			{
2240*b30d1939SAndy Fiddaman 				if (notice.item[15].data)
2241*b30d1939SAndy Fiddaman 				{
2242*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[i = 15]);
2243*b30d1939SAndy Fiddaman 					copy(&tmp, " ", -1);
2244*b30d1939SAndy Fiddaman 				}
2245*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[5]);
2246*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2247*b30d1939SAndy Fiddaman 			}
2248*b30d1939SAndy Fiddaman 			else if (notice.item[i = 2].data)
2249*b30d1939SAndy Fiddaman 			{
2250*b30d1939SAndy Fiddaman 				if (notice.item[15].data)
2251*b30d1939SAndy Fiddaman 				{
2252*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[i = 15]);
2253*b30d1939SAndy Fiddaman 					copy(&tmp, " ", -1);
2254*b30d1939SAndy Fiddaman 				}
2255*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[2]);
2256*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2257*b30d1939SAndy Fiddaman 			}
2258*b30d1939SAndy Fiddaman 			else
2259*b30d1939SAndy Fiddaman 				i = -1;
2260*b30d1939SAndy Fiddaman 			if (notice.item[21].data)
2261*b30d1939SAndy Fiddaman 			{
2262*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "A copy of the Source Code Agreement is available",sizeof( "A copy of the Source Code Agreement is available")-1, 0);
2263*b30d1939SAndy Fiddaman 				copy(&tmp, "at the ", -1);
2264*b30d1939SAndy Fiddaman 				if (i >= 0)
2265*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[i]);
2266*b30d1939SAndy Fiddaman 				copy(&tmp, " Internet web site URL", -1);
2267*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2268*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2269*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[21]);
2270*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2271*b30d1939SAndy Fiddaman 				if (notice.item[22].data)
2272*b30d1939SAndy Fiddaman 				{
2273*b30d1939SAndy Fiddaman 					copy(&tmp, "(with an md5 checksum of ", -1);
2274*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[22]);
2275*b30d1939SAndy Fiddaman 					copy(&tmp, ")", -1);
2276*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2277*b30d1939SAndy Fiddaman 				}
2278*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2279*b30d1939SAndy Fiddaman 			}
2280*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "If you have copied or used this software without agreeing",sizeof( "If you have copied or used this software without agreeing")-1, 0);
2281*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "to the terms of the license you are infringing on",sizeof( "to the terms of the license you are infringing on")-1, 0);
2282*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "the license and copyright and are violating",sizeof( "the license and copyright and are violating")-1, 0);
2283*b30d1939SAndy Fiddaman 			if (i >= 0)
2284*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[i]);
2285*b30d1939SAndy Fiddaman 			copy(&tmp, "'s", -1);
2286*b30d1939SAndy Fiddaman 			if (n >= (70-32))
2287*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2288*b30d1939SAndy Fiddaman 			else
2289*b30d1939SAndy Fiddaman 				((( &tmp)->nxt<( &tmp)->end)?(*( &tmp)->nxt++=( ' ')):(( ' '),(-1)));
2290*b30d1939SAndy Fiddaman 			copy(&tmp, "intellectual property rights.", -1);
2291*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2292*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2293*b30d1939SAndy Fiddaman 		}
2294*b30d1939SAndy Fiddaman 		else if (notice.type == 11)
2295*b30d1939SAndy Fiddaman 		{
2296*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2297*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "This is free software; you can redistribute it and/or",sizeof( "This is free software; you can redistribute it and/or")-1, 0);
2298*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "modify it under the terms of the GNU General Public License",sizeof( "modify it under the terms of the GNU General Public License")-1, 0);
2299*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "as published by the Free Software Foundation;",sizeof( "as published by the Free Software Foundation;")-1, 0);
2300*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "either version 2, or (at your option) any later version.",sizeof( "either version 2, or (at your option) any later version.")-1, 0);
2301*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2302*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "This software is distributed in the hope that it",sizeof( "This software is distributed in the hope that it")-1, 0);
2303*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "will be useful, but WITHOUT ANY WARRANTY;",sizeof( "will be useful, but WITHOUT ANY WARRANTY;")-1, 0);
2304*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "without even the implied warranty of MERCHANTABILITY",sizeof( "without even the implied warranty of MERCHANTABILITY")-1, 0);
2305*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "or FITNESS FOR A PARTICULAR PURPOSE.",sizeof( "or FITNESS FOR A PARTICULAR PURPOSE.")-1, 0);
2306*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "See the GNU General Public License for more details.",sizeof( "See the GNU General Public License for more details.")-1, 0);
2307*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2308*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "You should have received a copy of the",sizeof( "You should have received a copy of the")-1, 0);
2309*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "GNU General Public License",sizeof( "GNU General Public License")-1, 0);
2310*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "along with this software (see the file COPYING.)",sizeof( "along with this software (see the file COPYING.)")-1, 0);
2311*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "If not, a copy is available at",sizeof( "If not, a copy is available at")-1, 0);
2312*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "http://www.gnu.org/copyleft/gpl.html",sizeof( "http://www.gnu.org/copyleft/gpl.html")-1, 0);
2313*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2314*b30d1939SAndy Fiddaman 		}
2315*b30d1939SAndy Fiddaman 		else if (notice.type == 8)
2316*b30d1939SAndy Fiddaman 		{
2317*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2318*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "Redistribution and use in source and binary forms, with or",sizeof( "Redistribution and use in source and binary forms, with or")-1, -1);
2319*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "without modification, are permitted provided that the following",sizeof( "without modification, are permitted provided that the following")-1, -1);
2320*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "conditions are met:",sizeof( "conditions are met:")-1, -1);
2321*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2322*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "   1. Redistributions of source code must retain the above",sizeof( "   1. Redistributions of source code must retain the above")-1, -1);
2323*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      copyright notice, this list of conditions and the",sizeof( "      copyright notice, this list of conditions and the")-1, -1);
2324*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      following disclaimer.",sizeof( "      following disclaimer.")-1, -1);
2325*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2326*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "   2. Redistributions in binary form must reproduce the above",sizeof( "   2. Redistributions in binary form must reproduce the above")-1, -1);
2327*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      copyright notice, this list of conditions and the",sizeof( "      copyright notice, this list of conditions and the")-1, -1);
2328*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      following disclaimer in the documentation and/or other",sizeof( "      following disclaimer in the documentation and/or other")-1, -1);
2329*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      materials provided with the distribution.",sizeof( "      materials provided with the distribution.")-1, -1);
2330*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2331*b30d1939SAndy Fiddaman 			copy(&tmp, "   3. Neither the name of ", -1);
2332*b30d1939SAndy Fiddaman 			if (notice.item[i = 15].data || notice.item[i = 5].data || notice.item[i = 2].data)
2333*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[i]);
2334*b30d1939SAndy Fiddaman 			else
2335*b30d1939SAndy Fiddaman 				copy(&tmp, "the copyright holder", -1);
2336*b30d1939SAndy Fiddaman 			copy(&tmp, " nor the", -1);
2337*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), -1);
2338*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      names of its contributors may be used to endorse or",sizeof( "      names of its contributors may be used to endorse or")-1, -1);
2339*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      promote products derived from this software without",sizeof( "      promote products derived from this software without")-1, -1);
2340*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "      specific prior written permission.",sizeof( "      specific prior written permission.")-1, -1);
2341*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2342*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND",sizeof( "THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND")-1, -1);
2343*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,",sizeof( "CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,")-1, -1);
2344*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF",sizeof( "INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF")-1, -1);
2345*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE",sizeof( "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE")-1, -1);
2346*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS",sizeof( "DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS")-1, -1);
2347*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,",sizeof( "BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,")-1, -1);
2348*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED",sizeof( "EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED")-1, -1);
2349*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,",sizeof( "TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,")-1, -1);
2350*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON",sizeof( "DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON")-1, -1);
2351*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,",sizeof( "ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,")-1, -1);
2352*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY",sizeof( "OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY")-1, -1);
2353*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE",sizeof( "OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE")-1, -1);
2354*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "POSSIBILITY OF SUCH DAMAGE.",sizeof( "POSSIBILITY OF SUCH DAMAGE.")-1, -1);
2355*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2356*b30d1939SAndy Fiddaman 		}
2357*b30d1939SAndy Fiddaman 		else if (notice.type == 9)
2358*b30d1939SAndy Fiddaman 		{
2359*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2360*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "This software is provided 'as-is', without any express or implied",sizeof( "This software is provided 'as-is', without any express or implied")-1, -1);
2361*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "warranty. In no event will the authors be held liable for any",sizeof( "warranty. In no event will the authors be held liable for any")-1, -1);
2362*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "damages arising from the use of this software.",sizeof( "damages arising from the use of this software.")-1, -1);
2363*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2364*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "Permission is granted to anyone to use this software for any",sizeof( "Permission is granted to anyone to use this software for any")-1, -1);
2365*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "purpose, including commercial applications, and to alter it and",sizeof( "purpose, including commercial applications, and to alter it and")-1, -1);
2366*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "redistribute it freely, subject to the following restrictions:",sizeof( "redistribute it freely, subject to the following restrictions:")-1, -1);
2367*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2368*b30d1939SAndy Fiddaman 			comment( &notice, &buf, " 1. The origin of this software must not be misrepresented;",sizeof( " 1. The origin of this software must not be misrepresented;")-1, -1);
2369*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    you must not claim that you wrote the original software. If",sizeof( "    you must not claim that you wrote the original software. If")-1, -1);
2370*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    you use this software in a product, an acknowledgment in the",sizeof( "    you use this software in a product, an acknowledgment in the")-1, -1);
2371*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    product documentation would be appreciated but is not",sizeof( "    product documentation would be appreciated but is not")-1, -1);
2372*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    required.",sizeof( "    required.")-1, -1);
2373*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2374*b30d1939SAndy Fiddaman 			comment( &notice, &buf, " 2. Altered source versions must be plainly marked as such,",sizeof( " 2. Altered source versions must be plainly marked as such,")-1, -1);
2375*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    and must not be misrepresented as being the original",sizeof( "    and must not be misrepresented as being the original")-1, -1);
2376*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    software.",sizeof( "    software.")-1, -1);
2377*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2378*b30d1939SAndy Fiddaman 			comment( &notice, &buf, " 3. This notice may not be removed or altered from any source",sizeof( " 3. This notice may not be removed or altered from any source")-1, -1);
2379*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "    distribution.",sizeof( "    distribution.")-1, -1);
2380*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2381*b30d1939SAndy Fiddaman 		}
2382*b30d1939SAndy Fiddaman 		else if (notice.type == 10)
2383*b30d1939SAndy Fiddaman 		{
2384*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2385*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "Permission is hereby granted, free of charge, to any person",sizeof( "Permission is hereby granted, free of charge, to any person")-1, 0);
2386*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "obtaining a copy of this software and associated",sizeof( "obtaining a copy of this software and associated")-1, 0);
2387*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "documentation files (the \"Software\"), to deal in the",sizeof( "documentation files (the \"Software\"), to deal in the")-1, 0);
2388*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "Software without restriction, including without limitation",sizeof( "Software without restriction, including without limitation")-1, 0);
2389*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "the rights to use, copy, modify, merge, publish, distribute,",sizeof( "the rights to use, copy, modify, merge, publish, distribute,")-1, 0);
2390*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "sublicense, and/or sell copies of the Software, and to",sizeof( "sublicense, and/or sell copies of the Software, and to")-1, 0);
2391*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "permit persons to whom the Software is furnished to do so,",sizeof( "permit persons to whom the Software is furnished to do so,")-1, 0);
2392*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "subject to the following conditions:",sizeof( "subject to the following conditions:")-1, 0);
2393*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2394*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "The above copyright notice and this permission notice shall",sizeof( "The above copyright notice and this permission notice shall")-1, 0);
2395*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "be included in all copies or substantial portions of the",sizeof( "be included in all copies or substantial portions of the")-1, 0);
2396*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "Software.",sizeof( "Software.")-1, 0);
2397*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2398*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY",sizeof( "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY")-1, 0);
2399*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE",sizeof( "KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE")-1, 0);
2400*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR",sizeof( "WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR")-1, 0);
2401*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS",sizeof( "PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS")-1, 0);
2402*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR",sizeof( "OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR")-1, 0);
2403*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR",sizeof( "OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR")-1, 0);
2404*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE",sizeof( "OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE")-1, 0);
2405*b30d1939SAndy Fiddaman 			comment( &notice, &buf, "SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.",sizeof( "SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.")-1, 0);
2406*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2407*b30d1939SAndy Fiddaman 		}
2408*b30d1939SAndy Fiddaman 		else
2409*b30d1939SAndy Fiddaman 		{
2410*b30d1939SAndy Fiddaman 			if (notice.type == 15)
2411*b30d1939SAndy Fiddaman 			{
2412*b30d1939SAndy Fiddaman 				if (notice.item[i = 15].data || notice.item[i = 5].data || notice.item[i = 2].data)
2413*b30d1939SAndy Fiddaman 				{
2414*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[i]);
2415*b30d1939SAndy Fiddaman 					copy(&tmp, " - ", -1);
2416*b30d1939SAndy Fiddaman 				}
2417*b30d1939SAndy Fiddaman 				else
2418*b30d1939SAndy Fiddaman 					i = -1;
2419*b30d1939SAndy Fiddaman 				copy(&tmp, "Proprietary", -1);
2420*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2421*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2422*b30d1939SAndy Fiddaman 				if (notice.item[21].data)
2423*b30d1939SAndy Fiddaman 				{
2424*b30d1939SAndy Fiddaman 					copy(&tmp, "This is proprietary source code", -1);
2425*b30d1939SAndy Fiddaman 					if (i >= 0)
2426*b30d1939SAndy Fiddaman 						copy(&tmp, " licensed by", -1);
2427*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2428*b30d1939SAndy Fiddaman 					if (notice.item[15].data)
2429*b30d1939SAndy Fiddaman 					{
2430*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[15]);
2431*b30d1939SAndy Fiddaman 						copy(&tmp, " ", -1);
2432*b30d1939SAndy Fiddaman 					}
2433*b30d1939SAndy Fiddaman 					if (notice.item[5].data)
2434*b30d1939SAndy Fiddaman 					{
2435*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[5]);
2436*b30d1939SAndy Fiddaman 						comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2437*b30d1939SAndy Fiddaman 					}
2438*b30d1939SAndy Fiddaman 					else if (notice.item[2].data)
2439*b30d1939SAndy Fiddaman 					{
2440*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[2]);
2441*b30d1939SAndy Fiddaman 						comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2442*b30d1939SAndy Fiddaman 					}
2443*b30d1939SAndy Fiddaman 				}
2444*b30d1939SAndy Fiddaman 				else
2445*b30d1939SAndy Fiddaman 				{
2446*b30d1939SAndy Fiddaman 					copy(&tmp, "This is unpublished proprietary source code", -1);
2447*b30d1939SAndy Fiddaman 					if (i >= 0)
2448*b30d1939SAndy Fiddaman 						copy(&tmp, " of", -1);
2449*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2450*b30d1939SAndy Fiddaman 					if (notice.item[i = 15].data || notice.item[i = 5].data)
2451*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[i]);
2452*b30d1939SAndy Fiddaman 					if (notice.item[2].data)
2453*b30d1939SAndy Fiddaman 					{
2454*b30d1939SAndy Fiddaman 						if ((( &tmp)->nxt-( &tmp)->buf))
2455*b30d1939SAndy Fiddaman 							((( &tmp)->nxt<( &tmp)->end)?(*( &tmp)->nxt++=( ' ')):(( ' '),(-1)));
2456*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[2]);
2457*b30d1939SAndy Fiddaman 					}
2458*b30d1939SAndy Fiddaman 					if ((( &tmp)->nxt-( &tmp)->buf))
2459*b30d1939SAndy Fiddaman 						comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 1);
2460*b30d1939SAndy Fiddaman 					comment( &notice, &buf, "and is not to be disclosed or used except in",sizeof( "and is not to be disclosed or used except in")-1, 1);
2461*b30d1939SAndy Fiddaman 					comment( &notice, &buf, "accordance with applicable agreements",sizeof( "accordance with applicable agreements")-1, 1);
2462*b30d1939SAndy Fiddaman 				}
2463*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2464*b30d1939SAndy Fiddaman 			}
2465*b30d1939SAndy Fiddaman 			else if (notice.type == 13)
2466*b30d1939SAndy Fiddaman 			{
2467*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "For nonexclusive individual use",sizeof( "For nonexclusive individual use")-1, 1);
2468*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2469*b30d1939SAndy Fiddaman 			}
2470*b30d1939SAndy Fiddaman 			else if (notice.type == 14)
2471*b30d1939SAndy Fiddaman 			{
2472*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "For noncommercial use",sizeof( "For noncommercial use")-1, 1);
2473*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2474*b30d1939SAndy Fiddaman 			}
2475*b30d1939SAndy Fiddaman 			if (notice.type >= 15 && !notice.item[21].data)
2476*b30d1939SAndy Fiddaman 			{
2477*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "Unpublished & Not for Publication",sizeof( "Unpublished & Not for Publication")-1, 0);
2478*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2479*b30d1939SAndy Fiddaman 			}
2480*b30d1939SAndy Fiddaman 			if (notice.item[21].data)
2481*b30d1939SAndy Fiddaman 			{
2482*b30d1939SAndy Fiddaman 				copy(&tmp, "This software is licensed", -1);
2483*b30d1939SAndy Fiddaman 				if (notice.item[5].data || notice.item[2].data)
2484*b30d1939SAndy Fiddaman 				{
2485*b30d1939SAndy Fiddaman 					copy(&tmp, " by", -1);
2486*b30d1939SAndy Fiddaman 					if ((notice.item[15].size + (notice.item[5].data ? (notice.item[5].size + notice.item[8].size) : notice.item[2].size)) >= ((70-32) - 6))
2487*b30d1939SAndy Fiddaman 						comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2488*b30d1939SAndy Fiddaman 					else
2489*b30d1939SAndy Fiddaman 						((( &tmp)->nxt<( &tmp)->end)?(*( &tmp)->nxt++=( ' ')):(( ' '),(-1)));
2490*b30d1939SAndy Fiddaman 					if (notice.item[15].data)
2491*b30d1939SAndy Fiddaman 					{
2492*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[15]);
2493*b30d1939SAndy Fiddaman 						copy(&tmp, " ", -1);
2494*b30d1939SAndy Fiddaman 					}
2495*b30d1939SAndy Fiddaman 					if (notice.item[5].data)
2496*b30d1939SAndy Fiddaman 					{
2497*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[5]);
2498*b30d1939SAndy Fiddaman 						if (notice.item[8].data)
2499*b30d1939SAndy Fiddaman 						{
2500*b30d1939SAndy Fiddaman 							copy(&tmp, " ", -1);
2501*b30d1939SAndy Fiddaman 							expand(&notice, &tmp, &notice.item[8]);
2502*b30d1939SAndy Fiddaman 						}
2503*b30d1939SAndy Fiddaman 					}
2504*b30d1939SAndy Fiddaman 					else if (notice.item[2].data)
2505*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.item[2]);
2506*b30d1939SAndy Fiddaman 				}
2507*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2508*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "under the terms and conditions of the license in",sizeof( "under the terms and conditions of the license in")-1, 0);
2509*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[21]);
2510*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2511*b30d1939SAndy Fiddaman 				if (notice.item[22].data)
2512*b30d1939SAndy Fiddaman 				{
2513*b30d1939SAndy Fiddaman 					copy(&tmp, "(with an md5 checksum of ", -1);
2514*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &notice.item[22]);
2515*b30d1939SAndy Fiddaman 					copy(&tmp, ")", -1);
2516*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2517*b30d1939SAndy Fiddaman 				}
2518*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2519*b30d1939SAndy Fiddaman 			}
2520*b30d1939SAndy Fiddaman 			else if (notice.type == 15)
2521*b30d1939SAndy Fiddaman 			{
2522*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "The copyright notice above does not evidence any",sizeof( "The copyright notice above does not evidence any")-1, 0);
2523*b30d1939SAndy Fiddaman 				comment( &notice, &buf, "actual or intended publication of such source code",sizeof( "actual or intended publication of such source code")-1, 0);
2524*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2525*b30d1939SAndy Fiddaman 			}
2526*b30d1939SAndy Fiddaman 		}
2527*b30d1939SAndy Fiddaman 		if (v = notice.item[12].data)
2528*b30d1939SAndy Fiddaman 		{
2529*b30d1939SAndy Fiddaman 			x = v + notice.item[12].size;
2530*b30d1939SAndy Fiddaman 			if (*v == '\n')
2531*b30d1939SAndy Fiddaman 				v++;
2532*b30d1939SAndy Fiddaman 			item.quote = notice.item[12].quote;
2533*b30d1939SAndy Fiddaman 			do
2534*b30d1939SAndy Fiddaman 			{
2535*b30d1939SAndy Fiddaman 				for (item.data = v; v < x && *v != '\n'; v++);
2536*b30d1939SAndy Fiddaman 				if ((item.size = v - item.data) && *item.data == '\t')
2537*b30d1939SAndy Fiddaman 				{
2538*b30d1939SAndy Fiddaman 					item.data++;
2539*b30d1939SAndy Fiddaman 					item.size--;
2540*b30d1939SAndy Fiddaman 					h = 0;
2541*b30d1939SAndy Fiddaman 				}
2542*b30d1939SAndy Fiddaman 				else
2543*b30d1939SAndy Fiddaman 					h = -1;
2544*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &item);
2545*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), h);
2546*b30d1939SAndy Fiddaman 			} while (v++ < x);
2547*b30d1939SAndy Fiddaman 			if (item.size)
2548*b30d1939SAndy Fiddaman 				comment(&notice, &buf, ((char*)0), 0, 0);
2549*b30d1939SAndy Fiddaman 		}
2550*b30d1939SAndy Fiddaman 		if (notice.item[13].data)
2551*b30d1939SAndy Fiddaman 		{
2552*b30d1939SAndy Fiddaman 			expand(&notice, &tmp, &notice.item[13]);
2553*b30d1939SAndy Fiddaman 			comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2554*b30d1939SAndy Fiddaman 			if (notice.item[i = 15].data || notice.item[i = 5].data)
2555*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[i]);
2556*b30d1939SAndy Fiddaman 			if (notice.item[2].data)
2557*b30d1939SAndy Fiddaman 			{
2558*b30d1939SAndy Fiddaman 				if ((( &tmp)->nxt-( &tmp)->buf))
2559*b30d1939SAndy Fiddaman 					((( &tmp)->nxt<( &tmp)->end)?(*( &tmp)->nxt++=( ' ')):(( ' '),(-1)));
2560*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[2]);
2561*b30d1939SAndy Fiddaman 			}
2562*b30d1939SAndy Fiddaman 			if ((( &tmp)->nxt-( &tmp)->buf))
2563*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2564*b30d1939SAndy Fiddaman 			if (notice.item[10].data)
2565*b30d1939SAndy Fiddaman 			{
2566*b30d1939SAndy Fiddaman 				expand(&notice, &tmp, &notice.item[10]);
2567*b30d1939SAndy Fiddaman 				comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2568*b30d1939SAndy Fiddaman 			}
2569*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2570*b30d1939SAndy Fiddaman 		}
2571*b30d1939SAndy Fiddaman 	}
2572*b30d1939SAndy Fiddaman 	if (v = notice.item[0].data)
2573*b30d1939SAndy Fiddaman 	{
2574*b30d1939SAndy Fiddaman 		x = v + notice.item[0].size;
2575*b30d1939SAndy Fiddaman 		q = (x - v) == 1 && (*v == '*' || *v == '-');
2576*b30d1939SAndy Fiddaman 		k = q && notice.type != 4 ? -1 : 0;
2577*b30d1939SAndy Fiddaman 		for (;;)
2578*b30d1939SAndy Fiddaman 		{
2579*b30d1939SAndy Fiddaman 			if (!q)
2580*b30d1939SAndy Fiddaman 			{
2581*b30d1939SAndy Fiddaman 				while (v < x && (*v == ' ' || *v == '\t' || *v == '\r' || *v == '\n' || *v == ',' || *v == '+'))
2582*b30d1939SAndy Fiddaman 					v++;
2583*b30d1939SAndy Fiddaman 				if (v >= x)
2584*b30d1939SAndy Fiddaman 					break;
2585*b30d1939SAndy Fiddaman 				item.data = v;
2586*b30d1939SAndy Fiddaman 				while (v < x && *v != ',' && *v != '+' && *v++ != '>');
2587*b30d1939SAndy Fiddaman 				item.size = v - item.data;
2588*b30d1939SAndy Fiddaman 				item.quote = notice.item[0].quote;
2589*b30d1939SAndy Fiddaman 			}
2590*b30d1939SAndy Fiddaman 			h = 0;
2591*b30d1939SAndy Fiddaman 			for (i = 0; i < notice.ids; i++)
2592*b30d1939SAndy Fiddaman 				if (q || item.size == notice.id[i].name.size && !sstrncmp( item.data, notice.id[i].name.data, item.size))
2593*b30d1939SAndy Fiddaman 				{
2594*b30d1939SAndy Fiddaman 					h = 1;
2595*b30d1939SAndy Fiddaman 					if (notice.type == 4)
2596*b30d1939SAndy Fiddaman 					{
2597*b30d1939SAndy Fiddaman 						copy(&buf, "[-author?", -1);
2598*b30d1939SAndy Fiddaman 						expand(&notice, &buf, &notice.id[i].value);
2599*b30d1939SAndy Fiddaman 						((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( ']')):(( ']'),(-1)));
2600*b30d1939SAndy Fiddaman 					}
2601*b30d1939SAndy Fiddaman 					else
2602*b30d1939SAndy Fiddaman 					{
2603*b30d1939SAndy Fiddaman 						if (k < 0)
2604*b30d1939SAndy Fiddaman 						{
2605*b30d1939SAndy Fiddaman 							comment( &notice, &buf, "CONTRIBUTORS",sizeof( "CONTRIBUTORS")-1, 0);
2606*b30d1939SAndy Fiddaman 							comment(&notice, &buf, ((char*)0), 0, 0);
2607*b30d1939SAndy Fiddaman 						}
2608*b30d1939SAndy Fiddaman 						k = 1;
2609*b30d1939SAndy Fiddaman 						expand(&notice, &tmp, &notice.id[i].value);
2610*b30d1939SAndy Fiddaman 						comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2611*b30d1939SAndy Fiddaman 					}
2612*b30d1939SAndy Fiddaman 					if (!q)
2613*b30d1939SAndy Fiddaman 						break;
2614*b30d1939SAndy Fiddaman 				}
2615*b30d1939SAndy Fiddaman 			if (q)
2616*b30d1939SAndy Fiddaman 				break;
2617*b30d1939SAndy Fiddaman 			if (!h)
2618*b30d1939SAndy Fiddaman 			{
2619*b30d1939SAndy Fiddaman 				if (notice.type == 4)
2620*b30d1939SAndy Fiddaman 				{
2621*b30d1939SAndy Fiddaman 					copy(&buf, "[-author?", -1);
2622*b30d1939SAndy Fiddaman 					expand(&notice, &buf, &item);
2623*b30d1939SAndy Fiddaman 					((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( ']')):(( ']'),(-1)));
2624*b30d1939SAndy Fiddaman 				}
2625*b30d1939SAndy Fiddaman 				else
2626*b30d1939SAndy Fiddaman 				{
2627*b30d1939SAndy Fiddaman 					if (k < 0)
2628*b30d1939SAndy Fiddaman 					{
2629*b30d1939SAndy Fiddaman 						comment( &notice, &buf, "CONTRIBUTORS",sizeof( "CONTRIBUTORS")-1, 0);
2630*b30d1939SAndy Fiddaman 						comment(&notice, &buf, ((char*)0), 0, 0);
2631*b30d1939SAndy Fiddaman 					}
2632*b30d1939SAndy Fiddaman 					k = 1;
2633*b30d1939SAndy Fiddaman 					expand(&notice, &tmp, &item);
2634*b30d1939SAndy Fiddaman 					comment(&notice, &buf, (( &tmp)->buf), (( &tmp)->siz=( &tmp)->nxt-( &tmp)->buf,( &tmp)->nxt=( &tmp)->buf,( &tmp)->siz), 0);
2635*b30d1939SAndy Fiddaman 				}
2636*b30d1939SAndy Fiddaman 			}
2637*b30d1939SAndy Fiddaman 		}
2638*b30d1939SAndy Fiddaman 		if (k > 0)
2639*b30d1939SAndy Fiddaman 			comment(&notice, &buf, ((char*)0), 0, 0);
2640*b30d1939SAndy Fiddaman 	}
2641*b30d1939SAndy Fiddaman 	if (notice.type == 4)
2642*b30d1939SAndy Fiddaman 	{
2643*b30d1939SAndy Fiddaman 		copy(&buf, "[-copyright?", -1);
2644*b30d1939SAndy Fiddaman 		copyright(&notice, &buf);
2645*b30d1939SAndy Fiddaman 		((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( ']')):(( ']'),(-1)));
2646*b30d1939SAndy Fiddaman 		if (notice.item[21].data)
2647*b30d1939SAndy Fiddaman 		{
2648*b30d1939SAndy Fiddaman 			copy(&buf, "[-license?", -1);
2649*b30d1939SAndy Fiddaman 			expand(&notice, &buf, &notice.item[21]);
2650*b30d1939SAndy Fiddaman 			((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( ']')):(( ']'),(-1)));
2651*b30d1939SAndy Fiddaman 		}
2652*b30d1939SAndy Fiddaman 		((( &buf)->nxt<( &buf)->end)?(*( &buf)->nxt++=( '\n')):(( '\n'),(-1)));
2653*b30d1939SAndy Fiddaman 	}
2654*b30d1939SAndy Fiddaman 	else
2655*b30d1939SAndy Fiddaman 		comment(&notice, &buf, ((char*)0), -1, 0);
2656*b30d1939SAndy Fiddaman 	return (*(( &buf)->nxt>=( &buf)->end?(( &buf)->nxt=( &buf)->end-1):( &buf)->nxt)=0,( &buf)->nxt-( &buf)->buf);
2657*b30d1939SAndy Fiddaman }
2658*b30d1939SAndy Fiddaman #line 336 "../../lib/libpp/ppproto.c"
2659*b30d1939SAndy Fiddaman 
2660*b30d1939SAndy Fiddaman #line 348
2661*b30d1939SAndy Fiddaman static char*
__OTORP__(register Proto_t * proto;register char * p;register long n;)2662*b30d1939SAndy Fiddaman linesync __PARAM__((register Proto_t* proto, register char* p, register long n), (proto, p, n)) __OTORP__(register Proto_t* proto; register char* p; register long n;){
2663*b30d1939SAndy Fiddaman 
2664*b30d1939SAndy Fiddaman 	if (proto->flags & (1L<<13))
2665*b30d1939SAndy Fiddaman 
2666*b30d1939SAndy Fiddaman 	{
2667*b30d1939SAndy Fiddaman 
2668*b30d1939SAndy Fiddaman 		p = strcopy(p, "\n#line ");
2669*b30d1939SAndy Fiddaman 
2670*b30d1939SAndy Fiddaman 
2671*b30d1939SAndy Fiddaman 
2672*b30d1939SAndy Fiddaman 		p = number(p, n);
2673*b30d1939SAndy Fiddaman 		*p++ = '\n';
2674*b30d1939SAndy Fiddaman 	}
2675*b30d1939SAndy Fiddaman 	return p;
2676*b30d1939SAndy Fiddaman }
2677*b30d1939SAndy Fiddaman 
2678*b30d1939SAndy Fiddaman 
2679*b30d1939SAndy Fiddaman 
2680*b30d1939SAndy Fiddaman 
2681*b30d1939SAndy Fiddaman 
2682*b30d1939SAndy Fiddaman 
2683*b30d1939SAndy Fiddaman static char*
__OTORP__(Proto_t * proto;char * op;int flags;)2684*b30d1939SAndy Fiddaman init __PARAM__((Proto_t* proto, char* op, int flags), (proto, op, flags)) __OTORP__(Proto_t* proto; char* op; int flags;){
2685*b30d1939SAndy Fiddaman 	register char*	s;
2686*b30d1939SAndy Fiddaman 
2687*b30d1939SAndy Fiddaman 	if (flags & (1L<<10))
2688*b30d1939SAndy Fiddaman 	{
2689*b30d1939SAndy Fiddaman 		op = strcopy(op, "\
2690*b30d1939SAndy Fiddaman \n\
2691*b30d1939SAndy Fiddaman #if !defined(__PROTO__)\n\
2692*b30d1939SAndy Fiddaman #  if defined(__STDC__) || defined(__cplusplus) || defined(_proto) || defined(c_plusplus)\n\
2693*b30d1939SAndy Fiddaman #    if defined(__cplusplus)\n\
2694*b30d1939SAndy Fiddaman #      define __LINKAGE__	\"C\"\n\
2695*b30d1939SAndy Fiddaman #    else\n\
2696*b30d1939SAndy Fiddaman #      define __LINKAGE__\n\
2697*b30d1939SAndy Fiddaman #    endif\n\
2698*b30d1939SAndy Fiddaman #    define __STDARG__\n\
2699*b30d1939SAndy Fiddaman #    define __PROTO__(x)	x\n\
2700*b30d1939SAndy Fiddaman #    define __OTORP__(x)\n\
2701*b30d1939SAndy Fiddaman #    define __PARAM__(n,o)	n\n\
2702*b30d1939SAndy Fiddaman #    if !defined(__STDC__) && !defined(__cplusplus)\n\
2703*b30d1939SAndy Fiddaman #      if !defined(c_plusplus)\n\
2704*b30d1939SAndy Fiddaman #      	define const\n\
2705*b30d1939SAndy Fiddaman #      endif\n\
2706*b30d1939SAndy Fiddaman #      define signed\n\
2707*b30d1939SAndy Fiddaman #      define void		int\n\
2708*b30d1939SAndy Fiddaman #      define volatile\n\
2709*b30d1939SAndy Fiddaman #      define __V_		char\n\
2710*b30d1939SAndy Fiddaman #    else\n\
2711*b30d1939SAndy Fiddaman #      define __V_		void\n\
2712*b30d1939SAndy Fiddaman #    endif\n\
2713*b30d1939SAndy Fiddaman #  else\n\
2714*b30d1939SAndy Fiddaman #    define __PROTO__(x)	()\n\
2715*b30d1939SAndy Fiddaman #    define __OTORP__(x)	x\n\
2716*b30d1939SAndy Fiddaman #    define __PARAM__(n,o)	o\n\
2717*b30d1939SAndy Fiddaman #    define __LINKAGE__\n\
2718*b30d1939SAndy Fiddaman #    define __V_		char\n\
2719*b30d1939SAndy Fiddaman #    define const\n\
2720*b30d1939SAndy Fiddaman #    define signed\n\
2721*b30d1939SAndy Fiddaman #    define void		int\n\
2722*b30d1939SAndy Fiddaman #    define volatile\n\
2723*b30d1939SAndy Fiddaman #  endif\n\
2724*b30d1939SAndy Fiddaman #  define __MANGLE__	__LINKAGE__\n\
2725*b30d1939SAndy Fiddaman #  if defined(__cplusplus) || defined(c_plusplus)\n\
2726*b30d1939SAndy Fiddaman #    define __VARARG__	...\n\
2727*b30d1939SAndy Fiddaman #  else\n\
2728*b30d1939SAndy Fiddaman #    define __VARARG__\n\
2729*b30d1939SAndy Fiddaman #  endif\n\
2730*b30d1939SAndy Fiddaman #  if defined(__STDARG__)\n\
2731*b30d1939SAndy Fiddaman #    define __VA_START__(p,a)	va_start(p,a)\n\
2732*b30d1939SAndy Fiddaman #  else\n\
2733*b30d1939SAndy Fiddaman #    define __VA_START__(p,a)	va_start(p)\n\
2734*b30d1939SAndy Fiddaman #  endif\n\
2735*b30d1939SAndy Fiddaman #  if !defined(__INLINE__)\n\
2736*b30d1939SAndy Fiddaman #    if defined(__cplusplus)\n\
2737*b30d1939SAndy Fiddaman #      define __INLINE__	extern __MANGLE__ inline\n\
2738*b30d1939SAndy Fiddaman #    else\n\
2739*b30d1939SAndy Fiddaman #      if defined(_WIN32) && !defined(__GNUC__)\n\
2740*b30d1939SAndy Fiddaman #      	define __INLINE__	__inline\n\
2741*b30d1939SAndy Fiddaman #      endif\n\
2742*b30d1939SAndy Fiddaman #    endif\n\
2743*b30d1939SAndy Fiddaman #  endif\n\
2744*b30d1939SAndy Fiddaman #endif\n\
2745*b30d1939SAndy Fiddaman #if !defined(__LINKAGE__)\n\
2746*b30d1939SAndy Fiddaman #define __LINKAGE__		/* 2004-08-11 transition */\n\
2747*b30d1939SAndy Fiddaman #endif\n\
2748*b30d1939SAndy Fiddaman ");
2749*b30d1939SAndy Fiddaman 	}
2750*b30d1939SAndy Fiddaman 	else
2751*b30d1939SAndy Fiddaman 		op = strcopy(op, "\
2752*b30d1939SAndy Fiddaman \n\
2753*b30d1939SAndy Fiddaman #if !defined(__PROTO__)\n\
2754*b30d1939SAndy Fiddaman #include <prototyped.h>\n\
2755*b30d1939SAndy Fiddaman #endif\n\
2756*b30d1939SAndy Fiddaman #if !defined(__LINKAGE__)\n\
2757*b30d1939SAndy Fiddaman #define __LINKAGE__		/* 2004-08-11 transition */\n\
2758*b30d1939SAndy Fiddaman #endif\n\
2759*b30d1939SAndy Fiddaman ");
2760*b30d1939SAndy Fiddaman 	if (proto->package)
2761*b30d1939SAndy Fiddaman 	{
2762*b30d1939SAndy Fiddaman 		s = "\
2763*b30d1939SAndy Fiddaman #ifndef	__MANGLE_%_DATA__\n\
2764*b30d1939SAndy Fiddaman #  ifdef _BLD_%\n\
2765*b30d1939SAndy Fiddaman #    ifdef __EXPORT__\n\
2766*b30d1939SAndy Fiddaman #      define	__MANGLE_%_DATA__	__MANGLE__ __EXPORT__\n\
2767*b30d1939SAndy Fiddaman #    else\n\
2768*b30d1939SAndy Fiddaman #      define	__MANGLE_%_DATA__	__MANGLE__\n\
2769*b30d1939SAndy Fiddaman #    endif\n\
2770*b30d1939SAndy Fiddaman #    define	__MANGLE_%_FUNC__	__MANGLE__\n\
2771*b30d1939SAndy Fiddaman #  else\n\
2772*b30d1939SAndy Fiddaman #    ifdef __IMPORT__\n\
2773*b30d1939SAndy Fiddaman #      define	__MANGLE_%_DATA__	__MANGLE__ __IMPORT__\n\
2774*b30d1939SAndy Fiddaman #    else\n\
2775*b30d1939SAndy Fiddaman #      define	__MANGLE_%_DATA__	__MANGLE__\n\
2776*b30d1939SAndy Fiddaman #    endif\n\
2777*b30d1939SAndy Fiddaman #    define	__MANGLE_%_FUNC__	__MANGLE__\n\
2778*b30d1939SAndy Fiddaman #  endif\n\
2779*b30d1939SAndy Fiddaman #endif\n\
2780*b30d1939SAndy Fiddaman ";
2781*b30d1939SAndy Fiddaman 		for (;;)
2782*b30d1939SAndy Fiddaman 		{
2783*b30d1939SAndy Fiddaman 			switch (*op++ = *s++)
2784*b30d1939SAndy Fiddaman 			{
2785*b30d1939SAndy Fiddaman 			case 0:
2786*b30d1939SAndy Fiddaman 				op--;
2787*b30d1939SAndy Fiddaman 				break;
2788*b30d1939SAndy Fiddaman 			case '%':
2789*b30d1939SAndy Fiddaman 				op = strcopy(op - 1, proto->package);
2790*b30d1939SAndy Fiddaman 				continue;
2791*b30d1939SAndy Fiddaman 			default:
2792*b30d1939SAndy Fiddaman 				continue;
2793*b30d1939SAndy Fiddaman 			}
2794*b30d1939SAndy Fiddaman 			break;
2795*b30d1939SAndy Fiddaman 		}
2796*b30d1939SAndy Fiddaman 	}
2797*b30d1939SAndy Fiddaman 	return op;
2798*b30d1939SAndy Fiddaman }
2799*b30d1939SAndy Fiddaman 
2800*b30d1939SAndy Fiddaman 
2801*b30d1939SAndy Fiddaman #line 422
2802*b30d1939SAndy Fiddaman static char*
__OTORP__(register char * s;)2803*b30d1939SAndy Fiddaman nns __PARAM__((register char* s), (s)) __OTORP__(register char* s;){
2804*b30d1939SAndy Fiddaman 	while (*s == ' ' || *s == '\t' || *s == '\n')
2805*b30d1939SAndy Fiddaman 		s++;
2806*b30d1939SAndy Fiddaman 	return s;
2807*b30d1939SAndy Fiddaman }
2808*b30d1939SAndy Fiddaman 
2809*b30d1939SAndy Fiddaman 
2810*b30d1939SAndy Fiddaman #line 439
2811*b30d1939SAndy Fiddaman static int
__OTORP__(register char * s;int dir;)2812*b30d1939SAndy Fiddaman directive __PARAM__((register char* s, int dir), (s, dir)) __OTORP__(register char* s; int dir;){
2813*b30d1939SAndy Fiddaman 	switch (*(s = nns(s)))
2814*b30d1939SAndy Fiddaman 	{
2815*b30d1939SAndy Fiddaman 	case 'e':
2816*b30d1939SAndy Fiddaman 	case 'i':
2817*b30d1939SAndy Fiddaman 		dir <<= 2;
2818*b30d1939SAndy Fiddaman 		switch (*++s)
2819*b30d1939SAndy Fiddaman 		{
2820*b30d1939SAndy Fiddaman 		case 'f':
2821*b30d1939SAndy Fiddaman 			dir |= 01;
2822*b30d1939SAndy Fiddaman 			break;
2823*b30d1939SAndy Fiddaman 		case 'l':
2824*b30d1939SAndy Fiddaman 			dir |= 02;
2825*b30d1939SAndy Fiddaman 			break;
2826*b30d1939SAndy Fiddaman 		case 'n':
2827*b30d1939SAndy Fiddaman 			dir |= 03;
2828*b30d1939SAndy Fiddaman 			break;
2829*b30d1939SAndy Fiddaman 		}
2830*b30d1939SAndy Fiddaman 		break;
2831*b30d1939SAndy Fiddaman 	}
2832*b30d1939SAndy Fiddaman 	return dir;
2833*b30d1939SAndy Fiddaman }
2834*b30d1939SAndy Fiddaman 
2835*b30d1939SAndy Fiddaman 
2836*b30d1939SAndy Fiddaman 
2837*b30d1939SAndy Fiddaman 
2838*b30d1939SAndy Fiddaman 
2839*b30d1939SAndy Fiddaman 
2840*b30d1939SAndy Fiddaman 
2841*b30d1939SAndy Fiddaman static int
__OTORP__(register Proto_t * proto;register long flags;)2842*b30d1939SAndy Fiddaman lex __PARAM__((register Proto_t* proto, register long flags), (proto, flags)) __OTORP__(register Proto_t* proto; register long flags;){
2843*b30d1939SAndy Fiddaman 	register char*		ip;
2844*b30d1939SAndy Fiddaman 	register char*		op;
2845*b30d1939SAndy Fiddaman 	register int		c;
2846*b30d1939SAndy Fiddaman 	register int		state;
2847*b30d1939SAndy Fiddaman 	register short*		rp;
2848*b30d1939SAndy Fiddaman 	char*			m;
2849*b30d1939SAndy Fiddaman 	char*			e;
2850*b30d1939SAndy Fiddaman 	char*			t;
2851*b30d1939SAndy Fiddaman 	char*			bp;
2852*b30d1939SAndy Fiddaman 	char*			v;
2853*b30d1939SAndy Fiddaman 	char*			im;
2854*b30d1939SAndy Fiddaman 	char*			ko;
2855*b30d1939SAndy Fiddaman 	char*			aom;
2856*b30d1939SAndy Fiddaman 	int			n;
2857*b30d1939SAndy Fiddaman 	int			line;
2858*b30d1939SAndy Fiddaman 	int			quot;
2859*b30d1939SAndy Fiddaman 	int			brack;
2860*b30d1939SAndy Fiddaman 	int			sub;
2861*b30d1939SAndy Fiddaman 	int			x;
2862*b30d1939SAndy Fiddaman 	int			vc;
2863*b30d1939SAndy Fiddaman 
2864*b30d1939SAndy Fiddaman 	char*			ie = 0;
2865*b30d1939SAndy Fiddaman 	char*			om = 0;
2866*b30d1939SAndy Fiddaman 	char*			aim = 0;
2867*b30d1939SAndy Fiddaman 	char*			aie = 0;
2868*b30d1939SAndy Fiddaman 	char*			func = 0;
2869*b30d1939SAndy Fiddaman 	int			call = 0;
2870*b30d1939SAndy Fiddaman 	int			dir = 0;
2871*b30d1939SAndy Fiddaman 	int			group = 0;
2872*b30d1939SAndy Fiddaman 	int			last = 0;
2873*b30d1939SAndy Fiddaman 	int			paren = 0;
2874*b30d1939SAndy Fiddaman 
2875*b30d1939SAndy Fiddaman 	char*			qe = 0;
2876*b30d1939SAndy Fiddaman 	int			qn = 0;
2877*b30d1939SAndy Fiddaman 	int			args = 0;
2878*b30d1939SAndy Fiddaman 
2879*b30d1939SAndy Fiddaman 
2880*b30d1939SAndy Fiddaman 	do{(ip=proto->ip);(op=proto->op);call=proto->call;}while(0);
2881*b30d1939SAndy Fiddaman 
2882*b30d1939SAndy Fiddaman 	if (flags & (1L<<5)) (ko=op);
2883*b30d1939SAndy Fiddaman 
2884*b30d1939SAndy Fiddaman  fsm_start:
2885*b30d1939SAndy Fiddaman 	proto->tp = ip;
2886*b30d1939SAndy Fiddaman 	state = 0;
2887*b30d1939SAndy Fiddaman 	bp = ip;
2888*b30d1939SAndy Fiddaman 	do
2889*b30d1939SAndy Fiddaman 	{
2890*b30d1939SAndy Fiddaman 		rp = _pp_fsmtab[state];
2891*b30d1939SAndy Fiddaman  fsm_get:
2892*b30d1939SAndy Fiddaman 		while (!(state = rp[c = (*(unsigned char*)ip++)]));
2893*b30d1939SAndy Fiddaman  fsm_next:
2894*b30d1939SAndy Fiddaman 		;
2895*b30d1939SAndy Fiddaman 	} while (state > 0);
2896*b30d1939SAndy Fiddaman 	if ((n = ip - bp - 1) > 0)
2897*b30d1939SAndy Fiddaman 	{
2898*b30d1939SAndy Fiddaman 		ip = bp;
2899*b30d1939SAndy Fiddaman 		do switch( n) { default : memcopy( op, ip, n); op += n; ip += n; break; case 7 : * op++ = * ip++; case 6 : * op++ = * ip++; case 5 : * op++ = * ip++; case 4 : * op++ = * ip++; case 3 : * op++ = * ip++; case 2 : * op++ = * ip++; case 1 : * op++ = * ip++; case 0 : break; } while (0);
2900*b30d1939SAndy Fiddaman 		ip++;
2901*b30d1939SAndy Fiddaman 	}
2902*b30d1939SAndy Fiddaman 	state = ~state;
2903*b30d1939SAndy Fiddaman  fsm_terminal:
2904*b30d1939SAndy Fiddaman 	switch ((( state)&((1<<(7+1))-1)))
2905*b30d1939SAndy Fiddaman 	{
2906*b30d1939SAndy Fiddaman 	case ((0+28)+11):
2907*b30d1939SAndy Fiddaman 		if (op > proto->ob && *(op - 1) == '=' && (op == proto->ob + 1 || *(op - 2) != '=')) switch (c)
2908*b30d1939SAndy Fiddaman 		{
2909*b30d1939SAndy Fiddaman 		case '+':
2910*b30d1939SAndy Fiddaman 		case '-':
2911*b30d1939SAndy Fiddaman 		case '*':
2912*b30d1939SAndy Fiddaman 		case '&':
2913*b30d1939SAndy Fiddaman 			(*op++=( ' '));
2914*b30d1939SAndy Fiddaman 			break;
2915*b30d1939SAndy Fiddaman 		}
2916*b30d1939SAndy Fiddaman 		(*op++=( c));
2917*b30d1939SAndy Fiddaman 		break;
2918*b30d1939SAndy Fiddaman 
2919*b30d1939SAndy Fiddaman 	case ((0+28)+0):
2920*b30d1939SAndy Fiddaman 		(ip--);
2921*b30d1939SAndy Fiddaman 		c = (*(op-1));
2922*b30d1939SAndy Fiddaman 		break;
2923*b30d1939SAndy Fiddaman 
2924*b30d1939SAndy Fiddaman 	case ((0+28)+1):
2925*b30d1939SAndy Fiddaman 		switch (c)
2926*b30d1939SAndy Fiddaman 		{
2927*b30d1939SAndy Fiddaman 		case '\n':
2928*b30d1939SAndy Fiddaman 			if ((( rp)>=_pp_fsmtab[(0+16)]&&( rp)<=_pp_fsmtab[(0+18)])) goto fsm_newline;
2929*b30d1939SAndy Fiddaman 			(*op++=( c));
2930*b30d1939SAndy Fiddaman 			proto->line++;
2931*b30d1939SAndy Fiddaman 			rp = _pp_fsmtab[(0+13)];
2932*b30d1939SAndy Fiddaman 			break;
2933*b30d1939SAndy Fiddaman 		case '/':
2934*b30d1939SAndy Fiddaman 
2935*b30d1939SAndy Fiddaman 			if ((flags & ((1L<<5)|(1L<<15))) == (1L<<5)) (op=ko);
2936*b30d1939SAndy Fiddaman 			else
2937*b30d1939SAndy Fiddaman 
2938*b30d1939SAndy Fiddaman 			(*op++=( c));
2939*b30d1939SAndy Fiddaman 			if ((( rp)>=_pp_fsmtab[(0+16)]&&( rp)<=_pp_fsmtab[(0+18)]))
2940*b30d1939SAndy Fiddaman 			{
2941*b30d1939SAndy Fiddaman 				rp = _pp_fsmtab[(0+16)];
2942*b30d1939SAndy Fiddaman 				break;
2943*b30d1939SAndy Fiddaman 			}
2944*b30d1939SAndy Fiddaman 			goto fsm_start;
2945*b30d1939SAndy Fiddaman 		case (255+1):
2946*b30d1939SAndy Fiddaman 			break;
2947*b30d1939SAndy Fiddaman 		default:
2948*b30d1939SAndy Fiddaman 
2949*b30d1939SAndy Fiddaman 			if ((flags & ((1L<<5)|(1L<<15))) == (1L<<5)) (op=ko);
2950*b30d1939SAndy Fiddaman 			else
2951*b30d1939SAndy Fiddaman 
2952*b30d1939SAndy Fiddaman 			(*op++=( c));
2953*b30d1939SAndy Fiddaman 			rp = _pp_fsmtab[(( rp)>=_pp_fsmtab[(0+16)]&&( rp)<=_pp_fsmtab[(0+18)]) ? (0+16) : (0+14)];
2954*b30d1939SAndy Fiddaman 			break;
2955*b30d1939SAndy Fiddaman 		}
2956*b30d1939SAndy Fiddaman 		bp = ip;
2957*b30d1939SAndy Fiddaman 		goto fsm_get;
2958*b30d1939SAndy Fiddaman 
2959*b30d1939SAndy Fiddaman 	case ((0+28)+2):
2960*b30d1939SAndy Fiddaman 		if (c)
2961*b30d1939SAndy Fiddaman 		{
2962*b30d1939SAndy Fiddaman 			if (state = _pp_fsmtab[(0+28)][((( rp)-_pp_fsmtab[0])/(255+1))+1])
2963*b30d1939SAndy Fiddaman 				goto fsm_terminal;
2964*b30d1939SAndy Fiddaman 			do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
2965*b30d1939SAndy Fiddaman 			return 0;
2966*b30d1939SAndy Fiddaman 		}
2967*b30d1939SAndy Fiddaman 		(ip--);
2968*b30d1939SAndy Fiddaman  fsm_eob:
2969*b30d1939SAndy Fiddaman 		if ((flags & ((1L<<1)|((1L<<16))|(1L<<21))) == ((1L<<16)) && (proto->flags & (1L<<16)))
2970*b30d1939SAndy Fiddaman 		{
2971*b30d1939SAndy Fiddaman 
2972*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<5)))
2973*b30d1939SAndy Fiddaman 
2974*b30d1939SAndy Fiddaman 			flags |= (1L<<24);
2975*b30d1939SAndy Fiddaman 			c = ip - proto->ib;
2976*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<15)))
2977*b30d1939SAndy Fiddaman 				im = proto->tp;
2978*b30d1939SAndy Fiddaman 			if (ip > proto->ib)
2979*b30d1939SAndy Fiddaman 			{
2980*b30d1939SAndy Fiddaman 				n = ip - im;
2981*b30d1939SAndy Fiddaman 				if (ip - n < proto->ib)
2982*b30d1939SAndy Fiddaman 					proto->flags |= (1L<<4);
2983*b30d1939SAndy Fiddaman 				memcopy(proto->ib - n, ip - n, n);
2984*b30d1939SAndy Fiddaman 				ip = proto->ib;
2985*b30d1939SAndy Fiddaman 			}
2986*b30d1939SAndy Fiddaman 			proto->tp -= c;
2987*b30d1939SAndy Fiddaman 			if (flags & (1L<<15))
2988*b30d1939SAndy Fiddaman 			{
2989*b30d1939SAndy Fiddaman 				im -= c;
2990*b30d1939SAndy Fiddaman 				ie -= c;
2991*b30d1939SAndy Fiddaman 			}
2992*b30d1939SAndy Fiddaman 			if (aim)
2993*b30d1939SAndy Fiddaman 				aim -= c;
2994*b30d1939SAndy Fiddaman 			if (aie)
2995*b30d1939SAndy Fiddaman 				aie -= c;
2996*b30d1939SAndy Fiddaman 			if ((n = read(proto->fd, ip, proto->iz)) > 0)
2997*b30d1939SAndy Fiddaman 			{
2998*b30d1939SAndy Fiddaman 				if ((proto->options & (1L<<0)) && n < proto->iz)
2999*b30d1939SAndy Fiddaman 				{
3000*b30d1939SAndy Fiddaman 					proto->flags &= ~(1L<<16);
3001*b30d1939SAndy Fiddaman 					close(proto->fd);
3002*b30d1939SAndy Fiddaman 				}
3003*b30d1939SAndy Fiddaman 				*(ip + n) = 0;
3004*b30d1939SAndy Fiddaman 				if (state & (1<<7))
3005*b30d1939SAndy Fiddaman 					goto fsm_splice;
3006*b30d1939SAndy Fiddaman 				bp = ip;
3007*b30d1939SAndy Fiddaman 				goto fsm_get;
3008*b30d1939SAndy Fiddaman 			}
3009*b30d1939SAndy Fiddaman 			*ip = 0;
3010*b30d1939SAndy Fiddaman 			proto->flags &= ~(1L<<16);
3011*b30d1939SAndy Fiddaman 			close(proto->fd);
3012*b30d1939SAndy Fiddaman 		}
3013*b30d1939SAndy Fiddaman 		if (state & (1<<7))
3014*b30d1939SAndy Fiddaman 			goto fsm_splice;
3015*b30d1939SAndy Fiddaman 
3016*b30d1939SAndy Fiddaman 		if (!(flags & (1L<<21)) && (state = rp[c = (255+1)]))
3017*b30d1939SAndy Fiddaman 		{
3018*b30d1939SAndy Fiddaman 			bp = ip;
3019*b30d1939SAndy Fiddaman 			goto fsm_next;
3020*b30d1939SAndy Fiddaman 		}
3021*b30d1939SAndy Fiddaman 		do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3022*b30d1939SAndy Fiddaman 		return 0;
3023*b30d1939SAndy Fiddaman 
3024*b30d1939SAndy Fiddaman 	case ((0+28)+3):
3025*b30d1939SAndy Fiddaman 		quot = c;
3026*b30d1939SAndy Fiddaman 
3027*b30d1939SAndy Fiddaman 		if (c == '"' && qe)
3028*b30d1939SAndy Fiddaman 		{
3029*b30d1939SAndy Fiddaman 			for (n = 0, t = qe + 1; t < op && (*t == ' ' || *t == '\t' || *t == '\n' && ++n || *t >= 'A' && *t <= 'Z' || *t == '_'); t++);
3030*b30d1939SAndy Fiddaman 			if (t == op)
3031*b30d1939SAndy Fiddaman 			{
3032*b30d1939SAndy Fiddaman 				op = qe;
3033*b30d1939SAndy Fiddaman 				qe = 0;
3034*b30d1939SAndy Fiddaman 				qn = n;
3035*b30d1939SAndy Fiddaman 			}
3036*b30d1939SAndy Fiddaman 			else (*op++=( c));
3037*b30d1939SAndy Fiddaman 		}
3038*b30d1939SAndy Fiddaman 		else
3039*b30d1939SAndy Fiddaman 
3040*b30d1939SAndy Fiddaman 		(*op++=( c));
3041*b30d1939SAndy Fiddaman 		rp = _pp_fsmtab[(0+21)];
3042*b30d1939SAndy Fiddaman 		bp = ip;
3043*b30d1939SAndy Fiddaman 		goto fsm_get;
3044*b30d1939SAndy Fiddaman 
3045*b30d1939SAndy Fiddaman 	case ((0+28)+4):
3046*b30d1939SAndy Fiddaman 		if (c == quot)
3047*b30d1939SAndy Fiddaman 		{
3048*b30d1939SAndy Fiddaman 
3049*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<3)))
3050*b30d1939SAndy Fiddaman 				qe = (c == '"') ? op : (char*)0;
3051*b30d1939SAndy Fiddaman 
3052*b30d1939SAndy Fiddaman 			(*op++=( c));
3053*b30d1939SAndy Fiddaman 
3054*b30d1939SAndy Fiddaman 			while (qn > 0)
3055*b30d1939SAndy Fiddaman 			{
3056*b30d1939SAndy Fiddaman 				qn--;
3057*b30d1939SAndy Fiddaman 				(*op++=( '\n'));
3058*b30d1939SAndy Fiddaman 			}
3059*b30d1939SAndy Fiddaman 
3060*b30d1939SAndy Fiddaman 		}
3061*b30d1939SAndy Fiddaman 		else if (c != '\n' && c != (255+1))
3062*b30d1939SAndy Fiddaman 		{
3063*b30d1939SAndy Fiddaman 			(*op++=( c));
3064*b30d1939SAndy Fiddaman 			bp = ip;
3065*b30d1939SAndy Fiddaman 			goto fsm_get;
3066*b30d1939SAndy Fiddaman 		}
3067*b30d1939SAndy Fiddaman 		else
3068*b30d1939SAndy Fiddaman 		{
3069*b30d1939SAndy Fiddaman 
3070*b30d1939SAndy Fiddaman 			while (qn > 0)
3071*b30d1939SAndy Fiddaman 			{
3072*b30d1939SAndy Fiddaman 				qn--;
3073*b30d1939SAndy Fiddaman 				(*op++=( '\n'));
3074*b30d1939SAndy Fiddaman 			}
3075*b30d1939SAndy Fiddaman 
3076*b30d1939SAndy Fiddaman 			(ip--);
3077*b30d1939SAndy Fiddaman 		}
3078*b30d1939SAndy Fiddaman 		c = (0401+1);
3079*b30d1939SAndy Fiddaman 		break;
3080*b30d1939SAndy Fiddaman 
3081*b30d1939SAndy Fiddaman 	case ((0+28)+5):
3082*b30d1939SAndy Fiddaman 
3083*b30d1939SAndy Fiddaman 		if (flags & (1L<<0)) (*op++=( c));
3084*b30d1939SAndy Fiddaman 		else
3085*b30d1939SAndy Fiddaman 
3086*b30d1939SAndy Fiddaman 		switch (c)
3087*b30d1939SAndy Fiddaman 		{
3088*b30d1939SAndy Fiddaman 		case 'a':
3089*b30d1939SAndy Fiddaman 			n = (('A'==0301)?0057:0007);
3090*b30d1939SAndy Fiddaman 			goto fsm_oct;
3091*b30d1939SAndy Fiddaman 		case 'E':
3092*b30d1939SAndy Fiddaman 			n = (('A'==0301)?0047:0033);
3093*b30d1939SAndy Fiddaman 			goto fsm_oct;
3094*b30d1939SAndy Fiddaman 		case 'v':
3095*b30d1939SAndy Fiddaman 			n = 0013;
3096*b30d1939SAndy Fiddaman 			goto fsm_oct;
3097*b30d1939SAndy Fiddaman 		case 'x':
3098*b30d1939SAndy Fiddaman 			do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3099*b30d1939SAndy Fiddaman 			lex(proto, (flags & ((1L<<16))) | (1L<<21));
3100*b30d1939SAndy Fiddaman 			for (n = x = 0; (c = (*(unsigned char*)ip++)), x < 3; x++) switch (c)
3101*b30d1939SAndy Fiddaman 			{
3102*b30d1939SAndy Fiddaman 			case '0': case '1': case '2': case '3':
3103*b30d1939SAndy Fiddaman 			case '4': case '5': case '6': case '7':
3104*b30d1939SAndy Fiddaman 			case '8': case '9':
3105*b30d1939SAndy Fiddaman 				n = (n << 4) + c - '0';
3106*b30d1939SAndy Fiddaman 				break;
3107*b30d1939SAndy Fiddaman 			case 'a': case 'b': case 'c': case 'd':
3108*b30d1939SAndy Fiddaman 			case 'e': case 'f':
3109*b30d1939SAndy Fiddaman 				n = (n << 4) + c - 'a' + 10;
3110*b30d1939SAndy Fiddaman 				break;
3111*b30d1939SAndy Fiddaman 			case 'A': case 'B': case 'C': case 'D':
3112*b30d1939SAndy Fiddaman 			case 'E': case 'F':
3113*b30d1939SAndy Fiddaman 				n = (n << 4) + c - 'A' + 10;
3114*b30d1939SAndy Fiddaman 				break;
3115*b30d1939SAndy Fiddaman 			default:
3116*b30d1939SAndy Fiddaman 				goto fsm_hex;
3117*b30d1939SAndy Fiddaman 			}
3118*b30d1939SAndy Fiddaman  fsm_hex:
3119*b30d1939SAndy Fiddaman 			(ip--);
3120*b30d1939SAndy Fiddaman  fsm_oct:
3121*b30d1939SAndy Fiddaman 			(*op++=( ((n >> 6) & 07) + '0'));
3122*b30d1939SAndy Fiddaman 			(*op++=( ((n >> 3) & 07) + '0'));
3123*b30d1939SAndy Fiddaman 			(*op++=( (n & 07) + '0'));
3124*b30d1939SAndy Fiddaman 			break;
3125*b30d1939SAndy Fiddaman 		default:
3126*b30d1939SAndy Fiddaman 			(*op++=( c));
3127*b30d1939SAndy Fiddaman 			break;
3128*b30d1939SAndy Fiddaman 		}
3129*b30d1939SAndy Fiddaman 		rp = _pp_fsmtab[(0+21)];
3130*b30d1939SAndy Fiddaman 		bp = ip;
3131*b30d1939SAndy Fiddaman 		goto fsm_get;
3132*b30d1939SAndy Fiddaman 
3133*b30d1939SAndy Fiddaman 	case ((0+28)+6):
3134*b30d1939SAndy Fiddaman 		(ip--);
3135*b30d1939SAndy Fiddaman 
3136*b30d1939SAndy Fiddaman 		if ((flags & (1L<<5)) && *proto->tp == 's' && !sstrncmp( proto->tp, "static", 6))
3137*b30d1939SAndy Fiddaman 		{
3138*b30d1939SAndy Fiddaman 			c = ((0500+4)+9);
3139*b30d1939SAndy Fiddaman 			break;
3140*b30d1939SAndy Fiddaman 		}
3141*b30d1939SAndy Fiddaman 
3142*b30d1939SAndy Fiddaman 		if (*proto->tp == '_' && !sstrncmp( proto->tp, "__STDPP__directive", 6)) c = '#';
3143*b30d1939SAndy Fiddaman 		else c = (0401+0);
3144*b30d1939SAndy Fiddaman 
3145*b30d1939SAndy Fiddaman 		break;
3146*b30d1939SAndy Fiddaman 
3147*b30d1939SAndy Fiddaman 	case ((0+28)+7):
3148*b30d1939SAndy Fiddaman  fsm_newline:
3149*b30d1939SAndy Fiddaman 		proto->line++;
3150*b30d1939SAndy Fiddaman 
3151*b30d1939SAndy Fiddaman 		if (flags & (1L<<5))
3152*b30d1939SAndy Fiddaman 		{
3153*b30d1939SAndy Fiddaman 			if (op != proto->ob && (*(op-1)) != ' ' && (*(op-1)) != '\n')
3154*b30d1939SAndy Fiddaman 				(*op++=( ' '));
3155*b30d1939SAndy Fiddaman 		}
3156*b30d1939SAndy Fiddaman 		else
3157*b30d1939SAndy Fiddaman 
3158*b30d1939SAndy Fiddaman 		(*op++=( c));
3159*b30d1939SAndy Fiddaman 		if (flags & (1L<<3))
3160*b30d1939SAndy Fiddaman 		{
3161*b30d1939SAndy Fiddaman 
3162*b30d1939SAndy Fiddaman 			if (flags & (1L<<0))
3163*b30d1939SAndy Fiddaman 			{
3164*b30d1939SAndy Fiddaman 				if (flags & (1L<<5)) (op=ko);
3165*b30d1939SAndy Fiddaman 				if (flags & (1L<<12))
3166*b30d1939SAndy Fiddaman 				{
3167*b30d1939SAndy Fiddaman 					*(ip - 1) = 0;
3168*b30d1939SAndy Fiddaman 					op = strcopy(om, "/* ");
3169*b30d1939SAndy Fiddaman 					op = strcopy(op, im);
3170*b30d1939SAndy Fiddaman 					op = strcopy(op, " */\n");
3171*b30d1939SAndy Fiddaman 				}
3172*b30d1939SAndy Fiddaman 				flags &= ~((1L<<2)|(1L<<3)|(1L<<7)|(1L<<8)|(1L<<12)|(1L<<15)|(1L<<22)|(1L<<26));
3173*b30d1939SAndy Fiddaman 			}
3174*b30d1939SAndy Fiddaman 			else
3175*b30d1939SAndy Fiddaman 
3176*b30d1939SAndy Fiddaman 			{
3177*b30d1939SAndy Fiddaman 				if ((flags & ((1L<<2)|(1L<<22))) == ((1L<<2)|(1L<<22)))
3178*b30d1939SAndy Fiddaman 				{
3179*b30d1939SAndy Fiddaman 					*(ip - 1) = 0;
3180*b30d1939SAndy Fiddaman 					op = strcopy(om, "#if defined(__STDC__) || defined(__STDPP__)\n");
3181*b30d1939SAndy Fiddaman 					op = strcopy(op, im);
3182*b30d1939SAndy Fiddaman 					op = strcopy(op, "\n#else\n");
3183*b30d1939SAndy Fiddaman 					bp = ip;
3184*b30d1939SAndy Fiddaman 					ip = im;
3185*b30d1939SAndy Fiddaman 					*op++ = *ip++;
3186*b30d1939SAndy Fiddaman 					while (*op = *ip++)
3187*b30d1939SAndy Fiddaman 						if (*op++ == '#' && *ip != '(')
3188*b30d1939SAndy Fiddaman 						{
3189*b30d1939SAndy Fiddaman 							op--;
3190*b30d1939SAndy Fiddaman 							while (*--op == ' ' || *op == '\t');
3191*b30d1939SAndy Fiddaman 							if (*ip == '#')
3192*b30d1939SAndy Fiddaman 							{
3193*b30d1939SAndy Fiddaman 								op = strcopy(op + 1, "/**/");
3194*b30d1939SAndy Fiddaman 								while (*++ip == ' ' || *ip == '\t');
3195*b30d1939SAndy Fiddaman 							}
3196*b30d1939SAndy Fiddaman 							else
3197*b30d1939SAndy Fiddaman 							{
3198*b30d1939SAndy Fiddaman 								if (*op != '"') *++op = '"';
3199*b30d1939SAndy Fiddaman 								op++;
3200*b30d1939SAndy Fiddaman 								while (*ip == ' ' || *ip == '\t') ip++;
3201*b30d1939SAndy Fiddaman 								while ((c = *ip) >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9' || c == '_') *op++ = *ip++;
3202*b30d1939SAndy Fiddaman 								while (*ip == ' ' || *ip == '\t') ip++;
3203*b30d1939SAndy Fiddaman 								if (*ip == '"') ip++;
3204*b30d1939SAndy Fiddaman 								else *op++ = '"';
3205*b30d1939SAndy Fiddaman 							}
3206*b30d1939SAndy Fiddaman 						}
3207*b30d1939SAndy Fiddaman 					ip = bp;
3208*b30d1939SAndy Fiddaman 					op = strcopy(op, "\n#endif\n");
3209*b30d1939SAndy Fiddaman 					op = linesync(proto, op, proto->line);
3210*b30d1939SAndy Fiddaman 				}
3211*b30d1939SAndy Fiddaman 				flags &= ~((1L<<2)|(1L<<3)|(1L<<7)|(1L<<8)|(1L<<15)|(1L<<17)|(1L<<22)|(1L<<23)|(1L<<25)|(1L<<26));
3212*b30d1939SAndy Fiddaman 			}
3213*b30d1939SAndy Fiddaman 			call = 0;
3214*b30d1939SAndy Fiddaman 			group = 0;
3215*b30d1939SAndy Fiddaman 			paren = 0;
3216*b30d1939SAndy Fiddaman 			last = '\n';
3217*b30d1939SAndy Fiddaman 		}
3218*b30d1939SAndy Fiddaman 		if (paren == 0 && (flags & ((1L<<15)|(1L<<21)|(1L<<23)|(1L<<24))) == (1L<<24))
3219*b30d1939SAndy Fiddaman 		{
3220*b30d1939SAndy Fiddaman 
3221*b30d1939SAndy Fiddaman 			if (flags & (1L<<5)) (op=ko);
3222*b30d1939SAndy Fiddaman 
3223*b30d1939SAndy Fiddaman 			do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3224*b30d1939SAndy Fiddaman 			return 0;
3225*b30d1939SAndy Fiddaman 		}
3226*b30d1939SAndy Fiddaman 		goto fsm_start;
3227*b30d1939SAndy Fiddaman 
3228*b30d1939SAndy Fiddaman 	case ((0+28)+8):
3229*b30d1939SAndy Fiddaman 		(*op++=( c));
3230*b30d1939SAndy Fiddaman 		rp = _pp_fsmtab[((( state)>>(7+1))&((1<<7)-1))];
3231*b30d1939SAndy Fiddaman 		bp = ip;
3232*b30d1939SAndy Fiddaman 		goto fsm_get;
3233*b30d1939SAndy Fiddaman 
3234*b30d1939SAndy Fiddaman 	case ((0+28)+13):
3235*b30d1939SAndy Fiddaman 		(*op++=( c));
3236*b30d1939SAndy Fiddaman 		c = (((( state)>>(7+1))&((1<<7)-1))+0401);
3237*b30d1939SAndy Fiddaman 		break;
3238*b30d1939SAndy Fiddaman 
3239*b30d1939SAndy Fiddaman 	case ((0+28)+14):
3240*b30d1939SAndy Fiddaman 		(ip--);
3241*b30d1939SAndy Fiddaman 		c = (((( state)>>(7+1))&((1<<7)-1))+0401);
3242*b30d1939SAndy Fiddaman 		break;
3243*b30d1939SAndy Fiddaman 
3244*b30d1939SAndy Fiddaman 	case (((0+28)+12)):
3245*b30d1939SAndy Fiddaman 		(ip--);
3246*b30d1939SAndy Fiddaman 		c = (0401+0);
3247*b30d1939SAndy Fiddaman 		if (!(flags & (1L<<1))) switch (((((long)( *proto->tp))<<16)|(((long)( *(ip - 1)))<<8)|((long)( ip - proto->tp))))
3248*b30d1939SAndy Fiddaman 		{
3249*b30d1939SAndy Fiddaman 		case ((((long)( 'N'))<<16)|(((long)( 'N'))<<8)|((long)( 3))):
3250*b30d1939SAndy Fiddaman 			if (proto->tp[1] == 'o')
3251*b30d1939SAndy Fiddaman 				c = ((0500+4)+6);
3252*b30d1939SAndy Fiddaman 			break;
3253*b30d1939SAndy Fiddaman 		case ((((long)( 'd'))<<16)|(((long)( 'o'))<<8)|((long)( 2))):
3254*b30d1939SAndy Fiddaman 			c = ((0500+4)+6);
3255*b30d1939SAndy Fiddaman 			break;
3256*b30d1939SAndy Fiddaman 		case ((((long)( 'e'))<<16)|(((long)( 'e'))<<8)|((long)( 4))):
3257*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<21)) && (flags & ((1L<<3)|(1L<<25))) != (1L<<3) && !sstrncmp( proto->tp, "else", 4))
3258*b30d1939SAndy Fiddaman 			{
3259*b30d1939SAndy Fiddaman 				c = ((0500+4)+8);
3260*b30d1939SAndy Fiddaman 				goto fsm_id;
3261*b30d1939SAndy Fiddaman 			}
3262*b30d1939SAndy Fiddaman 			break;
3263*b30d1939SAndy Fiddaman 		case ((((long)( 'e'))<<16)|(((long)( 'n'))<<8)|((long)( 6))):
3264*b30d1939SAndy Fiddaman 			if (!sstrncmp( proto->tp, "extern", 6))
3265*b30d1939SAndy Fiddaman 				c = ((0500+4)+9);
3266*b30d1939SAndy Fiddaman 			break;
3267*b30d1939SAndy Fiddaman 		case ((((long)( 'f'))<<16)|(((long)( 'r'))<<8)|((long)( 3))):
3268*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<21)) && !sstrncmp( proto->tp, "for", 3))
3269*b30d1939SAndy Fiddaman 			{
3270*b30d1939SAndy Fiddaman 				c = ((0500+4)+11);
3271*b30d1939SAndy Fiddaman 				goto fsm_id;
3272*b30d1939SAndy Fiddaman 			}
3273*b30d1939SAndy Fiddaman 			break;
3274*b30d1939SAndy Fiddaman 		case ((((long)( 'i'))<<16)|(((long)( 'f'))<<8)|((long)( 2))):
3275*b30d1939SAndy Fiddaman 			c = ((0500+4)+13);
3276*b30d1939SAndy Fiddaman 			break;
3277*b30d1939SAndy Fiddaman 		case ((((long)( 'i'))<<16)|(((long)( 'e'))<<8)|((long)( 6))):
3278*b30d1939SAndy Fiddaman 			if (!sstrncmp( proto->tp, "inline", 6) && !(flags & ((1L<<15)|(1L<<23)|(1L<<25)|(1L<<26))) && proto->brace == 0 && paren == 0 && group == 0 && (last == ';' || last == '}' || last == '\n' || last == 0))
3279*b30d1939SAndy Fiddaman 			{
3280*b30d1939SAndy Fiddaman 				flags |= (1L<<23);
3281*b30d1939SAndy Fiddaman 				do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3282*b30d1939SAndy Fiddaman 				line = proto->line;
3283*b30d1939SAndy Fiddaman 				op = strcopy(op - 6, "__INLINE__");
3284*b30d1939SAndy Fiddaman 				do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3285*b30d1939SAndy Fiddaman 			}
3286*b30d1939SAndy Fiddaman 			break;
3287*b30d1939SAndy Fiddaman 		case ((((long)( 'r'))<<16)|(((long)( 'n'))<<8)|((long)( 6))):
3288*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<21)) && !sstrncmp( proto->tp, "return", 6))
3289*b30d1939SAndy Fiddaman 			{
3290*b30d1939SAndy Fiddaman 				c = ((0500+4)+17);
3291*b30d1939SAndy Fiddaman 				goto fsm_id;
3292*b30d1939SAndy Fiddaman 			}
3293*b30d1939SAndy Fiddaman 			break;
3294*b30d1939SAndy Fiddaman 		case ((((long)( 's'))<<16)|(((long)( 'c'))<<8)|((long)( 6))):
3295*b30d1939SAndy Fiddaman 			if ((proto->options & (1L<<6)) && !sstrncmp( proto->tp, "static", 6))
3296*b30d1939SAndy Fiddaman 			{
3297*b30d1939SAndy Fiddaman 				proto->ox = op - 6;
3298*b30d1939SAndy Fiddaman 				flags |= (1L<<6);
3299*b30d1939SAndy Fiddaman 			}
3300*b30d1939SAndy Fiddaman 			break;
3301*b30d1939SAndy Fiddaman 		case ((((long)( 't'))<<16)|(((long)( 'f'))<<8)|((long)( 7))):
3302*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<21)) && !sstrncmp( proto->tp, "typedef", 7))
3303*b30d1939SAndy Fiddaman 			{
3304*b30d1939SAndy Fiddaman 				flags |= (1L<<26);
3305*b30d1939SAndy Fiddaman 				c = ((0500+4)+9);
3306*b30d1939SAndy Fiddaman 			}
3307*b30d1939SAndy Fiddaman 			break;
3308*b30d1939SAndy Fiddaman 		case ((((long)( 'v'))<<16)|(((long)( 't'))<<8)|((long)( 8))):
3309*b30d1939SAndy Fiddaman 			if (*ip == '(' && !sstrncmp( proto->tp, "va_start", 8)) c = (0500+1);
3310*b30d1939SAndy Fiddaman 			break;
3311*b30d1939SAndy Fiddaman 		case ((((long)( 'v'))<<16)|(((long)( 'd'))<<8)|((long)( 4))):
3312*b30d1939SAndy Fiddaman 			if (!sstrncmp( proto->tp, "void", 4))
3313*b30d1939SAndy Fiddaman 			{
3314*b30d1939SAndy Fiddaman 				if (flags & ((1L<<0)|(1L<<19)|(1L<<10)|(1L<<11))) c = ((0500+4)+30);
3315*b30d1939SAndy Fiddaman 				else
3316*b30d1939SAndy Fiddaman 				{
3317*b30d1939SAndy Fiddaman 					do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3318*b30d1939SAndy Fiddaman 					line = proto->line;
3319*b30d1939SAndy Fiddaman 					if (lex(proto, (flags & ((1L<<16))) | (1L<<21)) == '*')
3320*b30d1939SAndy Fiddaman 					{
3321*b30d1939SAndy Fiddaman 						memcopy(op - 4, "__V_", 4);
3322*b30d1939SAndy Fiddaman 						memcopy(ip - 4, "__V_", 4);
3323*b30d1939SAndy Fiddaman 					}
3324*b30d1939SAndy Fiddaman 					else c = ((0500+4)+30);
3325*b30d1939SAndy Fiddaman 					proto->line = line;
3326*b30d1939SAndy Fiddaman 					do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3327*b30d1939SAndy Fiddaman 					bp = ip;
3328*b30d1939SAndy Fiddaman 				}
3329*b30d1939SAndy Fiddaman 			}
3330*b30d1939SAndy Fiddaman 			break;
3331*b30d1939SAndy Fiddaman 		case ((((long)( 'w'))<<16)|(((long)( 'e'))<<8)|((long)( 5))):
3332*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<21)) && !sstrncmp( proto->tp, "while", 5))
3333*b30d1939SAndy Fiddaman 			{
3334*b30d1939SAndy Fiddaman 				c = ((0500+4)+26);
3335*b30d1939SAndy Fiddaman 				goto fsm_id;
3336*b30d1939SAndy Fiddaman 			}
3337*b30d1939SAndy Fiddaman 			break;
3338*b30d1939SAndy Fiddaman 		}
3339*b30d1939SAndy Fiddaman 
3340*b30d1939SAndy Fiddaman 		if ((flags & (1L<<0)) && c != ((0500+4)+9))
3341*b30d1939SAndy Fiddaman 			c = (0401+0);
3342*b30d1939SAndy Fiddaman 
3343*b30d1939SAndy Fiddaman 		break;
3344*b30d1939SAndy Fiddaman 
3345*b30d1939SAndy Fiddaman 	case ((0+28)+10):
3346*b30d1939SAndy Fiddaman 		goto fsm_start;
3347*b30d1939SAndy Fiddaman 
3348*b30d1939SAndy Fiddaman 	case ((0+28)+15):
3349*b30d1939SAndy Fiddaman 		(ip--);
3350*b30d1939SAndy Fiddaman 
3351*b30d1939SAndy Fiddaman 		if ((flags & ((1L<<5)|(1L<<15))) == (1L<<5))
3352*b30d1939SAndy Fiddaman 		{
3353*b30d1939SAndy Fiddaman 			while (op > proto->ob && (*(op - 1) == ' ' || *(op - 1) == '\t'))
3354*b30d1939SAndy Fiddaman 				op--;
3355*b30d1939SAndy Fiddaman 			if (op > proto->ob && *(op - 1) != '\n') *op++ = ' ';
3356*b30d1939SAndy Fiddaman 		}
3357*b30d1939SAndy Fiddaman 
3358*b30d1939SAndy Fiddaman 		goto fsm_start;
3359*b30d1939SAndy Fiddaman 
3360*b30d1939SAndy Fiddaman 	default:
3361*b30d1939SAndy Fiddaman 		if (state & (1<<7))
3362*b30d1939SAndy Fiddaman 		{
3363*b30d1939SAndy Fiddaman 			if (c == '\\')
3364*b30d1939SAndy Fiddaman 			{
3365*b30d1939SAndy Fiddaman 				if (!(n = (*(unsigned char*)ip++)))
3366*b30d1939SAndy Fiddaman 				{
3367*b30d1939SAndy Fiddaman 					goto fsm_eob;
3368*b30d1939SAndy Fiddaman  fsm_splice:
3369*b30d1939SAndy Fiddaman 					c = '\\';
3370*b30d1939SAndy Fiddaman 					n = (*(unsigned char*)ip++);
3371*b30d1939SAndy Fiddaman 				}
3372*b30d1939SAndy Fiddaman 				if (n == '\n')
3373*b30d1939SAndy Fiddaman 				{
3374*b30d1939SAndy Fiddaman 					proto->line++;
3375*b30d1939SAndy Fiddaman 					(*op++=( '\\'));
3376*b30d1939SAndy Fiddaman 					(*op++=( '\n'));
3377*b30d1939SAndy Fiddaman 					bp = ip;
3378*b30d1939SAndy Fiddaman 					goto fsm_get;
3379*b30d1939SAndy Fiddaman 				}
3380*b30d1939SAndy Fiddaman 				(ip--);
3381*b30d1939SAndy Fiddaman 			}
3382*b30d1939SAndy Fiddaman 			state &= ~(1<<7);
3383*b30d1939SAndy Fiddaman 			if (state >= (0+28))
3384*b30d1939SAndy Fiddaman 				goto fsm_terminal;
3385*b30d1939SAndy Fiddaman 			rp = _pp_fsmtab[state];
3386*b30d1939SAndy Fiddaman 		}
3387*b30d1939SAndy Fiddaman 		(*op++=( c));
3388*b30d1939SAndy Fiddaman 		bp = ip;
3389*b30d1939SAndy Fiddaman 		goto fsm_get;
3390*b30d1939SAndy Fiddaman 	}
3391*b30d1939SAndy Fiddaman 	if (!(flags & ((1L<<10)|(1L<<11)|(1L<<21))))
3392*b30d1939SAndy Fiddaman 	{
3393*b30d1939SAndy Fiddaman 		if (!(flags & (1L<<3))) switch (c)
3394*b30d1939SAndy Fiddaman 		{
3395*b30d1939SAndy Fiddaman 		case '(':
3396*b30d1939SAndy Fiddaman 
3397*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<0)) || proto->brace == 0)
3398*b30d1939SAndy Fiddaman 
3399*b30d1939SAndy Fiddaman 			{
3400*b30d1939SAndy Fiddaman 				if (paren++ == 0)
3401*b30d1939SAndy Fiddaman 				{
3402*b30d1939SAndy Fiddaman 
3403*b30d1939SAndy Fiddaman 					if (!(flags & (1L<<0)) || group <= 1)
3404*b30d1939SAndy Fiddaman 
3405*b30d1939SAndy Fiddaman 					{
3406*b30d1939SAndy Fiddaman 
3407*b30d1939SAndy Fiddaman 						args = 0;
3408*b30d1939SAndy Fiddaman 
3409*b30d1939SAndy Fiddaman 						if (group++ == 0) group++;
3410*b30d1939SAndy Fiddaman 						else if (flags & (1L<<8)) call++;
3411*b30d1939SAndy Fiddaman 						flags |= (1L<<15);
3412*b30d1939SAndy Fiddaman 						im = ip - 1;
3413*b30d1939SAndy Fiddaman 						om = op - 1;
3414*b30d1939SAndy Fiddaman 					}
3415*b30d1939SAndy Fiddaman 					sub = 0;
3416*b30d1939SAndy Fiddaman 				}
3417*b30d1939SAndy Fiddaman 				else if (paren == 2 && !aim)
3418*b30d1939SAndy Fiddaman 				{
3419*b30d1939SAndy Fiddaman 					sub++;
3420*b30d1939SAndy Fiddaman 					if (last == '(')
3421*b30d1939SAndy Fiddaman 					{
3422*b30d1939SAndy Fiddaman 						flags &= ~(1L<<15);
3423*b30d1939SAndy Fiddaman 						om = 0;
3424*b30d1939SAndy Fiddaman 					}
3425*b30d1939SAndy Fiddaman 					else if (flags & (1L<<8))
3426*b30d1939SAndy Fiddaman 					{
3427*b30d1939SAndy Fiddaman 						aim = ip - 1;
3428*b30d1939SAndy Fiddaman 						aom = op - 1;
3429*b30d1939SAndy Fiddaman 					}
3430*b30d1939SAndy Fiddaman 					else if ((flags & ((1L<<15)|(1L<<25))) == (1L<<15))
3431*b30d1939SAndy Fiddaman 					{
3432*b30d1939SAndy Fiddaman 						for (m = ip - 2; m > im && (*m == ' ' || *m == '\t'); m--);
3433*b30d1939SAndy Fiddaman 						if (m != im && sub == 1)
3434*b30d1939SAndy Fiddaman 						{
3435*b30d1939SAndy Fiddaman 							m = im + (*nns(ip) == '*');
3436*b30d1939SAndy Fiddaman 						}
3437*b30d1939SAndy Fiddaman 						if (m == im)
3438*b30d1939SAndy Fiddaman 						{
3439*b30d1939SAndy Fiddaman 							flags &= ~(1L<<15);
3440*b30d1939SAndy Fiddaman 							om = 0;
3441*b30d1939SAndy Fiddaman 						}
3442*b30d1939SAndy Fiddaman 					}
3443*b30d1939SAndy Fiddaman 					else if ((flags & (1L<<15)) && sub == 1 && *nns(ip) != '*')
3444*b30d1939SAndy Fiddaman 					{
3445*b30d1939SAndy Fiddaman 						flags &= ~(1L<<15);
3446*b30d1939SAndy Fiddaman 						om = 0;
3447*b30d1939SAndy Fiddaman 					}
3448*b30d1939SAndy Fiddaman 				}
3449*b30d1939SAndy Fiddaman 				flags &= ~(1L<<25);
3450*b30d1939SAndy Fiddaman 			}
3451*b30d1939SAndy Fiddaman 			break;
3452*b30d1939SAndy Fiddaman 		case ')':
3453*b30d1939SAndy Fiddaman 
3454*b30d1939SAndy Fiddaman 			if (!(flags & (1L<<0)) || proto->brace == 0)
3455*b30d1939SAndy Fiddaman 
3456*b30d1939SAndy Fiddaman 			if (--paren == 0)
3457*b30d1939SAndy Fiddaman 			{
3458*b30d1939SAndy Fiddaman 
3459*b30d1939SAndy Fiddaman 				if (flags & (1L<<0))
3460*b30d1939SAndy Fiddaman 				{
3461*b30d1939SAndy Fiddaman 					if (group != 2)
3462*b30d1939SAndy Fiddaman 					{
3463*b30d1939SAndy Fiddaman 						c = (0401+0);
3464*b30d1939SAndy Fiddaman 						break;
3465*b30d1939SAndy Fiddaman 					}
3466*b30d1939SAndy Fiddaman 					group++;
3467*b30d1939SAndy Fiddaman 				}
3468*b30d1939SAndy Fiddaman 
3469*b30d1939SAndy Fiddaman 				ie = ip;
3470*b30d1939SAndy Fiddaman 			}
3471*b30d1939SAndy Fiddaman 			else if (paren == 1 && (flags & (1L<<8)) && !aie)
3472*b30d1939SAndy Fiddaman 				aie = ip;
3473*b30d1939SAndy Fiddaman 			break;
3474*b30d1939SAndy Fiddaman 		case '*':
3475*b30d1939SAndy Fiddaman 			if (last == '(' && group == 2)
3476*b30d1939SAndy Fiddaman 			{
3477*b30d1939SAndy Fiddaman 				group--;
3478*b30d1939SAndy Fiddaman 				if (paren == 1)
3479*b30d1939SAndy Fiddaman 				{
3480*b30d1939SAndy Fiddaman 					flags |= (1L<<8);
3481*b30d1939SAndy Fiddaman 					aim = aie = 0;
3482*b30d1939SAndy Fiddaman 				}
3483*b30d1939SAndy Fiddaman 			}
3484*b30d1939SAndy Fiddaman 			break;
3485*b30d1939SAndy Fiddaman 		case '#':
3486*b30d1939SAndy Fiddaman 			dir = directive(ip, dir);
3487*b30d1939SAndy Fiddaman 			if (proto->brace == 0 && paren == 0 && last != '=' && (flags & ((1L<<0)|(1L<<1)|(1L<<3)|(1L<<15)|(1L<<19)|(1L<<23)|(1L<<25))) == ((1L<<15)|(1L<<25)) && ((dir & 03) != 03 || ((dir>>2) & 03) != 01))
3488*b30d1939SAndy Fiddaman 				flags |= (1L<<3);
3489*b30d1939SAndy Fiddaman 			else if (!(flags & ((1L<<1)|(1L<<3))))
3490*b30d1939SAndy Fiddaman 			{
3491*b30d1939SAndy Fiddaman 				flags |= (1L<<3);
3492*b30d1939SAndy Fiddaman 				if (!(flags & (1L<<19)))
3493*b30d1939SAndy Fiddaman 				{
3494*b30d1939SAndy Fiddaman 					bp = ip;
3495*b30d1939SAndy Fiddaman 					while (*ip == ' ' || *ip == '\t') ip++;
3496*b30d1939SAndy Fiddaman 					if (*ip == 'l' && *++ip == 'i' && *++ip == 'n' && *++ip == 'e')
3497*b30d1939SAndy Fiddaman 					{
3498*b30d1939SAndy Fiddaman 						if (*++ip == ' ' || *ip == '\t')
3499*b30d1939SAndy Fiddaman 						{
3500*b30d1939SAndy Fiddaman 							proto->line = 0;
3501*b30d1939SAndy Fiddaman 							while (*++ip >= '0' && *ip <= '9')
3502*b30d1939SAndy Fiddaman 								proto->line = proto->line * 10 + *ip - '0';
3503*b30d1939SAndy Fiddaman 							proto->line--;
3504*b30d1939SAndy Fiddaman 						}
3505*b30d1939SAndy Fiddaman 					}
3506*b30d1939SAndy Fiddaman 
3507*b30d1939SAndy Fiddaman 					else if ((flags & ((1L<<0)|(1L<<5))) == (1L<<0))
3508*b30d1939SAndy Fiddaman 					{
3509*b30d1939SAndy Fiddaman 						n = 0;
3510*b30d1939SAndy Fiddaman 						t = ip + 6;
3511*b30d1939SAndy Fiddaman 						while (ip < t && *ip >= 'a' && *ip <= 'z')
3512*b30d1939SAndy Fiddaman 							n = ((( n)<<5)+(( *ip++)-('a'-1)));
3513*b30d1939SAndy Fiddaman 						switch (n)
3514*b30d1939SAndy Fiddaman 						{
3515*b30d1939SAndy Fiddaman 						case ((( ((( ((( (( 'e')-('a'-1)))<<5)+(( 'l')-('a'-1))))<<5)+(( 's')-('a'-1))))<<5)+(( 'e')-('a'-1))):
3516*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( (( 'e')-('a'-1)))<<5)+(( 'n')-('a'-1))))<<5)+(( 'd')-('a'-1))))<<5)+(( 'i')-('a'-1))))<<5)+(( 'f')-('a'-1))):
3517*b30d1939SAndy Fiddaman 							while (*ip == ' ' || *ip == '\t') ip++;
3518*b30d1939SAndy Fiddaman 							if (*ip != '\n' && *ip != '/' && *(ip + 1) != '*')
3519*b30d1939SAndy Fiddaman 							{
3520*b30d1939SAndy Fiddaman 								flags |= (1L<<12)|(1L<<15);
3521*b30d1939SAndy Fiddaman 								im = ip;
3522*b30d1939SAndy Fiddaman 								om = op + (ip - bp);
3523*b30d1939SAndy Fiddaman 							}
3524*b30d1939SAndy Fiddaman 							break;
3525*b30d1939SAndy Fiddaman 						case ((( ((( ((( (( 'e')-('a'-1)))<<5)+(( 'l')-('a'-1))))<<5)+(( 'i')-('a'-1))))<<5)+(( 'f')-('a'-1))):
3526*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( (( 'e')-('a'-1)))<<5)+(( 'r')-('a'-1))))<<5)+(( 'r')-('a'-1))))<<5)+(( 'o')-('a'-1))))<<5)+(( 'r')-('a'-1))):
3527*b30d1939SAndy Fiddaman 						case ((( (( 'i')-('a'-1)))<<5)+(( 'f')-('a'-1))):
3528*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( (( 'i')-('a'-1)))<<5)+(( 'f')-('a'-1))))<<5)+(( 'd')-('a'-1))))<<5)+(( 'e')-('a'-1))))<<5)+(( 'f')-('a'-1))):
3529*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( ((( (( 'i')-('a'-1)))<<5)+(( 'f')-('a'-1))))<<5)+(( 'n')-('a'-1))))<<5)+(( 'd')-('a'-1))))<<5)+(( 'e')-('a'-1))))<<5)+(( 'f')-('a'-1))):
3530*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( (( 'u')-('a'-1)))<<5)+(( 'n')-('a'-1))))<<5)+(( 'd')-('a'-1))))<<5)+(( 'e')-('a'-1))))<<5)+(( 'f')-('a'-1))):
3531*b30d1939SAndy Fiddaman 							break;
3532*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( ((( (( 'i')-('a'-1)))<<5)+(( 'n')-('a'-1))))<<5)+(( 'c')-('a'-1))))<<5)+(( 'l')-('a'-1))))<<5)+(( 'u')-('a'-1))))<<5)+(( 'd')-('a'-1))):
3533*b30d1939SAndy Fiddaman 							if (*ip == 'e') ip++;
3534*b30d1939SAndy Fiddaman 
3535*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( ((( (( 'd')-('a'-1)))<<5)+(( 'e')-('a'-1))))<<5)+(( 'f')-('a'-1))))<<5)+(( 'i')-('a'-1))))<<5)+(( 'n')-('a'-1))))<<5)+(( 'e')-('a'-1))):
3536*b30d1939SAndy Fiddaman 						case ((( ((( ((( ((( ((( (( 'p')-('a'-1)))<<5)+(( 'r')-('a'-1))))<<5)+(( 'a')-('a'-1))))<<5)+(( 'g')-('a'-1))))<<5)+(( 'm')-('a'-1))))<<5)+(( 'a')-('a'-1))):
3537*b30d1939SAndy Fiddaman 							if (*ip < 'a' || *ip > 'z') break;
3538*b30d1939SAndy Fiddaman 
3539*b30d1939SAndy Fiddaman 						default:
3540*b30d1939SAndy Fiddaman 							flags |= (1L<<12)|(1L<<15);
3541*b30d1939SAndy Fiddaman 							im = bp - 1;
3542*b30d1939SAndy Fiddaman 							om = op - 1;
3543*b30d1939SAndy Fiddaman 							break;
3544*b30d1939SAndy Fiddaman 						}
3545*b30d1939SAndy Fiddaman 					}
3546*b30d1939SAndy Fiddaman 					else
3547*b30d1939SAndy Fiddaman 
3548*b30d1939SAndy Fiddaman 					{
3549*b30d1939SAndy Fiddaman 						if (*ip == 'i' && *++ip == 'n' && *++ip == 'c' && *++ip == 'l' && *++ip == 'u' && *++ip == 'd' && *++ip == 'e')
3550*b30d1939SAndy Fiddaman 						{
3551*b30d1939SAndy Fiddaman 							while (*++ip == ' ' || *ip == '\t');
3552*b30d1939SAndy Fiddaman 							if (*ip++ == '<' && *ip++ == 's' && *ip++ == 't' && *ip++ == 'd' && *ip++ == 'a' && *ip++ == 'r' && *ip++ == 'g' && *ip++ == '.' && *ip++ == 'h' && *ip++ == '>')
3553*b30d1939SAndy Fiddaman 							{
3554*b30d1939SAndy Fiddaman 								op = strcopy(op, "\
3555*b30d1939SAndy Fiddaman if !defined(va_start)\n\
3556*b30d1939SAndy Fiddaman #if defined(__STDARG__)\n\
3557*b30d1939SAndy Fiddaman #include <stdarg.h>\n\
3558*b30d1939SAndy Fiddaman #else\n\
3559*b30d1939SAndy Fiddaman #include <varargs.h>\n\
3560*b30d1939SAndy Fiddaman #endif\n\
3561*b30d1939SAndy Fiddaman #endif\n\
3562*b30d1939SAndy Fiddaman ");
3563*b30d1939SAndy Fiddaman 								op = linesync(proto, op, proto->line);
3564*b30d1939SAndy Fiddaman 								break;
3565*b30d1939SAndy Fiddaman 							}
3566*b30d1939SAndy Fiddaman 						}
3567*b30d1939SAndy Fiddaman 						else if (*ip == 'd' && *++ip == 'e' && *++ ip == 'f' && *++ip == 'i' && *++ip == 'n' && *++ip == 'e' && (*++ip == ' ' || *ip == '\t'))
3568*b30d1939SAndy Fiddaman 						{
3569*b30d1939SAndy Fiddaman 							while (*++ip == ' ' || *ip == '\t');
3570*b30d1939SAndy Fiddaman 							if (*ip == 'e' && *++ip == 'x' && *++ ip == 't' && *++ip == 'e' && *++ip == 'r' && *++ip == 'n' && (*++ip == ' ' || *ip == '\t'))
3571*b30d1939SAndy Fiddaman 							{
3572*b30d1939SAndy Fiddaman 								t = ip;
3573*b30d1939SAndy Fiddaman 								while (*++t == ' ' || *t == '\t');
3574*b30d1939SAndy Fiddaman 								if (*t == 'e' && *++t == 'x' && *++ t == 't' && *++t == 'e' && *++t == 'r' && *++t == 'n' && (*++t == ' ' || *t == '\t' || *t == '\n' || *t == '\r'))
3575*b30d1939SAndy Fiddaman 									ip = t;
3576*b30d1939SAndy Fiddaman 								t = ip;
3577*b30d1939SAndy Fiddaman 								while (*++t == ' ' || *t == '\t');
3578*b30d1939SAndy Fiddaman 								if (*t == '_' && *(t + 1) == '_')
3579*b30d1939SAndy Fiddaman 								{
3580*b30d1939SAndy Fiddaman 									op = strcopy(op, "undef __MANGLE__\n");
3581*b30d1939SAndy Fiddaman 									op = linesync(proto, op, proto->line);
3582*b30d1939SAndy Fiddaman 									op = strcopy(op, "#define __MANGLE__ __LINKAGE__");
3583*b30d1939SAndy Fiddaman 									break;
3584*b30d1939SAndy Fiddaman 								}
3585*b30d1939SAndy Fiddaman 							}
3586*b30d1939SAndy Fiddaman 							flags |= (1L<<2)|(1L<<15);
3587*b30d1939SAndy Fiddaman 							im = bp - 1;
3588*b30d1939SAndy Fiddaman 							om = op - 1;
3589*b30d1939SAndy Fiddaman 						}
3590*b30d1939SAndy Fiddaman 						else if (*ip == 'u' && *++ip == 'n' && *++ ip == 'd' && *++ip == 'e' && *++ip == 'f' && (*++ip == ' ' || *ip == '\t'))
3591*b30d1939SAndy Fiddaman 						{
3592*b30d1939SAndy Fiddaman 							while (*++ip == ' ' || *ip == '\t');
3593*b30d1939SAndy Fiddaman 							if (*ip == 'e' && *++ip == 'x' && *++ ip == 't' && *++ip == 'e' && *++ip == 'r' && *++ip == 'n' && (*++ip == ' ' || *ip == '\t' || *ip == '\n' || *ip == '\r'))
3594*b30d1939SAndy Fiddaman 							{
3595*b30d1939SAndy Fiddaman 								op = strcopy(op, "undef __MANGLE__\n");
3596*b30d1939SAndy Fiddaman 								op = linesync(proto, op, proto->line);
3597*b30d1939SAndy Fiddaman 								op = strcopy(op, "#define __MANGLE__ __LINKAGE__");
3598*b30d1939SAndy Fiddaman 								break;
3599*b30d1939SAndy Fiddaman 							}
3600*b30d1939SAndy Fiddaman 							flags |= (1L<<2)|(1L<<15);
3601*b30d1939SAndy Fiddaman 							im = bp - 1;
3602*b30d1939SAndy Fiddaman 							om = op - 1;
3603*b30d1939SAndy Fiddaman 						}
3604*b30d1939SAndy Fiddaman 					}
3605*b30d1939SAndy Fiddaman 					ip = bp;
3606*b30d1939SAndy Fiddaman 				}
3607*b30d1939SAndy Fiddaman 				break;
3608*b30d1939SAndy Fiddaman 			}
3609*b30d1939SAndy Fiddaman 			else
3610*b30d1939SAndy Fiddaman 				break;
3611*b30d1939SAndy Fiddaman 
3612*b30d1939SAndy Fiddaman 		case '{':
3613*b30d1939SAndy Fiddaman 			if (proto->brace++ == 0 && paren == 0)
3614*b30d1939SAndy Fiddaman 			{
3615*b30d1939SAndy Fiddaman 				if (last == '=') flags |= (1L<<9);
3616*b30d1939SAndy Fiddaman 
3617*b30d1939SAndy Fiddaman 				else if (flags & (1L<<0))
3618*b30d1939SAndy Fiddaman 				{
3619*b30d1939SAndy Fiddaman 					if ((flags & ((1L<<15)|(1L<<17)|(1L<<23))) == (1L<<15))
3620*b30d1939SAndy Fiddaman 					{
3621*b30d1939SAndy Fiddaman 						if (args)
3622*b30d1939SAndy Fiddaman 						{
3623*b30d1939SAndy Fiddaman 							v = number(op, args < 0 ? -args : args);
3624*b30d1939SAndy Fiddaman 							v = strcopy(v, " argument actual/formal mismatch");
3625*b30d1939SAndy Fiddaman 							*v++ = ' ';
3626*b30d1939SAndy Fiddaman 							v = memcopy(v, im, ie - im);
3627*b30d1939SAndy Fiddaman 							*v = 0;
3628*b30d1939SAndy Fiddaman 							proto_error((char*)proto + sizeof(Proto_t), 2, op, ((char*)0));
3629*b30d1939SAndy Fiddaman 						}
3630*b30d1939SAndy Fiddaman 						ip--;
3631*b30d1939SAndy Fiddaman 
3632*b30d1939SAndy Fiddaman 	v = ie;
3633*b30d1939SAndy Fiddaman 	while (ie < ip)
3634*b30d1939SAndy Fiddaman 		if (*ie++ == '/' && *ie == '*')
3635*b30d1939SAndy Fiddaman 		{
3636*b30d1939SAndy Fiddaman 			e = ie - 1;
3637*b30d1939SAndy Fiddaman 			while (++ie < ip)
3638*b30d1939SAndy Fiddaman 			{
3639*b30d1939SAndy Fiddaman 				if (*ie == '*')
3640*b30d1939SAndy Fiddaman 				{
3641*b30d1939SAndy Fiddaman 					while (ie < ip && *ie == '*') ie++;
3642*b30d1939SAndy Fiddaman 					if (ie < ip && *ie == '/')
3643*b30d1939SAndy Fiddaman 					{
3644*b30d1939SAndy Fiddaman 						while (++ie < ip && (*ie == ' ' || *ie == '\t'));
3645*b30d1939SAndy Fiddaman 						while (e > v && (*(e - 1) == ' ' || *(e - 1) == '\t')) e--;
3646*b30d1939SAndy Fiddaman 						if (e > v && *e != '\n') *e++ = ' ';
3647*b30d1939SAndy Fiddaman 						t = ie;
3648*b30d1939SAndy Fiddaman 						while (--e >= v)
3649*b30d1939SAndy Fiddaman 							*--t = *e;
3650*b30d1939SAndy Fiddaman 						v = t;
3651*b30d1939SAndy Fiddaman 						break;
3652*b30d1939SAndy Fiddaman 					}
3653*b30d1939SAndy Fiddaman 				}
3654*b30d1939SAndy Fiddaman 			}
3655*b30d1939SAndy Fiddaman 		}
3656*b30d1939SAndy Fiddaman 	ie = v;
3657*b30d1939SAndy Fiddaman 
3658*b30d1939SAndy Fiddaman 						op = om++;
3659*b30d1939SAndy Fiddaman 						if (flags & (1L<<5))
3660*b30d1939SAndy Fiddaman 						{
3661*b30d1939SAndy Fiddaman 							v = op;
3662*b30d1939SAndy Fiddaman 							while (v > ko && *--v != ' ');
3663*b30d1939SAndy Fiddaman 							if (*v != ' ')
3664*b30d1939SAndy Fiddaman 							{
3665*b30d1939SAndy Fiddaman 								om = (v = (op += 4)) + 1;
3666*b30d1939SAndy Fiddaman 								while (v >= ko + 4)
3667*b30d1939SAndy Fiddaman 								{
3668*b30d1939SAndy Fiddaman 									*v = *(v - 4);
3669*b30d1939SAndy Fiddaman 									v--;
3670*b30d1939SAndy Fiddaman 								}
3671*b30d1939SAndy Fiddaman 								memcopy(ko, "int ", 4);
3672*b30d1939SAndy Fiddaman 							}
3673*b30d1939SAndy Fiddaman 							if (*v == ' ')
3674*b30d1939SAndy Fiddaman 							{
3675*b30d1939SAndy Fiddaman 								while (*(v + 1) == '*')
3676*b30d1939SAndy Fiddaman 									*v++ = '*';
3677*b30d1939SAndy Fiddaman 								*v = '\t';
3678*b30d1939SAndy Fiddaman 								if ((v - ko) <= 8)
3679*b30d1939SAndy Fiddaman 								{
3680*b30d1939SAndy Fiddaman 									om = (e = ++op) + 1;
3681*b30d1939SAndy Fiddaman 									while (e > v)
3682*b30d1939SAndy Fiddaman 									{
3683*b30d1939SAndy Fiddaman 										*e = *(e - 1);
3684*b30d1939SAndy Fiddaman 										e--;
3685*b30d1939SAndy Fiddaman 									}
3686*b30d1939SAndy Fiddaman 								}
3687*b30d1939SAndy Fiddaman 							}
3688*b30d1939SAndy Fiddaman 							om = (v = (op += 7)) + 1;
3689*b30d1939SAndy Fiddaman 							while (v >= ko + 7)
3690*b30d1939SAndy Fiddaman 							{
3691*b30d1939SAndy Fiddaman 								*v = *(v - 7);
3692*b30d1939SAndy Fiddaman 								v--;
3693*b30d1939SAndy Fiddaman 							}
3694*b30d1939SAndy Fiddaman 							memcopy(ko, "extern ", 7);
3695*b30d1939SAndy Fiddaman 						}
3696*b30d1939SAndy Fiddaman 						(*op++=( '('));
3697*b30d1939SAndy Fiddaman 						t = op;
3698*b30d1939SAndy Fiddaman 						e = 0;
3699*b30d1939SAndy Fiddaman 
3700*b30d1939SAndy Fiddaman 	while (ie < ip)
3701*b30d1939SAndy Fiddaman 	{
3702*b30d1939SAndy Fiddaman 		if ((c = *ie) == ' ' || c == '\t' || c == '\n')
3703*b30d1939SAndy Fiddaman 		{
3704*b30d1939SAndy Fiddaman 			while ((c = *++ie) == ' ' || c == '\t' || c == '\n');
3705*b30d1939SAndy Fiddaman 			if (ie >= ip) break;
3706*b30d1939SAndy Fiddaman 			if (c != '*' && op > om) (*op++=( ' '));
3707*b30d1939SAndy Fiddaman 		}
3708*b30d1939SAndy Fiddaman 		if ((n = ((c = *ie) == ',')) || c == ';')
3709*b30d1939SAndy Fiddaman 		{
3710*b30d1939SAndy Fiddaman 			if (flags & (1L<<5))
3711*b30d1939SAndy Fiddaman 			{
3712*b30d1939SAndy Fiddaman 				m = op;
3713*b30d1939SAndy Fiddaman 				while (op > om && ((c = *(op - 1)) == '(' || c == ')' || c == '[' || c == ']'))
3714*b30d1939SAndy Fiddaman 					op--;
3715*b30d1939SAndy Fiddaman 				v = op;
3716*b30d1939SAndy Fiddaman 				while (op > om && (c = *(op - 1)) != ' ' && c != '*')
3717*b30d1939SAndy Fiddaman 					op--;
3718*b30d1939SAndy Fiddaman 				while (*(op - 1) == ' ')
3719*b30d1939SAndy Fiddaman 					op--;
3720*b30d1939SAndy Fiddaman 				if (!e)
3721*b30d1939SAndy Fiddaman 				{
3722*b30d1939SAndy Fiddaman 					e = op;
3723*b30d1939SAndy Fiddaman 					while (e > om && *(e - 1) == '*')
3724*b30d1939SAndy Fiddaman 						e--;
3725*b30d1939SAndy Fiddaman 				}
3726*b30d1939SAndy Fiddaman 
3727*b30d1939SAndy Fiddaman 
3728*b30d1939SAndy Fiddaman 
3729*b30d1939SAndy Fiddaman 
3730*b30d1939SAndy Fiddaman 				if (op <= om)
3731*b30d1939SAndy Fiddaman 					op = strcopy(op, "int");
3732*b30d1939SAndy Fiddaman 				else if (*(op - 1) == ',')
3733*b30d1939SAndy Fiddaman 					op = strcopy(op, " int");
3734*b30d1939SAndy Fiddaman 
3735*b30d1939SAndy Fiddaman 				while (v < m)
3736*b30d1939SAndy Fiddaman 					(*op++=( *v++));
3737*b30d1939SAndy Fiddaman 			}
3738*b30d1939SAndy Fiddaman 			(*op++=( ','));
3739*b30d1939SAndy Fiddaman 			if (n)
3740*b30d1939SAndy Fiddaman 			{
3741*b30d1939SAndy Fiddaman 				if (x = !e) e = op - 1;
3742*b30d1939SAndy Fiddaman 				(*op++=( ' '));
3743*b30d1939SAndy Fiddaman 				m = t;
3744*b30d1939SAndy Fiddaman 				while (m < e)
3745*b30d1939SAndy Fiddaman 					(*op++=( *m++));
3746*b30d1939SAndy Fiddaman 				if (x)
3747*b30d1939SAndy Fiddaman 				{
3748*b30d1939SAndy Fiddaman 					m = e;
3749*b30d1939SAndy Fiddaman 					while (*--e != ' ');
3750*b30d1939SAndy Fiddaman 					while (*(e - 1) == '*') e--;
3751*b30d1939SAndy Fiddaman 					op -= m - e;
3752*b30d1939SAndy Fiddaman 				}
3753*b30d1939SAndy Fiddaman 			}
3754*b30d1939SAndy Fiddaman 			while ((c = *++ie) == ' ' || c == '\t' || c == '\n');
3755*b30d1939SAndy Fiddaman 			if (ie >= ip) (op--);
3756*b30d1939SAndy Fiddaman 			else (*op++=( ' '));
3757*b30d1939SAndy Fiddaman 			if (!n)
3758*b30d1939SAndy Fiddaman 			{
3759*b30d1939SAndy Fiddaman 				t = op;
3760*b30d1939SAndy Fiddaman 				e = 0;
3761*b30d1939SAndy Fiddaman 			}
3762*b30d1939SAndy Fiddaman 		}
3763*b30d1939SAndy Fiddaman 		else if (*ie == '*')
3764*b30d1939SAndy Fiddaman 		{
3765*b30d1939SAndy Fiddaman 			if (op > om && (c = *(op - 1)) == ' ') op--;
3766*b30d1939SAndy Fiddaman 			while (*ie == '*') (*op++=( *ie++));
3767*b30d1939SAndy Fiddaman 			while (*ie == ' ' || *ie == '\t' || *ie == '\n') ie++;
3768*b30d1939SAndy Fiddaman 			if (c != '(') (*op++=( ' '));
3769*b30d1939SAndy Fiddaman 		}
3770*b30d1939SAndy Fiddaman 		else if (*ie == '(')
3771*b30d1939SAndy Fiddaman 		{
3772*b30d1939SAndy Fiddaman 			if (op > om && *(op - 1) == ' ') op--;
3773*b30d1939SAndy Fiddaman 			(*op++=( *ie++));
3774*b30d1939SAndy Fiddaman 			while (*ie == ' ' || *ie == '\t' || *ie == '\n') ie++;
3775*b30d1939SAndy Fiddaman 		}
3776*b30d1939SAndy Fiddaman 		else if (*ie == ')')
3777*b30d1939SAndy Fiddaman 		{
3778*b30d1939SAndy Fiddaman 			if (op > om && *(op - 1) == '(')
3779*b30d1939SAndy Fiddaman 				proto_error((char*)proto + sizeof(Proto_t), 1, "function pointer argument prototype omitted", ((char*)0));
3780*b30d1939SAndy Fiddaman 			(*op++=( *ie++));
3781*b30d1939SAndy Fiddaman 			while (*ie == ' ' || *ie == '\t' || *ie == '\n') ie++;
3782*b30d1939SAndy Fiddaman 		}
3783*b30d1939SAndy Fiddaman 		else if ((flags & (1L<<5)) && (op == om || *(op - 1) == ' ') && *ie == 'r' && !sstrncmp( ie, "register", 8) && (*(ie + 8) == ' ' || *(ie + 8) == '\t' || *(ie + 8) == '\n'))
3784*b30d1939SAndy Fiddaman 		{
3785*b30d1939SAndy Fiddaman 			ie += 8;
3786*b30d1939SAndy Fiddaman 			if (op > om) (op--);
3787*b30d1939SAndy Fiddaman 		}
3788*b30d1939SAndy Fiddaman 		else (*op++=( *ie++));
3789*b30d1939SAndy Fiddaman 	}
3790*b30d1939SAndy Fiddaman 
3791*b30d1939SAndy Fiddaman 						if (op <= om) op = strcopy(op, "void");
3792*b30d1939SAndy Fiddaman 						(*op++=( ')'));
3793*b30d1939SAndy Fiddaman 						if (flags & (1L<<5))
3794*b30d1939SAndy Fiddaman 						{
3795*b30d1939SAndy Fiddaman 							(*op++=( ';'));
3796*b30d1939SAndy Fiddaman 							(*op++=( '\n'));
3797*b30d1939SAndy Fiddaman 							(proto->op=op);
3798*b30d1939SAndy Fiddaman 							(ko=op);
3799*b30d1939SAndy Fiddaman 						}
3800*b30d1939SAndy Fiddaman 						else
3801*b30d1939SAndy Fiddaman 						{
3802*b30d1939SAndy Fiddaman 							(*op++=( '\n'));
3803*b30d1939SAndy Fiddaman 							(*op++=( *ip));
3804*b30d1939SAndy Fiddaman 						}
3805*b30d1939SAndy Fiddaman 						ip++;
3806*b30d1939SAndy Fiddaman 						flags &= ~((1L<<15)|(1L<<23));
3807*b30d1939SAndy Fiddaman 					}
3808*b30d1939SAndy Fiddaman 				}
3809*b30d1939SAndy Fiddaman 
3810*b30d1939SAndy Fiddaman 				else if ((flags & ((1L<<15)|(1L<<19)|(1L<<23)|(1L<<25))) == ((1L<<15)|(1L<<25)))
3811*b30d1939SAndy Fiddaman 				{
3812*b30d1939SAndy Fiddaman 					line = proto->line;
3813*b30d1939SAndy Fiddaman 					op = strcopy(om, " __PARAM__(");
3814*b30d1939SAndy Fiddaman 					op = memcopy(op, im, ie - im);
3815*b30d1939SAndy Fiddaman 					(*op++=( ','));
3816*b30d1939SAndy Fiddaman 					(*op++=( ' '));
3817*b30d1939SAndy Fiddaman 					(*op++=( '('));
3818*b30d1939SAndy Fiddaman 					flags &= ~((1L<<15)|(1L<<23));
3819*b30d1939SAndy Fiddaman 					if (flags & (1L<<27))
3820*b30d1939SAndy Fiddaman 					{
3821*b30d1939SAndy Fiddaman 						if ((vc = ie - im + 1) > sizeof(proto->variadic)) vc = sizeof(proto->variadic);
3822*b30d1939SAndy Fiddaman 						memcopy(proto->variadic, im, vc);
3823*b30d1939SAndy Fiddaman 						op = strcopy(op, "va_alist)) __OTORP__(va_dcl)\n{");
3824*b30d1939SAndy Fiddaman 					}
3825*b30d1939SAndy Fiddaman 					else
3826*b30d1939SAndy Fiddaman 					{
3827*b30d1939SAndy Fiddaman 						flags |= (1L<<23);
3828*b30d1939SAndy Fiddaman 						proto->ip = im;
3829*b30d1939SAndy Fiddaman 						proto->op = op;
3830*b30d1939SAndy Fiddaman 						group = 0;
3831*b30d1939SAndy Fiddaman 						brack = 0;
3832*b30d1939SAndy Fiddaman 						for (;;)
3833*b30d1939SAndy Fiddaman 						{
3834*b30d1939SAndy Fiddaman 							switch (lex(proto, (flags & ((1L<<16))) | (1L<<21)))
3835*b30d1939SAndy Fiddaman 							{
3836*b30d1939SAndy Fiddaman 							case '[':
3837*b30d1939SAndy Fiddaman 								brack++;
3838*b30d1939SAndy Fiddaman 								continue;
3839*b30d1939SAndy Fiddaman 							case ']':
3840*b30d1939SAndy Fiddaman 								brack--;
3841*b30d1939SAndy Fiddaman 								continue;
3842*b30d1939SAndy Fiddaman 							case '(':
3843*b30d1939SAndy Fiddaman 								if (paren++) group++;
3844*b30d1939SAndy Fiddaman 								continue;
3845*b30d1939SAndy Fiddaman 							case ')':
3846*b30d1939SAndy Fiddaman 								if (--paren == 0)
3847*b30d1939SAndy Fiddaman 								{
3848*b30d1939SAndy Fiddaman 									group = 0;
3849*b30d1939SAndy Fiddaman 									if (flags & (1L<<15))
3850*b30d1939SAndy Fiddaman 									{
3851*b30d1939SAndy Fiddaman 										flags &= ~((1L<<15)|(1L<<23));
3852*b30d1939SAndy Fiddaman 										op = memcopy(op, m, e - m);
3853*b30d1939SAndy Fiddaman 									}
3854*b30d1939SAndy Fiddaman 									break;
3855*b30d1939SAndy Fiddaman 								}
3856*b30d1939SAndy Fiddaman 								continue;
3857*b30d1939SAndy Fiddaman 							case ',':
3858*b30d1939SAndy Fiddaman 								if (paren == 1)
3859*b30d1939SAndy Fiddaman 								{
3860*b30d1939SAndy Fiddaman 									group = 0;
3861*b30d1939SAndy Fiddaman 									if (flags & (1L<<15))
3862*b30d1939SAndy Fiddaman 									{
3863*b30d1939SAndy Fiddaman 										flags &= ~((1L<<15)|(1L<<23));
3864*b30d1939SAndy Fiddaman 										op = memcopy(op, m, e - m);
3865*b30d1939SAndy Fiddaman 									}
3866*b30d1939SAndy Fiddaman 									(*op++=( ','));
3867*b30d1939SAndy Fiddaman 									(*op++=( ' '));
3868*b30d1939SAndy Fiddaman 									proto->op = op;
3869*b30d1939SAndy Fiddaman 								}
3870*b30d1939SAndy Fiddaman 								continue;
3871*b30d1939SAndy Fiddaman 							case (0401+0):
3872*b30d1939SAndy Fiddaman 								if (group <= 1 && !brack)
3873*b30d1939SAndy Fiddaman 								{
3874*b30d1939SAndy Fiddaman 									flags |= (1L<<15);
3875*b30d1939SAndy Fiddaman 									m = proto->tp;
3876*b30d1939SAndy Fiddaman 									e = proto->ip;
3877*b30d1939SAndy Fiddaman 								}
3878*b30d1939SAndy Fiddaman 								continue;
3879*b30d1939SAndy Fiddaman 							default:
3880*b30d1939SAndy Fiddaman 								continue;
3881*b30d1939SAndy Fiddaman 							}
3882*b30d1939SAndy Fiddaman 							break;
3883*b30d1939SAndy Fiddaman 						}
3884*b30d1939SAndy Fiddaman 						(*op++=( ')'));
3885*b30d1939SAndy Fiddaman 						(*op++=( ')'));
3886*b30d1939SAndy Fiddaman 					}
3887*b30d1939SAndy Fiddaman 					if (!(flags & (1L<<23)))
3888*b30d1939SAndy Fiddaman 					{
3889*b30d1939SAndy Fiddaman 						flags |= (1L<<23);
3890*b30d1939SAndy Fiddaman 						proto->op = strcopy(op, " __OTORP__(");
3891*b30d1939SAndy Fiddaman 						proto->ip = im + 1;
3892*b30d1939SAndy Fiddaman 						n = *(ie - 1);
3893*b30d1939SAndy Fiddaman 						*(ie - 1) = ';';
3894*b30d1939SAndy Fiddaman 						c = *ie;
3895*b30d1939SAndy Fiddaman 						*ie = 0;
3896*b30d1939SAndy Fiddaman 						lex(proto, (flags & ((1L<<16))) | (1L<<1));
3897*b30d1939SAndy Fiddaman 						*(ie - 1) = n;
3898*b30d1939SAndy Fiddaman 						*ie = c;
3899*b30d1939SAndy Fiddaman 						proto->ip = ie;
3900*b30d1939SAndy Fiddaman 						op = proto->op;
3901*b30d1939SAndy Fiddaman 						(*op++=( ')'));
3902*b30d1939SAndy Fiddaman 					}
3903*b30d1939SAndy Fiddaman 					if (flags & (1L<<6)) memcopy( proto->ox, "extern", 6);
3904*b30d1939SAndy Fiddaman 					op = linesync(proto, op, proto->line = line);
3905*b30d1939SAndy Fiddaman 					if (flags & (1L<<3))
3906*b30d1939SAndy Fiddaman 					{
3907*b30d1939SAndy Fiddaman 						proto->brace = 0;
3908*b30d1939SAndy Fiddaman 						(*op++=( '\n'));
3909*b30d1939SAndy Fiddaman 						(*op++=( '#'));
3910*b30d1939SAndy Fiddaman 					}
3911*b30d1939SAndy Fiddaman 					else if (!(flags & (1L<<27))) (*op++=( '{'));
3912*b30d1939SAndy Fiddaman 				}
3913*b30d1939SAndy Fiddaman 			}
3914*b30d1939SAndy Fiddaman 			flags &= ~((1L<<7)|(1L<<8)|(1L<<15)|(1L<<17)|(1L<<23));
3915*b30d1939SAndy Fiddaman 			call = 0;
3916*b30d1939SAndy Fiddaman 			group = 0;
3917*b30d1939SAndy Fiddaman 			break;
3918*b30d1939SAndy Fiddaman 		case '}':
3919*b30d1939SAndy Fiddaman 			flags &= ~((1L<<7)|(1L<<8)|(1L<<15)|(1L<<17)|(1L<<23)|(1L<<25));
3920*b30d1939SAndy Fiddaman 			if (--proto->brace == 0)
3921*b30d1939SAndy Fiddaman 			{
3922*b30d1939SAndy Fiddaman 				flags &= ~((1L<<9)|(1L<<27)|(1L<<28));
3923*b30d1939SAndy Fiddaman 
3924*b30d1939SAndy Fiddaman 				if (flags & (1L<<5)) (op=ko);
3925*b30d1939SAndy Fiddaman 
3926*b30d1939SAndy Fiddaman 			}
3927*b30d1939SAndy Fiddaman 			call = 0;
3928*b30d1939SAndy Fiddaman 			group = 0;
3929*b30d1939SAndy Fiddaman 			paren = 0;
3930*b30d1939SAndy Fiddaman 			break;
3931*b30d1939SAndy Fiddaman 		case '=':
3932*b30d1939SAndy Fiddaman 			if (last == '?') flags |= (1L<<3);
3933*b30d1939SAndy Fiddaman 			else if (paren == 0 && (flags & ((1L<<9)|(1L<<15)|(1L<<23))) == (1L<<15))
3934*b30d1939SAndy Fiddaman 			{
3935*b30d1939SAndy Fiddaman 				if (last == ')' && proto->brace && (group != 2 || call != 2)) flags |= (1L<<23);
3936*b30d1939SAndy Fiddaman 				else goto fsm_statement;
3937*b30d1939SAndy Fiddaman 			}
3938*b30d1939SAndy Fiddaman 			goto fsm_other;
3939*b30d1939SAndy Fiddaman 		case ',':
3940*b30d1939SAndy Fiddaman 
3941*b30d1939SAndy Fiddaman 			if (flags & (1L<<0))
3942*b30d1939SAndy Fiddaman 			{
3943*b30d1939SAndy Fiddaman 				if (paren == 1) args++;
3944*b30d1939SAndy Fiddaman 				else
3945*b30d1939SAndy Fiddaman 				{
3946*b30d1939SAndy Fiddaman 					args--;
3947*b30d1939SAndy Fiddaman 					flags &= ~(1L<<15);
3948*b30d1939SAndy Fiddaman 				}
3949*b30d1939SAndy Fiddaman 				break;
3950*b30d1939SAndy Fiddaman 			}
3951*b30d1939SAndy Fiddaman 
3952*b30d1939SAndy Fiddaman 			if (paren == 0 && (flags & (1L<<1))) *(op - 1) = c = ';';
3953*b30d1939SAndy Fiddaman 
3954*b30d1939SAndy Fiddaman 		case ';':
3955*b30d1939SAndy Fiddaman  fsm_statement:
3956*b30d1939SAndy Fiddaman 			if (flags & (1L<<9))  ;
3957*b30d1939SAndy Fiddaman 
3958*b30d1939SAndy Fiddaman 			else if (flags & (1L<<0))
3959*b30d1939SAndy Fiddaman 			{
3960*b30d1939SAndy Fiddaman 				if (paren == 0)
3961*b30d1939SAndy Fiddaman 				{
3962*b30d1939SAndy Fiddaman 					if ((flags & (1L<<15)) && last == ')')
3963*b30d1939SAndy Fiddaman 						flags &= ~(1L<<15);
3964*b30d1939SAndy Fiddaman 					if (!(flags & (1L<<15)))
3965*b30d1939SAndy Fiddaman 					{
3966*b30d1939SAndy Fiddaman 						call = 0;
3967*b30d1939SAndy Fiddaman 						group = 0;
3968*b30d1939SAndy Fiddaman 						flags &= ~(1L<<23);
3969*b30d1939SAndy Fiddaman 						if (flags & (1L<<5)) (op=ko);
3970*b30d1939SAndy Fiddaman 						if (flags & (1L<<24))
3971*b30d1939SAndy Fiddaman 						{
3972*b30d1939SAndy Fiddaman 							do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
3973*b30d1939SAndy Fiddaman 							return 0;
3974*b30d1939SAndy Fiddaman 						}
3975*b30d1939SAndy Fiddaman 					}
3976*b30d1939SAndy Fiddaman 					else
3977*b30d1939SAndy Fiddaman 					{
3978*b30d1939SAndy Fiddaman 						args--;
3979*b30d1939SAndy Fiddaman 						if ((flags & ((1L<<5)|(1L<<23))) == ((1L<<5)|(1L<<23)))
3980*b30d1939SAndy Fiddaman 							(op=ko);
3981*b30d1939SAndy Fiddaman 					}
3982*b30d1939SAndy Fiddaman 				}
3983*b30d1939SAndy Fiddaman 			}
3984*b30d1939SAndy Fiddaman 
3985*b30d1939SAndy Fiddaman 			else if (paren == 0)
3986*b30d1939SAndy Fiddaman 			{
3987*b30d1939SAndy Fiddaman 				if ((flags & ((1L<<15)|(1L<<17)|(1L<<23))) == (1L<<15) && call > 1)
3988*b30d1939SAndy Fiddaman 				{
3989*b30d1939SAndy Fiddaman 					if ((flags & (1L<<14)) && func)
3990*b30d1939SAndy Fiddaman 					{
3991*b30d1939SAndy Fiddaman 						func[0] = 'F';
3992*b30d1939SAndy Fiddaman 						func[1] = 'U';
3993*b30d1939SAndy Fiddaman 						func[2] = 'N';
3994*b30d1939SAndy Fiddaman 						func[3] = 'C';
3995*b30d1939SAndy Fiddaman 						func = 0;
3996*b30d1939SAndy Fiddaman 					}
3997*b30d1939SAndy Fiddaman 					if ((flags & ((1L<<1)|(1L<<8))) == (1L<<8) && aim && aie < im)
3998*b30d1939SAndy Fiddaman 					{
3999*b30d1939SAndy Fiddaman 						while (aie < ip && (*aie == ' ' || *aie == '\t' || *aie == '\n')) aie++;
4000*b30d1939SAndy Fiddaman 						v = aim;
4001*b30d1939SAndy Fiddaman 						while (v < aie)
4002*b30d1939SAndy Fiddaman 							if (*v++ == ')') break;
4003*b30d1939SAndy Fiddaman 						while (v < aie && (*v == ' ' || *v == '\t' || *v == '\n')) v++;
4004*b30d1939SAndy Fiddaman 						if (v == aie || !(flags & (1L<<20)))
4005*b30d1939SAndy Fiddaman 						{
4006*b30d1939SAndy Fiddaman 							if (flags & (1L<<20)) n = 3;
4007*b30d1939SAndy Fiddaman 							else if (v == aie && *v == '(') n = 10;
4008*b30d1939SAndy Fiddaman 							else n = 11;
4009*b30d1939SAndy Fiddaman 							ko = op;
4010*b30d1939SAndy Fiddaman 							om += n;
4011*b30d1939SAndy Fiddaman 							v = op += n;
4012*b30d1939SAndy Fiddaman 							while (v >= ko + n)
4013*b30d1939SAndy Fiddaman 							{
4014*b30d1939SAndy Fiddaman 								*v = *(v - n);
4015*b30d1939SAndy Fiddaman 								v--;
4016*b30d1939SAndy Fiddaman 							}
4017*b30d1939SAndy Fiddaman 							if (flags & (1L<<20)) memcopy(aom, "(...))", 6);
4018*b30d1939SAndy Fiddaman 							else if (n == 10) memcopy(aom, "(__VARARG__))", 13);
4019*b30d1939SAndy Fiddaman 							else
4020*b30d1939SAndy Fiddaman 							{
4021*b30d1939SAndy Fiddaman 								ko = strcopy(aom, " __PROTO__(");
4022*b30d1939SAndy Fiddaman 								ko = memcopy(ko, aim, aie - aim);
4023*b30d1939SAndy Fiddaman 								*ko = ')';
4024*b30d1939SAndy Fiddaman 								if (++ko >= om)
4025*b30d1939SAndy Fiddaman 								{
4026*b30d1939SAndy Fiddaman 									*ko++ = ')';
4027*b30d1939SAndy Fiddaman 									om = ko;
4028*b30d1939SAndy Fiddaman 								}
4029*b30d1939SAndy Fiddaman 							}
4030*b30d1939SAndy Fiddaman 						}
4031*b30d1939SAndy Fiddaman 					}
4032*b30d1939SAndy Fiddaman 					else if (flags & (1L<<26))
4033*b30d1939SAndy Fiddaman 					{
4034*b30d1939SAndy Fiddaman 						op = om;
4035*b30d1939SAndy Fiddaman 						while (*--op == ' ' || *op == '\t' || *op == '\n');
4036*b30d1939SAndy Fiddaman 						if (*op != ')')
4037*b30d1939SAndy Fiddaman 						{
4038*b30d1939SAndy Fiddaman 							op = om += 14;
4039*b30d1939SAndy Fiddaman 							*--op = ')';
4040*b30d1939SAndy Fiddaman 							while ((x = *(op - 14)) >= 'A' && x <= 'Z' || x >= 'a' && x <= 'z' || x >= '0' && x <= '9' || x == '_')
4041*b30d1939SAndy Fiddaman 								*--op = x;
4042*b30d1939SAndy Fiddaman 							memcopy(op - 13, "(__OTORP__(*)", 13);
4043*b30d1939SAndy Fiddaman 						}
4044*b30d1939SAndy Fiddaman 					}
4045*b30d1939SAndy Fiddaman 					if (flags & (1L<<17))
4046*b30d1939SAndy Fiddaman 						;
4047*b30d1939SAndy Fiddaman 					else if (flags & (1L<<20))
4048*b30d1939SAndy Fiddaman 					{
4049*b30d1939SAndy Fiddaman 						op = om;
4050*b30d1939SAndy Fiddaman 						if (!(flags & (1L<<25))) op = strcopy(op, "(...)");
4051*b30d1939SAndy Fiddaman 						else op = memcopy(op, im, ie - im);
4052*b30d1939SAndy Fiddaman 						(*op++=( c));
4053*b30d1939SAndy Fiddaman 					}
4054*b30d1939SAndy Fiddaman 					else
4055*b30d1939SAndy Fiddaman 					{
4056*b30d1939SAndy Fiddaman 						if (flags & (1L<<1)) op = strcopy(om, "()");
4057*b30d1939SAndy Fiddaman 						else if (!(flags & (1L<<25))) op = strcopy(om, "(__VARARG__)");
4058*b30d1939SAndy Fiddaman 						else
4059*b30d1939SAndy Fiddaman 						{
4060*b30d1939SAndy Fiddaman 							op = strcopy(om, " __PROTO__(");
4061*b30d1939SAndy Fiddaman 							op = memcopy(op, im, ie - im);
4062*b30d1939SAndy Fiddaman 							(*op++=( ')'));
4063*b30d1939SAndy Fiddaman 						}
4064*b30d1939SAndy Fiddaman 						if (flags & (1L<<6)) memcopy( proto->ox, "extern", 6);
4065*b30d1939SAndy Fiddaman 						(*op++=( c));
4066*b30d1939SAndy Fiddaman 					}
4067*b30d1939SAndy Fiddaman 					flags &= ~((1L<<15)|(1L<<27)|(1L<<28));
4068*b30d1939SAndy Fiddaman 					if (c == ',' && !(flags & (1L<<8)))
4069*b30d1939SAndy Fiddaman 					{
4070*b30d1939SAndy Fiddaman 						call = 1;
4071*b30d1939SAndy Fiddaman 						group = 0;
4072*b30d1939SAndy Fiddaman 						break;
4073*b30d1939SAndy Fiddaman 					}
4074*b30d1939SAndy Fiddaman 				}
4075*b30d1939SAndy Fiddaman 				else if (flags & ((1L<<17)|(1L<<23))) call = 0;
4076*b30d1939SAndy Fiddaman 				if (c == ';')
4077*b30d1939SAndy Fiddaman 				{
4078*b30d1939SAndy Fiddaman 					flags &= ~((1L<<6)|(1L<<14)|(1L<<25)|(1L<<26));
4079*b30d1939SAndy Fiddaman 					call = 0;
4080*b30d1939SAndy Fiddaman 					if (flags & (1L<<24))
4081*b30d1939SAndy Fiddaman 					{
4082*b30d1939SAndy Fiddaman 						do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
4083*b30d1939SAndy Fiddaman 						return 0;
4084*b30d1939SAndy Fiddaman 					}
4085*b30d1939SAndy Fiddaman 				}
4086*b30d1939SAndy Fiddaman 				else call = call > 1 && c == ',';
4087*b30d1939SAndy Fiddaman 				group = 0;
4088*b30d1939SAndy Fiddaman 				flags &= ~((1L<<7)|(1L<<8)|(1L<<15)|(1L<<17)|(1L<<23));
4089*b30d1939SAndy Fiddaman 			}
4090*b30d1939SAndy Fiddaman 			else if (paren == 1 && group == 1 && !(flags & ((1L<<7)|(1L<<14)))) flags |= (1L<<25)|(1L<<17);
4091*b30d1939SAndy Fiddaman 			break;
4092*b30d1939SAndy Fiddaman 		case ((0500+4)+6):
4093*b30d1939SAndy Fiddaman 		case ((0500+4)+13):
4094*b30d1939SAndy Fiddaman 			flags |= (1L<<25)|(1L<<23);
4095*b30d1939SAndy Fiddaman 			break;
4096*b30d1939SAndy Fiddaman 		case ((0500+4)+9):
4097*b30d1939SAndy Fiddaman 
4098*b30d1939SAndy Fiddaman 			if (flags & (1L<<0))
4099*b30d1939SAndy Fiddaman 			{
4100*b30d1939SAndy Fiddaman 				if (proto->brace == 0)
4101*b30d1939SAndy Fiddaman 					flags |= (1L<<23);
4102*b30d1939SAndy Fiddaman 			}
4103*b30d1939SAndy Fiddaman 			else
4104*b30d1939SAndy Fiddaman 
4105*b30d1939SAndy Fiddaman 			if (paren == 0 && !(flags & (1L<<26)))
4106*b30d1939SAndy Fiddaman 			{
4107*b30d1939SAndy Fiddaman 				flags |= (1L<<14);
4108*b30d1939SAndy Fiddaman 				if (!(flags & (1L<<19)) || proto->package)
4109*b30d1939SAndy Fiddaman 				{
4110*b30d1939SAndy Fiddaman 					op = strcopy(op, " __MANGLE__");
4111*b30d1939SAndy Fiddaman 					if (proto->package)
4112*b30d1939SAndy Fiddaman 					{
4113*b30d1939SAndy Fiddaman 						op = strcopy(op - 1, proto->package);
4114*b30d1939SAndy Fiddaman 						func = op + 1;
4115*b30d1939SAndy Fiddaman 						op = strcopy(op, "_DATA__");
4116*b30d1939SAndy Fiddaman 					}
4117*b30d1939SAndy Fiddaman 				}
4118*b30d1939SAndy Fiddaman 				else
4119*b30d1939SAndy Fiddaman 					func = 0;
4120*b30d1939SAndy Fiddaman 			}
4121*b30d1939SAndy Fiddaman 			break;
4122*b30d1939SAndy Fiddaman 		case (0401+29):
4123*b30d1939SAndy Fiddaman 			if (paren == 0 && (flags & ((1L<<1)|(1L<<27))) == (1L<<1))
4124*b30d1939SAndy Fiddaman 			{
4125*b30d1939SAndy Fiddaman 				op -= 3;
4126*b30d1939SAndy Fiddaman 				do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
4127*b30d1939SAndy Fiddaman 				return c;
4128*b30d1939SAndy Fiddaman 			}
4129*b30d1939SAndy Fiddaman 			if (paren == 1 && !(flags & (1L<<23)))
4130*b30d1939SAndy Fiddaman 				flags |= (1L<<27);
4131*b30d1939SAndy Fiddaman 			flags |= (1L<<25);
4132*b30d1939SAndy Fiddaman 			break;
4133*b30d1939SAndy Fiddaman 		case ((0500+4)+30):
4134*b30d1939SAndy Fiddaman 			goto fsm_id;
4135*b30d1939SAndy Fiddaman 		case (0500+1):
4136*b30d1939SAndy Fiddaman 			if ((flags & ((1L<<19)|(1L<<27))) == (1L<<27))
4137*b30d1939SAndy Fiddaman 			{
4138*b30d1939SAndy Fiddaman 				flags &= ~(1L<<15);
4139*b30d1939SAndy Fiddaman 				line = proto->line;
4140*b30d1939SAndy Fiddaman 				op = strcopy(op - 8, "__VA_START__");
4141*b30d1939SAndy Fiddaman 				do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
4142*b30d1939SAndy Fiddaman 				for (;;)
4143*b30d1939SAndy Fiddaman 				{
4144*b30d1939SAndy Fiddaman 					switch (lex(proto, (flags & ((1L<<16))) | (1L<<21)))
4145*b30d1939SAndy Fiddaman 					{
4146*b30d1939SAndy Fiddaman 					case 0:
4147*b30d1939SAndy Fiddaman 					case ';':
4148*b30d1939SAndy Fiddaman 						break;
4149*b30d1939SAndy Fiddaman 					case (0401+0):
4150*b30d1939SAndy Fiddaman 						if (!(flags & (1L<<15)))
4151*b30d1939SAndy Fiddaman 						{
4152*b30d1939SAndy Fiddaman 							flags |= (1L<<15);
4153*b30d1939SAndy Fiddaman 							m = proto->tp;
4154*b30d1939SAndy Fiddaman 							e = proto->ip;
4155*b30d1939SAndy Fiddaman 						}
4156*b30d1939SAndy Fiddaman 						continue;
4157*b30d1939SAndy Fiddaman 					default:
4158*b30d1939SAndy Fiddaman 						continue;
4159*b30d1939SAndy Fiddaman 					}
4160*b30d1939SAndy Fiddaman 					break;
4161*b30d1939SAndy Fiddaman 				}
4162*b30d1939SAndy Fiddaman 				do{(ip=proto->ip);(op=proto->op);call=proto->call;}while(0);
4163*b30d1939SAndy Fiddaman 				if (flags & (1L<<15))
4164*b30d1939SAndy Fiddaman 				{
4165*b30d1939SAndy Fiddaman 					v = m;
4166*b30d1939SAndy Fiddaman 					n = e - m;
4167*b30d1939SAndy Fiddaman 				}
4168*b30d1939SAndy Fiddaman 				else
4169*b30d1939SAndy Fiddaman 				{
4170*b30d1939SAndy Fiddaman 					v = "ap";
4171*b30d1939SAndy Fiddaman 					n = 2;
4172*b30d1939SAndy Fiddaman 				}
4173*b30d1939SAndy Fiddaman 				op = strcopy(op, " __OTORP__(");
4174*b30d1939SAndy Fiddaman 				proto->ip = proto->variadic;
4175*b30d1939SAndy Fiddaman 				proto->op = op;
4176*b30d1939SAndy Fiddaman 				flags &= ~(1L<<15);
4177*b30d1939SAndy Fiddaman 				group = 0;
4178*b30d1939SAndy Fiddaman 				bp = proto->ip + 1;
4179*b30d1939SAndy Fiddaman 				if (*bp == 'r' && !sstrncmp( bp, "register", 8) && (*(bp + 8) == ' ' || *(bp + 8) == '\t')) bp += 9;
4180*b30d1939SAndy Fiddaman 				for (;;)
4181*b30d1939SAndy Fiddaman 				{
4182*b30d1939SAndy Fiddaman 					switch (lex(proto, (flags & ((1L<<16))) | (1L<<21)))
4183*b30d1939SAndy Fiddaman 					{
4184*b30d1939SAndy Fiddaman 					case '(':
4185*b30d1939SAndy Fiddaman 						if (paren++) group++;
4186*b30d1939SAndy Fiddaman 						continue;
4187*b30d1939SAndy Fiddaman 					case ')':
4188*b30d1939SAndy Fiddaman 						if (--paren == 0)
4189*b30d1939SAndy Fiddaman 						{
4190*b30d1939SAndy Fiddaman 							if (flags & (1L<<15))
4191*b30d1939SAndy Fiddaman 							{
4192*b30d1939SAndy Fiddaman 								flags &= ~(1L<<15);
4193*b30d1939SAndy Fiddaman 								if (!(flags & (1L<<28)))
4194*b30d1939SAndy Fiddaman 								{
4195*b30d1939SAndy Fiddaman 									op = memcopy(op, m, e - m);
4196*b30d1939SAndy Fiddaman 									op = strcopy(op, " = ");
4197*b30d1939SAndy Fiddaman 								}
4198*b30d1939SAndy Fiddaman 								op = strcopy(op, "va_arg(");
4199*b30d1939SAndy Fiddaman 								op = memcopy(op, v, n);
4200*b30d1939SAndy Fiddaman 								(*op++=( ','));
4201*b30d1939SAndy Fiddaman 								(*op++=( ' '));
4202*b30d1939SAndy Fiddaman 								if (m > bp) op = memcopy(op, bp, m - bp);
4203*b30d1939SAndy Fiddaman 								else op = strcopy(op, "int ");
4204*b30d1939SAndy Fiddaman 								if (group > 1) op = strcopy(op, ")()");
4205*b30d1939SAndy Fiddaman 								else op = memcopy(op, e, proto->ip - e - 1);
4206*b30d1939SAndy Fiddaman 								(*op++=( ')'));
4207*b30d1939SAndy Fiddaman 								(*op++=( ';'));
4208*b30d1939SAndy Fiddaman 							}
4209*b30d1939SAndy Fiddaman 							group = 0;
4210*b30d1939SAndy Fiddaman 							break;
4211*b30d1939SAndy Fiddaman 						}
4212*b30d1939SAndy Fiddaman 						continue;
4213*b30d1939SAndy Fiddaman 					case ',':
4214*b30d1939SAndy Fiddaman 						if (paren == 1)
4215*b30d1939SAndy Fiddaman 						{
4216*b30d1939SAndy Fiddaman 							if (flags & (1L<<15))
4217*b30d1939SAndy Fiddaman 							{
4218*b30d1939SAndy Fiddaman 								flags &= ~(1L<<15);
4219*b30d1939SAndy Fiddaman 								if (!(flags & (1L<<28)))
4220*b30d1939SAndy Fiddaman 								{
4221*b30d1939SAndy Fiddaman 									op = memcopy(op, m, e - m);
4222*b30d1939SAndy Fiddaman 									op = strcopy(op, " = ");
4223*b30d1939SAndy Fiddaman 								}
4224*b30d1939SAndy Fiddaman 								op = strcopy(op, "va_arg(");
4225*b30d1939SAndy Fiddaman 								op = memcopy(op, v, n);
4226*b30d1939SAndy Fiddaman 								(*op++=( ','));
4227*b30d1939SAndy Fiddaman 								(*op++=( ' '));
4228*b30d1939SAndy Fiddaman 								if (m > bp) op = memcopy(op, bp, m - bp);
4229*b30d1939SAndy Fiddaman 								else op = strcopy(op, "int ");
4230*b30d1939SAndy Fiddaman 								if (group > 1) op = strcopy(op, ")()");
4231*b30d1939SAndy Fiddaman 								else op = memcopy(op, e, proto->ip - e - 1);
4232*b30d1939SAndy Fiddaman 								(*op++=( ')'));
4233*b30d1939SAndy Fiddaman 								(*op++=( ';'));
4234*b30d1939SAndy Fiddaman 								bp = proto->ip + 1;
4235*b30d1939SAndy Fiddaman 								if (*bp == 'r' && !sstrncmp( bp, "register", 8) && (*(bp + 8) == ' ' || *(bp + 8) == '\t')) bp += 9;
4236*b30d1939SAndy Fiddaman 							}
4237*b30d1939SAndy Fiddaman 							group = 0;
4238*b30d1939SAndy Fiddaman 							proto->op = op;
4239*b30d1939SAndy Fiddaman 						}
4240*b30d1939SAndy Fiddaman 						continue;
4241*b30d1939SAndy Fiddaman 					case (0401+0):
4242*b30d1939SAndy Fiddaman 						if (group <= 1)
4243*b30d1939SAndy Fiddaman 						{
4244*b30d1939SAndy Fiddaman 							flags |= (1L<<15);
4245*b30d1939SAndy Fiddaman 							m = proto->tp;
4246*b30d1939SAndy Fiddaman 							e = proto->ip;
4247*b30d1939SAndy Fiddaman 						}
4248*b30d1939SAndy Fiddaman 						continue;
4249*b30d1939SAndy Fiddaman 					default:
4250*b30d1939SAndy Fiddaman 						continue;
4251*b30d1939SAndy Fiddaman 					}
4252*b30d1939SAndy Fiddaman 					break;
4253*b30d1939SAndy Fiddaman 				}
4254*b30d1939SAndy Fiddaman 				op = strcopy(op, ")");
4255*b30d1939SAndy Fiddaman 				flags |= (1L<<28);
4256*b30d1939SAndy Fiddaman 				proto->line = line;
4257*b30d1939SAndy Fiddaman 				call = 0;
4258*b30d1939SAndy Fiddaman 				break;
4259*b30d1939SAndy Fiddaman 			}
4260*b30d1939SAndy Fiddaman 
4261*b30d1939SAndy Fiddaman 		case (0401+0):
4262*b30d1939SAndy Fiddaman  fsm_id:
4263*b30d1939SAndy Fiddaman 
4264*b30d1939SAndy Fiddaman 			if (flags & (1L<<0))
4265*b30d1939SAndy Fiddaman 			{
4266*b30d1939SAndy Fiddaman 				if (!args && paren == 1) args++;
4267*b30d1939SAndy Fiddaman 				break;
4268*b30d1939SAndy Fiddaman 			}
4269*b30d1939SAndy Fiddaman 
4270*b30d1939SAndy Fiddaman 			if (paren == 0)
4271*b30d1939SAndy Fiddaman 			{
4272*b30d1939SAndy Fiddaman 				if (last == ')')
4273*b30d1939SAndy Fiddaman 				{
4274*b30d1939SAndy Fiddaman 					if (proto->brace == 0 && !(flags & (1L<<1))) flags |= (1L<<23);
4275*b30d1939SAndy Fiddaman 					call = !call;
4276*b30d1939SAndy Fiddaman 				}
4277*b30d1939SAndy Fiddaman 				else if ((flags & (1L<<23)) || c == (0401+0) || c == ((0500+4)+30)) call++;
4278*b30d1939SAndy Fiddaman 				else flags |= (1L<<23);
4279*b30d1939SAndy Fiddaman 				if (last == (0401+0)) flags |= (1L<<7);
4280*b30d1939SAndy Fiddaman 			}
4281*b30d1939SAndy Fiddaman 			c = (0401+0);
4282*b30d1939SAndy Fiddaman 			flags |= (1L<<25);
4283*b30d1939SAndy Fiddaman 			break;
4284*b30d1939SAndy Fiddaman 		case (0401+1):
4285*b30d1939SAndy Fiddaman 			if (*proto->tp >= '0' && *proto->tp <= '9')
4286*b30d1939SAndy Fiddaman 			{
4287*b30d1939SAndy Fiddaman 				n = 0;
4288*b30d1939SAndy Fiddaman 				for (;; op--)
4289*b30d1939SAndy Fiddaman 				{
4290*b30d1939SAndy Fiddaman 					switch (*(op - 1))
4291*b30d1939SAndy Fiddaman 					{
4292*b30d1939SAndy Fiddaman 					case 'f':
4293*b30d1939SAndy Fiddaman 					case 'F':
4294*b30d1939SAndy Fiddaman 						t = op;
4295*b30d1939SAndy Fiddaman 						while ((c = *--t) >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z');
4296*b30d1939SAndy Fiddaman 						if (*t == '.')
4297*b30d1939SAndy Fiddaman 							op--;
4298*b30d1939SAndy Fiddaman 						n = 0;
4299*b30d1939SAndy Fiddaman 						break;
4300*b30d1939SAndy Fiddaman 					case 'l':
4301*b30d1939SAndy Fiddaman 					case 'L':
4302*b30d1939SAndy Fiddaman 						if (!(n & 01))
4303*b30d1939SAndy Fiddaman 						{
4304*b30d1939SAndy Fiddaman 							n |= 01;
4305*b30d1939SAndy Fiddaman 							t = op;
4306*b30d1939SAndy Fiddaman 							while ((c = *--t) >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z');
4307*b30d1939SAndy Fiddaman 							if (*t == '.')
4308*b30d1939SAndy Fiddaman 							{
4309*b30d1939SAndy Fiddaman 								n = 0;
4310*b30d1939SAndy Fiddaman 								op--;
4311*b30d1939SAndy Fiddaman 								break;
4312*b30d1939SAndy Fiddaman 							}
4313*b30d1939SAndy Fiddaman 						}
4314*b30d1939SAndy Fiddaman 						continue;
4315*b30d1939SAndy Fiddaman 					case 'u':
4316*b30d1939SAndy Fiddaman 					case 'U':
4317*b30d1939SAndy Fiddaman 						n |= 02;
4318*b30d1939SAndy Fiddaman 						continue;
4319*b30d1939SAndy Fiddaman 					}
4320*b30d1939SAndy Fiddaman 					break;
4321*b30d1939SAndy Fiddaman 				}
4322*b30d1939SAndy Fiddaman 				if (n & 01)
4323*b30d1939SAndy Fiddaman 					*op++ = 'L';
4324*b30d1939SAndy Fiddaman 				if (n & 02)
4325*b30d1939SAndy Fiddaman 				{
4326*b30d1939SAndy Fiddaman 					m = op;
4327*b30d1939SAndy Fiddaman 					t = op = m + 10;
4328*b30d1939SAndy Fiddaman 					while ((c = *--m) >= '0' && c <= '9' || c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z')
4329*b30d1939SAndy Fiddaman 						*--t = c;
4330*b30d1939SAndy Fiddaman 					c = *t;
4331*b30d1939SAndy Fiddaman 					strcopy(m + 1, "(unsigned)");
4332*b30d1939SAndy Fiddaman 					*t = c;
4333*b30d1939SAndy Fiddaman 					break;
4334*b30d1939SAndy Fiddaman 				}
4335*b30d1939SAndy Fiddaman 			}
4336*b30d1939SAndy Fiddaman 			goto fsm_other;
4337*b30d1939SAndy Fiddaman 
4338*b30d1939SAndy Fiddaman 		case '[':
4339*b30d1939SAndy Fiddaman 			if ((flags & (1L<<0)) && paren == 0 && group <= 2) flags |= (1L<<23);
4340*b30d1939SAndy Fiddaman 
4341*b30d1939SAndy Fiddaman 
4342*b30d1939SAndy Fiddaman 		default:
4343*b30d1939SAndy Fiddaman  fsm_other:
4344*b30d1939SAndy Fiddaman 
4345*b30d1939SAndy Fiddaman 			if (flags & (1L<<0)) break;
4346*b30d1939SAndy Fiddaman 
4347*b30d1939SAndy Fiddaman 			flags |= (1L<<25);
4348*b30d1939SAndy Fiddaman 			if (paren == 0) flags |= (1L<<17);
4349*b30d1939SAndy Fiddaman 			break;
4350*b30d1939SAndy Fiddaman 		}
4351*b30d1939SAndy Fiddaman 		else if (c == '#' && *ip != '(') flags |= (1L<<22);
4352*b30d1939SAndy Fiddaman 		last = c;
4353*b30d1939SAndy Fiddaman 
4354*b30d1939SAndy Fiddaman 		if ((flags & ((1L<<5)|(1L<<15))) == ((1L<<5)|(1L<<15)) && ((flags & ((1L<<3)|(1L<<23))) || proto->brace || c != '(' && c != ')' && c != '*' && c != (0401+0)))
4355*b30d1939SAndy Fiddaman 			(op=proto->op);
4356*b30d1939SAndy Fiddaman 		else
4357*b30d1939SAndy Fiddaman 
4358*b30d1939SAndy Fiddaman 		(proto->op=op);
4359*b30d1939SAndy Fiddaman 		goto fsm_start;
4360*b30d1939SAndy Fiddaman 	}
4361*b30d1939SAndy Fiddaman 	else if (flags & ((1L<<10)|(1L<<11)))
4362*b30d1939SAndy Fiddaman 	{
4363*b30d1939SAndy Fiddaman 
4364*b30d1939SAndy Fiddaman 		if ((flags & (1L<<29)) && c == '%' && *ip == '{')
4365*b30d1939SAndy Fiddaman 			t = 0;
4366*b30d1939SAndy Fiddaman 		else
4367*b30d1939SAndy Fiddaman 
4368*b30d1939SAndy Fiddaman 		{
4369*b30d1939SAndy Fiddaman 			if (c == '#')
4370*b30d1939SAndy Fiddaman 			{
4371*b30d1939SAndy Fiddaman 				for (t = ip; *t == ' ' || *t == '\t'; t++);
4372*b30d1939SAndy Fiddaman 				if (*t++ == 'i' && *t++ == 'f' && *t++ == 'n' && *t++ == 'd' && *t++ == 'e' && *t++ == 'f')
4373*b30d1939SAndy Fiddaman 				{
4374*b30d1939SAndy Fiddaman 
4375*b30d1939SAndy Fiddaman 
4376*b30d1939SAndy Fiddaman 
4377*b30d1939SAndy Fiddaman 
4378*b30d1939SAndy Fiddaman 						t = 0;
4379*b30d1939SAndy Fiddaman 				}
4380*b30d1939SAndy Fiddaman 			}
4381*b30d1939SAndy Fiddaman 			else
4382*b30d1939SAndy Fiddaman 				t = "";
4383*b30d1939SAndy Fiddaman 		}
4384*b30d1939SAndy Fiddaman 		if (t)
4385*b30d1939SAndy Fiddaman 		{
4386*b30d1939SAndy Fiddaman 
4387*b30d1939SAndy Fiddaman 			n = ip - proto->tp;
4388*b30d1939SAndy Fiddaman 			ip -= n;
4389*b30d1939SAndy Fiddaman 			op -= n;
4390*b30d1939SAndy Fiddaman 
4391*b30d1939SAndy Fiddaman 
4392*b30d1939SAndy Fiddaman 
4393*b30d1939SAndy Fiddaman 
4394*b30d1939SAndy Fiddaman 		}
4395*b30d1939SAndy Fiddaman 		else
4396*b30d1939SAndy Fiddaman 			while (*ip != '\n')
4397*b30d1939SAndy Fiddaman 				*op++ = *ip++;
4398*b30d1939SAndy Fiddaman 		op = init(proto, op, flags);
4399*b30d1939SAndy Fiddaman 		op = linesync(proto, op, proto->line);
4400*b30d1939SAndy Fiddaman 		flags &= ~((1L<<10)|(1L<<11));
4401*b30d1939SAndy Fiddaman 		proto->flags &= ~((1L<<10)|(1L<<11));
4402*b30d1939SAndy Fiddaman 		goto fsm_start;
4403*b30d1939SAndy Fiddaman 	}
4404*b30d1939SAndy Fiddaman 	do{(proto->ip=ip);(proto->op=op);proto->flags&=~((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->flags|=flags&((1L<<5)|(1L<<9)|(1L<<17)|(1L<<27)|(1L<<28));proto->call=call;}while(0);
4405*b30d1939SAndy Fiddaman 	return c;
4406*b30d1939SAndy Fiddaman }
4407*b30d1939SAndy Fiddaman 
4408*b30d1939SAndy Fiddaman 
4409*b30d1939SAndy Fiddaman 
4410*b30d1939SAndy Fiddaman 
4411*b30d1939SAndy Fiddaman 
4412*b30d1939SAndy Fiddaman void
__OTORP__(char * iob;)4413*b30d1939SAndy Fiddaman pppclose __PARAM__((char* iob), (iob)) __OTORP__(char* iob;){
4414*b30d1939SAndy Fiddaman 	register Proto_t*	proto = (Proto_t*)(iob - sizeof(Proto_t));
4415*b30d1939SAndy Fiddaman 
4416*b30d1939SAndy Fiddaman 	if (proto->flags & (1L<<16)) close(proto->fd);
4417*b30d1939SAndy Fiddaman 	free((char*)proto);
4418*b30d1939SAndy Fiddaman }
4419*b30d1939SAndy Fiddaman 
4420*b30d1939SAndy Fiddaman 
4421*b30d1939SAndy Fiddaman #line 2055
4422*b30d1939SAndy Fiddaman char*
__OTORP__(char * file;int fd;char * notice;char * options;char * package;char * comment;int flags;)4423*b30d1939SAndy Fiddaman pppopen __PARAM__((char* file, int fd, char* notice, char* options, char* package, char* comment, int flags), (file, fd, notice, options, package, comment, flags)) __OTORP__(char* file; int fd; char* notice; char* options; char* package; char* comment; int flags;){
4424*b30d1939SAndy Fiddaman 	register Proto_t*	proto;
4425*b30d1939SAndy Fiddaman 	register char*		iob;
4426*b30d1939SAndy Fiddaman 	register long		n;
4427*b30d1939SAndy Fiddaman 	register char*		s;
4428*b30d1939SAndy Fiddaman 	char*			t;
4429*b30d1939SAndy Fiddaman 	int			pragma;
4430*b30d1939SAndy Fiddaman 	int			clr;
4431*b30d1939SAndy Fiddaman 	int			hit;
4432*b30d1939SAndy Fiddaman 	int			i;
4433*b30d1939SAndy Fiddaman 	int			z;
4434*b30d1939SAndy Fiddaman 	char*			b;
4435*b30d1939SAndy Fiddaman 
4436*b30d1939SAndy Fiddaman 	int			comlen;
4437*b30d1939SAndy Fiddaman 	char			com[80];
4438*b30d1939SAndy Fiddaman 
4439*b30d1939SAndy Fiddaman 	int			m = 0;
4440*b30d1939SAndy Fiddaman 
4441*b30d1939SAndy Fiddaman 	static int		retain;
4442*b30d1939SAndy Fiddaman 
4443*b30d1939SAndy Fiddaman 
4444*b30d1939SAndy Fiddaman 
4445*b30d1939SAndy Fiddaman 
4446*b30d1939SAndy Fiddaman 
4447*b30d1939SAndy Fiddaman 
4448*b30d1939SAndy Fiddaman 	if (flags & (1<<0)) flags &= ~(1<<5);
4449*b30d1939SAndy Fiddaman 
4450*b30d1939SAndy Fiddaman 	if (flags & (1<<11)) flags &= ~retain;
4451*b30d1939SAndy Fiddaman 	else retain &= (1<<6);
4452*b30d1939SAndy Fiddaman 	if (file && (fd = open(file, O_RDONLY)) < 0) return 0;
4453*b30d1939SAndy Fiddaman 
4454*b30d1939SAndy Fiddaman 
4455*b30d1939SAndy Fiddaman 
4456*b30d1939SAndy Fiddaman 
4457*b30d1939SAndy Fiddaman 
4458*b30d1939SAndy Fiddaman 
4459*b30d1939SAndy Fiddaman 
4460*b30d1939SAndy Fiddaman 
4461*b30d1939SAndy Fiddaman 
4462*b30d1939SAndy Fiddaman 
4463*b30d1939SAndy Fiddaman 
4464*b30d1939SAndy Fiddaman 
4465*b30d1939SAndy Fiddaman 
4466*b30d1939SAndy Fiddaman 
4467*b30d1939SAndy Fiddaman 
4468*b30d1939SAndy Fiddaman 
4469*b30d1939SAndy Fiddaman 
4470*b30d1939SAndy Fiddaman 
4471*b30d1939SAndy Fiddaman 
4472*b30d1939SAndy Fiddaman 
4473*b30d1939SAndy Fiddaman 
4474*b30d1939SAndy Fiddaman 
4475*b30d1939SAndy Fiddaman 	{
4476*b30d1939SAndy Fiddaman 
4477*b30d1939SAndy Fiddaman 
4478*b30d1939SAndy Fiddaman 
4479*b30d1939SAndy Fiddaman 
4480*b30d1939SAndy Fiddaman 		n = (16*1024);
4481*b30d1939SAndy Fiddaman 		if (!(proto = (( 0)?( Proto_t*)realloc((char*)( 0),sizeof( Proto_t)*( 1)+( 5 * n + 2)):( Proto_t*)calloc(1,sizeof( Proto_t)*( 1)+( 5 * n + 2)))))
4482*b30d1939SAndy Fiddaman 			return 0;
4483*b30d1939SAndy Fiddaman 		proto->iz = n;
4484*b30d1939SAndy Fiddaman 		proto->oz = 3 * n;
4485*b30d1939SAndy Fiddaman 		proto->flags |= (1L<<16);
4486*b30d1939SAndy Fiddaman 	}
4487*b30d1939SAndy Fiddaman 	proto->fd = fd;
4488*b30d1939SAndy Fiddaman 	proto->package = package;
4489*b30d1939SAndy Fiddaman 	iob = (char*)proto + sizeof(Proto_t);
4490*b30d1939SAndy Fiddaman 	proto->op = proto->ob = iob;
4491*b30d1939SAndy Fiddaman 	proto->ip = proto->ib = iob + proto->oz + n;
4492*b30d1939SAndy Fiddaman 	if (m) proto->options |= (1L<<0);
4493*b30d1939SAndy Fiddaman 	if (!comment)
4494*b30d1939SAndy Fiddaman 		comment = "/*";
4495*b30d1939SAndy Fiddaman 	if (!(proto->cc[0] = comment[0]))
4496*b30d1939SAndy Fiddaman 		notice = options = 0;
4497*b30d1939SAndy Fiddaman 	else if (comment[1])
4498*b30d1939SAndy Fiddaman 	{
4499*b30d1939SAndy Fiddaman 		proto->cc[1] = comment[1];
4500*b30d1939SAndy Fiddaman 		proto->cc[2] = comment[2] ? comment[2] : comment[0];
4501*b30d1939SAndy Fiddaman 	}
4502*b30d1939SAndy Fiddaman 	else
4503*b30d1939SAndy Fiddaman 		proto->cc[1] = proto->cc[2] = comment[0];
4504*b30d1939SAndy Fiddaman 
4505*b30d1939SAndy Fiddaman 
4506*b30d1939SAndy Fiddaman 
4507*b30d1939SAndy Fiddaman 
4508*b30d1939SAndy Fiddaman 
4509*b30d1939SAndy Fiddaman 	n = read(fd, proto->ip, proto->iz);
4510*b30d1939SAndy Fiddaman 	if (!(proto->flags & (1L<<16)))
4511*b30d1939SAndy Fiddaman 		close(fd);
4512*b30d1939SAndy Fiddaman 	if (n < 0)
4513*b30d1939SAndy Fiddaman 	{
4514*b30d1939SAndy Fiddaman 		pppclose(iob);
4515*b30d1939SAndy Fiddaman 		return 0;
4516*b30d1939SAndy Fiddaman 	}
4517*b30d1939SAndy Fiddaman 	*(proto->ip + n) = 0;
4518*b30d1939SAndy Fiddaman 
4519*b30d1939SAndy Fiddaman 
4520*b30d1939SAndy Fiddaman #line 2165
4521*b30d1939SAndy Fiddaman 	if (!notice && !options || (comlen = astlicense(com, sizeof(com), ((char*)0), "type=check", proto->cc[0], proto->cc[1], proto->cc[2])) <= 0)
4522*b30d1939SAndy Fiddaman 		*com = 0;
4523*b30d1939SAndy Fiddaman 
4524*b30d1939SAndy Fiddaman 	hit = (notice || options) ? 0 : 0x02;
4525*b30d1939SAndy Fiddaman 	pragma = -1;
4526*b30d1939SAndy Fiddaman 	s = proto->ip;
4527*b30d1939SAndy Fiddaman 	m = 80;
4528*b30d1939SAndy Fiddaman 	while (m-- > 0 && *s && hit != (0x01|0x02))
4529*b30d1939SAndy Fiddaman 	{
4530*b30d1939SAndy Fiddaman 		while (*s == ' ' || *s == '\t')
4531*b30d1939SAndy Fiddaman 			s++;
4532*b30d1939SAndy Fiddaman 		if (*s == '#')
4533*b30d1939SAndy Fiddaman 		{
4534*b30d1939SAndy Fiddaman 			b = s++;
4535*b30d1939SAndy Fiddaman 			while (*s == ' ' || *s == '\t')
4536*b30d1939SAndy Fiddaman 				s++;
4537*b30d1939SAndy Fiddaman 			if (*s == *"pragma"&& !sstrncmp( s, "pragma", sizeof("pragma") - 1) && (*(s += sizeof("pragma") - 1) == ' ' || *s == '\t'))
4538*b30d1939SAndy Fiddaman 			{
4539*b30d1939SAndy Fiddaman 				clr = 0;
4540*b30d1939SAndy Fiddaman 				while (*s && *s != '\r' && *s != '\n')
4541*b30d1939SAndy Fiddaman 				{
4542*b30d1939SAndy Fiddaman 					for (; *s == ' ' || *s == '\t'; s++);
4543*b30d1939SAndy Fiddaman 					for (t = s; *s && *s != ' ' && *s != '\t' && *s != '\r' && *s != '\n'; s++);
4544*b30d1939SAndy Fiddaman 					z = s - t;
4545*b30d1939SAndy Fiddaman 					for (i = 0; i < (sizeof( pragmas)/sizeof( pragmas[0])); i++)
4546*b30d1939SAndy Fiddaman 						if (pragmas[i].size == z && !sstrncmp( t, pragmas[i].name, z))
4547*b30d1939SAndy Fiddaman 						{
4548*b30d1939SAndy Fiddaman 							clr = 1;
4549*b30d1939SAndy Fiddaman 							hit |= pragmas[i].hit;
4550*b30d1939SAndy Fiddaman 							switch (pragmas[i].hit)
4551*b30d1939SAndy Fiddaman 							{
4552*b30d1939SAndy Fiddaman 							case 0x02:
4553*b30d1939SAndy Fiddaman 								notice = options = 0;
4554*b30d1939SAndy Fiddaman 								break;
4555*b30d1939SAndy Fiddaman 							case 0x01:
4556*b30d1939SAndy Fiddaman 								pragma = pragmas[i].val;
4557*b30d1939SAndy Fiddaman 								break;
4558*b30d1939SAndy Fiddaman 							}
4559*b30d1939SAndy Fiddaman 						}
4560*b30d1939SAndy Fiddaman 				}
4561*b30d1939SAndy Fiddaman 				if (clr)
4562*b30d1939SAndy Fiddaman 				{
4563*b30d1939SAndy Fiddaman 
4564*b30d1939SAndy Fiddaman 					if (!(flags & (1<<1)) || (flags & (1<<8)))
4565*b30d1939SAndy Fiddaman 
4566*b30d1939SAndy Fiddaman 					for (; b < s; *b++ = ' ');
4567*b30d1939SAndy Fiddaman 				}
4568*b30d1939SAndy Fiddaman 			}
4569*b30d1939SAndy Fiddaman 		}
4570*b30d1939SAndy Fiddaman 		else if (*s == *"/* : : generated by proto : : */\n"&& !sstrncmp( s, "/* : : generated by proto : : */\n", sizeof("/* : : generated by proto : : */\n") - 1))
4571*b30d1939SAndy Fiddaman 		{
4572*b30d1939SAndy Fiddaman 			pragma = 0;
4573*b30d1939SAndy Fiddaman 			break;
4574*b30d1939SAndy Fiddaman 		}
4575*b30d1939SAndy Fiddaman 
4576*b30d1939SAndy Fiddaman 		else if (*s == '%' && *(s + 1) == '{')
4577*b30d1939SAndy Fiddaman 			proto->flags |= (1L<<29);
4578*b30d1939SAndy Fiddaman 		else if (!(hit & 0x02))
4579*b30d1939SAndy Fiddaman 		{
4580*b30d1939SAndy Fiddaman 			if (*s == *com && !sstrncmp( s, com, comlen))
4581*b30d1939SAndy Fiddaman 			{
4582*b30d1939SAndy Fiddaman 				hit |= 0x02;
4583*b30d1939SAndy Fiddaman 				notice = options = 0;
4584*b30d1939SAndy Fiddaman 			}
4585*b30d1939SAndy Fiddaman 			else
4586*b30d1939SAndy Fiddaman 				for (; *s && *s != '\n' && !(hit & 0x02); s++)
4587*b30d1939SAndy Fiddaman 					for (i = 0; i < (sizeof( notices)/sizeof( notices[0])); i++)
4588*b30d1939SAndy Fiddaman 						if (*s == notices[i].name[0] && !sstrncmp( s, notices[i].name, notices[i].size))
4589*b30d1939SAndy Fiddaman 						{
4590*b30d1939SAndy Fiddaman 							s += notices[i].size;
4591*b30d1939SAndy Fiddaman 							if (notices[i].val)
4592*b30d1939SAndy Fiddaman 							{
4593*b30d1939SAndy Fiddaman 								while (*s == ' ' || *s == '\t')
4594*b30d1939SAndy Fiddaman 									s++;
4595*b30d1939SAndy Fiddaman 								if (*s == '(' && (*(s + 1) == 'c' || *(s + 1) == 'C') && *(s + 2) == ')' || *s >= '0' && *s <= '9' && *(s + 1) >= '0' && *(s + 1) <= '9')
4596*b30d1939SAndy Fiddaman 								{
4597*b30d1939SAndy Fiddaman 									hit |= notices[i].hit;
4598*b30d1939SAndy Fiddaman 									notice = options = 0;
4599*b30d1939SAndy Fiddaman 								}
4600*b30d1939SAndy Fiddaman 							}
4601*b30d1939SAndy Fiddaman 							else
4602*b30d1939SAndy Fiddaman 							{
4603*b30d1939SAndy Fiddaman 								hit |= notices[i].hit;
4604*b30d1939SAndy Fiddaman 								notice = options = 0;
4605*b30d1939SAndy Fiddaman 							}
4606*b30d1939SAndy Fiddaman 							break;
4607*b30d1939SAndy Fiddaman 						}
4608*b30d1939SAndy Fiddaman 		}
4609*b30d1939SAndy Fiddaman 
4610*b30d1939SAndy Fiddaman 		while (*s && *s++ != '\n');
4611*b30d1939SAndy Fiddaman 	}
4612*b30d1939SAndy Fiddaman 	if (flags & (1<<10)) proto->flags |= (1L<<20);
4613*b30d1939SAndy Fiddaman 	if (flags & (1<<12)) proto->test = 1;
4614*b30d1939SAndy Fiddaman 	if (flags & (1<<2)) proto->options |= (1L<<6);
4615*b30d1939SAndy Fiddaman 
4616*b30d1939SAndy Fiddaman 	if (flags & (1<<0)) pragma = -pragma;
4617*b30d1939SAndy Fiddaman 	if (flags & (1<<1)) pragma = 0;
4618*b30d1939SAndy Fiddaman 	if (flags & (1<<7)) proto->flags |= (1L<<13);
4619*b30d1939SAndy Fiddaman 	if (!(proto->flags & (1L<<29)) && file && (m = sstrlen( file)) > 2 && file[--m] == 'y' && file[--m] == '.')
4620*b30d1939SAndy Fiddaman 		proto->flags |= (1L<<29);
4621*b30d1939SAndy Fiddaman 
4622*b30d1939SAndy Fiddaman 	if (pragma <= 0)
4623*b30d1939SAndy Fiddaman 	{
4624*b30d1939SAndy Fiddaman 		if (flags & (1<<10))
4625*b30d1939SAndy Fiddaman 		{
4626*b30d1939SAndy Fiddaman 			flags &= ~((1<<4)|(1<<5));
4627*b30d1939SAndy Fiddaman 			proto->flags |= (1L<<19);
4628*b30d1939SAndy Fiddaman 		}
4629*b30d1939SAndy Fiddaman 		else if (!(flags & ((1<<3)|(1<<9))))
4630*b30d1939SAndy Fiddaman 		{
4631*b30d1939SAndy Fiddaman 			pppclose(iob);
4632*b30d1939SAndy Fiddaman 			return 0;
4633*b30d1939SAndy Fiddaman 		}
4634*b30d1939SAndy Fiddaman 		else if ((flags & ((1<<3)|(1<<9))) == (1<<9) || !pragma)
4635*b30d1939SAndy Fiddaman 		{
4636*b30d1939SAndy Fiddaman 			proto->flags |= (1L<<18);
4637*b30d1939SAndy Fiddaman 			if (proto->flags & (1L<<16))
4638*b30d1939SAndy Fiddaman 				proto->oz += proto->iz;
4639*b30d1939SAndy Fiddaman 			proto->iz = n;
4640*b30d1939SAndy Fiddaman 			if (notice || options)
4641*b30d1939SAndy Fiddaman 			{
4642*b30d1939SAndy Fiddaman 				if (proto->cc[0] == '#' && proto->ip[0] == '#' && proto->ip[1] == '!')
4643*b30d1939SAndy Fiddaman 				{
4644*b30d1939SAndy Fiddaman 					s = proto->ip;
4645*b30d1939SAndy Fiddaman 					while (*s && *s++ != '\n');
4646*b30d1939SAndy Fiddaman 					m = s - proto->ip;
4647*b30d1939SAndy Fiddaman 					proto->op = memcopy(proto->op, proto->ip, m);
4648*b30d1939SAndy Fiddaman 					proto->ip = s;
4649*b30d1939SAndy Fiddaman 					proto->iz = n -= m;
4650*b30d1939SAndy Fiddaman 				}
4651*b30d1939SAndy Fiddaman 
4652*b30d1939SAndy Fiddaman 				if (proto->cc[0])
4653*b30d1939SAndy Fiddaman 				{
4654*b30d1939SAndy Fiddaman 					if ((comlen = astlicense(proto->op, proto->oz, notice, options, proto->cc[0], proto->cc[1], proto->cc[2])) < 0)
4655*b30d1939SAndy Fiddaman 						proto_error((char*)proto + sizeof(Proto_t), 1, proto->op, ((char*)0));
4656*b30d1939SAndy Fiddaman 					else
4657*b30d1939SAndy Fiddaman 						proto->op += comlen;
4658*b30d1939SAndy Fiddaman 				}
4659*b30d1939SAndy Fiddaman 				if (!(flags & (1<<0)) && !(proto->flags & (1L<<29)))
4660*b30d1939SAndy Fiddaman 
4661*b30d1939SAndy Fiddaman 				proto->op = linesync(proto, proto->op, 1);
4662*b30d1939SAndy Fiddaman 				proto->iz += proto->op - proto->ob;
4663*b30d1939SAndy Fiddaman 			}
4664*b30d1939SAndy Fiddaman 			memcopy(proto->op, proto->ip, n);
4665*b30d1939SAndy Fiddaman 			return iob;
4666*b30d1939SAndy Fiddaman 		}
4667*b30d1939SAndy Fiddaman 	}
4668*b30d1939SAndy Fiddaman 
4669*b30d1939SAndy Fiddaman 	if (!(retain & (1<<6)))
4670*b30d1939SAndy Fiddaman 	{
4671*b30d1939SAndy Fiddaman 		retain |= (1<<6);
4672*b30d1939SAndy Fiddaman 		ppfsm(4, ((char*)0));
4673*b30d1939SAndy Fiddaman 	}
4674*b30d1939SAndy Fiddaman 
4675*b30d1939SAndy Fiddaman 	proto->line = 1;
4676*b30d1939SAndy Fiddaman 
4677*b30d1939SAndy Fiddaman 	if (notice || options || (flags & ((1<<4)|(1<<5))))
4678*b30d1939SAndy Fiddaman 	{
4679*b30d1939SAndy Fiddaman 
4680*b30d1939SAndy Fiddaman 		if (notice || options)
4681*b30d1939SAndy Fiddaman 		{
4682*b30d1939SAndy Fiddaman 			if ((comlen = astlicense(proto->op, proto->oz, notice, options, proto->cc[0], proto->cc[1], proto->cc[2])) < 0)
4683*b30d1939SAndy Fiddaman 				proto_error((char*)proto + sizeof(Proto_t), 1, proto->op, ((char*)0));
4684*b30d1939SAndy Fiddaman 			else
4685*b30d1939SAndy Fiddaman 				proto->op += comlen;
4686*b30d1939SAndy Fiddaman 		}
4687*b30d1939SAndy Fiddaman 
4688*b30d1939SAndy Fiddaman 		if (flags & (1<<5))
4689*b30d1939SAndy Fiddaman 		{
4690*b30d1939SAndy Fiddaman 			proto->flags |= (1L<<11);
4691*b30d1939SAndy Fiddaman 			if (flags & (1<<11))
4692*b30d1939SAndy Fiddaman 				retain |= (1<<5);
4693*b30d1939SAndy Fiddaman 		}
4694*b30d1939SAndy Fiddaman 		else if (flags & (1<<4))
4695*b30d1939SAndy Fiddaman 		{
4696*b30d1939SAndy Fiddaman 			if (flags & (1<<11)) retain |= (1<<4);
4697*b30d1939SAndy Fiddaman 
4698*b30d1939SAndy Fiddaman 			if (flags & (1<<0))
4699*b30d1939SAndy Fiddaman 			{
4700*b30d1939SAndy Fiddaman 				*proto->op++ = '#';
4701*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "pragma");
4702*b30d1939SAndy Fiddaman 				*proto->op++ = ' ';
4703*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, pragmas[0].name);
4704*b30d1939SAndy Fiddaman 				*proto->op++ = '\n';
4705*b30d1939SAndy Fiddaman 			}
4706*b30d1939SAndy Fiddaman 			else
4707*b30d1939SAndy Fiddaman 
4708*b30d1939SAndy Fiddaman 			proto->flags |= (1L<<10);
4709*b30d1939SAndy Fiddaman 		}
4710*b30d1939SAndy Fiddaman 
4711*b30d1939SAndy Fiddaman 		if (!(flags & (1<<0)))
4712*b30d1939SAndy Fiddaman 		{
4713*b30d1939SAndy Fiddaman 			if (proto->flags & (1L<<29))
4714*b30d1939SAndy Fiddaman 			{
4715*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "\n%{\n"+ !notice);
4716*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "/* : : generated by proto : : */\n");
4717*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "%}\n");
4718*b30d1939SAndy Fiddaman 			}
4719*b30d1939SAndy Fiddaman 			else
4720*b30d1939SAndy Fiddaman 			{
4721*b30d1939SAndy Fiddaman 				if (n || notice || options)
4722*b30d1939SAndy Fiddaman 					*proto->op++ = '\n';
4723*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "/* : : generated by proto : : */\n");
4724*b30d1939SAndy Fiddaman 				if (n)
4725*b30d1939SAndy Fiddaman 					proto->op = linesync(proto, proto->op, proto->line);
4726*b30d1939SAndy Fiddaman 				else if (proto->flags & ((1L<<10)|(1L<<11)))
4727*b30d1939SAndy Fiddaman 					proto->op = init(proto, proto->op, proto->flags);
4728*b30d1939SAndy Fiddaman 			}
4729*b30d1939SAndy Fiddaman 		}
4730*b30d1939SAndy Fiddaman 
4731*b30d1939SAndy Fiddaman 	}
4732*b30d1939SAndy Fiddaman 
4733*b30d1939SAndy Fiddaman 
4734*b30d1939SAndy Fiddaman 	proto->file = file;
4735*b30d1939SAndy Fiddaman 	if (flags & (1<<0))
4736*b30d1939SAndy Fiddaman 	{
4737*b30d1939SAndy Fiddaman 		proto->flags |= (1L<<0);
4738*b30d1939SAndy Fiddaman 		if (!(flags & (1<<4))) proto->flags |= (1L<<5);
4739*b30d1939SAndy Fiddaman 	}
4740*b30d1939SAndy Fiddaman 
4741*b30d1939SAndy Fiddaman 	return iob;
4742*b30d1939SAndy Fiddaman }
4743*b30d1939SAndy Fiddaman 
4744*b30d1939SAndy Fiddaman 
4745*b30d1939SAndy Fiddaman 
4746*b30d1939SAndy Fiddaman 
4747*b30d1939SAndy Fiddaman 
4748*b30d1939SAndy Fiddaman 
4749*b30d1939SAndy Fiddaman int
__OTORP__(char * iob;)4750*b30d1939SAndy Fiddaman pppread __PARAM__((char* iob), (iob)) __OTORP__(char* iob;){
4751*b30d1939SAndy Fiddaman 	register Proto_t*	proto = (Proto_t*)(iob - sizeof(Proto_t));
4752*b30d1939SAndy Fiddaman 	register int		n;
4753*b30d1939SAndy Fiddaman 
4754*b30d1939SAndy Fiddaman 	if (proto->flags & (1L<<18))
4755*b30d1939SAndy Fiddaman 	{
4756*b30d1939SAndy Fiddaman 		if (proto->iz)
4757*b30d1939SAndy Fiddaman 		{
4758*b30d1939SAndy Fiddaman 			n = proto->iz;
4759*b30d1939SAndy Fiddaman 			proto->iz = 0;
4760*b30d1939SAndy Fiddaman 		}
4761*b30d1939SAndy Fiddaman 		else if (!(proto->flags & (1L<<16))) n = 0;
4762*b30d1939SAndy Fiddaman 		else if ((n = read(proto->fd, proto->ob, proto->oz)) <= 0 || (proto->options & (1L<<0)) && n < proto->oz)
4763*b30d1939SAndy Fiddaman 		{
4764*b30d1939SAndy Fiddaman 			proto->flags &= ~(1L<<16);
4765*b30d1939SAndy Fiddaman 			close(proto->fd);
4766*b30d1939SAndy Fiddaman 		}
4767*b30d1939SAndy Fiddaman 	}
4768*b30d1939SAndy Fiddaman 	else
4769*b30d1939SAndy Fiddaman 	{
4770*b30d1939SAndy Fiddaman 		if (proto->op == proto->ob)
4771*b30d1939SAndy Fiddaman 		{
4772*b30d1939SAndy Fiddaman 			if (proto->flags & (1L<<4)) return -1;
4773*b30d1939SAndy Fiddaman 
4774*b30d1939SAndy Fiddaman 			if (proto->flags & (1L<<29))
4775*b30d1939SAndy Fiddaman 			{
4776*b30d1939SAndy Fiddaman 				register char*	ip = proto->ip;
4777*b30d1939SAndy Fiddaman 				register char*	op = proto->ob;
4778*b30d1939SAndy Fiddaman 				register char*	ep = proto->ob + proto->oz - 2;
4779*b30d1939SAndy Fiddaman 
4780*b30d1939SAndy Fiddaman 				if (!*ip)
4781*b30d1939SAndy Fiddaman 				{
4782*b30d1939SAndy Fiddaman 					ip = proto->ip = proto->ib;
4783*b30d1939SAndy Fiddaman 					if (!(proto->flags & (1L<<16))) n = 0;
4784*b30d1939SAndy Fiddaman 					else if ((n = read(proto->fd, ip, proto->iz)) <= 0 || (proto->options & (1L<<0)) && n < proto->iz)
4785*b30d1939SAndy Fiddaman 					{
4786*b30d1939SAndy Fiddaman 						if (n < 0) n = 0;
4787*b30d1939SAndy Fiddaman 						proto->flags &= ~(1L<<16);
4788*b30d1939SAndy Fiddaman 						close(proto->fd);
4789*b30d1939SAndy Fiddaman 					}
4790*b30d1939SAndy Fiddaman 					ip[n] = 0;
4791*b30d1939SAndy Fiddaman 				}
4792*b30d1939SAndy Fiddaman 				if (proto->flags & (1L<<30))
4793*b30d1939SAndy Fiddaman 				{
4794*b30d1939SAndy Fiddaman 					proto->flags &= ~(1L<<30);
4795*b30d1939SAndy Fiddaman 					if (*ip == '%')
4796*b30d1939SAndy Fiddaman 					{
4797*b30d1939SAndy Fiddaman 						*op++ = *ip++;
4798*b30d1939SAndy Fiddaman 						if (proto->flags & (1L<<31)) proto->flags &= ~(1L<<29);
4799*b30d1939SAndy Fiddaman 						else proto->flags |= (1L<<31);
4800*b30d1939SAndy Fiddaman 					}
4801*b30d1939SAndy Fiddaman 				}
4802*b30d1939SAndy Fiddaman 				if (proto->flags & (1L<<29))
4803*b30d1939SAndy Fiddaman 					while (op < ep && (n = *op++ = *ip))
4804*b30d1939SAndy Fiddaman 					{
4805*b30d1939SAndy Fiddaman 						ip++;
4806*b30d1939SAndy Fiddaman 						if (n == '%')
4807*b30d1939SAndy Fiddaman 						{
4808*b30d1939SAndy Fiddaman 							if (*ip == '%' && (ip == proto->ip + 1 || *(ip - 2) == '\n'))
4809*b30d1939SAndy Fiddaman 							{
4810*b30d1939SAndy Fiddaman 								*op++ = *ip++;
4811*b30d1939SAndy Fiddaman 								if (proto->flags & (1L<<31)) proto->flags &= ~(1L<<29);
4812*b30d1939SAndy Fiddaman 								else proto->flags |= (1L<<31);
4813*b30d1939SAndy Fiddaman 								break;
4814*b30d1939SAndy Fiddaman 							}
4815*b30d1939SAndy Fiddaman 							if (!*ip)
4816*b30d1939SAndy Fiddaman 							{
4817*b30d1939SAndy Fiddaman 								*op++ = '%';
4818*b30d1939SAndy Fiddaman 								proto->flags |= (1L<<30);
4819*b30d1939SAndy Fiddaman 								break;
4820*b30d1939SAndy Fiddaman 							}
4821*b30d1939SAndy Fiddaman 						}
4822*b30d1939SAndy Fiddaman 						else if (n == '\n') proto->line++;
4823*b30d1939SAndy Fiddaman 					}
4824*b30d1939SAndy Fiddaman 				proto->op = memcopy(proto->ob, proto->ip, ip - proto->ip);
4825*b30d1939SAndy Fiddaman 				proto->ip = ip;
4826*b30d1939SAndy Fiddaman 			}
4827*b30d1939SAndy Fiddaman 			else
4828*b30d1939SAndy Fiddaman 
4829*b30d1939SAndy Fiddaman 			lex(proto, proto->flags);
4830*b30d1939SAndy Fiddaman 			if ((proto->flags & ((1L<<4)|(1L<<16))) == (1L<<4))
4831*b30d1939SAndy Fiddaman 				proto->op = strcopy(proto->op, "/* NOTE: some constructs may not have been converted */\n");
4832*b30d1939SAndy Fiddaman 		}
4833*b30d1939SAndy Fiddaman 		n = proto->op - proto->ob;
4834*b30d1939SAndy Fiddaman 		proto->op = proto->ob;
4835*b30d1939SAndy Fiddaman 	}
4836*b30d1939SAndy Fiddaman 	return n;
4837*b30d1939SAndy Fiddaman }
4838*b30d1939SAndy Fiddaman 
4839*b30d1939SAndy Fiddaman 
4840*b30d1939SAndy Fiddaman 
4841*b30d1939SAndy Fiddaman 
4842*b30d1939SAndy Fiddaman 
4843*b30d1939SAndy Fiddaman 
4844*b30d1939SAndy Fiddaman 
4845*b30d1939SAndy Fiddaman 
4846*b30d1939SAndy Fiddaman 
4847*b30d1939SAndy Fiddaman 
4848*b30d1939SAndy Fiddaman 
4849*b30d1939SAndy Fiddaman 
4850*b30d1939SAndy Fiddaman #line 269 "proto.c"
4851*b30d1939SAndy Fiddaman 
4852*b30d1939SAndy Fiddaman 
4853*b30d1939SAndy Fiddaman 
4854*b30d1939SAndy Fiddaman 
4855*b30d1939SAndy Fiddaman 
4856*b30d1939SAndy Fiddaman static int
__OTORP__(char * file;char * license;char * options;char * package;char * copy;char * comment;int flags;)4857*b30d1939SAndy Fiddaman proto __PARAM__((char* file, char* license, char* options, char* package, char* copy, char* comment, int flags), (file, license, options, package, copy, comment, flags)) __OTORP__(char* file; char* license; char* options; char* package; char* copy; char* comment; int flags;){
4858*b30d1939SAndy Fiddaman 	char*		b;
4859*b30d1939SAndy Fiddaman 	char*		e;
4860*b30d1939SAndy Fiddaman 	char*		p;
4861*b30d1939SAndy Fiddaman 	int		n;
4862*b30d1939SAndy Fiddaman 	int		m;
4863*b30d1939SAndy Fiddaman 	int		x;
4864*b30d1939SAndy Fiddaman 	int		fd;
4865*b30d1939SAndy Fiddaman 	char		buf[1024];
4866*b30d1939SAndy Fiddaman 
4867*b30d1939SAndy Fiddaman 	if (file && access(file, 4))
4868*b30d1939SAndy Fiddaman 		proto_error(((char*)0), 2, file, "not found");
4869*b30d1939SAndy Fiddaman 	else if (b = pppopen(file, 0, license, options, package, comment, flags))
4870*b30d1939SAndy Fiddaman 	{
4871*b30d1939SAndy Fiddaman 		if (!file)
4872*b30d1939SAndy Fiddaman 			fd = 1;
4873*b30d1939SAndy Fiddaman 		else if (flags & ((1<<13)<<1))
4874*b30d1939SAndy Fiddaman 		{
4875*b30d1939SAndy Fiddaman 			e = file + sstrlen( file) - 1;
4876*b30d1939SAndy Fiddaman 			x = *e;
4877*b30d1939SAndy Fiddaman 			*e = '_';
4878*b30d1939SAndy Fiddaman 			if ((fd = creat(file, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0)
4879*b30d1939SAndy Fiddaman 			{
4880*b30d1939SAndy Fiddaman 				proto_error(b, 2, file, "cannot create temporary file");
4881*b30d1939SAndy Fiddaman 				pppclose(b);
4882*b30d1939SAndy Fiddaman 				return flags | ((1<<13)<<0);
4883*b30d1939SAndy Fiddaman 			}
4884*b30d1939SAndy Fiddaman 			*e = x;
4885*b30d1939SAndy Fiddaman 		}
4886*b30d1939SAndy Fiddaman 		else if (copy)
4887*b30d1939SAndy Fiddaman 		{
4888*b30d1939SAndy Fiddaman 			if (((n = sstrlen( copy)) + sstrlen( file) + 2) > sizeof(buf))
4889*b30d1939SAndy Fiddaman 			{
4890*b30d1939SAndy Fiddaman 				proto_error(b, 2, copy, "copy path too long");
4891*b30d1939SAndy Fiddaman 				pppclose(b);
4892*b30d1939SAndy Fiddaman 				return flags | ((1<<13)<<0);
4893*b30d1939SAndy Fiddaman 			}
4894*b30d1939SAndy Fiddaman 			strcopy( buf, copy);
4895*b30d1939SAndy Fiddaman 			e = buf + n;
4896*b30d1939SAndy Fiddaman 			if (*file != '/')
4897*b30d1939SAndy Fiddaman 				*e++ = '/';
4898*b30d1939SAndy Fiddaman 			strcopy( e, file);
4899*b30d1939SAndy Fiddaman 			if ((fd = creat(buf, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0)
4900*b30d1939SAndy Fiddaman 			{
4901*b30d1939SAndy Fiddaman 				for (e = buf; *e == '/'; e++);
4902*b30d1939SAndy Fiddaman 				do
4903*b30d1939SAndy Fiddaman 				{
4904*b30d1939SAndy Fiddaman 					if (*e == '/')
4905*b30d1939SAndy Fiddaman 					{
4906*b30d1939SAndy Fiddaman 						*e = 0;
4907*b30d1939SAndy Fiddaman 						if (access(buf, 0) && mkdir(buf, S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH))
4908*b30d1939SAndy Fiddaman 						{
4909*b30d1939SAndy Fiddaman 							proto_error(b, 2, buf, "cannot create copy directory");
4910*b30d1939SAndy Fiddaman 							pppclose(b);
4911*b30d1939SAndy Fiddaman 							return flags | ((1<<13)<<0);
4912*b30d1939SAndy Fiddaman 						}
4913*b30d1939SAndy Fiddaman 						*e = '/';
4914*b30d1939SAndy Fiddaman 					}
4915*b30d1939SAndy Fiddaman 				} while (*e++);
4916*b30d1939SAndy Fiddaman 				if ((fd = creat(buf, S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)) < 0)
4917*b30d1939SAndy Fiddaman 				{
4918*b30d1939SAndy Fiddaman 					proto_error(b, 2, buf, "cannot create copy file");
4919*b30d1939SAndy Fiddaman 					pppclose(b);
4920*b30d1939SAndy Fiddaman 					return flags | ((1<<13)<<0);
4921*b30d1939SAndy Fiddaman 				}
4922*b30d1939SAndy Fiddaman 			}
4923*b30d1939SAndy Fiddaman 			file = buf;
4924*b30d1939SAndy Fiddaman 		}
4925*b30d1939SAndy Fiddaman 		else
4926*b30d1939SAndy Fiddaman 			fd = 1;
4927*b30d1939SAndy Fiddaman 		if (file && (flags & ((1<<13)<<2)))
4928*b30d1939SAndy Fiddaman 			proto_error(b, 0, "convert to", file);
4929*b30d1939SAndy Fiddaman 		while ((n = pppread(b)) > 0)
4930*b30d1939SAndy Fiddaman 		{
4931*b30d1939SAndy Fiddaman 			p = b;
4932*b30d1939SAndy Fiddaman 			for (;;)
4933*b30d1939SAndy Fiddaman 			{
4934*b30d1939SAndy Fiddaman 				if ((m = write(fd, p, n)) <= 0)
4935*b30d1939SAndy Fiddaman 				{
4936*b30d1939SAndy Fiddaman 					proto_error(b, 2, "write error", ((char*)0));
4937*b30d1939SAndy Fiddaman 					flags |= ((1<<13)<<0);
4938*b30d1939SAndy Fiddaman 					break;
4939*b30d1939SAndy Fiddaman 				}
4940*b30d1939SAndy Fiddaman 				if ((n -= m) <= 0)
4941*b30d1939SAndy Fiddaman 					break;
4942*b30d1939SAndy Fiddaman 				p += m;
4943*b30d1939SAndy Fiddaman 			}
4944*b30d1939SAndy Fiddaman 			if (m < 0)
4945*b30d1939SAndy Fiddaman 				break;
4946*b30d1939SAndy Fiddaman 		}
4947*b30d1939SAndy Fiddaman 		if (fd > 1)
4948*b30d1939SAndy Fiddaman 			close(fd);
4949*b30d1939SAndy Fiddaman 		if (file && (flags & ((1<<13)<<1)))
4950*b30d1939SAndy Fiddaman 		{
4951*b30d1939SAndy Fiddaman 			*e = '_';
4952*b30d1939SAndy Fiddaman 			strcopy( b, file);
4953*b30d1939SAndy Fiddaman 			*e = x;
4954*b30d1939SAndy Fiddaman 			if (replace(b, file, !(flags & (1<<0))))
4955*b30d1939SAndy Fiddaman 				proto_error(b, 2, "cannot rename to", file);
4956*b30d1939SAndy Fiddaman 		}
4957*b30d1939SAndy Fiddaman 		pppclose(b);
4958*b30d1939SAndy Fiddaman 	}
4959*b30d1939SAndy Fiddaman 	return flags;
4960*b30d1939SAndy Fiddaman }
4961*b30d1939SAndy Fiddaman 
4962*b30d1939SAndy Fiddaman 
4963*b30d1939SAndy Fiddaman 
4964*b30d1939SAndy Fiddaman 
4965*b30d1939SAndy Fiddaman 
4966*b30d1939SAndy Fiddaman typedef struct Sufcom_s
4967*b30d1939SAndy Fiddaman {
4968*b30d1939SAndy Fiddaman 	char		suffix[4];
4969*b30d1939SAndy Fiddaman 	char		comment[4];
4970*b30d1939SAndy Fiddaman } Sufcom_t;
4971*b30d1939SAndy Fiddaman 
4972*b30d1939SAndy Fiddaman static const Sufcom_t	sufcom[] =
4973*b30d1939SAndy Fiddaman {
4974*b30d1939SAndy Fiddaman 	"c",		"/*",
4975*b30d1939SAndy Fiddaman 	"cpp",		"/*",
4976*b30d1939SAndy Fiddaman 	"cxx",		"/*",
4977*b30d1939SAndy Fiddaman 	"c++",		"/*",
4978*b30d1939SAndy Fiddaman 	"C",		"/*",
4979*b30d1939SAndy Fiddaman 	"CPP",		"/*",
4980*b30d1939SAndy Fiddaman 	"CXX",		"/*",
4981*b30d1939SAndy Fiddaman 	"C++",		"/*",
4982*b30d1939SAndy Fiddaman 	"f",		"C",
4983*b30d1939SAndy Fiddaman 	"F",		"C",
4984*b30d1939SAndy Fiddaman 	"h",		"/*",
4985*b30d1939SAndy Fiddaman 	"hpp",		"/*",
4986*b30d1939SAndy Fiddaman 	"hxx",		"/*",
4987*b30d1939SAndy Fiddaman 	"H",		"/*",
4988*b30d1939SAndy Fiddaman 	"HPP",		"/*",
4989*b30d1939SAndy Fiddaman 	"HXX",		"/*",
4990*b30d1939SAndy Fiddaman 	"ksh",		"#",
4991*b30d1939SAndy Fiddaman 	"KSH",		"#",
4992*b30d1939SAndy Fiddaman 	"l",		"/*",
4993*b30d1939SAndy Fiddaman 	"L",		"/*",
4994*b30d1939SAndy Fiddaman 	"p",		"(*)",
4995*b30d1939SAndy Fiddaman 	"pas",		"(*)",
4996*b30d1939SAndy Fiddaman 	"P",		"(*)",
4997*b30d1939SAndy Fiddaman 	"PAS",		"(*)",
4998*b30d1939SAndy Fiddaman 	"pl",		"#",
4999*b30d1939SAndy Fiddaman 	"PL",		"#",
5000*b30d1939SAndy Fiddaman 	"pl1",		"/*",
5001*b30d1939SAndy Fiddaman 	"pli",		"/*",
5002*b30d1939SAndy Fiddaman 	"PL1",		"/*",
5003*b30d1939SAndy Fiddaman 	"PLI",		"/*",
5004*b30d1939SAndy Fiddaman 	"sh",		"#",
5005*b30d1939SAndy Fiddaman 	"SH",		"#",
5006*b30d1939SAndy Fiddaman 	"sml",		"(*)",
5007*b30d1939SAndy Fiddaman 	"SML",		"(*)",
5008*b30d1939SAndy Fiddaman 	"y",		"/*",
5009*b30d1939SAndy Fiddaman 	"Y",		"/*",
5010*b30d1939SAndy Fiddaman };
5011*b30d1939SAndy Fiddaman 
5012*b30d1939SAndy Fiddaman 
5013*b30d1939SAndy Fiddaman 
5014*b30d1939SAndy Fiddaman 
5015*b30d1939SAndy Fiddaman 
5016*b30d1939SAndy Fiddaman static char*
__OTORP__(register char * file;char * comment;)5017*b30d1939SAndy Fiddaman type __PARAM__((register char* file, char* comment), (file, comment)) __OTORP__(register char* file; char* comment;){
5018*b30d1939SAndy Fiddaman 	register char*	suffix;
5019*b30d1939SAndy Fiddaman 	register int	i;
5020*b30d1939SAndy Fiddaman 
5021*b30d1939SAndy Fiddaman 	if (file && (!comment || !*comment))
5022*b30d1939SAndy Fiddaman 	{
5023*b30d1939SAndy Fiddaman 		suffix = 0;
5024*b30d1939SAndy Fiddaman 		while (*file)
5025*b30d1939SAndy Fiddaman 			if (*file++ == '.')
5026*b30d1939SAndy Fiddaman 				suffix = file;
5027*b30d1939SAndy Fiddaman 		if (suffix && sstrlen( suffix) <= 3)
5028*b30d1939SAndy Fiddaman 			for (i = 0; i < sizeof(sufcom) / sizeof(sufcom[0]); i++)
5029*b30d1939SAndy Fiddaman 				if (!strcmp(suffix, sufcom[i].suffix))
5030*b30d1939SAndy Fiddaman 					return (char*)sufcom[i].comment;
5031*b30d1939SAndy Fiddaman 	}
5032*b30d1939SAndy Fiddaman 	return comment;
5033*b30d1939SAndy Fiddaman }
5034*b30d1939SAndy Fiddaman 
5035*b30d1939SAndy Fiddaman int
__OTORP__(int argc;char ** argv;)5036*b30d1939SAndy Fiddaman main __PARAM__((int argc, char** argv), (argc, argv)) __OTORP__(int argc; char** argv;){
5037*b30d1939SAndy Fiddaman 	char*		b;
5038*b30d1939SAndy Fiddaman 	char*		file;
5039*b30d1939SAndy Fiddaman 	int		fd;
5040*b30d1939SAndy Fiddaman 	int		n;
5041*b30d1939SAndy Fiddaman 	char*		op;
5042*b30d1939SAndy Fiddaman 	char*		oe;
5043*b30d1939SAndy Fiddaman 	char*		comment = 0;
5044*b30d1939SAndy Fiddaman 	char*		copy = 0;
5045*b30d1939SAndy Fiddaman 	char*		list = 0;
5046*b30d1939SAndy Fiddaman 	char*		license = 0;
5047*b30d1939SAndy Fiddaman 	char*		options = 0;
5048*b30d1939SAndy Fiddaman 	char*		package = 0;
5049*b30d1939SAndy Fiddaman 	int		flags = (1<<4);
5050*b30d1939SAndy Fiddaman 	char		buf[1024];
5051*b30d1939SAndy Fiddaman 	char		opt[4 * 1024];
5052*b30d1939SAndy Fiddaman 
5053*b30d1939SAndy Fiddaman 	;
5054*b30d1939SAndy Fiddaman 
5055*b30d1939SAndy Fiddaman 	while ((file = *++argv) && *file == '-' && *(file + 1))
5056*b30d1939SAndy Fiddaman 	{
5057*b30d1939SAndy Fiddaman 		for (;;)
5058*b30d1939SAndy Fiddaman 		{
5059*b30d1939SAndy Fiddaman 			switch (*++file)
5060*b30d1939SAndy Fiddaman 			{
5061*b30d1939SAndy Fiddaman 			case 0:
5062*b30d1939SAndy Fiddaman 				break;
5063*b30d1939SAndy Fiddaman 			case 'c':
5064*b30d1939SAndy Fiddaman 				if (!*(comment = ++file))
5065*b30d1939SAndy Fiddaman 					comment = *++argv;
5066*b30d1939SAndy Fiddaman 				break;
5067*b30d1939SAndy Fiddaman 			case 'd':
5068*b30d1939SAndy Fiddaman 				flags |= (1<<1);
5069*b30d1939SAndy Fiddaman 				continue;
5070*b30d1939SAndy Fiddaman 			case 'e':
5071*b30d1939SAndy Fiddaman 				if (!*(package = ++file) && !(package = *++argv))
5072*b30d1939SAndy Fiddaman 				{
5073*b30d1939SAndy Fiddaman 					file = "??";
5074*b30d1939SAndy Fiddaman 					continue;
5075*b30d1939SAndy Fiddaman 				}
5076*b30d1939SAndy Fiddaman 				break;
5077*b30d1939SAndy Fiddaman 			case 'f':
5078*b30d1939SAndy Fiddaman 				flags |= (1<<3);
5079*b30d1939SAndy Fiddaman 				continue;
5080*b30d1939SAndy Fiddaman 			case 'h':
5081*b30d1939SAndy Fiddaman 				flags &= ~(1<<4);
5082*b30d1939SAndy Fiddaman 				continue;
5083*b30d1939SAndy Fiddaman 			case 'i':
5084*b30d1939SAndy Fiddaman 				flags |= (1<<0);
5085*b30d1939SAndy Fiddaman 				continue;
5086*b30d1939SAndy Fiddaman 			case 'l':
5087*b30d1939SAndy Fiddaman 				if (!*(license = ++file) && !(license = *++argv))
5088*b30d1939SAndy Fiddaman 				{
5089*b30d1939SAndy Fiddaman 					file = "??";
5090*b30d1939SAndy Fiddaman 					continue;
5091*b30d1939SAndy Fiddaman 				}
5092*b30d1939SAndy Fiddaman 				break;
5093*b30d1939SAndy Fiddaman 			case 'n':
5094*b30d1939SAndy Fiddaman 				flags |= (1<<7);
5095*b30d1939SAndy Fiddaman 				continue;
5096*b30d1939SAndy Fiddaman 			case 'o':
5097*b30d1939SAndy Fiddaman 				if (!*(b = ++file) && !(b = *++argv))
5098*b30d1939SAndy Fiddaman 				{
5099*b30d1939SAndy Fiddaman 					file = "??";
5100*b30d1939SAndy Fiddaman 					continue;
5101*b30d1939SAndy Fiddaman 				}
5102*b30d1939SAndy Fiddaman 				if (!options)
5103*b30d1939SAndy Fiddaman 				{
5104*b30d1939SAndy Fiddaman 					options = op = opt;
5105*b30d1939SAndy Fiddaman 					oe = op + sizeof(opt) - 1;
5106*b30d1939SAndy Fiddaman 				}
5107*b30d1939SAndy Fiddaman 				n = sstrlen( b);
5108*b30d1939SAndy Fiddaman 				if ((n + 1) >= (oe - op))
5109*b30d1939SAndy Fiddaman 					proto_error(((char*)0), 3, b, "too many options");
5110*b30d1939SAndy Fiddaman 				else
5111*b30d1939SAndy Fiddaman 				{
5112*b30d1939SAndy Fiddaman 					*op++ = '\n';
5113*b30d1939SAndy Fiddaman 					memcopy( op, b, n + 1);
5114*b30d1939SAndy Fiddaman 					op += n;
5115*b30d1939SAndy Fiddaman 				}
5116*b30d1939SAndy Fiddaman 				break;
5117*b30d1939SAndy Fiddaman 			case 'p':
5118*b30d1939SAndy Fiddaman 				flags |= (1<<9);
5119*b30d1939SAndy Fiddaman 				continue;
5120*b30d1939SAndy Fiddaman 			case 'r':
5121*b30d1939SAndy Fiddaman 				flags |= ((1<<13)<<1);
5122*b30d1939SAndy Fiddaman 				continue;
5123*b30d1939SAndy Fiddaman 			case 's':
5124*b30d1939SAndy Fiddaman 				flags |= (1<<5);
5125*b30d1939SAndy Fiddaman 				continue;
5126*b30d1939SAndy Fiddaman 			case 't':
5127*b30d1939SAndy Fiddaman 				flags |= (1<<12);
5128*b30d1939SAndy Fiddaman 				continue;
5129*b30d1939SAndy Fiddaman 			case 'v':
5130*b30d1939SAndy Fiddaman 				flags |= ((1<<13)<<2);
5131*b30d1939SAndy Fiddaman 				continue;
5132*b30d1939SAndy Fiddaman 			case 'x':
5133*b30d1939SAndy Fiddaman 				flags |= (1<<2);
5134*b30d1939SAndy Fiddaman 				continue;
5135*b30d1939SAndy Fiddaman 			case 'z':
5136*b30d1939SAndy Fiddaman 				flags |= (1<<1)|(1<<8);
5137*b30d1939SAndy Fiddaman 				continue;
5138*b30d1939SAndy Fiddaman 			case 'C':
5139*b30d1939SAndy Fiddaman 				if (!*(copy = ++file) && !(copy = *++argv))
5140*b30d1939SAndy Fiddaman 				{
5141*b30d1939SAndy Fiddaman 					file = "??";
5142*b30d1939SAndy Fiddaman 					continue;
5143*b30d1939SAndy Fiddaman 				}
5144*b30d1939SAndy Fiddaman 				break;
5145*b30d1939SAndy Fiddaman 			case 'L':
5146*b30d1939SAndy Fiddaman 				if (!*(list = ++file) && !(list = *++argv))
5147*b30d1939SAndy Fiddaman 				{
5148*b30d1939SAndy Fiddaman 					file = "??";
5149*b30d1939SAndy Fiddaman 					continue;
5150*b30d1939SAndy Fiddaman 				}
5151*b30d1939SAndy Fiddaman 				break;
5152*b30d1939SAndy Fiddaman 			case 'P':
5153*b30d1939SAndy Fiddaman 			case '+':
5154*b30d1939SAndy Fiddaman 				flags |= (1<<10);
5155*b30d1939SAndy Fiddaman 				continue;
5156*b30d1939SAndy Fiddaman 			case 'S':
5157*b30d1939SAndy Fiddaman 				comment = "#";
5158*b30d1939SAndy Fiddaman 				continue;
5159*b30d1939SAndy Fiddaman 			default:
5160*b30d1939SAndy Fiddaman 				proto_error(((char*)0), 2, file, "unknown option");
5161*b30d1939SAndy Fiddaman 
5162*b30d1939SAndy Fiddaman 			case '?':
5163*b30d1939SAndy Fiddaman 				b = "Usage: proto [-dfhinprstvzP+S] [-C directory] [-e package] [-l file]\n             [-o \"name='value' ...\"] [-L file] file ...\n";
5164*b30d1939SAndy Fiddaman 				write(2, b, sstrlen( b));
5165*b30d1939SAndy Fiddaman 				return 2;
5166*b30d1939SAndy Fiddaman 			}
5167*b30d1939SAndy Fiddaman 			break;
5168*b30d1939SAndy Fiddaman 		}
5169*b30d1939SAndy Fiddaman 	}
5170*b30d1939SAndy Fiddaman 
5171*b30d1939SAndy Fiddaman 
5172*b30d1939SAndy Fiddaman 
5173*b30d1939SAndy Fiddaman 
5174*b30d1939SAndy Fiddaman 
5175*b30d1939SAndy Fiddaman 
5176*b30d1939SAndy Fiddaman 
5177*b30d1939SAndy Fiddaman 
5178*b30d1939SAndy Fiddaman 
5179*b30d1939SAndy Fiddaman 
5180*b30d1939SAndy Fiddaman 
5181*b30d1939SAndy Fiddaman 
5182*b30d1939SAndy Fiddaman 
5183*b30d1939SAndy Fiddaman 
5184*b30d1939SAndy Fiddaman 
5185*b30d1939SAndy Fiddaman 
5186*b30d1939SAndy Fiddaman 
5187*b30d1939SAndy Fiddaman 
5188*b30d1939SAndy Fiddaman 
5189*b30d1939SAndy Fiddaman 
5190*b30d1939SAndy Fiddaman 
5191*b30d1939SAndy Fiddaman 
5192*b30d1939SAndy Fiddaman 
5193*b30d1939SAndy Fiddaman 
5194*b30d1939SAndy Fiddaman 
5195*b30d1939SAndy Fiddaman 
5196*b30d1939SAndy Fiddaman 
5197*b30d1939SAndy Fiddaman 
5198*b30d1939SAndy Fiddaman 
5199*b30d1939SAndy Fiddaman 
5200*b30d1939SAndy Fiddaman 
5201*b30d1939SAndy Fiddaman 
5202*b30d1939SAndy Fiddaman 
5203*b30d1939SAndy Fiddaman 
5204*b30d1939SAndy Fiddaman 
5205*b30d1939SAndy Fiddaman 
5206*b30d1939SAndy Fiddaman 
5207*b30d1939SAndy Fiddaman 
5208*b30d1939SAndy Fiddaman 
5209*b30d1939SAndy Fiddaman 
5210*b30d1939SAndy Fiddaman 
5211*b30d1939SAndy Fiddaman 
5212*b30d1939SAndy Fiddaman 
5213*b30d1939SAndy Fiddaman 
5214*b30d1939SAndy Fiddaman 
5215*b30d1939SAndy Fiddaman 
5216*b30d1939SAndy Fiddaman 
5217*b30d1939SAndy Fiddaman 
5218*b30d1939SAndy Fiddaman 
5219*b30d1939SAndy Fiddaman 
5220*b30d1939SAndy Fiddaman 
5221*b30d1939SAndy Fiddaman 
5222*b30d1939SAndy Fiddaman 
5223*b30d1939SAndy Fiddaman 
5224*b30d1939SAndy Fiddaman 
5225*b30d1939SAndy Fiddaman 
5226*b30d1939SAndy Fiddaman 
5227*b30d1939SAndy Fiddaman 
5228*b30d1939SAndy Fiddaman 
5229*b30d1939SAndy Fiddaman 
5230*b30d1939SAndy Fiddaman 
5231*b30d1939SAndy Fiddaman 
5232*b30d1939SAndy Fiddaman 
5233*b30d1939SAndy Fiddaman 
5234*b30d1939SAndy Fiddaman 
5235*b30d1939SAndy Fiddaman 
5236*b30d1939SAndy Fiddaman 
5237*b30d1939SAndy Fiddaman 
5238*b30d1939SAndy Fiddaman 
5239*b30d1939SAndy Fiddaman 
5240*b30d1939SAndy Fiddaman 
5241*b30d1939SAndy Fiddaman 
5242*b30d1939SAndy Fiddaman 
5243*b30d1939SAndy Fiddaman 
5244*b30d1939SAndy Fiddaman 
5245*b30d1939SAndy Fiddaman 
5246*b30d1939SAndy Fiddaman 
5247*b30d1939SAndy Fiddaman 
5248*b30d1939SAndy Fiddaman 
5249*b30d1939SAndy Fiddaman 
5250*b30d1939SAndy Fiddaman 
5251*b30d1939SAndy Fiddaman 
5252*b30d1939SAndy Fiddaman 
5253*b30d1939SAndy Fiddaman 
5254*b30d1939SAndy Fiddaman 
5255*b30d1939SAndy Fiddaman 
5256*b30d1939SAndy Fiddaman 
5257*b30d1939SAndy Fiddaman 
5258*b30d1939SAndy Fiddaman 
5259*b30d1939SAndy Fiddaman 
5260*b30d1939SAndy Fiddaman 
5261*b30d1939SAndy Fiddaman 
5262*b30d1939SAndy Fiddaman 
5263*b30d1939SAndy Fiddaman 	if (list)
5264*b30d1939SAndy Fiddaman 	{
5265*b30d1939SAndy Fiddaman 		if (*list == '-' && !*(list + 1))
5266*b30d1939SAndy Fiddaman 			fd = 0;
5267*b30d1939SAndy Fiddaman 		else if ((fd = open(list, O_RDONLY)) < 0)
5268*b30d1939SAndy Fiddaman 			proto_error(((char*)0), 3, list, "not found");
5269*b30d1939SAndy Fiddaman 		do
5270*b30d1939SAndy Fiddaman 		{
5271*b30d1939SAndy Fiddaman 			for (b = buf; (n = read(fd, b, 1)) > 0 && *b != '\n' && b < &buf[sizeof(buf) - 1]; b++);
5272*b30d1939SAndy Fiddaman 			if (b > buf)
5273*b30d1939SAndy Fiddaman 			{
5274*b30d1939SAndy Fiddaman 				*b = 0;
5275*b30d1939SAndy Fiddaman 				flags = proto(buf, license, options, package, copy, type(buf, comment), flags);
5276*b30d1939SAndy Fiddaman 			}
5277*b30d1939SAndy Fiddaman 		} while (n > 0);
5278*b30d1939SAndy Fiddaman 		if (fd > 0)
5279*b30d1939SAndy Fiddaman 			close(fd);
5280*b30d1939SAndy Fiddaman 	}
5281*b30d1939SAndy Fiddaman 	if (file)
5282*b30d1939SAndy Fiddaman 		do flags = proto(file, license, options, package, copy, type(file, comment), flags); while (file = *++argv);
5283*b30d1939SAndy Fiddaman 	else if (!list)
5284*b30d1939SAndy Fiddaman 		flags = proto(file, license, options, package, copy, type(file, comment), flags);
5285*b30d1939SAndy Fiddaman 	return errors ? 1 : (flags & ((1<<13)<<0)) ? 2 : 0;
5286*b30d1939SAndy Fiddaman }
5287