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: }

Defined functions

chk_len defined in line 187; used 8 times
e_wsle defined in line 35; never used
l_write defined in line 41; used 4 times
lwrt_0 defined in line 180; used 2 times
lwrt_A defined in line 107; used 1 times
  • in line 82
lwrt_C defined in line 154; used 1 times
  • in line 70
lwrt_D defined in line 135; used 3 times
lwrt_DC defined in line 167; used 1 times
  • in line 76
lwrt_F defined in line 116; used 3 times
lwrt_I defined in line 92; used 1 times
  • in line 58
lwrt_L defined in line 101; used 1 times
  • in line 79
s_wsle defined in line 13; never used
t_putc defined in line 27; used 2 times

Defined variables

lwrt defined in line 11; used 1 times
  • in line 23
Last modified: 1983-05-20
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 867
Valid CSS Valid XHTML 1.0 Strict