#define TXTHDRSIZ (sizeof(txthdr))
readl(f,p,n) int f,n; long * p;{
do {t += read(f,&(p->loword),2); t += read(f,&(p->hiword),2); p++;} while (--n);
return(read(f,p,n*sizeof(long)));
IF readl(fsym, txthdr, TXTHDRSIZ/sizeof(txthdr[0]))==TXTHDRSIZ
IF magic!=0411 ANDF magic!=0410 ANDF magic!=0407 ANDF magic!=0405
ELSE symnum=txthdr[4]/SYMTABSIZ;
txtmap.e1=(magic==0407?symbas:txtsiz);
txtmap.b2=datbas=(magic==0410?round(txtsiz,TXTRNDSIZ):0);
txtmap.b1=(magic==0411? 0x200:0);
txtmap.e1=(magic==0407? symbas:
magic==0411? txtsiz+TXTHDRSIZ:
txtmap.f1=(magic==0411? 0x200:TXTHDRSIZ);
txtmap.b2=datbas=(magic==0410? round(txtsiz,TXTRNDSIZ):
txtmap.e2=txtmap.b2+(magic==0407?symbas:datsiz);
txtmap.f2 = TXTHDRSIZ+(magic==0407?0:txtmap.e1);
txtmap.f2=(magic==0407? TXTHDRSIZ:
symbas += txthdr[6]+txthdr[7];
IF magic==0 THEN txtmap.e1=maxfile; FI
IF read(fcor, &u, ctob(UPAGES))==ctob(UPAGES)
ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x70000000L
ANDF (u.u_pcb.pcb_ksp & 0xF0000000L)==0x80000000L
ANDF (u.u_pcb.pcb_usp & 0xF0000000L)==0x70000000L
txtsiz = ctob(u.u_tsize);
datsiz = ctob(u.u_dsize);
stksiz = ctob(u.u_ssize);
datmap.b1 = datbas = (magic==0410?round(txtsiz,TXTRNDSIZ):0);
((magic==0410 || magic==0411)? round(txtsiz,TXTRNDSIZ):0);
datmap.e1=(magic==0407?txtsiz:datmap.b1)+datsiz;
datmap.f1 = ctob(UPAGES);
datmap.b2 = maxstor-stksiz;
datmap.f2 = ctob(USIZE)+(magic==0410?datsiz:datmap.e1);
datmap.f2 = ctob(UPAGES)+(magic==0410?datsiz:datmap.e1);
datmap.f2 = ctob(UPAGES)+
((magic==0410 || magic==0411)?datsiz:datmap.e1);
signo = *(ADDR *)(((ADDR)&u)+ctob(UPAGES)-4*4);
IF magic ANDF magic!=u.u_exdata.ux_mag
THEN printf("%s\n",BADMAG);
ELSE datmap.e1 = maxfile;
THEN close(fd); return(open(f,wtflag));
THEN fsym=open(filnam,wtflag);
IF fsym<0 ANDF argcount>cnt
THEN fsym=create(filnam);
THEN printf("cannot open `%s'\n", filnam);