Ultrix-3.1/src/cmd/adb/main.c
/**********************************************************************
* 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);
}