|
|
1.1 ! root 1: #include "fio.h" ! 2: #include "fmt.h" ! 3: ! 4: wrt_E(p,w,d,e,len) ufloat *p; ftnlen len; ! 5: { char *s; ! 6: int dp,sign,i, delta; ! 7: char *ecvt(); ! 8: double dd; ! 9: if(e == 0) ! 10: e = 2; ! 11: if(scale) { ! 12: if(scale >= d + 2 || scale <= -d) ! 13: goto nogood; ! 14: if(scale > 0) ! 15: d++; ! 16: } ! 17: if (len == sizeof(float)) ! 18: dd = p->pf; ! 19: else ! 20: dd = p->pd; ! 21: s=ecvt( dd ,d,&dp,&sign); ! 22: delta = 1 /* for the . */ + 2 /* for the E+ */ + (sign || cplus); ! 23: if(w < d + e + delta) { ! 24: nogood: ! 25: for(i=0;i<w;i++) (*putn)('*'); ! 26: return(0); ! 27: } ! 28: if(p->pf != 0) dp -= scale; ! 29: else dp = 0; ! 30: switch(e) { /* grumph */ ! 31: case 1: ! 32: if(dp <= -10 || dp >= 10) ! 33: goto nogood; ! 34: break; ! 35: case 2: ! 36: if(dp <= -100 || dp >= 100) ! 37: goto nogood; ! 38: break; ! 39: case 3: ! 40: if(dp <= -1000 || dp >= 1000) ! 41: goto nogood; ! 42: break; ! 43: default: ! 44: /* probably ok */ ! 45: break; ! 46: } ! 47: for(i=0;i<w-(delta+d+e);i++) (*putn)(' '); ! 48: if(sign) (*putn)('-'); ! 49: else if(cplus) (*putn)('+'); ! 50: if(scale<0) ! 51: { ! 52: (*putn)('.'); ! 53: for(i=0;i<-scale;i++) ! 54: (*putn)('0'); ! 55: for(i=0;i<d+scale;i++) ! 56: (*putn)(*s++); ! 57: } ! 58: else if(scale>0 && scale<d+2) ! 59: { for(i=0;i<scale;i++) ! 60: (*putn)(*s++); ! 61: (*putn)('.'); ! 62: for(i=0;i<d-scale;i++) ! 63: (*putn)(*s++); ! 64: } ! 65: else ! 66: { (*putn)('.'); ! 67: for(i=0;i<d;i++) (*putn)(*s++); ! 68: } ! 69: if(dp < 100 && dp > -100) (*putn)('e'); ! 70: if(dp<0) ! 71: { (*putn)('-'); ! 72: dp = -dp; ! 73: } ! 74: else (*putn)('+'); ! 75: for(; e >= 4; e--) ! 76: (*putn)('0'); ! 77: if(e>=3 || dp >= 100) ! 78: { (*putn)(dp/100 + '0'); ! 79: dp = dp % 100; ! 80: } ! 81: if(e!=1) (*putn)(dp/10+'0'); ! 82: (*putn)(dp%10+'0'); ! 83: return(0); ! 84: } ! 85: ! 86: wrt_F(p,w,d,len) ufloat *p; ftnlen len; ! 87: { int i,delta,dp,sign,n; ! 88: double x; ! 89: char *s,*fcvt(); ! 90: x= (len==sizeof(float)?p->pf:p->pd); ! 91: if(scale) ! 92: { if(scale>0) ! 93: for(i=0;i<scale;i++) x*=10; ! 94: else for(i=0;i<-scale;i++) x/=10; ! 95: } ! 96: s=fcvt(x,d,&dp,&sign); ! 97: if(-dp>=d) sign=0; ! 98: if(sign || cplus) delta=2; ! 99: else delta=1; ! 100: n= w - (d+delta+(dp>0?dp:0)); ! 101: if(n<0) ! 102: { ! 103: for(i=0;i<w;i++) PUT('*'); ! 104: return(0); ! 105: } ! 106: for(i=0;i<n;i++) PUT(' '); ! 107: if(sign) PUT('-'); ! 108: else if(cplus) PUT('+'); ! 109: for(i=0;i<dp;i++) PUT(*s++); ! 110: PUT('.'); ! 111: for(i=0;i< -dp && i<d;i++) PUT('0'); ! 112: for(;i<d;i++) ! 113: { if(*s) PUT(*s++); ! 114: else PUT('0'); ! 115: } ! 116: return(0); ! 117: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.