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
ecvt
defined in line
15; used 13 times
fcvt
defined in line
23; used 4 times
Defined variables
sccsid
defined in line
2;
never used
Defined macros
NDIG
defined in line
14; used 9 times