|
|
1.1 ! root 1: #include "apl.h" ! 2: ! 3: ex_print() ! 4: { ! 5: ! 6: epr0(); ! 7: aputchar('\n'); ! 8: } ! 9: ! 10: ex_hprint() ! 11: { ! 12: ! 13: epr0(); ! 14: pop(); ! 15: } ! 16: ! 17: epr0() ! 18: { ! 19: register struct item *p; ! 20: register data *dp; ! 21: data dp2; ! 22: short int dp7; ! 23: register i; ! 24: int j; ! 25: int param[4]; ! 26: ! 27: p = fetch1(); ! 28: if(p->size == 0) ! 29: return; ! 30: if(p->type == DA) { ! 31: for(i=0; i<4; i++) ! 32: param[i] = 0; ! 33: dp = p->datap; ! 34: dp2 = *(dp); ! 35: for(i=0; i<p->size; i++) ! 36: epr1(*dp++, param); ! 37: i = param[1] + param[2]; /* size if fp */ ! 38: if(i > thread.digits) ! 39: i += 100; ! 40: if(param[2]) ! 41: i++; ! 42: if(i > param[0]+5) { ! 43: i = param[0] + 5; /* size if ep */ ! 44: param[1] = param[0]; ! 45: param[2] = -1; ! 46: } ! 47: if(param[3]) ! 48: i++; /* sign */ ! 49: i++; /* leading space */ ! 50: param[0] = i; ! 51: dp = p->datap; ! 52: } ! 53: bidx(p); ! 54: for(i=1; i<p->size; i++) { ! 55: if(intflg) ! 56: break; ! 57: if(p->type == CH) { ! 58: j = getdat(p); ! 59: aputchar(j); ! 60: } else ! 61: epr2(*dp++, param); ! 62: for(j=p->rank-2; j>=0; j--) ! 63: if(i%idx.del[j] == 0) ! 64: aputchar('\n'); ! 65: } ! 66: if(p->type == CH) { ! 67: j = getdat(p); ! 68: aputchar(j); ! 69: } else ! 70: epr2(*dp, param); ! 71: } ! 72: ! 73: epr1(d, param) ! 74: data d; ! 75: int *param; ! 76: { ! 77: double f; ! 78: register a; ! 79: register char *c; ! 80: int dp, sg; ! 81: ! 82: f = d; ! 83: c = ecvt(f, thread.digits, &dp, &sg); ! 84: a = thread.digits; ! 85: while(c[a-1]=='0' && a>1) ! 86: a--; ! 87: if(a > param[0]) /* sig digits */ ! 88: param[0] = a; ! 89: a -= dp; ! 90: if(a < 0) ! 91: a = 0; ! 92: if(a > param[2]) /* digits to right of dp */ ! 93: param[2] = a; ! 94: if(dp > param[1]) /* digits to left of dp */ ! 95: param[1] = dp; ! 96: param[3] |= sg; /* and sign */ ! 97: } ! 98: ! 99: epr2(d, param) ! 100: int *param; ! 101: data d; ! 102: { ! 103: register i; ! 104: register char *c, *mc; ! 105: double f; ! 106: int dp, sg; ! 107: ! 108: if(param[0]+column > thread.width) { ! 109: aputchar('\n'); ! 110: putto(param[0]); ! 111: } ! 112: f = d; ! 113: c = ecvt(f, thread.digits, &dp, &sg); ! 114: mc = c + thread.digits; ! 115: aputchar(' '); ! 116: sg = sg? '@': ' '; ! 117: if(param[2] < 0) { ! 118: if(param[3]) ! 119: aputchar(sg); ! 120: for(i=0; i<param[1]; i++) { ! 121: aputchar(*c++); ! 122: if(i == 0) ! 123: aputchar('.'); ! 124: } ! 125: aputchar('e'); ! 126: dp--; ! 127: if(dp < 0) { ! 128: aputchar('@'); ! 129: dp = -dp; ! 130: } else ! 131: aputchar('-'); /* an apl style plus sign */ ! 132: aputchar(dp/10 + '0'); ! 133: aputchar(dp%10 + '0'); ! 134: return; ! 135: } ! 136: i = dp; ! 137: if(i < 0) ! 138: i = 0; ! 139: for(; i<param[1]; i++) ! 140: aputchar(' '); ! 141: if(param[3]) ! 142: aputchar(sg); ! 143: for(i=0; i<dp; i++) ! 144: if(c >= mc) ! 145: aputchar('0'); else ! 146: aputchar(*c++); ! 147: for(i=0; i<param[2]; i++) { ! 148: if(i == 0) ! 149: aputchar('.'); ! 150: if(dp < 0) { ! 151: aputchar('0'); ! 152: dp++; ! 153: } else ! 154: if(c >= mc) ! 155: aputchar('0'); else ! 156: aputchar(*c++); ! 157: } ! 158: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.