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