/* symbol table and file handling service routines */
return(lseek(f,a,0) != -1);
THEN printf("%.8s", symbol.symc);
ANDF (symflg=symbol.symf)!=N_FN
DO IF symflg>=N_TEXT ANDF symflg<=(N_BSS|N_EXT)
THEN localval=symbol.symv;
THEN localval=(symbol.symv<0 ? cframe:cargp)+symbol.symv;
L_INT v; int type; char *s;
IF (v!=0) THEN w = findsym(v,type); FI
IF v==0 ORF w >= maxoff ORF (shorten(v)<maxoff ANDF w!=0)
ELSE printf("%.8s", symbol.symc);
IF w THEN printf(OFFMODE,w); FI
L_INT diff, value, symval, offset;
value=svalue; diff = 0x7fffffffL; symsav=0;
IF type!=NSYM ANDF (symptr=symvec)
THEN WHILE diff ANDF (symtyp=symptr->typslave)!=ESYM
DO IF (type==0 ORF symtyp==type) ANDF symptr->typslave != XSYM
THEN symval=symptr->valslave;
THEN diff = value-symval;
THEN offset=leng(symsav-symvec);
longseek(fsym, symbas+offset*SYMTABSIZ);
read(fsym,&symbol,SYMTABSIZ);
THEN WHILE diff ANDF symptr<symend
DO IF value-symptr->symv<diff
THEN diff = value-symptr->symv;
IF symsav THEN cpsym(symsav,&symbol); FI
cpsym(fm,to) register char *fm,*to;{
register int i=12; do *to++= *fm++; while (--i);
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 --symcnt>=0 THEN return(symnxt++); ELSE return(0); FI
symlen=read(fsym,symbuf,sizeof symbuf);
while ((char *)p<(char*)symbuf+symlen) {
t=p->symv.hiword; p->symv.hiword=p->symv.loword; p->symv.loword=t;
symend = &symbuf[symlen/SYMTABSIZ];