1*3555Swnj static char sccsid[] = "@(#)setup.c 4.2 04/18/81"; 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 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 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; 67*3555Swnj 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 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 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 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