|
|
1.1 ! root 1: #include "apl.h" ! 2: ! 3: ex_com0() ! 4: { ! 5: ! 6: fetch2(); ! 7: comk(0); ! 8: } ! 9: ! 10: ex_comk() ! 11: { ! 12: register k; ! 13: ! 14: k = topfix() - thread.iorg; ! 15: fetch2(); ! 16: comk(k); ! 17: } ! 18: ! 19: ex_com() ! 20: { ! 21: register struct item *q; ! 22: ! 23: fetch2(); ! 24: q = sp[-2]; ! 25: comk(q->rank-1); ! 26: } ! 27: ! 28: comk(k) ! 29: { ! 30: register struct item *p; ! 31: register i; ! 32: int dk, ndk, com1(); ! 33: ! 34: p = sp[-1]; ! 35: bidx(sp[-2]); ! 36: if(p->rank==0||p->rank==1&&p->size==1) { ! 37: if(getdat(p)) { ! 38: pop(); ! 39: return; ! 40: } ! 41: p = newdat(idx.type, 1, 0); ! 42: pop(); ! 43: pop(); ! 44: push(p); ! 45: return; ! 46: } ! 47: if(k < 0 || k >= idx.rank) ! 48: error("compress X"); ! 49: dk = idx.dim[k]; ! 50: if(p->rank != 1 || p->size != dk) ! 51: error("compress C"); ! 52: ndk = 0; ! 53: for(i=0; i<dk; i++) ! 54: if(getdat(p)) ! 55: ndk++; ! 56: p = newdat(idx.type, idx.rank, (idx.size/dk)*ndk); ! 57: copy(IN, idx.dim, p->dim, idx.rank); ! 58: p->dim[k] = ndk; ! 59: push(p); ! 60: forloop(com1, k); ! 61: sp--; ! 62: pop(); ! 63: pop(); ! 64: push(p); ! 65: } ! 66: ! 67: com1(k) ! 68: { ! 69: register struct item *p; ! 70: ! 71: p = sp[-2]; ! 72: p->index = idx.idx[k]; ! 73: if(getdat(p)) { ! 74: p = sp[-3]; ! 75: p->index = access(); ! 76: putdat(sp[-1], getdat(p)); ! 77: } ! 78: } ! 79: ! 80: ex_exd0() ! 81: { ! 82: ! 83: fetch2(); ! 84: exdk(0); ! 85: } ! 86: ! 87: ex_exdk() ! 88: { ! 89: register k; ! 90: ! 91: k = topfix() - thread.iorg; ! 92: fetch2(); ! 93: exdk(k); ! 94: } ! 95: ! 96: ex_exd() ! 97: { ! 98: register struct item *q; ! 99: ! 100: fetch2(); ! 101: q = sp[-2]; ! 102: exdk(q->rank-1); ! 103: } ! 104: ! 105: exdk(k) ! 106: { ! 107: register struct item *p; ! 108: register i, dk; ! 109: int exd1(); ! 110: ! 111: p = sp[-1]; ! 112: bidx(sp[-2]); ! 113: if(k < 0 || k >= idx.rank) ! 114: error("expand X"); ! 115: dk = 0; ! 116: for(i=0; i<p->size; i++) ! 117: if(getdat(p)) ! 118: dk++; ! 119: if(p->rank != 1 || dk != idx.dim[k]) ! 120: error("expand C"); ! 121: idx.dim[k] = p->size; ! 122: size(); ! 123: p = newdat(idx.type, idx.rank, idx.size); ! 124: copy(IN, idx.dim, p->dim, idx.rank); ! 125: push(p); ! 126: forloop(exd1, k); ! 127: sp--; ! 128: pop(); ! 129: pop(); ! 130: push(p); ! 131: } ! 132: ! 133: exd1(k) ! 134: { ! 135: register struct item *p; ! 136: ! 137: p = sp[-2]; ! 138: p->index = idx.idx[k]; ! 139: if(getdat(p)) ! 140: datum = getdat(sp[-3]); else ! 141: if(idx.type == DA) ! 142: datum = zero; else ! 143: datum = ' '; ! 144: putdat(sp[-1], datum); ! 145: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.