Research V7 development
[unix-history] / usr / src / cmd / adb / main.c
CommitLineData
d94e2462
M
1#
2/*
3 *
4 * UNIX debugger
5 *
6 */
7
8#include "defs.h"
9
10
11MSG NOEOR;
12
13INT mkfault;
14INT executing;
15INT infile;
16CHAR *lp;
17INT maxoff;
18INT maxpos;
19INT sigint;
20INT sigqit;
21INT wtflag;
22L_INT maxfile;
23L_INT maxstor;
24L_INT txtsiz;
25L_INT datsiz;
26L_INT datbas;
27L_INT stksiz;
28STRING errflg;
29INT exitflg;
30INT magic;
31L_INT entrypt;
32
33CHAR lastc;
34INT eof;
35
36INT lastcom;
37L_INT var[36];
38STRING symfil;
39STRING corfil;
40CHAR printbuf[];
41CHAR *printptr;
42
43
44L_INT round(a,b)
45L_INT a, b;
46{
47 L_INT w;
48 w = ((a+b-1)/b)*b;
49 return(w);
50}
51
52/* error handling */
53
54chkerr()
55{
56 IF errflg ORF mkfault
57 THEN error(errflg);
58 FI
59}
60
61error(n)
62 STRING n;
63{
64 errflg=n;
65 iclose(); oclose();
66 longjmp(erradb,1);
67}
68
69fault(a)
70{
71 signal(a,fault);
72 lseek(infile,0L,2);
73 mkfault++;
74}
75
76/* set up files and initial address mappings */
77INT argcount;
78
79main(argc, argv)
80REG STRING *argv;
81REG 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
138done()
139{
140 endpcs();
141 exit(exitflg);
142}
143