Commit | Line | Data |
---|---|---|
28c97a66 | 1 | static char sccsid[] = "@(#)main.c 4.2 %G%"; |
f0b63b36 BJ |
2 | # |
3 | /* | |
4 | * | |
5 | * UNIX debugger | |
6 | * | |
7 | */ | |
8 | ||
9 | #include "head.h" | |
10 | #include <signal.h> | |
11 | #include <stdio.h> | |
12 | #include <sys/stat.h> | |
13 | ||
14 | INT mkfault; | |
15 | INT executing; | |
16 | CHAR *lp; | |
17 | L_INT maxoff; | |
18 | L_INT maxpos; | |
19 | ADDR sigint; | |
20 | ADDR 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 magic; | |
30 | L_INT entrypt; | |
31 | ||
32 | CHAR lastc; | |
33 | ||
34 | STRING symfil; | |
35 | STRING corfil; | |
36 | INT argcount; | |
37 | ADDR userpc; | |
38 | int fpe(); | |
39 | ||
40 | main(argc, argv) | |
41 | REG STRING *argv; | |
42 | REG INT argc; | |
43 | { | |
44 | register char *p; | |
45 | struct stat stbuf; | |
46 | ||
47 | userpc = 1; | |
48 | symfil = "a.out"; | |
49 | corfil = "core"; | |
50 | maxfile=1L<<24; maxstor=1L<<31; | |
51 | #ifndef STD | |
52 | #ifndef VAX135 | |
53 | maxstor -= ctob(UPAGES); | |
54 | #endif | |
55 | #endif | |
56 | ||
57 | setbuf(stdout, NULL); | |
58 | setbuf(stderr, NULL); | |
59 | ||
60 | WHILE argc>1 | |
61 | DO IF eqstr("-w",argv[1]) | |
62 | THEN wtflag=2; argc--; argv++; | |
63 | ELSE break; | |
64 | FI | |
65 | OD | |
66 | ||
67 | IF argc>1 THEN symfil = argv[1]; FI | |
68 | IF argc>2 THEN corfil = argv[2]; FI | |
69 | fp = filework; | |
70 | if (argc > 3) { | |
71 | for (p = argv[3]; *p; *fp++ = *p++) ; | |
72 | *fp++ = '/'; | |
73 | } | |
74 | argcount=argc; | |
75 | ||
76 | if (stat(symfil, &stbuf) == -1) { | |
77 | printf("`%s' does not exist\n", symfil); | |
78 | exit(4); | |
79 | } | |
80 | symtime = stbuf.st_mtime; | |
81 | if (stat(corfil, &stbuf) != -1) { | |
82 | if (symtime > stbuf.st_mtime) | |
83 | printf("Warning: `%s' newer than `%s'\n", | |
84 | symfil, corfil); | |
85 | } | |
86 | ||
87 | setsym(); setcor(); | |
88 | initfp(); | |
89 | mkioptab(); | |
90 | ||
91 | /* set up variables for user */ | |
92 | maxoff=MAXOFF; maxpos=MAXPOS; | |
93 | gtty(2, &sdbttym); | |
94 | IF (sigint= (ADDR) signal(SIGINT,01))!=01 | |
95 | THEN sigint= (ADDR) fault; signal(SIGINT,fault); | |
96 | FI | |
97 | sigqit= (ADDR) signal(SIGQUIT,1); | |
98 | signal(SIGILL, fpe); | |
99 | ||
100 | setjmp(env); | |
101 | if (debug) printf("Sdb restarted\n"); | |
102 | gtty(2, &userttym); | |
103 | if (sdbttym.sg_flags != userttym.sg_flags) | |
104 | stty(2, &sdbttym); | |
105 | IF executing THEN delbp(); FI | |
106 | executing=FALSE; | |
107 | ||
108 | for (;;) { | |
109 | mkfault = 0; | |
110 | printf("*"); | |
111 | if (decode(readline(stdin)) == 1) { | |
112 | printf("Error; try again\n"); | |
113 | continue; | |
114 | } | |
115 | ||
116 | if (debug) { | |
117 | printf("cmd %c:\n", cmd); | |
118 | printf("%s:%s\n", proc, var); | |
119 | printf("args-%s;re-%s;integ-%d\n", args, re, integ); | |
120 | printf("scallf-%d;reflg-%d\n", scallf, reflag); | |
121 | printf("colonflag-%d;ncolonflag-%d\n\n", | |
122 | colonflag, ncolonflag); | |
123 | } | |
124 | docommand(); | |
125 | } | |
126 | } | |
127 | ||
128 | ||
129 | fault(a) | |
130 | { | |
131 | signal(a,fault); | |
132 | mkfault++; | |
133 | printf("\n"); | |
134 | longjmp(env, 0); | |
135 | } | |
136 | ||
137 | fpe() { | |
138 | signal(SIGILL, fpe); | |
139 | error("Illegal floating constant"); | |
140 | longjmp(env, 0); | |
141 | } |