Annotation of 43BSD/contrib/apl/src/aa.c, revision 1.1.1.1

1.1       root        1: static char Sccsid[] = "aa.c @(#)aa.c  1.1     10/1/82 Berkeley ";
                      2: #include "apl.h"
                      3: 
                      4: int    gdu();
                      5: int    gdd();
                      6: 
                      7: ex_gdu()
                      8: {
                      9:        register struct item *p;
                     10: 
                     11:        p = fetch1();
                     12:        gd0(p->rank-1, gdu);
                     13: }
                     14: 
                     15: ex_gduk()
                     16: {
                     17:        register k;
                     18: 
                     19:        k = topfix() - thread.iorg;
                     20:        fetch1();
                     21:        gd0(k, gdu);
                     22: }
                     23: 
                     24: ex_gdd()
                     25: {
                     26:        register struct item *p;
                     27: 
                     28:        p = fetch1();
                     29:        gd0(p->rank-1, gdd);
                     30: }
                     31: 
                     32: ex_gddk()
                     33: {
                     34:        register k;
                     35: 
                     36:        k = topfix() - thread.iorg;
                     37:        fetch1();
                     38:        gd0(k, gdd);
                     39: }
                     40: 
                     41: gd0(k, f)
                     42: int (*f)();
                     43: {
                     44:        register struct item *p;
                     45:        char *param[2];
                     46:        int gd1();
                     47: 
                     48:        bidx(sp[-1]);
                     49:        if(k < 0 || k >= idx.rank)
                     50:                error("grade X");
                     51:        p = newdat(DA, idx.rank, idx.size);
                     52:        copy(IN, idx.dim, p->dim, idx.rank);
                     53:        *sp++ = p;
                     54:        colapse(k);
                     55:        param[0] = alloc(idx.dimk*SINT);
                     56:        param[1] = (char *)f;
                     57:        forloop(gd1, param);
                     58:        free(param[0]);
                     59:        p = sp[-1];
                     60:        sp--;
                     61:        pop();
                     62:        *sp++ = p;
                     63: }
                     64: 
                     65: gd1(param)
                     66: int *param[];
                     67: {
                     68:        register struct item *p;
                     69:        register i, *m;
                     70: 
                     71:        integ = access();
                     72:        m = param[0];
                     73:        for(i=0; i<idx.dimk; i++)
                     74:                *m++ = i;
                     75:        m = param[0];
                     76:        qsort(m, idx.dimk, SINT, param[1]);
                     77:        p = sp[-1];
                     78:        for(i=0; i<idx.dimk; i++) {
                     79:                p->index = integ;
                     80:                datum = *m++ + thread.iorg;
                     81:                putdat(p, datum);
                     82:                integ += idx.delk;
                     83:        }
                     84: }
                     85: 
                     86: gdu(p1, p2)
                     87: int *p1, *p2;
                     88: {
                     89:        register struct item *p;
                     90:        data d1, d2;
                     91: 
                     92:        p = sp[-2];
                     93:        p->index = integ + *p1 * idx.delk;
                     94:        d1 = getdat(p);
                     95:        p->index = integ + *p2 * idx.delk;
                     96:        d2 = getdat(p);
                     97:        if(fuzz(d1, d2) != 0) {
                     98:                if(d1 > d2)
                     99:                        return(1);
                    100:                return(-1);
                    101:        }
                    102:        return(*p1 - *p2);
                    103: }
                    104: 
                    105: gdd(p1, p2)
                    106: int *p1, *p2;
                    107: {
                    108:        register struct item *p;
                    109:        data d1, d2;
                    110: 
                    111:        p = sp[-2];
                    112:        p->index = integ + *p1 * idx.delk;
                    113:        d1 = getdat(p);
                    114:        p->index = integ + *p2 * idx.delk;
                    115:        d2 = getdat(p);
                    116:        if(fuzz(d1, d2) != 0) {
                    117:                if(d1 > d2)
                    118:                        return(-1);
                    119:                return(1);
                    120:        }
                    121:        return(*p1 - *p2);
                    122: }

unix.superglobalmegacorp.com

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