Ultrix-3.1/src/cmd/adb/main.c

Compare this file to the similar file:
Show the results in this format:


/**********************************************************************
 *   Copyright (c) Digital Equipment Corporation 1984, 1985, 1986.    *
 *   All Rights Reserved. 					      *
 *   Reference "/usr/src/COPYRIGHT" for applicable restrictions.      *
 **********************************************************************/

#
static char *sccsid = "@(#)main.c 3.0 4/21/86";
/*
 *
 *	UNIX debugger
 *
 */

#include "defs.h"

MSG		NLERR;

int 	mkfault;
int 	executing;
int 	infile;
char 	*lp;
int 	maxoff;
int 	maxpos;
int 	sigint, fault();
int 	sigqit;
int 	wtflag;
long 	maxfile;
long 	maxstor;
long 	txtsiz;
long 	datsiz;
long 	datbas;
long 	stksiz;
char *errflg;
int 	exitflg;
int 	magic,wantov,cwantov;
long 	entrypt;
char 	lastc;
int 	eof;
int 	lastcom;
long 	var[36];
char *symfil;
char *corfil;
char 	printbuf[];
char 	*printptr;

long round(a,b)
long 	a, b;
{
	long 	w;
	w = ((a+b-1)/b)*b;
	return(w);
}

/* error handling */

chkerr()
{
	if(errflg || mkfault)
	{
		error(errflg);
	}
}

error(n)
char *n;
{
	wantov = cwantov = 0;
	errflg=n;
	iclose(); 
	oclose();
	longjmp(erradb,1);
}

fault(a)
{
	signal(a,fault);
	lseek(infile,0L,2);
	mkfault++;
}

/* set up files and initial address mappings */
int argcount;

main(argc, argv)
register char **argv;
register int 	argc;
{
	int ttytype;
	char prompt[16];

	sprintf(prompt,"%s> ",argv[0]);
	ttytype = isatty(0);
	maxfile=1L<<24; 
	maxstor=1L<<16;
	gtty(0,&adbtty);
	gtty(0,&usrtty);
	while(argc>1){
		if(eqstr("-w",argv[1]))
		{
			wtflag=2; 
			argc--; 
			argv++;
		}
		else{
			break;
		}
	}
	if(argc>1)
	{
		symfil = argv[1];
	}
	if(argc>2)
	{
		corfil = argv[2];
	}
	argcount=argc;
	/*
	 * maxoff set to 02000 in setcor() if alternate (image)
	 * mapping used, so that adb will correctly relate addresses
	 * in the user structure to (_u + something).
	 */
	maxoff=07777;
	maxpos=MAXPOS;
	setsym(); 
	setcor();

	/* set up variables for user */
	/*	maxoff=MAXOFF; maxpos=MAXPOS;	*/
	var[VARB] = datbas;
	var[VARD] = datsiz;
	var[VARE] = entrypt;
	var[VARM] = magic;
	var[VARS] = stksiz;
	var[VART] = txtsiz;

	if((sigint=signal(SIGINT,01))!=01)
	{
		sigint=fault; 
		signal(SIGINT,fault);
	}
	sigqit=signal(SIGQUIT,1);
	setjmp(erradb);
	if(executing)
	{
		delbp();
	}
	executing=0;


	for(;;){
		flushbuf();
		if(errflg)
		{
			printf("%s\n",errflg);
			exitflg=errflg;
			errflg=0;
		}
		if(mkfault)
		{
			mkfault=0; 
			printc('\n'); 
			prints(DBNAME);
		}
		if (ttytype && !infile) {
			write(0,prompt,strlen(prompt));
		}
		lp=0; 
		rdc(); 
		lp--;
		if(eof)
		{
			if(infile)
			{
				iclose(); 
				eof=0; 
				longjmp(erradb,1);
			}
			else{
				done();
			}
		}
		else{
			exitflg=0;
		}
		command(0,lastcom);
		if(lp && lastc!='\n')
		{
			error(NLERR);
		}
	}
}

done()
{
	endpcs();
	exit(exitflg);
}