#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
!=0410 ANDF magic
!=0407 ANDF magic
!=0412 ANDF magic
!=0413
symnum
=txthdr
[4]/SYMTABSIZ
;
txtmap
.f1
=txtmap
.f2
=TXTHDRSIZ
;
txtmap
.f1
=txtmap
.f2
=(CLSIZE
*NBPG
);
txtmap
.f1
=txtmap
.f2
=(CLSIZE
*NBPG
);
txtmap
.b2
=datbas
=round(txtsiz
,TXTRNDSIZ
);
symbas
+= txthdr
[6]+txthdr
[7];
symbas
+= magic
==0412||magic
==0413 ? (CLSIZE
*NBPG
) : TXTHDRSIZ
;
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);
datmap
.b1
= datbas
= txtsiz
;
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 || magic
== 0413)
signo
= *(ADDR
*)(((ADDR
)&u
)+ctob(UPAGES
)-4*sizeof(int));
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
);