Annotation of researchv10dc/libI77/old/wref0.c, revision 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.