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