1: #
   2: /*
   3:  *
   4:  *	UNIX debugger
   5:  *
   6:  */
   7: 
   8: #include "defs.h"
   9: 
  10: 
  11: MSG     ODDADR;
  12: MSG     BADDAT;
  13: MSG     BADTXT;
  14: MAP     txtmap;
  15: MAP     datmap;
  16: INT     wtflag;
  17: STRING      errflg;
  18: INT     errno;
  19: 
  20: INT     pid;
  21: 
  22: 
  23: 
  24: 
  25: /* file handling and access routines */
  26: 
  27: put(adr,space,value)
  28: L_INT   adr;
  29: {
  30:     access(WT,adr,space,value);
  31: }
  32: 
  33: POS get(adr, space)
  34: L_INT       adr;
  35: {
  36:     return(access(RD,adr,space,0));
  37: }
  38: 
  39: POS chkget(n, space)
  40: L_INT       n;
  41: {
  42:     REG INT     w;
  43: 
  44:     w = get(n, space);
  45:     chkerr();
  46:     return(w);
  47: }
  48: 
  49: access(mode,adr,space,value)
  50: L_INT   adr;
  51: {
  52:     INT     w, w1, pmode, rd, file;
  53:     rd = mode==RD;
  54: 
  55:     IF space == NSP THEN return(0); FI
  56: 
  57:     IF pid      /* tracing on? */
  58:     THEN IF (adr&01) ANDF !rd THEN error(ODDADR); FI
  59:          pmode = (space&DSP?(rd?RDUSER:WDUSER):(rd?RIUSER:WIUSER));
  60:          w = ptrace(pmode, pid, shorten(adr&~01), value);
  61:          IF adr&01
  62:          THEN w1 = ptrace(pmode, pid, shorten(adr+1), value);
  63:           w = (w>>8)&LOBYTE | (w1<<8);
  64:          FI
  65:          IF errno
  66:          THEN errflg = (space&DSP ? BADDAT : BADTXT);
  67:          FI
  68:          return(w);
  69:     FI
  70:     w = 0;
  71:     IF mode==WT ANDF wtflag==0
  72:     THEN    error("not in write mode");
  73:     FI
  74:     IF !chkmap(&adr,space)
  75:     THEN return(0);
  76:     FI
  77:     file=(space&DSP?datmap.ufd:txtmap.ufd);
  78:     IF longseek(file,adr)==0 ORF
  79:        (rd ? read(file,&w,2) : write(file,&value,2)) < 1
  80:     THEN    errflg=(space&DSP?BADDAT:BADTXT);
  81:     FI
  82:     return(w);
  83: 
  84: }
  85: 
  86: chkmap(adr,space)
  87:     REG L_INT   *adr;
  88:     REG INT     space;
  89: {
  90:     REG MAPPTR amap;
  91:     amap=((space&DSP?&datmap:&txtmap));
  92:     IF space&STAR ORF !within(*adr,amap->b1,amap->e1)
  93:     THEN IF within(*adr,amap->b2,amap->e2)
  94:          THEN *adr += (amap->f2)-(amap->b2);
  95:          ELSE errflg=(space&DSP?BADDAT:BADTXT); return(0);
  96:          FI
  97:     ELSE *adr += (amap->f1)-(amap->b1);
  98:     FI
  99:     return(1);
 100: }
 101: 
 102: within(adr,lbd,ubd)
 103: L_INT   adr, lbd, ubd;
 104: {
 105:     return(adr>=lbd && adr<ubd);
 106: }

Defined functions

access defined in line 49; used 2 times
chkmap defined in line 86; used 1 times
  • in line 74
put defined in line 27; used 2 times
within defined in line 102; used 2 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 840
Valid CSS Valid XHTML 1.0 Strict