|
|
1.1 ! root 1: /* ! 2: * list directed write ! 3: */ ! 4: ! 5: #include "fio.h" ! 6: #include "lio.h" ! 7: ! 8: int l_write(), t_putc(); ! 9: ! 10: s_wsle(a) cilist *a; ! 11: { ! 12: int n; ! 13: reading = NO; ! 14: if(n=c_le(a,WRITE)) return(n); ! 15: putn = t_putc; ! 16: lioproc = l_write; ! 17: line_len = LINE; ! 18: curunit->uend = NO; ! 19: leof = NO; ! 20: if(!curunit->uwrt) nowwriting(curunit); ! 21: return(OK); ! 22: } ! 23: ! 24: t_putc(c) char c; ! 25: { ! 26: if(c=='\n') recpos=0; ! 27: else recpos++; ! 28: putc(c,cf); ! 29: return(OK); ! 30: } ! 31: ! 32: e_wsle() ! 33: { int n; ! 34: PUT('\n') ! 35: return(OK); ! 36: } ! 37: ! 38: l_write(number,ptr,len,type) ftnint *number,type; flex *ptr; ftnlen len; ! 39: { ! 40: int i,n; ! 41: ftnint x; ! 42: float y,z; ! 43: double yd,zd; ! 44: float *xx; ! 45: double *yy; ! 46: for(i=0;i< *number; i++) ! 47: { ! 48: switch((int)type) ! 49: { ! 50: case TYSHORT: ! 51: x=ptr->flshort; ! 52: goto xint; ! 53: case TYLONG: ! 54: x=ptr->flint; ! 55: xint: ERR(lwrt_I(x)); ! 56: break; ! 57: case TYREAL: ! 58: ERR(lwrt_F(ptr->flreal)); ! 59: break; ! 60: case TYDREAL: ! 61: ERR(lwrt_D(ptr->fldouble)); ! 62: break; ! 63: case TYCOMPLEX: ! 64: xx= &(ptr->flreal); ! 65: y = *xx++; ! 66: z = *xx; ! 67: ERR(lwrt_C(y,z)); ! 68: break; ! 69: case TYDCOMPLEX: ! 70: yy = &(ptr->fldouble); ! 71: yd= *yy++; ! 72: zd = *yy; ! 73: ERR(lwrt_DC(yd,zd)); ! 74: break; ! 75: case TYLOGICAL: ! 76: ERR(lwrt_L(ptr->flint)); ! 77: break; ! 78: case TYCHAR: ! 79: ERR(lwrt_A((char *)ptr,len)); ! 80: break; ! 81: default: ! 82: fatal(119,"unknown type in lwrite"); ! 83: } ! 84: ptr = (char *)ptr + len; ! 85: } ! 86: return(OK); ! 87: } ! 88: ! 89: lwrt_I(in) ftnint in; ! 90: { int n; ! 91: char buf[16],*p; ! 92: sprintf(buf," %ld",(long)in); ! 93: if(n=chk_len(LINTW)) return(n); ! 94: for(p=buf;*p;) PUT(*p++) ! 95: return(OK); ! 96: } ! 97: ! 98: lwrt_L(ln) ftnint ln; ! 99: { int n; ! 100: if(n=chk_len(LLOGW)) return(n); ! 101: return(wrt_L(&ln,LLOGW)); ! 102: } ! 103: ! 104: lwrt_A(p,len) char *p; ftnlen len; ! 105: { int i,n; ! 106: if(n=chk_len(LSTRW)) return(n); ! 107: PUT(' ') ! 108: PUT(' ') ! 109: for(i=0;i<len;i++) PUT(*p++) ! 110: return(OK); ! 111: } ! 112: ! 113: lwrt_F(fn) float fn; ! 114: { int d,n; float x; ufloat f; ! 115: if(fn==0.0) return(lwrt_0()); ! 116: f.pf = fn; ! 117: d = width(fn); ! 118: if(n=chk_len(d)) return(n); ! 119: if(d==LFW) ! 120: { ! 121: scale = 0; ! 122: for(d=LFD,x=abs(fn);x>=1.0;x/=10.0,d--); ! 123: return(wrt_F(&f,LFW,d,(ftnlen)sizeof(float))); ! 124: } ! 125: else ! 126: { ! 127: scale = 1; ! 128: return(wrt_E(&f,LEW,LED-scale,LEE,(ftnlen)sizeof(float))); ! 129: } ! 130: } ! 131: ! 132: lwrt_D(dn) double dn; ! 133: { int d,n; double x; ufloat f; ! 134: if(dn==0.0) return(lwrt_0()); ! 135: f.pd = dn; ! 136: d = dwidth(dn); ! 137: if(n=chk_len(d)) return(n); ! 138: if(d==LDFW) ! 139: { ! 140: scale = 0; ! 141: for(d=LDFD,x=abs(dn);x>=1.0;x/=10.0,d--); ! 142: return(wrt_F(&f,LDFW,d,(ftnlen)sizeof(double))); ! 143: } ! 144: else ! 145: { ! 146: scale = 1; ! 147: return(wrt_E(&f,LDEW,LDED-scale,LDEE,(ftnlen)sizeof(double))); ! 148: } ! 149: } ! 150: ! 151: lwrt_C(a,b) float a,b; ! 152: { int n; ! 153: if(n=chk_len(LCW)) return(n); ! 154: PUT(' ') ! 155: PUT(' ') ! 156: PUT('(') ! 157: if(n=lwrt_F(a)) return(n); ! 158: PUT(',') ! 159: if(n=lwrt_F(b)) return(n); ! 160: PUT(')') ! 161: return(OK); ! 162: } ! 163: ! 164: lwrt_DC(a,b) double a,b; ! 165: { int n; ! 166: if(n=chk_len(LDCW)) return(n); ! 167: PUT(' ') ! 168: PUT(' ') ! 169: PUT('(') ! 170: if(n=lwrt_D(a)) return(n); ! 171: PUT(',') ! 172: if(n=lwrt_D(b)) return(n); ! 173: PUT(')') ! 174: return(OK); ! 175: } ! 176: ! 177: lwrt_0() ! 178: { int n; char *z = " 0."; ! 179: if(n=chk_len(4)) return(n); ! 180: while(*z) PUT(*z++) ! 181: return(OK); ! 182: } ! 183: ! 184: chk_len(w) ! 185: { int n; ! 186: if(recpos+w > line_len) PUT('\n') ! 187: return(OK); ! 188: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.