1: #
   2: /*
   3:  *
   4:  *	UNIX debugger
   5:  *
   6:  */
   7: 
   8: #include "defs.h"
   9: 
  10: 
  11: MSG     BADFIL;
  12: 
  13: SYMTAB      symbol;
  14: BOOL        localok;
  15: INT     lastframe;
  16: SYMSLAVE        *symvec;
  17: POS     maxoff;
  18: L_INT       maxstor;
  19: 
  20: /* symbol management */
  21: L_INT       symbas;
  22: L_INT       symcnt;
  23: L_INT       symnum;
  24: L_INT       localval;
  25: char        symrqd -1;
  26: SYMTAB      symbuf[SYMSIZ];
  27: SYMPTR      symnxt;
  28: SYMPTR      symend;
  29: 
  30: 
  31: INT     fsym;
  32: STRING      errflg;
  33: POS     findsym();
  34: 
  35: 
  36: /* symbol table and file handling service routines */
  37: 
  38: longseek(f, a)
  39: L_INT a;
  40: {
  41:     return(lseek(f,a,0) != -1);
  42: }
  43: 
  44: valpr(v,idsp)
  45: {
  46:     POS     d;
  47:     d = findsym(v,idsp);
  48:     IF d < maxoff
  49:     THEN    printf("%.8s", symbol.symc);
  50:         IF d
  51:         THEN    printf(OFFMODE, d);
  52:         FI
  53:     FI
  54: }
  55: 
  56: localsym(cframe)
  57: L_INT cframe;
  58: {
  59:     INT symflg;
  60:     WHILE nextsym() ANDF localok
  61:         ANDF symbol.symc[0]!='~'
  62:         ANDF (symflg=symbol.symf)!=037
  63:     DO IF symflg>=2 ANDF symflg<=4
  64:        THEN localval=symbol.symv;
  65:         return(TRUE);
  66:        ELIF symflg==1
  67:        THEN localval=leng(shorten(cframe)+symbol.symv);
  68:         return(TRUE);
  69:        ELIF symflg==20 ANDF lastframe
  70:        THEN localval=leng(lastframe+2*symbol.symv-10);
  71:         return(TRUE);
  72:        FI
  73:     OD
  74:     return(FALSE);
  75: }
  76: psymoff(v,type,s)
  77: L_INT v; int type; char *s;
  78: {
  79:     POS     w;
  80:     w = findsym(shorten(v),type);
  81:     IF w >= maxoff
  82:     THEN printf(LPRMODE,v);
  83:     ELSE printf("%.8s", symbol.symc);
  84:          IF w THEN printf(OFFMODE,w); FI
  85:     FI
  86:     printf(s);
  87: }
  88: 
  89: POS findsym(svalue,type)
  90: POS svalue;
  91: INT type;
  92: {
  93:     L_INT       diff, value, symval, offset;
  94:     INT     symtyp;
  95:     REG SYMSLAVE    *symptr;
  96:     SYMSLAVE    *symsav;
  97:     value=svalue; diff = 0377777L; symsav=0;
  98:     IF type!=NSYM ANDF (symptr=symvec)
  99:     THEN    WHILE diff ANDF (symtyp=symptr->typslave)!=ESYM
 100:         DO  IF symtyp==type
 101:             THEN symval=leng(symptr->valslave);
 102:              IF value-symval<diff
 103:                 ANDF value>=symval
 104:              THEN diff = value-symval;
 105:                   symsav=symptr;
 106:              FI
 107:             FI
 108:             symptr++;
 109:         OD
 110:         IF symsav
 111:         THEN    offset=leng(symsav-symvec);
 112:             symcnt=symnum-offset;
 113:             longseek(fsym, symbas+offset*SYMTABSIZ);
 114:             read(fsym,&symbol,SYMTABSIZ);
 115:         FI
 116:     FI
 117:     return(shorten(diff));
 118: }
 119: 
 120: nextsym()
 121: {
 122:     IF (--symcnt)<0
 123:     THEN    return(FALSE);
 124:     ELSE    return(longseek(fsym, symbas+(symnum-symcnt)*SYMTABSIZ)!=0 ANDF
 125:             read(fsym,&symbol,SYMTABSIZ)==SYMTABSIZ);
 126:     FI
 127: }
 128: 
 129: 
 130: 
 131: /* sequential search through file */
 132: symset()
 133: {
 134:     symcnt = symnum;
 135:     symnxt = symbuf;
 136:     IF symrqd
 137:     THEN    longseek(fsym, symbas);
 138:         symread(); symrqd=FALSE;
 139:     ELSE    longseek(fsym, symbas+sizeof symbuf);
 140:     FI
 141: }
 142: 
 143: SYMPTR  symget()
 144: {
 145:     REG INT rc;
 146:     IF symnxt >= symend
 147:     THEN    rc=symread(); symrqd=TRUE;
 148:     ELSE    rc=TRUE;
 149:     FI
 150:     IF --symcnt>0 ANDF rc==0 THEN errflg=BADFIL; FI
 151:     return( (symcnt>=0 && rc) ? symnxt++ : 0);
 152: }
 153: 
 154: symread()
 155: {
 156:     INT     symlen;
 157: 
 158:     IF (symlen=read(fsym,symbuf,sizeof symbuf))>=SYMTABSIZ
 159:     THEN    symnxt = symbuf;
 160:         symend = &symbuf[symlen/SYMTABSIZ];
 161:         return(TRUE);
 162:     ELSE    return(FALSE);
 163:     FI
 164: }

Defined functions

findsym defined in line 89; used 5 times
localsym defined in line 56; used 2 times
longseek defined in line 38; used 5 times
nextsym defined in line 120; used 1 times
  • in line 60
symread defined in line 154; used 2 times
symset defined in line 132; used 3 times
valpr defined in line 44; used 2 times

Defined variables

symrqd defined in line 25; used 3 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 801
Valid CSS Valid XHTML 1.0 Strict