Annotation of 43BSD/contrib/icon/rt/gcvt.c, revision 1.1

1.1     ! root        1: /*
        !             2:  * gcvt - Convert number to a string in buf.  If possible, ndigit significant
        !             3:  *  digits are produced, otherwise a form with an exponent is used.
        !             4:  */
        !             5: char   *ecvt();
        !             6: char *
        !             7: gcvt(number, ndigit, buf)
        !             8: double number;
        !             9: char *buf;
        !            10:    {
        !            11:    int sign, decpt;
        !            12:    register char *p1, *p2;
        !            13:    register i;
        !            14:    int junk;
        !            15: 
        !            16:    p1 = ecvt(number, ndigit, &decpt, &sign);
        !            17:    p2 = buf;
        !            18:    if (sign)
        !            19:       *p2++ = '-';
        !            20:    for (i=ndigit-1; i>0 && p1[i]=='0'; i--)
        !            21:       ndigit--;
        !            22:    if (decpt >= 0 && decpt-ndigit > 4
        !            23:       || decpt < 0 && decpt < -3) { /* use E-style */
        !            24:          decpt--;
        !            25:          *p2++ = *p1++;
        !            26:          *p2++ = '.';
        !            27:          for (i=1; i<ndigit; i++)
        !            28:             *p2++ = *p1++;
        !            29:          *p2++ = 'e';
        !            30:          if (decpt<0) {
        !            31:             decpt = -decpt;
        !            32:             *p2++ = '-';
        !            33:             }
        !            34:          if (decpt/10 > 0)
        !            35:             *p2++ = decpt/10 + '0';
        !            36:          *p2++ = decpt%10 + '0';
        !            37:       } else {
        !            38:          if (decpt<=0) {
        !            39:          /* if (*p1!='0') */
        !            40:          *p2++ = '0';
        !            41:          *p2++ = '.';
        !            42:          while (decpt<0) {
        !            43:             decpt++;
        !            44:             *p2++ = '0';
        !            45:             }
        !            46:          }
        !            47:          for (i=1; i<=ndigit; i++) {
        !            48:             *p2++ = *p1++;
        !            49:             if (i==decpt)
        !            50:                *p2++ = '.';
        !            51:             }
        !            52:       if (ndigit<decpt) {
        !            53:          while (ndigit++<decpt)
        !            54:             *p2++ = '0';
        !            55:          *p2++ = '.';
        !            56:          }
        !            57:    }
        !            58:    if (p2[-1]=='.')
        !            59:       *p2++ = '0';
        !            60:    *p2 = '\0';
        !            61:    return(buf);
        !            62:    }

unix.superglobalmegacorp.com

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