From: David Wasley Date: Wed, 20 Feb 1980 10:46:56 +0000 (-0800) Subject: BSD 3 development X-Git-Tag: BSD-3~11 X-Git-Url: https://git.subgeniuskitty.com/unix-history/.git/commitdiff_plain/a5fe422ede69695cb57da515ad5d270ee4a5f519 BSD 3 development Work on file usr/src/new/libI77uc/wrtfmt.c Synthesized-from: 3bsd --- diff --git a/usr/src/new/libI77uc/wrtfmt.c b/usr/src/new/libI77uc/wrtfmt.c new file mode 100644 index 0000000000..85b601315f --- /dev/null +++ b/usr/src/new/libI77uc/wrtfmt.c @@ -0,0 +1,272 @@ +/* + * formatted write routines + */ + +#include "fio.h" +#include "fmt.h" + +extern char *icvt(); + +#define abs(x) (x<0?-x:x) + +w_ed(p,ptr,len) char *ptr; struct syl *p; ftnlen len; +{ int n; + if(cursor && (n=wr_mvcur())) return(n); + switch(p->op) + { + case I: + case IM: + return(wrt_IM(ptr,p->p1,p->p2,len)); + case L: + return(wrt_L(ptr,p->p1)); + case A: + p->p1 = len; /* cheap trick */ + case AW: + return(wrt_AW(ptr,p->p1,len)); + case D: + case DE: + case E: + case EE: + return(wrt_E(ptr,p->p1,p->p2,p->p3,len)); + case G: + case GE: + return(wrt_G(ptr,p->p1,p->p2,p->p3,len)); + case F: + return(wrt_F(ptr,p->p1,p->p2,len)); + default: + return(errno=100); + } +} + +w_ned(p,ptr) char *ptr; struct syl *p; +{ + switch(p->op) + { + case SLASH: + return((*donewrec)()); + case T: + if(p->p1) cursor = p->p1 - recpos - 1; +#ifndef KOSHER + else cursor = 8*p->p2 - recpos%8; /* NOT STANDARD FORT */ +#endif + tab = YES; + return(OK); + case TL: + cursor -= p->p1; + tab = YES; + return(OK); + case TR: + case X: + cursor += p->p1; + tab = (p->op == TR); + return(OK); + case APOS: + return(wrt_AP(p->p1)); + case H: + return(wrt_H(p->p1,p->p2)); + default: + return(errno=100); + } +} + +wr_mvcur() +{ int n; + if(tab) return((*dotab)()); + while(cursor--) PUT(' ') + return(cursor=0); +} + +wrt_IM(ui,w,m,len) uint *ui; ftnlen len; +{ int ndigit,sign,spare,i,xsign,n; + long x; + char *ans; + if(sizeof(short)==len) x=ui->is; +/* else if(len == sizeof(char)) x = ui->ic; */ + else x=ui->il; + if(x==0 && m==0) + { for(i=0;iw || m+xsign>w) + { for(i=0;i=m) + spare=w-ndigit-xsign; + else + spare=w-m-xsign; + for(i=0;ilen) + { w--; + PUT(' ') + } + while(w-- > 0) + PUT(*p++) + return(OK); +} + +wrt_E(p,w,d,e,len) ufloat *p; ftnlen len; +{ char *s,ex[4],expch; + int dd,dp,sign,i,delta,pad,n; + char *ecvt(); + expch=(len==sizeof(float)?'e':'d'); + if((len==sizeof(float)?p->pf:p->pd)==0.0) + { + wrt_F(p,w-(e+2),d,len); + PUT(expch) + PUT('+') +/* for(i=0;i<(e-1);i++)PUT(' ') +deleted PUT('0') + */ +/* added */ for(i=0;ipf:p->pd) ,dd,&dp,&sign); + delta = 3+e; + if(sign||cplus) delta++; + pad=w-(delta+d); + if(pad<0) + { for(i=0;i -d) + { + PUT('.') + for(i=0;i<-scale;i++) + PUT('0') + for(i=0;i0) + { for(i=0;ie) + { if(pad>(++e)) + { PUT(expch) + for(i=0;ipf:p->pd); + i=d; + if(x==0.0) goto zero; + x = abs(x); + if(x>=0.1) + { + for(i=0; i<=d; i++, uplim*=10.0) + { if(x>uplim) continue; +zero: oldscale=scale; + scale=0; + ne = e+2; + if(n = wrt_F(p,w-ne,d-i,len)) return(n); + for(j=0; jpf:p->pd); + if(scale && x!=0.0) + { if(scale>0) + for(i=0;i=d) sign=0; ?? */ + delta=1; + if(sign || cplus) delta++; + nf = w - (d + delta + (dp>0?dp:0)); + if(nf<0) + { + for(i=0;i0) for(i=0; i<(nf-(dp<=0?1:0)); i++) PUT(' ') + if(sign) PUT('-') + else if(cplus) PUT('+') + if(dp>0) for(i=0;i0) PUT('0') + PUT('.') + for(i=0; i< -dp && i