Annotation of researchv9/libc/stdio/gcvt.c, revision 1.1

1.1     ! root        1: /* @(#)gcvt.c  4.1 (Berkeley) 12/21/80 */
        !             2: /*
        !             3:  * gcvt  - Floating output conversion to
        !             4:  * minimal length string
        !             5:  */
        !             6: 
        !             7: char   *ecvt();
        !             8: 
        !             9: char *
        !            10: gcvt(number, ndigit, buf)
        !            11: double number;
        !            12: char *buf;
        !            13: {
        !            14:        int sign, decpt;
        !            15:        register char *p1, *p2;
        !            16:        register i;
        !            17: 
        !            18:        p1 = ecvt(number, ndigit, &decpt, &sign);
        !            19:        p2 = buf;
        !            20:        if (sign)
        !            21:                *p2++ = '-';
        !            22:        for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
        !            23:                ndigit--;
        !            24:        if (decpt >= 0 && decpt-ndigit > 4
        !            25:         || decpt < 0 && decpt < -3) { /* use E-style */
        !            26:                decpt--;
        !            27:                *p2++ = *p1++;
        !            28:                *p2++ = '.';
        !            29:                for (i=1; i<ndigit; i++)
        !            30:                        *p2++ = *p1++;
        !            31:                *p2++ = 'e';
        !            32:                if (decpt<0) {
        !            33:                        decpt = -decpt;
        !            34:                        *p2++ = '-';
        !            35:                } else
        !            36:                        *p2++ = '+';
        !            37:                *p2++ = decpt/10 + '0';
        !            38:                *p2++ = decpt%10 + '0';
        !            39:        } else {
        !            40:                if (decpt<=0) {
        !            41:                        if (*p1!='0')
        !            42:                                *p2++ = '.';
        !            43:                        while (decpt<0) {
        !            44:                                decpt++;
        !            45:                                *p2++ = '0';
        !            46:                        }
        !            47:                }
        !            48:                for (i=1; i<=ndigit; i++) {
        !            49:                        *p2++ = *p1++;
        !            50:                        if (i==decpt)
        !            51:                                *p2++ = '.';
        !            52:                }
        !            53:                if (ndigit<decpt) {
        !            54:                        while (ndigit++<decpt)
        !            55:                                *p2++ = '0';
        !            56:                        *p2++ = '.';
        !            57:                }
        !            58:        }
        !            59:        if (p2[-1]=='.')
        !            60:                p2--;
        !            61:        *p2 = '\0';
        !            62:        return(buf);
        !            63: }

unix.superglobalmegacorp.com

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