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