Annotation of researchv10dc/libI77/old/wref0.c, revision 1.1.1.1

1.1       root        1: #include "fio.h"
                      2: #include "fmt.h"
                      3: 
                      4: wrt_E(p,w,d,e,len) ufloat *p; ftnlen len;
                      5: {      char *s;
                      6:        int dp,sign,i, delta;
                      7:        char *ecvt();
                      8:        double dd;
                      9:        if(e == 0)
                     10:                e = 2;
                     11:        if(scale) {
                     12:                if(scale >= d + 2 || scale <= -d)
                     13:                        goto nogood;
                     14:                if(scale > 0)
                     15:                        d++;
                     16:        }
                     17:        if (len == sizeof(float))
                     18:                dd = p->pf;
                     19:        else
                     20:                dd = p->pd;
                     21:        s=ecvt( dd ,d,&dp,&sign);
                     22:        delta = 1 /* for the . */ + 2 /* for the E+ */ + (sign || cplus);
                     23:        if(w < d + e + delta) {
                     24: nogood:
                     25:                for(i=0;i<w;i++) (*putn)('*');
                     26:                return(0);
                     27:        }
                     28:        if(p->pf != 0) dp -= scale;
                     29:        else    dp = 0;
                     30:        switch(e) {     /* grumph */
                     31:        case 1:
                     32:                if(dp <= -10 || dp >= 10)
                     33:                        goto nogood;
                     34:                break;
                     35:        case 2:
                     36:                if(dp <= -100 || dp >= 100)
                     37:                        goto nogood;
                     38:                break;
                     39:        case 3:
                     40:                if(dp <= -1000 || dp >= 1000)
                     41:                        goto nogood;
                     42:                break;
                     43:        default:
                     44:                /* probably ok */
                     45:                break;
                     46:        }
                     47:        for(i=0;i<w-(delta+d+e);i++) (*putn)(' ');
                     48:        if(sign) (*putn)('-');
                     49:        else if(cplus) (*putn)('+');
                     50:        if(scale<0)
                     51:        {
                     52:                (*putn)('.');
                     53:                for(i=0;i<-scale;i++)
                     54:                        (*putn)('0');
                     55:                for(i=0;i<d+scale;i++)
                     56:                        (*putn)(*s++);
                     57:        }
                     58:        else if(scale>0 && scale<d+2)
                     59:        {       for(i=0;i<scale;i++)
                     60:                        (*putn)(*s++);
                     61:                (*putn)('.');
                     62:                for(i=0;i<d-scale;i++)
                     63:                        (*putn)(*s++);
                     64:        }
                     65:        else
                     66:        {       (*putn)('.');
                     67:                for(i=0;i<d;i++) (*putn)(*s++);
                     68:        }
                     69:        if(dp < 100 && dp > -100) (*putn)('e');
                     70:        if(dp<0)
                     71:        {       (*putn)('-');
                     72:                dp = -dp;
                     73:        }
                     74:        else    (*putn)('+');
                     75:        for(; e >= 4; e--)
                     76:                (*putn)('0');
                     77:        if(e>=3 || dp >= 100)
                     78:        {       (*putn)(dp/100 + '0');
                     79:                dp = dp % 100;
                     80:        }
                     81:        if(e!=1) (*putn)(dp/10+'0');
                     82:        (*putn)(dp%10+'0');
                     83:        return(0);
                     84: }
                     85: 
                     86: wrt_F(p,w,d,len) ufloat *p; ftnlen len;
                     87: {      int i,delta,dp,sign,n;
                     88:        double x;
                     89:        char *s,*fcvt();
                     90:        x= (len==sizeof(float)?p->pf:p->pd);
                     91:        if(scale)
                     92:        {       if(scale>0)
                     93:                        for(i=0;i<scale;i++) x*=10;
                     94:                else    for(i=0;i<-scale;i++) x/=10;
                     95:        }
                     96:        s=fcvt(x,d,&dp,&sign);
                     97:        if(-dp>=d) sign=0;
                     98:        if(sign || cplus) delta=2;
                     99:        else delta=1;
                    100:        n= w - (d+delta+(dp>0?dp:0));
                    101:        if(n<0)
                    102:        {
                    103:                for(i=0;i<w;i++) PUT('*');
                    104:                return(0);
                    105:        }
                    106:        for(i=0;i<n;i++) PUT(' ');
                    107:        if(sign) PUT('-');
                    108:        else if(cplus) PUT('+');
                    109:        for(i=0;i<dp;i++) PUT(*s++);
                    110:        PUT('.');
                    111:        for(i=0;i< -dp && i<d;i++) PUT('0');
                    112:        for(;i<d;i++)
                    113:        {       if(*s) PUT(*s++);
                    114:                else PUT('0');
                    115:        }
                    116:        return(0);
                    117: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.