xref: /csrg-svn/old/sdb/main.c (revision 7775)
1*7775Srrh static	char sccsid[] = "@(#)main.c 4.2 08/17/82";
21337Sbill #
31337Sbill /*
41337Sbill  *
51337Sbill  *	UNIX debugger
61337Sbill  *
71337Sbill  */
81337Sbill 
91337Sbill #include	"head.h"
101337Sbill #include	<signal.h>
111337Sbill #include	<stdio.h>
121337Sbill #include	<sys/stat.h>
131337Sbill 
141337Sbill INT		mkfault;
151337Sbill INT		executing;
161337Sbill CHAR		*lp;
171337Sbill L_INT		maxoff;
181337Sbill L_INT		maxpos;
191337Sbill ADDR		sigint;
201337Sbill ADDR		sigqit;
211337Sbill INT		wtflag;
221337Sbill L_INT		maxfile;
231337Sbill L_INT		maxstor;
241337Sbill L_INT		txtsiz;
251337Sbill L_INT		datsiz;
261337Sbill L_INT		datbas;
271337Sbill L_INT		stksiz;
281337Sbill STRING		errflg;
291337Sbill INT		magic;
301337Sbill L_INT		entrypt;
311337Sbill 
321337Sbill CHAR		lastc;
331337Sbill 
341337Sbill STRING		symfil;
351337Sbill STRING		corfil;
361337Sbill INT 		argcount;
371337Sbill ADDR		userpc;
381337Sbill int	fpe();
391337Sbill 
main(argc,argv)401337Sbill main(argc, argv)
411337Sbill REG STRING	*argv;
421337Sbill REG INT		argc;
431337Sbill {
441337Sbill 	register char *p;
451337Sbill 	struct stat stbuf;
461337Sbill 
471337Sbill 	userpc = 1;
481337Sbill 	symfil = "a.out";
491337Sbill 	corfil = "core";
501337Sbill 	maxfile=1L<<24; maxstor=1L<<31;
511337Sbill #ifndef STD
521337Sbill #ifndef VAX135
531337Sbill 	maxstor -= ctob(UPAGES);
541337Sbill #endif
551337Sbill #endif
561337Sbill 
571337Sbill 	setbuf(stdout, NULL);
581337Sbill 	setbuf(stderr, NULL);
591337Sbill 
601337Sbill 	WHILE argc>1
611337Sbill 	DO	IF eqstr("-w",argv[1])
621337Sbill 		THEN	wtflag=2; argc--; argv++;
631337Sbill 		ELSE	break;
641337Sbill 		FI
651337Sbill 	OD
661337Sbill 
671337Sbill 	IF argc>1 THEN symfil = argv[1]; FI
681337Sbill 	IF argc>2 THEN corfil = argv[2]; FI
691337Sbill 	fp = filework;
701337Sbill 	if (argc > 3) {
711337Sbill 		for (p = argv[3]; *p; *fp++ = *p++) ;
721337Sbill 		*fp++ = '/';
731337Sbill 	}
741337Sbill 	argcount=argc;
751337Sbill 
761337Sbill 	if (stat(symfil, &stbuf) == -1) {
771337Sbill 		printf("`%s' does not exist\n", symfil);
781337Sbill 		exit(4);
791337Sbill 	}
801337Sbill 	symtime = stbuf.st_mtime;
811337Sbill 	if (stat(corfil, &stbuf) != -1) {
821337Sbill 		if (symtime > stbuf.st_mtime)
831337Sbill 			printf("Warning: `%s' newer than `%s'\n",
841337Sbill 				symfil, corfil);
851337Sbill 	}
861337Sbill 
871337Sbill 	setsym(); setcor();
881337Sbill 	initfp();
891337Sbill 	mkioptab();
901337Sbill 
911337Sbill 	/* set up variables for user */
921337Sbill 	maxoff=MAXOFF; maxpos=MAXPOS;
931337Sbill 	gtty(2, &sdbttym);
941337Sbill 	IF (sigint= (ADDR) signal(SIGINT,01))!=01
951337Sbill 	THEN	sigint= (ADDR) fault; signal(SIGINT,fault);
961337Sbill 	FI
971337Sbill 	sigqit= (ADDR) signal(SIGQUIT,1);
981337Sbill 	signal(SIGILL, fpe);
991337Sbill 
1001337Sbill 	setjmp(env);
1011337Sbill 	if (debug) printf("Sdb restarted\n");
1021337Sbill 	gtty(2, &userttym);
1031337Sbill 	if (sdbttym.sg_flags != userttym.sg_flags)
1041337Sbill 		stty(2, &sdbttym);
1051337Sbill 	IF executing THEN delbp(); FI
1061337Sbill 	executing=FALSE;
1071337Sbill 
1081337Sbill 	for (;;) {
1091337Sbill 		mkfault = 0;
1101337Sbill 		printf("*");
1111337Sbill 		if (decode(readline(stdin)) == 1) {
1121337Sbill 			printf("Error; try again\n");
1131337Sbill 			continue;
1141337Sbill 		}
1151337Sbill 
1161337Sbill 	if (debug) {
1171337Sbill 		printf("cmd %c:\n", cmd);
1181337Sbill 		printf("%s:%s\n", proc, var);
1191337Sbill 		printf("args-%s;re-%s;integ-%d\n", args, re, integ);
1201337Sbill 		printf("scallf-%d;reflg-%d\n", scallf, reflag);
1211337Sbill 		printf("colonflag-%d;ncolonflag-%d\n\n",
1221337Sbill 			colonflag, ncolonflag);
1231337Sbill  	}
1241337Sbill 		docommand();
1251337Sbill 	}
1261337Sbill }
1271337Sbill 
1281337Sbill 
fault(a)1291337Sbill fault(a)
1301337Sbill {
1311337Sbill 	signal(a,fault);
1321337Sbill 	mkfault++;
1331337Sbill 	printf("\n");
1341337Sbill 	longjmp(env, 0);
1351337Sbill }
1361337Sbill 
fpe()1371337Sbill fpe() {
1381337Sbill 	signal(SIGILL, fpe);
1391337Sbill 	error("Illegal floating constant");
1401337Sbill 	longjmp(env, 0);
1411337Sbill }
142