1: #include "fio.h"
   2: #include "fmt.h"
   3: extern int cursor;
   4: mv_cur()
   5: {   /*buggy, could move off front of record*/
   6:     for(;cursor>0;cursor--) (*putn)(' ');
   7:     if(cursor<0)
   8:     {
   9:         if(cursor+recpos<0) err(elist->cierr,110,"left off");
  10:         if(curunit->useek) fseek(cf,(long)cursor,1);
  11:         else err(elist->cierr,106,"fmt");
  12:         cursor=0;
  13:     }
  14:     return(0);
  15: }
  16: w_ed(p,ptr,len) char *ptr; struct syl *p; ftnlen len;
  17: {
  18:     if(mv_cur()) return(mv_cur());
  19:     switch(p->op)
  20:     {
  21:     default:
  22:         fprintf(stderr,"w_ed, unexpected code: %d\n%s\n",
  23:             p->op,fmtbuf);
  24:         abort();
  25:     case I: return(wrt_I(ptr,p->p1,len, 10));
  26:     case IM:
  27:         return(wrt_IM(ptr,p->p1,p->p2,len));
  28:     case O: return(wrt_I(ptr, p->p1, len, 8));
  29:     case L: return(wrt_L(ptr,p->p1));
  30:     case A: return(wrt_A(ptr,len));
  31:     case AW:
  32:         return(wrt_AW(ptr,p->p1,len));
  33:     case D:
  34:     case E:
  35:     case EE:
  36:         return(wrt_E(ptr,p->p1,p->p2,p->p3,len));
  37:     case G:
  38:     case GE:
  39:         return(wrt_G(ptr,p->p1,p->p2,p->p3,len));
  40:     case F: return(wrt_F(ptr,p->p1,p->p2,len));
  41:     }
  42: }
  43: w_ned(p,ptr) char *ptr; struct syl *p;
  44: {
  45:     switch(p->op)
  46:     {
  47:     default: fprintf(stderr,"w_ned, unexpected code: %d\n%s\n",
  48:             p->op,fmtbuf);
  49:         abort();
  50:     case SLASH:
  51:         return((*donewrec)());
  52:     case T: cursor = p->p1-recpos;
  53:         return(1);
  54:     case TL: cursor -= p->p1;
  55:         return(1);
  56:     case TR:
  57:     case X:
  58:         cursor += p->p1;
  59:         return(1);
  60:     case APOS:
  61:         return(wrt_AP(p->p1));
  62:     case H:
  63:         return(wrt_H(p->p1,p->p2));
  64:     }
  65: }
  66: wrt_I(n,w,len, base) uint *n; ftnlen len; register int base;
  67: {   int ndigit,sign,spare,i;
  68:     long x;
  69:     char *ans;
  70:     if(len==sizeof(short)) x=n->is;
  71:     else if(len == sizeof(char)) x = n->ic;
  72:     else x=n->il;
  73:     ans=icvt(x,&ndigit,&sign, base);
  74:     spare=w-ndigit;
  75:     if(sign || cplus) spare--;
  76:     if(spare<0)
  77:         for(i=0;i<len;i++) (*putn)('*');
  78:     else
  79:     {   for(i=0;i<spare;i++) (*putn)(' ');
  80:         if(sign) (*putn)('-');
  81:         else if(cplus) (*putn)('+');
  82:         for(i=0;i<ndigit;i++) (*putn)(*ans++);
  83:     }
  84:     return(0);
  85: }
  86: wrt_IM(n,w,m,len) uint *n; ftnlen len;
  87: {   int ndigit,sign,spare,i,xsign;
  88:     long x;
  89:     char *ans;
  90:     if(sizeof(short)==len) x=n->is;
  91:     else if(len == sizeof(char)) x = n->ic;
  92:     else x=n->il;
  93:     ans=icvt(x,&ndigit,&sign);
  94:     if(sign || cplus) xsign=1;
  95:     else xsign=0;
  96:     if(ndigit+xsign>w || m+xsign>w)
  97:     {   for(i=0;i<w;i++) (*putn)('*');
  98:         return(0);
  99:     }
 100:     if(x==0 && m==0)
 101:     {   for(i=0;i<w;i++) (*putn)(' ');
 102:         return(0);
 103:     }
 104:     if(ndigit>=m)
 105:         spare=w-ndigit-xsign;
 106:     else
 107:         spare=w-m-xsign;
 108:     for(i=0;i<spare;i++) (*putn)(' ');
 109:     if(sign) (*putn)('-');
 110:     else if(cplus) (*putn)('+');
 111:     for(i=0;i<m-ndigit;i++) (*putn)('0');
 112:     for(i=0;i<ndigit;i++) (*putn)(*ans++);
 113:     return(0);
 114: }
 115: wrt_AP(n)
 116: {   char *s,quote;
 117:     if(mv_cur()) return(mv_cur());
 118:     s=(char *)n;
 119:     quote = *s++;
 120:     for(;*s;s++)
 121:     {   if(*s!=quote) (*putn)(*s);
 122:         else if(*++s==quote) (*putn)(*s);
 123:         else return(1);
 124:     }
 125:     return(1);
 126: }
 127: wrt_H(a,b)
 128: {   char *s=(char *)b;
 129:     if(mv_cur()) return(mv_cur());
 130:     while(a--) (*putn)(*s++);
 131:     return(1);
 132: }
 133: wrt_L(n,len) ftnint *n;
 134: {   int i;
 135:     for(i=0;i<len-1;i++)
 136:         (*putn)(' ');
 137:     if(*n) (*putn)('t');
 138:     else (*putn)('f');
 139:     return(0);
 140: }
 141: wrt_A(p,len) char *p; ftnlen len;
 142: {
 143:     while(len-- > 0) (*putn)(*p++);
 144:     return(0);
 145: }
 146: wrt_AW(p,w,len) char * p; ftnlen len;
 147: {
 148:     while(w>len)
 149:     {   w--;
 150:         (*putn)(' ');
 151:     }
 152:     while(w-- > 0)
 153:         (*putn)(*p++);
 154:     return(0);
 155: }
 156: wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
 157: {   char *s;
 158:     int dp,sign,i,delta;
 159:     char *ecvt();
 160:     if(scale>0) d++;
 161:     s=ecvt( (len==sizeof(float)?p->pf:p->pd) ,d,&dp,&sign);
 162:     if(sign || cplus) delta=6;
 163:     else delta=5;
 164:     if(w<delta+d)
 165:     {   for(i=0;i<w;i++) (*putn)('*');
 166:         return(0);
 167:     }
 168:     for(i=0;i<w-(delta+d);i++) (*putn)(' ');
 169:     if(sign) (*putn)('-');
 170:     else if(cplus) (*putn)('+');
 171:     if(scale<0 && scale > -d)
 172:     {
 173:         (*putn)('.');
 174:         for(i=0;i<-scale;i++)
 175:             (*putn)('0');
 176:         for(i=0;i<d+scale;i++)
 177:             (*putn)(*s++);
 178:     }
 179:     else if(scale>0 && scale<d+2)
 180:     {   for(i=0;i<scale;i++)
 181:             (*putn)(*s++);
 182:         (*putn)('.');
 183:         for(i=0;i<d-scale;i++)
 184:             (*putn)(*s++);
 185:     }
 186:     else
 187:     {   (*putn)('.');
 188:         for(i=0;i<d;i++) (*putn)(*s++);
 189:     }
 190:     if(p->pf != 0) dp -= scale;
 191:     else    dp = 0;
 192:     if(dp < 100 && dp > -100) (*putn)('e');
 193:     if(dp<0)
 194:     {   (*putn)('-');
 195:         dp = -dp;
 196:     }
 197:     else    (*putn)('+');
 198:     if(e>=3 || dp >= 100)
 199:     {   (*putn)(dp/100 + '0');
 200:         dp = dp % 100;
 201:     }
 202:     if(e!=1) (*putn)(dp/10+'0');
 203:     (*putn)(dp%10+'0');
 204:     return(0);
 205: }
 206: wrt_G(p,w,d,e,len) ufloat *p; ftnlen len;
 207: {   double up = 1,x;
 208:     int i,oldscale=scale,n,j;
 209:     x= len==sizeof(float)?p->pf:p->pd;
 210:     if(x < 0 ) x = -x;
 211:     if(x<.1) return(wrt_E(p,w,d,e,len));
 212:     for(i=0;i<=d;i++,up*=10)
 213:     {   if(x>up) continue;
 214:         scale=0;
 215:         if(e==0) n=4;
 216:         else    n=e+2;
 217:         i=wrt_F(p,w-n,d-i,len);
 218:         for(j=0;j<n;j++) (*putn)(' ');
 219:         scale=oldscale;
 220:         return(i);
 221:     }
 222:     return(wrt_E(p,w,d,e,len));
 223: }
 224: wrt_F(p,w,d,len) ufloat *p; ftnlen len;
 225: {   int i,delta,dp,sign,n;
 226:     double x;
 227:     char *s,*fcvt();
 228:     x= (len==sizeof(float)?p->pf:p->pd);
 229:     if(scale)
 230:     {   if(scale>0)
 231:             for(i=0;i<scale;i++) x*=10;
 232:         else    for(i=0;i<-scale;i++) x/=10;
 233:     }
 234:     s=fcvt(x,d,&dp,&sign);
 235:     if(-dp>=d) sign=0;
 236:     if(sign || cplus) delta=2;
 237:     else delta=1;
 238:     n= w - (d+delta+(dp>0?dp:0));
 239:     if(n<0)
 240:     {
 241:         for(i=0;i<w;i++) PUT('*');
 242:         return(0);
 243:     }
 244:     for(i=0;i<n;i++) PUT(' ');
 245:     if(sign) PUT('-');
 246:     else if(cplus) PUT('+');
 247:     for(i=0;i<dp;i++) PUT(*s++);
 248:     PUT('.');
 249:     for(i=0;i< -dp && i<d;i++) PUT('0');
 250:     for(;i<d;i++)
 251:     {   if(*s) PUT(*s++);
 252:         else PUT('0');
 253:     }
 254:     return(0);
 255: }

Defined functions

mv_cur defined in line 4; used 6 times
w_ed defined in line 16; used 6 times
w_ned defined in line 43; used 6 times
wrt_A defined in line 141; used 1 times
  • in line 30
wrt_AP defined in line 115; used 1 times
  • in line 61
wrt_AW defined in line 146; used 1 times
  • in line 32
wrt_E defined in line 156; used 4 times
wrt_F defined in line 224; used 3 times
wrt_G defined in line 206; used 1 times
  • in line 39
wrt_H defined in line 127; used 1 times
  • in line 63
wrt_I defined in line 66; used 2 times
wrt_IM defined in line 86; used 1 times
  • in line 27
wrt_L defined in line 133; used 2 times
Last modified: 1979-05-03
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 828
Valid CSS Valid XHTML 1.0 Strict