Annotation of 3BSD/cmd/adb/access.c, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.