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

Defined functions

cvt defined in line 27; used 3 times
fcvt defined in line 19; used 4 times

Defined macros

NDIG defined in line 10; used 9 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 526
Valid CSS Valid XHTML 1.0 Strict