BSD 4 development
[unix-history] / .ref-5cb41021d721f4e0ac572d592613f963e495d1ff / usr / src / old / sdb / main.c
CommitLineData
f0b63b36
BJ
1static char sccsid[] = "@(#)main.c 4.1 %G%";
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
14INT mkfault;
15INT executing;
16CHAR *lp;
17L_INT maxoff;
18L_INT maxpos;
19ADDR sigint;
20ADDR sigqit;
21INT wtflag;
22L_INT maxfile;
23L_INT maxstor;
24L_INT txtsiz;
25L_INT datsiz;
26L_INT datbas;
27L_INT stksiz;
28STRING errflg;
29INT magic;
30L_INT entrypt;
31
32CHAR lastc;
33
34STRING symfil;
35STRING corfil;
36INT argcount;
37ADDR userpc;
38int fpe();
39
40main(argc, argv)
41REG STRING *argv;
42REG 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
129fault(a)
130{
131 signal(a,fault);
132 mkfault++;
133 printf("\n");
134 longjmp(env, 0);
135}
136
137fpe() {
138 signal(SIGILL, fpe);
139 error("Illegal floating constant");
140 longjmp(env, 0);
141}