|
|
1.1 root 1: #
2: /*
3: *
4: * UNIX debugger
5: *
6: */
7:
8: #include "defs.h"
9: SCCSID(@(#)main.c 2.2);
10:
11:
12: MSG NOEOR;
13:
14: INT mkfault;
15: INT executing;
16: INT infile;
17: CHAR *lp;
18: L_INT maxoff;
19: L_INT maxpos;
20: ADDR sigint;
21: ADDR sigqit;
22: INT wtflag;
23: L_INT maxfile;
24: L_INT maxstor;
25: L_INT txtsiz;
26: L_INT datsiz;
27: L_INT datbas;
28: L_INT stksiz;
29: STRING errflg;
30: L_INT exitflg;
31: INT magic;
32: L_INT entrypt;
33:
34: CHAR lastc;
35: INT eof;
36:
37: INT lastcom;
38: L_INT var[36];
39: STRING symfil;
40: STRING corfil;
41: CHAR printbuf[];
42: CHAR *printptr;
43:
44:
45: L_INT
46: round(a,b)
47: REG 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:
57: chkerr()
58: {
59: IF errflg ORF mkfault
60: THEN error(errflg);
61: FI
62: }
63:
64: error(n)
65: STRING n;
66: {
67: errflg=n;
68: iclose(); oclose();
69: #ifndef EDDT
70: reset();
71: #endif
72: }
73:
74: fault(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 */
84: INT argcount;
85:
86: #ifndef EDDT
87: main(argc, argv)
88: #else
89: eddt(argc, argv)
90: #endif
91: REG STRING *argv;
92: REG 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
158: done()
159: {
160: endpcs();
161: exit(exitflg);
162: }
163: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.