|
|
1.1 ! root 1: static char sccsid[] = "@(#)setup.c 4.2 4/18/81"; ! 2: # ! 3: /* ! 4: * ! 5: * UNIX debugger ! 6: * ! 7: */ ! 8: ! 9: #include "head.h" ! 10: ! 11: MSG BADMAG; ! 12: ! 13: INT wtflag; ! 14: INT fcor; ! 15: INT fsym; ! 16: L_INT maxfile; ! 17: L_INT maxstor; ! 18: L_INT txtsiz; ! 19: L_INT datsiz; ! 20: L_INT datbas; ! 21: L_INT stksiz; ! 22: STRING errflg; ! 23: INT magic; ! 24: L_INT symbas; ! 25: L_INT symnum; ! 26: L_INT entrypt; ! 27: ! 28: INT argcount; ! 29: INT signo; ! 30: struct user u; ! 31: ! 32: #define TXTHDRSIZ (sizeof(txthdr)) ! 33: ! 34: #ifndef EDDT ! 35: readl(f,p,n) int f,n; long * p;{ ! 36: #ifndef vax ! 37: int t=0; ! 38: do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n); ! 39: return(t); ! 40: #else ! 41: return(read(f,p,n*sizeof(long))); ! 42: #endif ! 43: } ! 44: #endif ! 45: ! 46: setsym() ! 47: { ! 48: #ifndef EDDT ! 49: TXTHDR txthdr; ! 50: ! 51: fsym=getfile(symfil,1); ! 52: txtmap.ufd=fsym; ! 53: IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ ! 54: THEN magic=txthdr[0]; ! 55: IF magic!=0410 ANDF magic!=0407 ANDF magic!=0412 ANDF magic!=0413 ! 56: THEN magic=0; ! 57: ELSE ! 58: symnum=txthdr[4]/SYMTABSIZ; ! 59: txtsiz=txthdr[1]; ! 60: datsiz=txthdr[2]; ! 61: symbas=txtsiz+datsiz; ! 62: txtmap.f1=txtmap.f2=TXTHDRSIZ; ! 63: switch (magic) { ! 64: ! 65: case 0407: ! 66: txtmap.b1=0; ! 67: txtmap.e1=0; ! 68: txtmap.b2=datbas=0; ! 69: txtmap.e2=symbas; ! 70: break; ! 71: ! 72: case 0413: ! 73: txtmap.f1=txtmap.f2=(CLSIZE*NBPG); ! 74: case 0410: ! 75: txtmap.b1=0; ! 76: txtmap.e1=txtsiz; ! 77: txtmap.b2=datbas=round(txtsiz,TXTRNDSIZ); ! 78: txtmap.e2=datbas+datsiz; ! 79: txtmap.f2+=txtmap.e1; ! 80: } ! 81: entrypt=txthdr[5]; ! 82: symbas += txthdr[6]+txthdr[7]; ! 83: symbas += magic==0412||magic==0413 ? (CLSIZE*NBPG) : TXTHDRSIZ; ! 84: ststart = symbas; ! 85: #ifdef FLEXNAMES ! 86: gstart = ststart+txthdr[4]; ! 87: #endif ! 88: /* set up symvec */ ! 89: FI ! 90: FI ! 91: IF magic==0 THEN txtmap.e1=maxfile; FI ! 92: #endif ! 93: } ! 94: ! 95: setcor() ! 96: { ! 97: fcor=getfile(corfil,2); ! 98: datmap.ufd=fcor; ! 99: IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES) ! 100: #ifndef STD ! 101: ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x70000000L ! 102: #else ! 103: ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L ! 104: #endif ! 105: ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L ! 106: THEN ! 107: signo = u.u_arg[0]&017; ! 108: txtsiz = ctob(u.u_tsize); ! 109: datsiz = ctob(u.u_dsize); ! 110: stksiz = ctob(u.u_ssize); ! 111: datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0); ! 112: if (magic == 0413) ! 113: datmap.b1 = datbas = txtsiz; ! 114: datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz; ! 115: #ifdef STD ! 116: datmap.f1 = ctob(USIZE); ! 117: #else ! 118: datmap.f1 = ctob(UPAGES); ! 119: #endif ! 120: datmap.b2 = maxstor-stksiz; ! 121: datmap.e2 = maxstor; ! 122: #ifdef STD ! 123: datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1); ! 124: #else ! 125: datmap.f2 = ctob(UPAGES)+((magic==0410 || magic == 0413) ! 126: ? datsiz : datmap.e1); ! 127: #endif ! 128: signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*sizeof(int)); ! 129: IF magic ANDF magic!=u.u_exdata.ux_mag ! 130: THEN printf("%s\n",BADMAG); ! 131: FI ! 132: ELSE datmap.e1 = maxfile; ! 133: FI ! 134: } ! 135: ! 136: create(f) ! 137: STRING f; ! 138: { int fd; ! 139: IF (fd=creat(f,0644))>=0 ! 140: THEN close(fd); return(open(f,wtflag)); ! 141: ELSE return(-1); ! 142: FI ! 143: } ! 144: ! 145: getfile(filnam,cnt) ! 146: STRING filnam; ! 147: { ! 148: REG INT fsym; ! 149: ! 150: IF !eqstr("-",filnam) ! 151: THEN fsym=open(filnam,wtflag); ! 152: IF fsym<0 ANDF argcount>cnt ! 153: THEN IF wtflag ! 154: THEN fsym=create(filnam); ! 155: FI ! 156: IF fsym<0 ! 157: THEN printf("cannot open `%s'\n", filnam); ! 158: FI ! 159: FI ! 160: ELSE fsym = -1; ! 161: FI ! 162: return(fsym); ! 163: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.