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

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

unix.superglobalmegacorp.com

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