POS
*endhdr
&corhdr
[512];
#define TXTHDRSIZ (sizeof(txthdr))
IF
read(fsym
, txthdr
, TXTHDRSIZ
)==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
.e2
=txtmap
.b2
+(magic
==0407?symbas
:datsiz
);
txtmap
.f2
= TXTHDRSIZ
+(magic
==0407?0:txtmap
.e1
);
IF relflg
!=1 THEN symbas
=<< 1; FI
symvec
=sbrk(shorten((1+symnum
))*sizeof (SYMSLAVE
));
THEN
printf("%s\n",BADNAM
);
symptr
=symvec
=sbrk(sizeof (SYMSLAVE
));
WHILE (symp
=symget()) ANDF errflg
==0
DO symval
=symp
->symv
; symflg
=symp
->symf
;
symptr
->typslave
=SYMTYPE(symflg
);
IF magic
==0 THEN txtmap
.e1
=maxfile
; FI
IF
read(fcor
, corhdr
, ctob(USIZE
))==ctob(USIZE
)
THEN txtsiz
= corhdr
->u_tsize
<< 6;
datsiz
= corhdr
->u_dsize
<< 6;
stksiz
= corhdr
->u_ssize
<< 6;
datmap
.b1
= datbas
= (magic
==0410?round(txtsiz
,TXTRNDSIZ
):0);
datmap
.e1
=(magic
==0407?txtsiz
:datmap
.b1
)+datsiz
;
datmap
.b2
= maxstor
-stksiz
;
datmap
.f2
= ctob(USIZE
)+(magic
==0410?datsiz
:datmap
.e1
);
IF magic ANDF magic
!=corhdr
[0].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
);