5 extern char *icvt(), *ecvt();
9 mv_cur() /* shouldn't use fseek because it insists on calling fflush */
10 /* instead we know too much about stdio */
20 err(elist->cierr, 110, "left off");
23 if(recpos + cursor >= svic->icirlen)
24 err(elist->cierr, 110, "recend");
26 for(; cursor > 0; cursor--)
28 else if(hiwater <= recpos + cursor) {
29 cursor -= hiwater - recpos;
30 icptr += hiwater - recpos;
32 for(; cursor > 0; cursor--)
45 for(;cursor>0;cursor--) (*putn)(' ');
46 else if(hiwater <= recpos + cursor) {
47 #ifndef NON_UNIX_STDIO
48 if(cf->_ptr + hiwater - recpos < buf_end(cf))
49 cf->_ptr += hiwater - recpos;
52 (void) fseek(cf, (long) (hiwater - recpos), SEEK_CUR);
53 cursor -= hiwater - recpos;
55 for(; cursor > 0; cursor--)
59 #ifndef NON_UNIX_STDIO
60 if(cf->_ptr + cursor < buf_end(cf))
64 (void) fseek(cf, (long)cursor, SEEK_CUR);
70 if(cursor+recpos<0) err(elist->cierr,110,"left off");
71 #ifndef NON_UNIX_STDIO
72 if(cf->_ptr + cursor >= cf->_base)
76 if(curunit && curunit->useek)
77 (void) fseek(cf,(long)cursor,SEEK_CUR);
79 err(elist->cierr,106,"fmt");
87 w_ed(p,ptr,len) char *ptr; struct syl *p; ftnlen len;
89 if(cursor && mv_cur()) return(mv_cur());
93 fprintf(stderr,"w_ed, unexpected code: %d\n", p->op);
95 case I: return(wrt_I((uint *)ptr,p->p1,len, 10));
97 return(wrt_IM((uint *)ptr,p->p1,p->p2,len));
98 case O: return(wrt_I((uint *)ptr, p->p1, len, 8));
99 case L: return(wrt_L((uint *)ptr,p->p1, len));
100 case A: return(wrt_A(ptr,len));
102 return(wrt_AW(ptr,p->p1,len));
106 return(wrt_E((ufloat *)ptr,p->p1,p->p2,p->p3,len));
109 return(wrt_G((ufloat *)ptr,p->p1,p->p2,p->p3,len));
110 case F: return(wrt_F((ufloat *)ptr,p->p1,p->p2,len));
113 w_ned(p) struct syl *p;
117 default: fprintf(stderr,"w_ned, unexpected code: %d\n", p->op);
120 return((*donewrec)());
121 case T: cursor = p->p1-recpos - 1;
123 case TL: cursor -= p->p1;
124 if(cursor < -recpos) /* TL1000, 1X */
132 return(wrt_AP(*(char **)&p->p2));
134 return(wrt_H(p->p1,*(char **)&p->p2));
137 wrt_I(n,w,len, base) uint *n; ftnlen len; register int base;
138 { int ndigit,sign,spare,i;
141 if(len==sizeof(integer)) x=n->il;
142 else if(len == sizeof(char)) x = n->ic;
144 ans=icvt(x,&ndigit,&sign, base);
146 if(sign || cplus) spare--;
148 for(i=0;i<w;i++) (*putn)('*');
150 { for(i=0;i<spare;i++) (*putn)(' ');
151 if(sign) (*putn)('-');
152 else if(cplus) (*putn)('+');
153 for(i=0;i<ndigit;i++) (*putn)(*ans++);
157 wrt_IM(n,w,m,len) uint *n; ftnlen len;
158 { int ndigit,sign,spare,i,xsign;
161 if(sizeof(integer)==len) x=n->il;
162 else if(len == sizeof(char)) x = n->ic;
164 ans=icvt(x,&ndigit,&sign, 10);
165 if(sign || cplus) xsign=1;
167 if(ndigit+xsign>w || m+xsign>w)
168 { for(i=0;i<w;i++) (*putn)('*');
172 { for(i=0;i<w;i++) (*putn)(' ');
176 spare=w-ndigit-xsign;
179 for(i=0;i<spare;i++) (*putn)(' ');
180 if(sign) (*putn)('-');
181 else if(cplus) (*putn)('+');
182 for(i=0;i<m-ndigit;i++) (*putn)('0');
183 for(i=0;i<ndigit;i++) (*putn)(*ans++);
189 if(cursor && mv_cur()) return(mv_cur());
192 { if(*s!=quote) (*putn)(*s);
193 else if(*++s==quote) (*putn)(*s);
201 if(cursor && mv_cur()) return(mv_cur());
202 while(a--) (*putn)(*s++);
205 wrt_L(n,len, sz) uint *n; ftnlen sz;
208 if(sizeof(integer)==sz) x=n->il;
209 else if(sz == sizeof(char)) x = n->ic;
217 wrt_A(p,len) char *p; ftnlen len;
219 while(len-- > 0) (*putn)(*p++);
222 wrt_AW(p,w,len) char * p; ftnlen len;
233 wrt_G(p,w,d,e,len) ufloat *p; ftnlen len;
235 int i,oldscale=scale,n,j;
236 x= len==sizeof(real)?p->pf:p->pd;
238 if(x<.1) return(wrt_E(p,w,d,e,len));
239 for(i=0;i<=d;i++,up*=10)
240 { if(x>=up) continue;
244 i=wrt_F(p,w-n,d-i,len);
245 for(j=0;j<n;j++) (*putn)(' ');
249 return(wrt_E(p,w,d,e,len));