1*7776Srrh static char sccsid[] = "@(#)setup.c 4.3 08/17/82";
21350Sbill #
31350Sbill /*
41350Sbill *
51350Sbill * UNIX debugger
61350Sbill *
71350Sbill */
81350Sbill
91350Sbill #include "head.h"
101350Sbill
111350Sbill MSG BADMAG;
121350Sbill
131350Sbill INT wtflag;
141350Sbill INT fcor;
151350Sbill INT fsym;
161350Sbill L_INT maxfile;
171350Sbill L_INT maxstor;
181350Sbill L_INT txtsiz;
191350Sbill L_INT datsiz;
201350Sbill L_INT datbas;
211350Sbill L_INT stksiz;
221350Sbill STRING errflg;
231350Sbill INT magic;
241350Sbill L_INT symbas;
251350Sbill L_INT symnum;
261350Sbill L_INT entrypt;
271350Sbill
281350Sbill INT argcount;
291350Sbill INT signo;
301350Sbill struct user u;
311350Sbill
321350Sbill #define TXTHDRSIZ (sizeof(txthdr))
331350Sbill
341350Sbill #ifndef EDDT
readl(f,p,n)351350Sbill readl(f,p,n) int f,n; long * p;{
361350Sbill #ifndef vax
371350Sbill int t=0;
381350Sbill do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n);
391350Sbill return(t);
401350Sbill #else
411350Sbill return(read(f,p,n*sizeof(long)));
421350Sbill #endif
431350Sbill }
441350Sbill #endif
451350Sbill
setsym()461350Sbill setsym()
471350Sbill {
481350Sbill #ifndef EDDT
491350Sbill TXTHDR txthdr;
501350Sbill
511350Sbill fsym=getfile(symfil,1);
521350Sbill txtmap.ufd=fsym;
531350Sbill IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
541350Sbill THEN magic=txthdr[0];
551350Sbill IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413
561350Sbill THEN magic=0;
571350Sbill ELSE
581350Sbill symnum=txthdr[4]/SYMTABSIZ;
591350Sbill txtsiz=txthdr[1];
601350Sbill datsiz=txthdr[2];
611350Sbill symbas=txtsiz+datsiz;
621350Sbill txtmap.f1=txtmap.f2=TXTHDRSIZ;
631350Sbill switch (magic) {
641350Sbill
651350Sbill case 0407:
661350Sbill txtmap.b1=0;
673555Swnj txtmap.e1=0;
681350Sbill txtmap.b2=datbas=0;
691350Sbill txtmap.e2=symbas;
701350Sbill break;
711350Sbill
721350Sbill case 0413:
731350Sbill txtmap.f1=txtmap.f2=(CLSIZE*NBPG);
741350Sbill case 0410:
751350Sbill txtmap.b1=0;
761350Sbill txtmap.e1=txtsiz;
771350Sbill txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ);
781350Sbill txtmap.e2=datbas+datsiz;
791350Sbill txtmap.f2+=txtmap.e1;
801350Sbill }
811350Sbill entrypt=txthdr[5];
821350Sbill symbas += txthdr[6]+txthdr[7];
831350Sbill symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ;
841350Sbill ststart = symbas;
851350Sbill #ifdef FLEXNAMES
861350Sbill gstart = ststart+txthdr[4];
871350Sbill #endif
881350Sbill /* set up symvec */
891350Sbill FI
901350Sbill FI
911350Sbill IF magic==0 THEN txtmap.e1=maxfile; FI
921350Sbill #endif
931350Sbill }
941350Sbill
setcor()951350Sbill setcor()
961350Sbill {
971350Sbill fcor=getfile(corfil,2);
981350Sbill datmap.ufd=fcor;
991350Sbill IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
1001350Sbill #ifndef STD
1011350Sbill ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x70000000L
1021350Sbill #else
1031350Sbill ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L
1041350Sbill #endif
1051350Sbill ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L
1061350Sbill THEN
1071350Sbill signo = u.u_arg[0]&017;
1081350Sbill txtsiz = ctob(u.u_tsize);
1091350Sbill datsiz = ctob(u.u_dsize);
1101350Sbill stksiz = ctob(u.u_ssize);
1111350Sbill datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
1121350Sbill if (magic == 0413)
1131350Sbill datmap.b1 = datbas = txtsiz;
1141350Sbill datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
1151350Sbill #ifdef STD
1161350Sbill datmap.f1 = ctob(USIZE);
1171350Sbill #else
1181350Sbill datmap.f1 = ctob(UPAGES);
1191350Sbill #endif
1201350Sbill datmap.b2 = maxstor-stksiz;
1211350Sbill datmap.e2 = maxstor;
1221350Sbill #ifdef STD
1231350Sbill datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
1241350Sbill #else
1251350Sbill datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413)
1261350Sbill ? datsiz : datmap.e1);
1271350Sbill #endif
1281350Sbill signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int));
1291350Sbill IF magic ANDF magic!=u.u_exdata.ux_mag
1301350Sbill THEN printf("%s\n",BADMAG);
1311350Sbill FI
1321350Sbill ELSE datmap.e1 = maxfile;
1331350Sbill FI
1341350Sbill }
1351350Sbill
create(f)1361350Sbill create(f)
1371350Sbill STRING f;
1381350Sbill { int fd;
1391350Sbill IF (fd=creat(f,0644))>=0
1401350Sbill THEN close(fd); return(open(f,wtflag));
1411350Sbill ELSE return(-1);
1421350Sbill FI
1431350Sbill }
1441350Sbill
getfile(filnam,cnt)1451350Sbill getfile(filnam,cnt)
1461350Sbill STRING filnam;
1471350Sbill {
1481350Sbill REG INT fsym;
1491350Sbill
1501350Sbill IF !eqstr("-",filnam)
1511350Sbill THEN fsym=open(filnam,wtflag);
1521350Sbill IF fsym<0 ANDF argcount>cnt
1531350Sbill THEN IF wtflag
1541350Sbill THEN fsym=create(filnam);
1551350Sbill FI
1561350Sbill IF fsym<0
1571350Sbill THEN printf("cannot open `%s'\n", filnam);
1581350Sbill FI
1591350Sbill FI
1601350Sbill ELSE fsym = -1;
1611350Sbill FI
1621350Sbill return(fsym);
1631350Sbill }
164