Commit | Line | Data |
---|---|---|
d94e2462 M |
1 | # |
2 | /* | |
3 | * | |
4 | * UNIX debugger | |
5 | * | |
6 | */ | |
7 | ||
8 | #include "defs.h" | |
9 | ||
10 | ||
11 | MSG NOEOR; | |
12 | ||
13 | INT mkfault; | |
14 | INT executing; | |
15 | INT infile; | |
16 | CHAR *lp; | |
17 | INT maxoff; | |
18 | INT maxpos; | |
19 | INT sigint; | |
20 | INT sigqit; | |
21 | INT wtflag; | |
22 | L_INT maxfile; | |
23 | L_INT maxstor; | |
24 | L_INT txtsiz; | |
25 | L_INT datsiz; | |
26 | L_INT datbas; | |
27 | L_INT stksiz; | |
28 | STRING errflg; | |
29 | INT exitflg; | |
30 | INT magic; | |
31 | L_INT entrypt; | |
32 | ||
33 | CHAR lastc; | |
34 | INT eof; | |
35 | ||
36 | INT lastcom; | |
37 | L_INT var[36]; | |
38 | STRING symfil; | |
39 | STRING corfil; | |
40 | CHAR printbuf[]; | |
41 | CHAR *printptr; | |
42 | ||
43 | ||
44 | L_INT round(a,b) | |
45 | L_INT a, b; | |
46 | { | |
47 | L_INT w; | |
48 | w = ((a+b-1)/b)*b; | |
49 | return(w); | |
50 | } | |
51 | ||
52 | /* error handling */ | |
53 | ||
54 | chkerr() | |
55 | { | |
56 | IF errflg ORF mkfault | |
57 | THEN error(errflg); | |
58 | FI | |
59 | } | |
60 | ||
61 | error(n) | |
62 | STRING n; | |
63 | { | |
64 | errflg=n; | |
65 | iclose(); oclose(); | |
66 | longjmp(erradb,1); | |
67 | } | |
68 | ||
69 | fault(a) | |
70 | { | |
71 | signal(a,fault); | |
72 | lseek(infile,0L,2); | |
73 | mkfault++; | |
74 | } | |
75 | ||
76 | /* set up files and initial address mappings */ | |
77 | INT argcount; | |
78 | ||
79 | main(argc, argv) | |
80 | REG STRING *argv; | |
81 | REG INT argc; | |
82 | { | |
83 | maxfile=1L<<24; maxstor=1L<<16; | |
84 | ||
85 | gtty(0,&adbtty); | |
86 | gtty(0,&usrtty); | |
87 | WHILE argc>1 | |
88 | DO IF eqstr("-w",argv[1]) | |
89 | THEN wtflag=2; argc--; argv++; | |
90 | ELSE break; | |
91 | FI | |
92 | OD | |
93 | ||
94 | IF argc>1 THEN symfil = argv[1]; FI | |
95 | IF argc>2 THEN corfil = argv[2]; FI | |
96 | argcount=argc; | |
97 | setsym(); setcor(); | |
98 | ||
99 | /* set up variables for user */ | |
100 | maxoff=MAXOFF; maxpos=MAXPOS; | |
101 | var[VARB] = datbas; | |
102 | var[VARD] = datsiz; | |
103 | var[VARE] = entrypt; | |
104 | var[VARM] = magic; | |
105 | var[VARS] = stksiz; | |
106 | var[VART] = txtsiz; | |
107 | ||
108 | IF (sigint=signal(SIGINT,01))!=01 | |
109 | THEN sigint=fault; signal(SIGINT,fault); | |
110 | FI | |
111 | sigqit=signal(SIGQUIT,1); | |
112 | setjmp(erradb); | |
113 | IF executing THEN delbp(); FI | |
114 | executing=FALSE; | |
115 | ||
116 | LOOP flushbuf(); | |
117 | IF errflg | |
118 | THEN printf("%s\n",errflg); | |
119 | exitflg=errflg; | |
120 | errflg=0; | |
121 | FI | |
122 | IF mkfault | |
123 | THEN mkfault=0; printc(EOR); prints(DBNAME); | |
124 | FI | |
125 | lp=0; rdc(); lp--; | |
126 | IF eof | |
127 | THEN IF infile | |
128 | THEN iclose(); eof=0; longjmp(erradb,1); | |
129 | ELSE done(); | |
130 | FI | |
131 | ELSE exitflg=0; | |
132 | FI | |
133 | command(0,lastcom); | |
134 | IF lp ANDF lastc!=EOR THEN error(NOEOR); FI | |
135 | POOL | |
136 | } | |
137 | ||
138 | done() | |
139 | { | |
140 | endpcs(); | |
141 | exit(exitflg); | |
142 | } | |
143 |