Annotation of 41BSD/cmd/apl/ab.c, revision 1.1

1.1     ! root        1: #include "apl.h"
        !             2: 
        !             3: ex_take()
        !             4: {
        !             5:        register i, k, o;
        !             6: 
        !             7:        o = 0;
        !             8:        td1();
        !             9:        for(i=0; i<idx.rank; i++) {
        !            10:                k = idx.idx[i];
        !            11:                if(k < 0) {
        !            12:                        k = -k;
        !            13:                        o =+ idx.del[i] *
        !            14:                                (idx.dim[i] - k);
        !            15:                }
        !            16:                idx.dim[i] = k;
        !            17:        }
        !            18:        map(o);
        !            19: }
        !            20: 
        !            21: ex_drop()
        !            22: {
        !            23:        register i, k, o;
        !            24: 
        !            25:        o = 0;
        !            26:        td1();
        !            27:        for(i=0; i<idx.rank; i++) {
        !            28:                k = idx.idx[i];
        !            29:                if(k > 0)
        !            30:                        o =+ idx.del[i] * k; else
        !            31:                        k = -k;
        !            32:                idx.dim[i] =- k;
        !            33:        }
        !            34:        map(o);
        !            35: }
        !            36: 
        !            37: td1()
        !            38: {
        !            39:        register struct item *p;
        !            40:        struct item *q;
        !            41:        register i, k;
        !            42: 
        !            43:        p = fetch2();
        !            44:        q = sp[-2];
        !            45:        if(p->rank > 1 || q->rank !=  p->size)
        !            46:                error("take C");
        !            47:        bidx(q);
        !            48:        for(i=0; i<p->size; i++) {
        !            49:                k = fix(getdat(p));
        !            50:                idx.idx[i] = k;
        !            51:                if(k < 0)
        !            52:                        k = -k;
        !            53:                if(k > idx.dim[i])
        !            54:                        error("take C");
        !            55:        }
        !            56:        pop();
        !            57: }
        !            58: 
        !            59: ex_dtrn()
        !            60: {
        !            61:        register struct item *p, *q;
        !            62:        register i;
        !            63: 
        !            64:        p = fetch2();
        !            65:        q = sp[-2];
        !            66:        if(p->rank > 1 || p->size != q->rank)
        !            67:                error("tranpose C");
        !            68:        for(i=0; i<p->size; i++)
        !            69:                idx.idx[i] = fix(getdat(p)) - thread.iorg;
        !            70:        pop();
        !            71:        trn0();
        !            72: }
        !            73: 
        !            74: ex_mtrn()
        !            75: {
        !            76:        register struct item *p;
        !            77:        register i;
        !            78: 
        !            79:        p = fetch1();
        !            80:        if(p->rank <= 1)
        !            81:                return;
        !            82:        for(i=0; i<p->rank; i++)
        !            83:                idx.idx[i] = i;
        !            84:        idx.idx[i-1] = i-2;
        !            85:        idx.idx[i-2] = i-1;
        !            86:        trn0();
        !            87: }
        !            88: 
        !            89: trn0()
        !            90: {
        !            91:        register i, j;
        !            92:        int d[MRANK], r[MRANK];
        !            93: 
        !            94:        bidx(sp[-1]);
        !            95:        for(i=0; i<idx.rank; i++)
        !            96:                d[i] = -1;
        !            97:        for(i=0; i<idx.rank; i++) {
        !            98:                j = idx.idx[i];
        !            99:                if(j<0 || j>=idx.rank)
        !           100:                        error("tranpose X");
        !           101:                if(d[j] != -1) {
        !           102:                        if(idx.dim[i] < d[j])
        !           103:                                d[j] = idx.dim[i];
        !           104:                        r[j] =+ idx.del[i];
        !           105:                } else {
        !           106:                        d[j] = idx.dim[i];
        !           107:                        r[j] = idx.del[i];
        !           108:                }
        !           109:        }
        !           110:        j = idx.rank;
        !           111:        for(i=0; i<idx.rank; i++) {
        !           112:                if(d[i] != -1) {
        !           113:                        if(i > j)
        !           114:                                error("tranpose D");
        !           115:                        idx.dim[i] = d[i];
        !           116:                        idx.del[i] = r[i];
        !           117:                } else
        !           118:                if(i < j)
        !           119:                        j = i;
        !           120:        }
        !           121:        idx.rank = j;
        !           122:        map(0);
        !           123: }
        !           124: 
        !           125: ex_rev0()
        !           126: {
        !           127: 
        !           128:        fetch1();
        !           129:        revk(0);
        !           130: }
        !           131: 
        !           132: ex_revk()
        !           133: {
        !           134:        register k;
        !           135: 
        !           136:        k = topfix() - thread.iorg;
        !           137:        fetch1();
        !           138:        revk(k);
        !           139: }
        !           140: 
        !           141: ex_rev()
        !           142: {
        !           143:        register struct item *p;
        !           144: 
        !           145:        p = fetch1();
        !           146:        revk(p->rank-1);
        !           147: }
        !           148: 
        !           149: revk(k)
        !           150: {
        !           151:        register o;
        !           152: 
        !           153:        bidx(sp[-1]);
        !           154:        if(k < 0 || k >= idx.rank)
        !           155:                error("reverse X");
        !           156:        o = idx.del[k] * (idx.dim[k]-1);
        !           157:        idx.del[k] = -idx.del[k];
        !           158:        map(o);
        !           159: }
        !           160: 
        !           161: map(o)
        !           162: {
        !           163:        register struct item *p;
        !           164:        register n, i;
        !           165:        int map1();
        !           166: 
        !           167:        n = 1;
        !           168:        for(i=0; i<idx.rank; i++)
        !           169:                n =* idx.dim[i];
        !           170:        p = newdat(idx.type, idx.rank, n);
        !           171:        copy(IN, idx.dim, p->dim, idx.rank);
        !           172:        push(p);
        !           173:        forloop(map1, o);
        !           174:        sp--;
        !           175:        pop();
        !           176:        push(p);
        !           177: }
        !           178: 
        !           179: map1(o)
        !           180: {
        !           181:        register struct item *p;
        !           182: 
        !           183:        p = sp[-2];
        !           184:        p->index = access() + o;
        !           185:        putdat(sp[-1], getdat(p));
        !           186: }

unix.superglobalmegacorp.com

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