fix per rob pike
[unix-history] / usr / src / old / adb / adb.vax / expr.c.bad
CommitLineData
51a6db3a
BJ
1#
2/*
3 *
4 * UNIX debugger
5 *
6 */
7
8#include "defs.h"
8589da02 9static char sccsid[] = "@(#)expr.c.bad 4.5 %G%";
51a6db3a
BJ
10
11MSG BADSYM;
12MSG BADVAR;
13MSG BADKET;
14MSG BADSYN;
15MSG NOCFN;
16MSG NOADR;
17MSG BADLOC;
18
19ADDR lastframe;
20ADDR savlastf;
21ADDR savframe;
22ADDR savpc;
23ADDR callpc;
24
25
26
27CHAR *lp;
28INT radix;
29STRING errflg;
30L_INT localval;
3d9f6a35 31CHAR isymbol[1024];
51a6db3a
BJ
32
33CHAR lastc,peekc;
34
35L_INT dot;
36L_INT ditto;
37INT dotinc;
38L_INT var[];
39L_INT expv;
40
41
42
43
44expr(a)
45{ /* term | term dyadic expr | */
46 INT rc;
47 L_INT lhs;
48
49 rdc(); lp--; rc=term(a);
50
51 WHILE rc
52 DO lhs = expv;
53
54 switch ((int)readchar()) {
55
56 case '+':
57 term(a|1); expv += lhs; break;
58
59 case '-':
60 term(a|1); expv = lhs - expv; break;
61
62 case '#':
63 term(a|1); expv = round(lhs,expv); break;
64
65 case '*':
66 term(a|1); expv *= lhs; break;
67
68 case '%':
69 term(a|1); expv = lhs/expv; break;
70
71 case '&':
72 term(a|1); expv &= lhs; break;
73
74 case '|':
75 term(a|1); expv |= lhs; break;
76
77 case ')':
78 IF (a&2)==0 THEN error(BADKET); FI
79
80 default:
81 lp--;
82 \19return rc);
83 }
84 OD
85 return(rc);
86}
87
88term(a)
89{ /* item | monadic item | (expr) | */
90
91 switch ((int)readchar()) {
92
93 case '*':
94 term(a|1); expv=chkget(expv,DSP); return(1);
95
96 case '@':
97 term(a|1); expv=chkget(expv,ISP); return(1);
98
99 case '-':
100 term(a|1); expv = -expv; return(1);
101
102 case '~':
103