Annotation of 43BSD/lib/libc/gen/gcvt.c, revision 1.1

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

unix.superglobalmegacorp.com

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