xref: /inferno-os/utils/c2l/dpchk.c (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth #include	"cc.h"
2*74a4d8c2SCharles.Forsyth #include	"y.tab.h"
3*74a4d8c2SCharles.Forsyth 
4*74a4d8c2SCharles.Forsyth enum
5*74a4d8c2SCharles.Forsyth {
6*74a4d8c2SCharles.Forsyth 	Fnone	= 0,
7*74a4d8c2SCharles.Forsyth 	Fl,
8*74a4d8c2SCharles.Forsyth 	Fvl,
9*74a4d8c2SCharles.Forsyth 	Fignor,
10*74a4d8c2SCharles.Forsyth 	Fstar,
11*74a4d8c2SCharles.Forsyth 	Fadj,
12*74a4d8c2SCharles.Forsyth 
13*74a4d8c2SCharles.Forsyth 	Fverb	= 10,
14*74a4d8c2SCharles.Forsyth };
15*74a4d8c2SCharles.Forsyth 
16*74a4d8c2SCharles.Forsyth typedef	struct	Tprot	Tprot;
17*74a4d8c2SCharles.Forsyth struct	Tprot
18*74a4d8c2SCharles.Forsyth {
19*74a4d8c2SCharles.Forsyth 	Type*	type;
20*74a4d8c2SCharles.Forsyth 	Bits	flag;
21*74a4d8c2SCharles.Forsyth 	Tprot*	link;
22*74a4d8c2SCharles.Forsyth };
23*74a4d8c2SCharles.Forsyth 
24*74a4d8c2SCharles.Forsyth typedef	struct	Tname	Tname;
25*74a4d8c2SCharles.Forsyth struct	Tname
26*74a4d8c2SCharles.Forsyth {
27*74a4d8c2SCharles.Forsyth 	char*	name;
28*74a4d8c2SCharles.Forsyth 	int	param;
29*74a4d8c2SCharles.Forsyth 	Tname*	link;
30*74a4d8c2SCharles.Forsyth };
31*74a4d8c2SCharles.Forsyth 
32*74a4d8c2SCharles.Forsyth static	Type*	indchar;
33*74a4d8c2SCharles.Forsyth static	uchar	flagbits[256];
34*74a4d8c2SCharles.Forsyth static	char	fmtbuf[100];
35*74a4d8c2SCharles.Forsyth static	int	lastadj;
36*74a4d8c2SCharles.Forsyth static	int	lastverb;
37*74a4d8c2SCharles.Forsyth static	int	nstar;
38*74a4d8c2SCharles.Forsyth static	Tprot*	tprot;
39*74a4d8c2SCharles.Forsyth static	Tname*	tname;
40*74a4d8c2SCharles.Forsyth 
41*74a4d8c2SCharles.Forsyth void
argflag(int c,int v)42*74a4d8c2SCharles.Forsyth argflag(int c, int v)
43*74a4d8c2SCharles.Forsyth {
44*74a4d8c2SCharles.Forsyth 
45*74a4d8c2SCharles.Forsyth 	switch(v) {
46*74a4d8c2SCharles.Forsyth 	case Fignor:
47*74a4d8c2SCharles.Forsyth 	case Fstar:
48*74a4d8c2SCharles.Forsyth 	case Fl:
49*74a4d8c2SCharles.Forsyth 	case Fvl:
50*74a4d8c2SCharles.Forsyth 		flagbits[c] = v;
51*74a4d8c2SCharles.Forsyth 		break;
52*74a4d8c2SCharles.Forsyth 	case Fverb:
53*74a4d8c2SCharles.Forsyth 		flagbits[c] = lastverb;
54*74a4d8c2SCharles.Forsyth /*print("flag-v %c %d\n", c, lastadj);*/
55*74a4d8c2SCharles.Forsyth 		lastverb++;
56*74a4d8c2SCharles.Forsyth 		break;
57*74a4d8c2SCharles.Forsyth 	case Fadj:
58*74a4d8c2SCharles.Forsyth 		flagbits[c] = lastadj;
59*74a4d8c2SCharles.Forsyth /*print("flag-l %c %d\n", c, lastadj);*/
60*74a4d8c2SCharles.Forsyth 		lastadj++;
61*74a4d8c2SCharles.Forsyth 		break;
62*74a4d8c2SCharles.Forsyth 	}
63*74a4d8c2SCharles.Forsyth }
64*74a4d8c2SCharles.Forsyth 
65*74a4d8c2SCharles.Forsyth Bits
getflag(char * s)66*74a4d8c2SCharles.Forsyth getflag(char *s)
67*74a4d8c2SCharles.Forsyth {
68*74a4d8c2SCharles.Forsyth 	Bits flag;
69*74a4d8c2SCharles.Forsyth 	int c, f;
70*74a4d8c2SCharles.Forsyth 	char *fmt;
71*74a4d8c2SCharles.Forsyth 
72*74a4d8c2SCharles.Forsyth 	fmt = fmtbuf;
73*74a4d8c2SCharles.Forsyth 	flag = zbits;
74*74a4d8c2SCharles.Forsyth 	nstar = 0;
75*74a4d8c2SCharles.Forsyth 	while(c = *s++) {
76*74a4d8c2SCharles.Forsyth 		*fmt++ = c;
77*74a4d8c2SCharles.Forsyth 		f = flagbits[c];
78*74a4d8c2SCharles.Forsyth 		switch(f) {
79*74a4d8c2SCharles.Forsyth 		case Fnone:
80*74a4d8c2SCharles.Forsyth 			argflag(c, Fverb);
81*74a4d8c2SCharles.Forsyth 			f = flagbits[c];
82*74a4d8c2SCharles.Forsyth 			break;
83*74a4d8c2SCharles.Forsyth 		case Fstar:
84*74a4d8c2SCharles.Forsyth 			nstar++;
85*74a4d8c2SCharles.Forsyth 		case Fignor:
86*74a4d8c2SCharles.Forsyth 			continue;
87*74a4d8c2SCharles.Forsyth 		case Fl:
88*74a4d8c2SCharles.Forsyth 			if(bset(flag, Fl))
89*74a4d8c2SCharles.Forsyth 				flag = bor(flag, blsh(Fvl));
90*74a4d8c2SCharles.Forsyth 		}
91*74a4d8c2SCharles.Forsyth 		flag = bor(flag, blsh(f));
92*74a4d8c2SCharles.Forsyth 		if(f >= Fverb)
93*74a4d8c2SCharles.Forsyth 			break;
94*74a4d8c2SCharles.Forsyth 	}
95*74a4d8c2SCharles.Forsyth 	*fmt = 0;
96*74a4d8c2SCharles.Forsyth 	return flag;
97*74a4d8c2SCharles.Forsyth }
98*74a4d8c2SCharles.Forsyth 
99*74a4d8c2SCharles.Forsyth void
newprot(Sym * m,Type * t,char * s)100*74a4d8c2SCharles.Forsyth newprot(Sym *m, Type *t, char *s)
101*74a4d8c2SCharles.Forsyth {
102*74a4d8c2SCharles.Forsyth 	Bits flag;
103*74a4d8c2SCharles.Forsyth 	Tprot *l;
104*74a4d8c2SCharles.Forsyth 
105*74a4d8c2SCharles.Forsyth 	if(t == T) {
106*74a4d8c2SCharles.Forsyth 		warn(Z, "%s: newprot: type not defined", m->name);
107*74a4d8c2SCharles.Forsyth 		return;
108*74a4d8c2SCharles.Forsyth 	}
109*74a4d8c2SCharles.Forsyth 	flag = getflag(s);
110*74a4d8c2SCharles.Forsyth 	for(l=tprot; l; l=l->link)
111*74a4d8c2SCharles.Forsyth 		if(beq(flag, l->flag) && sametype(t, l->type))
112*74a4d8c2SCharles.Forsyth 			return;
113*74a4d8c2SCharles.Forsyth 	l = alloc(sizeof(*l));
114*74a4d8c2SCharles.Forsyth 	l->type = t;
115*74a4d8c2SCharles.Forsyth 	l->flag = flag;
116*74a4d8c2SCharles.Forsyth 	l->link = tprot;
117*74a4d8c2SCharles.Forsyth 	tprot = l;
118*74a4d8c2SCharles.Forsyth }
119*74a4d8c2SCharles.Forsyth 
120*74a4d8c2SCharles.Forsyth void
newname(char * s,int p)121*74a4d8c2SCharles.Forsyth newname(char *s, int p)
122*74a4d8c2SCharles.Forsyth {
123*74a4d8c2SCharles.Forsyth 	Tname *l;
124*74a4d8c2SCharles.Forsyth 
125*74a4d8c2SCharles.Forsyth 	for(l=tname; l; l=l->link)
126*74a4d8c2SCharles.Forsyth 		if(strcmp(l->name, s) == 0) {
127*74a4d8c2SCharles.Forsyth 			if(l->param != p)
128*74a4d8c2SCharles.Forsyth 				yyerror("vargck %s already defined\n", s);
129*74a4d8c2SCharles.Forsyth 			return;
130*74a4d8c2SCharles.Forsyth 		}
131*74a4d8c2SCharles.Forsyth 	l = alloc(sizeof(*l));
132*74a4d8c2SCharles.Forsyth 	l->name = s;
133*74a4d8c2SCharles.Forsyth 	l->param = p;
134*74a4d8c2SCharles.Forsyth 	l->link = tname;
135*74a4d8c2SCharles.Forsyth 	tname = l;
136*74a4d8c2SCharles.Forsyth }
137*74a4d8c2SCharles.Forsyth 
138*74a4d8c2SCharles.Forsyth void
arginit(void)139*74a4d8c2SCharles.Forsyth arginit(void)
140*74a4d8c2SCharles.Forsyth {
141*74a4d8c2SCharles.Forsyth 	int i;
142*74a4d8c2SCharles.Forsyth 
143*74a4d8c2SCharles.Forsyth 	lastadj = Fadj;
144*74a4d8c2SCharles.Forsyth 	lastverb = Fverb;
145*74a4d8c2SCharles.Forsyth 	indchar = typ(TIND, types[TCHAR]);
146*74a4d8c2SCharles.Forsyth 
147*74a4d8c2SCharles.Forsyth 	memset(flagbits, Fnone, sizeof(flagbits));
148*74a4d8c2SCharles.Forsyth 
149*74a4d8c2SCharles.Forsyth 	for(i='0'; i<='9'; i++)
150*74a4d8c2SCharles.Forsyth 		argflag(i, Fignor);
151*74a4d8c2SCharles.Forsyth 	argflag('.', Fignor);
152*74a4d8c2SCharles.Forsyth 	argflag('#', Fignor);
153*74a4d8c2SCharles.Forsyth 	argflag('u', Fignor);
154*74a4d8c2SCharles.Forsyth 	argflag('+', Fignor);
155*74a4d8c2SCharles.Forsyth 	argflag('-', Fignor);
156*74a4d8c2SCharles.Forsyth 
157*74a4d8c2SCharles.Forsyth 	argflag('*', Fstar);
158*74a4d8c2SCharles.Forsyth 	argflag('l', Fl);
159*74a4d8c2SCharles.Forsyth 
160*74a4d8c2SCharles.Forsyth 	argflag('o', Fverb);
161*74a4d8c2SCharles.Forsyth 	flagbits['x'] = flagbits['o'];
162*74a4d8c2SCharles.Forsyth 	flagbits['X'] = flagbits['o'];
163*74a4d8c2SCharles.Forsyth }
164*74a4d8c2SCharles.Forsyth 
165*74a4d8c2SCharles.Forsyth void
pragvararg(void)166*74a4d8c2SCharles.Forsyth pragvararg(void)
167*74a4d8c2SCharles.Forsyth {
168*74a4d8c2SCharles.Forsyth 	Sym *s;
169*74a4d8c2SCharles.Forsyth 	int n, c;
170*74a4d8c2SCharles.Forsyth 	char *t;
171*74a4d8c2SCharles.Forsyth 
172*74a4d8c2SCharles.Forsyth 	if(1)
173*74a4d8c2SCharles.Forsyth 		goto out;
174*74a4d8c2SCharles.Forsyth 	s = getsym();
175*74a4d8c2SCharles.Forsyth 	if(s && strcmp(s->name, "argpos") == 0)
176*74a4d8c2SCharles.Forsyth 		goto ckpos;
177*74a4d8c2SCharles.Forsyth 	if(s && strcmp(s->name, "type") == 0)
178*74a4d8c2SCharles.Forsyth 		goto cktype;
179*74a4d8c2SCharles.Forsyth 	yyerror("syntax in #pragma varargck");
180*74a4d8c2SCharles.Forsyth 	goto out;
181*74a4d8c2SCharles.Forsyth 
182*74a4d8c2SCharles.Forsyth ckpos:
183*74a4d8c2SCharles.Forsyth /*#pragma	varargck	argpos	warn	2*/
184*74a4d8c2SCharles.Forsyth 	s = getsym();
185*74a4d8c2SCharles.Forsyth 	if(s == S)
186*74a4d8c2SCharles.Forsyth 		goto bad;
187*74a4d8c2SCharles.Forsyth 	n = getnsn();
188*74a4d8c2SCharles.Forsyth 	if(n < 0)
189*74a4d8c2SCharles.Forsyth 		goto bad;
190*74a4d8c2SCharles.Forsyth 	newname(s->name, n);
191*74a4d8c2SCharles.Forsyth 	goto out;
192*74a4d8c2SCharles.Forsyth 
193*74a4d8c2SCharles.Forsyth cktype:
194*74a4d8c2SCharles.Forsyth /*#pragma	varargck	type	O	int*/
195*74a4d8c2SCharles.Forsyth 	c = getnsc();
196*74a4d8c2SCharles.Forsyth 	if(c != '"')
197*74a4d8c2SCharles.Forsyth 		goto bad;
198*74a4d8c2SCharles.Forsyth 	t = fmtbuf;
199*74a4d8c2SCharles.Forsyth 	for(;;) {
200*74a4d8c2SCharles.Forsyth 		c = getc();
201*74a4d8c2SCharles.Forsyth 		if(c == ' ' || c == '\n')
202*74a4d8c2SCharles.Forsyth 			goto bad;
203*74a4d8c2SCharles.Forsyth 		if(c == '"')
204*74a4d8c2SCharles.Forsyth 			break;
205*74a4d8c2SCharles.Forsyth 		*t++ = c;
206*74a4d8c2SCharles.Forsyth 	}
207*74a4d8c2SCharles.Forsyth 	*t = 0;
208*74a4d8c2SCharles.Forsyth 	t = strdup(fmtbuf);
209*74a4d8c2SCharles.Forsyth 	s = getsym();
210*74a4d8c2SCharles.Forsyth 	if(s == S)
211*74a4d8c2SCharles.Forsyth 		goto bad;
212*74a4d8c2SCharles.Forsyth 	c = getnsc();
213*74a4d8c2SCharles.Forsyth 	unget(c);
214*74a4d8c2SCharles.Forsyth 	if(c == '*')
215*74a4d8c2SCharles.Forsyth 		newprot(s, typ(TIND, s->type), t);
216*74a4d8c2SCharles.Forsyth 	else
217*74a4d8c2SCharles.Forsyth 		newprot(s, s->type, t);
218*74a4d8c2SCharles.Forsyth 	goto out;
219*74a4d8c2SCharles.Forsyth 
220*74a4d8c2SCharles.Forsyth bad:
221*74a4d8c2SCharles.Forsyth 	yyerror("syntax in #pragma varargck");
222*74a4d8c2SCharles.Forsyth 
223*74a4d8c2SCharles.Forsyth out:
224*74a4d8c2SCharles.Forsyth 	while(getnsc() != '\n')
225*74a4d8c2SCharles.Forsyth 		;
226*74a4d8c2SCharles.Forsyth }
227*74a4d8c2SCharles.Forsyth 
228*74a4d8c2SCharles.Forsyth Node*
nextarg(Node * n,Node ** a)229*74a4d8c2SCharles.Forsyth nextarg(Node *n, Node **a)
230*74a4d8c2SCharles.Forsyth {
231*74a4d8c2SCharles.Forsyth 	if(n == Z) {
232*74a4d8c2SCharles.Forsyth 		*a = Z;
233*74a4d8c2SCharles.Forsyth 		return Z;
234*74a4d8c2SCharles.Forsyth 	}
235*74a4d8c2SCharles.Forsyth 	if(n->op == OLIST) {
236*74a4d8c2SCharles.Forsyth 		*a = n->left;
237*74a4d8c2SCharles.Forsyth 		return n->right;
238*74a4d8c2SCharles.Forsyth 	}
239*74a4d8c2SCharles.Forsyth 	*a = n;
240*74a4d8c2SCharles.Forsyth 	return Z;
241*74a4d8c2SCharles.Forsyth }
242*74a4d8c2SCharles.Forsyth 
243*74a4d8c2SCharles.Forsyth void
checkargs(Node * nn,char * s,int pos)244*74a4d8c2SCharles.Forsyth checkargs(Node *nn, char *s, int pos)
245*74a4d8c2SCharles.Forsyth {
246*74a4d8c2SCharles.Forsyth 	Node *a, *n;
247*74a4d8c2SCharles.Forsyth 	Bits flag;
248*74a4d8c2SCharles.Forsyth 	Tprot *l;
249*74a4d8c2SCharles.Forsyth 
250*74a4d8c2SCharles.Forsyth 	if(1)
251*74a4d8c2SCharles.Forsyth 		return;
252*74a4d8c2SCharles.Forsyth 	n = nn;
253*74a4d8c2SCharles.Forsyth 	for(;;) {
254*74a4d8c2SCharles.Forsyth 		s = strchr(s, '%');
255*74a4d8c2SCharles.Forsyth 		if(s == 0) {
256*74a4d8c2SCharles.Forsyth 			nextarg(n, &a);
257*74a4d8c2SCharles.Forsyth 			if(a != Z)
258*74a4d8c2SCharles.Forsyth 				warn(nn, "more arguments than format %T",
259*74a4d8c2SCharles.Forsyth 					a->type);
260*74a4d8c2SCharles.Forsyth 			return;
261*74a4d8c2SCharles.Forsyth 		}
262*74a4d8c2SCharles.Forsyth 		s++;
263*74a4d8c2SCharles.Forsyth 		flag = getflag(s);
264*74a4d8c2SCharles.Forsyth 		while(nstar > 0) {
265*74a4d8c2SCharles.Forsyth 			n = nextarg(n, &a);
266*74a4d8c2SCharles.Forsyth 			pos++;
267*74a4d8c2SCharles.Forsyth 			nstar--;
268*74a4d8c2SCharles.Forsyth 			if(a == Z) {
269*74a4d8c2SCharles.Forsyth 				warn(nn, "more format than arguments %s",
270*74a4d8c2SCharles.Forsyth 					fmtbuf);
271*74a4d8c2SCharles.Forsyth 				return;
272*74a4d8c2SCharles.Forsyth 			}
273*74a4d8c2SCharles.Forsyth 			if(a->type == T)
274*74a4d8c2SCharles.Forsyth 				continue;
275*74a4d8c2SCharles.Forsyth 			if(!sametype(types[TINT], a->type) &&
276*74a4d8c2SCharles.Forsyth 			   !sametype(types[TUINT], a->type))
277*74a4d8c2SCharles.Forsyth 				warn(nn, "format mismatch '*' in %s %T, arg %d",
278*74a4d8c2SCharles.Forsyth 					fmtbuf, a->type, pos);
279*74a4d8c2SCharles.Forsyth 		}
280*74a4d8c2SCharles.Forsyth 		for(l=tprot; l; l=l->link)
281*74a4d8c2SCharles.Forsyth 			if(sametype(types[TVOID], l->type)) {
282*74a4d8c2SCharles.Forsyth 				if(beq(flag, l->flag)) {
283*74a4d8c2SCharles.Forsyth 					s++;
284*74a4d8c2SCharles.Forsyth 					goto loop;
285*74a4d8c2SCharles.Forsyth 				}
286*74a4d8c2SCharles.Forsyth 			}
287*74a4d8c2SCharles.Forsyth 
288*74a4d8c2SCharles.Forsyth 		n = nextarg(n, &a);
289*74a4d8c2SCharles.Forsyth 		pos++;
290*74a4d8c2SCharles.Forsyth 		if(a == Z) {
291*74a4d8c2SCharles.Forsyth 			warn(nn, "more format than arguments %s",
292*74a4d8c2SCharles.Forsyth 				fmtbuf);
293*74a4d8c2SCharles.Forsyth 			return;
294*74a4d8c2SCharles.Forsyth 		}
295*74a4d8c2SCharles.Forsyth 		if(a->type == 0)
296*74a4d8c2SCharles.Forsyth 			continue;
297*74a4d8c2SCharles.Forsyth 		for(l=tprot; l; l=l->link)
298*74a4d8c2SCharles.Forsyth 			if(sametype(a->type, l->type))
299*74a4d8c2SCharles.Forsyth 				if(beq(flag, l->flag))
300*74a4d8c2SCharles.Forsyth 					goto loop;
301*74a4d8c2SCharles.Forsyth 		warn(nn, "format mismatch %s %T, arg %d", fmtbuf, a->type, pos);
302*74a4d8c2SCharles.Forsyth 	loop:;
303*74a4d8c2SCharles.Forsyth 	}
304*74a4d8c2SCharles.Forsyth }
305*74a4d8c2SCharles.Forsyth 
306*74a4d8c2SCharles.Forsyth void
dpcheck(Node * n)307*74a4d8c2SCharles.Forsyth dpcheck(Node *n)
308*74a4d8c2SCharles.Forsyth {
309*74a4d8c2SCharles.Forsyth 	char *s;
310*74a4d8c2SCharles.Forsyth 	Node *a, *b;
311*74a4d8c2SCharles.Forsyth 	Tname *l;
312*74a4d8c2SCharles.Forsyth 	int i;
313*74a4d8c2SCharles.Forsyth 
314*74a4d8c2SCharles.Forsyth 	if(n == Z)
315*74a4d8c2SCharles.Forsyth 		return;
316*74a4d8c2SCharles.Forsyth 	b = n->left;
317*74a4d8c2SCharles.Forsyth 	if(b == Z || b->op != ONAME)
318*74a4d8c2SCharles.Forsyth 		return;
319*74a4d8c2SCharles.Forsyth 	s = b->sym->name;
320*74a4d8c2SCharles.Forsyth 	for(l=tname; l; l=l->link)
321*74a4d8c2SCharles.Forsyth 		if(strcmp(s, l->name) == 0)
322*74a4d8c2SCharles.Forsyth 			break;
323*74a4d8c2SCharles.Forsyth 	if(l == 0)
324*74a4d8c2SCharles.Forsyth 		return;
325*74a4d8c2SCharles.Forsyth 
326*74a4d8c2SCharles.Forsyth 	i = l->param;
327*74a4d8c2SCharles.Forsyth 	b = n->right;
328*74a4d8c2SCharles.Forsyth 	while(i > 0) {
329*74a4d8c2SCharles.Forsyth 		b = nextarg(b, &a);
330*74a4d8c2SCharles.Forsyth 		i--;
331*74a4d8c2SCharles.Forsyth 	}
332*74a4d8c2SCharles.Forsyth 	if(a == Z) {
333*74a4d8c2SCharles.Forsyth 		warn(n, "cant find format arg");
334*74a4d8c2SCharles.Forsyth 		return;
335*74a4d8c2SCharles.Forsyth 	}
336*74a4d8c2SCharles.Forsyth 	if(!sametype(indchar, a->type)) {
337*74a4d8c2SCharles.Forsyth 		warn(n, "format arg type %T", a->type);
338*74a4d8c2SCharles.Forsyth 		return;
339*74a4d8c2SCharles.Forsyth 	}
340*74a4d8c2SCharles.Forsyth 	if(a->op != OADDR || a->left->op != ONAME || a->left->sym != symstring) {
341*74a4d8c2SCharles.Forsyth /*		warn(n, "format arg not constant string");*/
342*74a4d8c2SCharles.Forsyth 		return;
343*74a4d8c2SCharles.Forsyth 	}
344*74a4d8c2SCharles.Forsyth 	s = a->left->cstring;
345*74a4d8c2SCharles.Forsyth 	checkargs(b, s, l->param);
346*74a4d8c2SCharles.Forsyth }
347*74a4d8c2SCharles.Forsyth 
348*74a4d8c2SCharles.Forsyth void
praghjdicks(void)349*74a4d8c2SCharles.Forsyth praghjdicks(void)
350*74a4d8c2SCharles.Forsyth {
351*74a4d8c2SCharles.Forsyth 	Sym *s;
352*74a4d8c2SCharles.Forsyth 
353*74a4d8c2SCharles.Forsyth 	hjdickflg = 0;
354*74a4d8c2SCharles.Forsyth 	s = getsym();
355*74a4d8c2SCharles.Forsyth 	if(s) {
356*74a4d8c2SCharles.Forsyth 		hjdickflg = atoi(s->name+1);
357*74a4d8c2SCharles.Forsyth 		if(strcmp(s->name, "on") == 0 ||
358*74a4d8c2SCharles.Forsyth 		   strcmp(s->name, "yes") == 0 ||
359*74a4d8c2SCharles.Forsyth 		   strcmp(s->name, "dick") == 0)
360*74a4d8c2SCharles.Forsyth 			hjdickflg = 1;
361*74a4d8c2SCharles.Forsyth 	}
362*74a4d8c2SCharles.Forsyth 	while(getnsc() != '\n')
363*74a4d8c2SCharles.Forsyth 		;
364*74a4d8c2SCharles.Forsyth 	if(0)
365*74a4d8c2SCharles.Forsyth 		if(hjdickflg)
366*74a4d8c2SCharles.Forsyth 			print("%4ld: hjdicks %d\n", lineno, hjdickflg);
367*74a4d8c2SCharles.Forsyth 		else
368*74a4d8c2SCharles.Forsyth 			print("%4ld: hjdicks off\n", lineno);
369*74a4d8c2SCharles.Forsyth }
370*74a4d8c2SCharles.Forsyth 
371*74a4d8c2SCharles.Forsyth void
pragfpround(void)372*74a4d8c2SCharles.Forsyth pragfpround(void)
373*74a4d8c2SCharles.Forsyth {
374*74a4d8c2SCharles.Forsyth 	Sym *s;
375*74a4d8c2SCharles.Forsyth 
376*74a4d8c2SCharles.Forsyth 	fproundflg = 0;
377*74a4d8c2SCharles.Forsyth 	s = getsym();
378*74a4d8c2SCharles.Forsyth 	if(s) {
379*74a4d8c2SCharles.Forsyth 		hjdickflg = atoi(s->name+1);
380*74a4d8c2SCharles.Forsyth 		if(strcmp(s->name, "on") == 0 ||
381*74a4d8c2SCharles.Forsyth 		   strcmp(s->name, "yes") == 0 ||
382*74a4d8c2SCharles.Forsyth 		   strcmp(s->name, "dick") == 0)
383*74a4d8c2SCharles.Forsyth 			fproundflg = 1;
384*74a4d8c2SCharles.Forsyth 	}
385*74a4d8c2SCharles.Forsyth 	while(getnsc() != '\n')
386*74a4d8c2SCharles.Forsyth 		;
387*74a4d8c2SCharles.Forsyth 	if(0)
388*74a4d8c2SCharles.Forsyth 		if(fproundflg)
389*74a4d8c2SCharles.Forsyth 			print("%4ld: fproundflg %d\n", lineno, fproundflg);
390*74a4d8c2SCharles.Forsyth 		else
391*74a4d8c2SCharles.Forsyth 			print("%4ld: fproundflg off\n", lineno);
392*74a4d8c2SCharles.Forsyth }
393