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