/* symbol table and file handling service routines */
return(lseek(f
,a
,0) != -1);
THEN
printf("%.8s", symbol
.symc
);
WHILE
nextsym() ANDF localok
ANDF (symflg
=symbol
.symf
)!=037
DO IF symflg
>=2 ANDF symflg
<=4
THEN localval
=symbol
.symv
;
THEN localval
=leng(shorten(cframe
)+symbol
.symv
);
ELIF symflg
==20 ANDF lastframe
THEN localval
=leng(lastframe
+2*symbol
.symv
-10);
L_INT v
; int type
; char *s
;
w
= findsym(shorten(v
),type
);
ELSE
printf("%.8s", symbol
.symc
);
IF w THEN
printf(OFFMODE
,w
); FI
L_INT diff
, value
, symval
, offset
;
value
=svalue
; diff
= 0377777L; symsav
=0;
IF type
!=NSYM
ANDF (symptr
=symvec
)
THEN WHILE diff
ANDF (symtyp
=symptr
->typslave
)!=ESYM
THEN symval
=leng(symptr
->valslave
);
THEN diff
= value
-symval
;
THEN offset
=leng(symsav
-symvec
);
longseek(fsym
, symbas
+offset
*SYMTABSIZ
);
read(fsym
,&symbol
,SYMTABSIZ
);
ELSE
return(longseek(fsym
, symbas
+(symnum
-symcnt
)*SYMTABSIZ
)!=0 ANDF
read(fsym
,&symbol
,SYMTABSIZ
)==SYMTABSIZ
);
/* sequential search through file */
THEN
longseek(fsym
, symbas
);
ELSE
longseek(fsym
, symbas
+sizeof symbuf
);
THEN rc
=symread(); symrqd
=TRUE
;
IF
--symcnt
>0 ANDF rc
==0 THEN errflg
=BADFIL
; FI
return( (symcnt
>=0 && rc
) ? symnxt
++ : 0);
IF (symlen
=read(fsym
,symbuf
,sizeof symbuf
))>=SYMTABSIZ
symend
= &symbuf
[symlen
/SYMTABSIZ
];