12497Sdlw /* 2*2596Sdlw char id_lwrite[] = "@(#)lwrite.c 1.2"; 32497Sdlw * 42497Sdlw * list directed write 52497Sdlw */ 62497Sdlw 72497Sdlw #include "fio.h" 82497Sdlw #include "lio.h" 92497Sdlw 102497Sdlw int l_write(), t_putc(); 112497Sdlw 122497Sdlw s_wsle(a) cilist *a; 132497Sdlw { 142497Sdlw int n; 152497Sdlw reading = NO; 162497Sdlw if(n=c_le(a,WRITE)) return(n); 172497Sdlw putn = t_putc; 182497Sdlw lioproc = l_write; 192497Sdlw line_len = LINE; 202497Sdlw curunit->uend = NO; 212497Sdlw leof = NO; 222497Sdlw if(!curunit->uwrt) nowwriting(curunit); 232497Sdlw return(OK); 242497Sdlw } 252497Sdlw 262497Sdlw t_putc(c) char c; 272497Sdlw { 282497Sdlw if(c=='\n') recpos=0; 292497Sdlw else recpos++; 302497Sdlw putc(c,cf); 312497Sdlw return(OK); 322497Sdlw } 332497Sdlw 342497Sdlw e_wsle() 352497Sdlw { int n; 362497Sdlw PUT('\n') 372497Sdlw return(OK); 382497Sdlw } 392497Sdlw 402497Sdlw l_write(number,ptr,len,type) ftnint *number,type; flex *ptr; ftnlen len; 412497Sdlw { 422497Sdlw int i,n; 432497Sdlw ftnint x; 442497Sdlw float y,z; 452497Sdlw double yd,zd; 462497Sdlw float *xx; 472497Sdlw double *yy; 482497Sdlw for(i=0;i< *number; i++) 492497Sdlw { 502497Sdlw switch((int)type) 512497Sdlw { 522497Sdlw case TYSHORT: 532497Sdlw x=ptr->flshort; 542497Sdlw goto xint; 552497Sdlw case TYLONG: 562497Sdlw x=ptr->flint; 572497Sdlw xint: ERR(lwrt_I(x)); 582497Sdlw break; 592497Sdlw case TYREAL: 602497Sdlw ERR(lwrt_F(ptr->flreal)); 612497Sdlw break; 622497Sdlw case TYDREAL: 632497Sdlw ERR(lwrt_D(ptr->fldouble)); 642497Sdlw break; 652497Sdlw case TYCOMPLEX: 662497Sdlw xx= &(ptr->flreal); 672497Sdlw y = *xx++; 682497Sdlw z = *xx; 692497Sdlw ERR(lwrt_C(y,z)); 702497Sdlw break; 712497Sdlw case TYDCOMPLEX: 722497Sdlw yy = &(ptr->fldouble); 732497Sdlw yd= *yy++; 742497Sdlw zd = *yy; 752497Sdlw ERR(lwrt_DC(yd,zd)); 762497Sdlw break; 772497Sdlw case TYLOGICAL: 782497Sdlw ERR(lwrt_L(ptr->flint)); 792497Sdlw break; 802497Sdlw case TYCHAR: 812497Sdlw ERR(lwrt_A((char *)ptr,len)); 822497Sdlw break; 832497Sdlw default: 84*2596Sdlw fatal(F_ERSYS,"unknown type in lwrite"); 852497Sdlw } 862497Sdlw ptr = (flex *)((char *)ptr + len); 872497Sdlw } 882497Sdlw return(OK); 892497Sdlw } 902497Sdlw 912497Sdlw lwrt_I(in) ftnint in; 922497Sdlw { int n; 932497Sdlw char buf[16],*p; 942497Sdlw sprintf(buf," %ld",(long)in); 952497Sdlw if(n=chk_len(LINTW)) return(n); 962497Sdlw for(p=buf;*p;) PUT(*p++) 972497Sdlw return(OK); 982497Sdlw } 992497Sdlw 1002497Sdlw lwrt_L(ln) ftnint ln; 1012497Sdlw { int n; 1022497Sdlw if(n=chk_len(LLOGW)) return(n); 1032497Sdlw return(wrt_L(&ln,LLOGW)); 1042497Sdlw } 1052497Sdlw 1062497Sdlw lwrt_A(p,len) char *p; ftnlen len; 1072497Sdlw { int i,n; 1082497Sdlw if(n=chk_len(LSTRW)) return(n); 1092497Sdlw PUT(' ') 1102497Sdlw PUT(' ') 1112497Sdlw for(i=0;i<len;i++) PUT(*p++) 1122497Sdlw return(OK); 1132497Sdlw } 1142497Sdlw 1152497Sdlw lwrt_F(fn) float fn; 1162497Sdlw { int d,n; float x; ufloat f; 1172497Sdlw if(fn==0.0) return(lwrt_0()); 1182497Sdlw f.pf = fn; 1192497Sdlw d = width(fn); 1202497Sdlw if(n=chk_len(d)) return(n); 1212497Sdlw if(d==LFW) 1222497Sdlw { 1232497Sdlw scale = 0; 1242497Sdlw for(d=LFD,x=abs(fn);x>=1.0;x/=10.0,d--); 1252497Sdlw return(wrt_F(&f,LFW,d,(ftnlen)sizeof(float))); 1262497Sdlw } 1272497Sdlw else 1282497Sdlw { 1292497Sdlw scale = 1; 1302497Sdlw return(wrt_E(&f,LEW,LED-scale,LEE,(ftnlen)sizeof(float))); 1312497Sdlw } 1322497Sdlw } 1332497Sdlw 1342497Sdlw lwrt_D(dn) double dn; 1352497Sdlw { int d,n; double x; ufloat f; 1362497Sdlw if(dn==0.0) return(lwrt_0()); 1372497Sdlw f.pd = dn; 1382497Sdlw d = dwidth(dn); 1392497Sdlw if(n=chk_len(d)) return(n); 1402497Sdlw if(d==LDFW) 1412497Sdlw { 1422497Sdlw scale = 0; 1432497Sdlw for(d=LDFD,x=abs(dn);x>=1.0;x/=10.0,d--); 1442497Sdlw return(wrt_F(&f,LDFW,d,(ftnlen)sizeof(double))); 1452497Sdlw } 1462497Sdlw else 1472497Sdlw { 1482497Sdlw scale = 1; 1492497Sdlw return(wrt_E(&f,LDEW,LDED-scale,LDEE,(ftnlen)sizeof(double))); 1502497Sdlw } 1512497Sdlw } 1522497Sdlw 1532497Sdlw lwrt_C(a,b) float a,b; 1542497Sdlw { int n; 1552497Sdlw if(n=chk_len(LCW)) return(n); 1562497Sdlw PUT(' ') 1572497Sdlw PUT(' ') 1582497Sdlw PUT('(') 1592497Sdlw if(n=lwrt_F(a)) return(n); 1602497Sdlw PUT(',') 1612497Sdlw if(n=lwrt_F(b)) return(n); 1622497Sdlw PUT(')') 1632497Sdlw return(OK); 1642497Sdlw } 1652497Sdlw 1662497Sdlw lwrt_DC(a,b) double a,b; 1672497Sdlw { int n; 1682497Sdlw if(n=chk_len(LDCW)) return(n); 1692497Sdlw PUT(' ') 1702497Sdlw PUT(' ') 1712497Sdlw PUT('(') 1722497Sdlw if(n=lwrt_D(a)) return(n); 1732497Sdlw PUT(',') 1742497Sdlw if(n=lwrt_D(b)) return(n); 1752497Sdlw PUT(')') 1762497Sdlw return(OK); 1772497Sdlw } 1782497Sdlw 1792497Sdlw lwrt_0() 1802497Sdlw { int n; char *z = " 0."; 1812497Sdlw if(n=chk_len(4)) return(n); 1822497Sdlw while(*z) PUT(*z++) 1832497Sdlw return(OK); 1842497Sdlw } 1852497Sdlw 1862497Sdlw chk_len(w) 1872497Sdlw { int n; 1882497Sdlw if(recpos+w > line_len) PUT('\n') 1892497Sdlw return(OK); 1902497Sdlw } 191