1: #if defined(LIBC_SCCS) && !defined(lint)
   2: static char sccsid[] = "@(#)ecvt.c	5.1 (Berkeley) 3/15/86";
   3: #endif LIBC_SCCS and not lint
   4: 
   5: /*
   6:  *	ecvt converts to decimal
   7:  *	the number of digits is specified by ndigit
   8:  *	decpt is set to the position of the decimal point
   9:  *	sign is set to 0 for positive, 1 for negative
  10:  */
  11: 
  12: char    *cvt();
  13: 
  14: #define NDIG    80
  15: char*
  16: ecvt(arg, ndigits, decpt, sign)
  17: double arg;
  18: int ndigits, *decpt, *sign;
  19: {
  20:     return(cvt(arg, ndigits, decpt, sign, 1));
  21: }
  22: 
  23: char*
  24: fcvt(arg, ndigits, decpt, sign)
  25: double arg;
  26: int ndigits, *decpt, *sign;
  27: {
  28:     return(cvt(arg, ndigits, decpt, sign, 0));
  29: }
  30: 
  31: static char*
  32: cvt(arg, ndigits, decpt, sign, eflag)
  33: double arg;
  34: int ndigits, *decpt, *sign;
  35: {
  36:     register int r2;
  37:     double fi, fj;
  38:     register char *p, *p1;
  39:     static char buf[NDIG];
  40:     double modf();
  41: 
  42:     if (ndigits<0)
  43:         ndigits = 0;
  44:     if (ndigits>=NDIG-1)
  45:         ndigits = NDIG-2;
  46:     r2 = 0;
  47:     *sign = 0;
  48:     p = &buf[0];
  49:     if (arg<0) {
  50:         *sign = 1;
  51:         arg = -arg;
  52:     }
  53:     arg = modf(arg, &fi);
  54:     p1 = &buf[NDIG];
  55:     /*
  56: 	 * Do integer part
  57: 	 */
  58:     if (fi != 0) {
  59:         p1 = &buf[NDIG];
  60:         while (fi != 0) {
  61:             fj = modf(fi/10, &fi);
  62:             *--p1 = (int)((fj+.03)*10) + '0';
  63:             r2++;
  64:         }
  65:         while (p1 < &buf[NDIG])
  66:             *p++ = *p1++;
  67:     } else if (arg > 0) {
  68:         while ((fj = arg*10) < 1) {
  69:             arg = fj;
  70:             r2--;
  71:         }
  72:     }
  73:     p1 = &buf[ndigits];
  74:     if (eflag==0)
  75:         p1 += r2;
  76:     *decpt = r2;
  77:     if (p1 < &buf[0]) {
  78:         buf[0] = '\0';
  79:         return(buf);
  80:     }
  81:     while (p<=p1 && p<&buf[NDIG]) {
  82:         arg *= 10;
  83:         arg = modf(arg, &fj);
  84:         *p++ = (int)fj + '0';
  85:     }
  86:     if (p1 >= &buf[NDIG]) {
  87:         buf[NDIG-1] = '\0';
  88:         return(buf);
  89:     }
  90:     p = p1;
  91:     *p1 += 5;
  92:     while (*p1 > '9') {
  93:         *p1 = '0';
  94:         if (p1>buf)
  95:             ++*--p1;
  96:         else {
  97:             *p1 = '1';
  98:             (*decpt)++;
  99:             if (eflag==0) {
 100:                 if (p>buf)
 101:                     *p = '0';
 102:                 p++;
 103:             }
 104:         }
 105:     }
 106:     *p = '\0';
 107:     return(buf);
 108: }

Defined functions

cvt defined in line 31; used 3 times

Defined variables

sccsid defined in line 2; never used

Defined macros

NDIG defined in line 14; used 9 times
Last modified: 1986-03-16
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 2748
Valid CSS Valid XHTML 1.0 Strict