Commit | Line | Data |
---|---|---|
51a6db3a BJ |
1 | # |
2 | /* | |
3 | * | |
4 | * UNIX debugger | |
5 | * | |
6 | */ | |
7 | ||
8 | #include "defs.h" | |
8589da02 | 9 | static char sccsid[] = "@(#)expr.c.bad 4.5 %G%"; |
51a6db3a BJ |
10 | |
11 | MSG BADSYM; | |
12 | MSG BADVAR; | |
13 | MSG BADKET; | |
14 | MSG BADSYN; | |
15 | MSG NOCFN; | |
16 | MSG NOADR; | |
17 | MSG BADLOC; | |
18 | ||
19 | ADDR lastframe; | |
20 | ADDR savlastf; | |
21 | ADDR savframe; | |
22 | ADDR savpc; | |
23 | ADDR callpc; | |
24 | ||
25 | ||
26 | ||
27 | CHAR *lp; | |
28 | INT radix; | |
29 | STRING errflg; | |
30 | L_INT localval; | |
3d9f6a35 | 31 | CHAR isymbol[1024]; |
51a6db3a BJ |
32 | |
33 | CHAR lastc,peekc; | |
34 | ||
35 | L_INT dot; | |
36 | L_INT ditto; | |
37 | INT dotinc; | |
38 | L_INT var[]; | |
39 | L_INT expv; | |
40 | ||
41 | ||
42 | ||
43 | ||
44 | expr(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 | ||
88 | term(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 |