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