1 static char sccsid[] = "@(#)main.c 4.1 10/09/80"; 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 } 142