FreeCalypso > hg > freecalypso-sw
annotate gsm-fw/sprintf/float.c @ 923:10b4bed10192
gsm-fw/L1: fix for the DSP patch corruption bug
The L1 code we got from the LoCosto fw contains a feature for DSP CPU load
measurement. This feature is a LoCosto-ism, i.e., not applicable to earlier
DBB chips (Calypso) with their respective earlier DSP ROMs. Most of the
code dealing with that feature is conditionalized as #if (DSP >= 38),
but one spot was missed, and the MCU code was writing into an API word
dealing with this feature. In TCS211 this DSP API word happens to be
used by the DSP code patch, hence that write was corrupting the patched
DSP code.
author | Mychaela Falconia <falcon@ivan.Harhan.ORG> |
---|---|
date | Mon, 19 Oct 2015 17:13:56 +0000 |
parents | 4ac657b95f52 |
children |
rev | line source |
---|---|
146
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
1 /* |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
2 * Embedded [v]sprintf() implementation by Michael Spacefalcon, |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
3 * loosely based on the 4.3BSD-Tahoe version. |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
4 * |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
5 * This module contains the floating point conversion functions. |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
6 */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
7 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
8 #include <sys/types.h> |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
9 #include <ctype.h> |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
10 #include "defs.h" |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
11 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
12 extern double modf(); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
13 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
14 extern u_char * _sprintf_field(u_char *op, int width, int flags, int sign, |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
15 u_char *body, int size, int dprec, int fpprec); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
16 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
17 #define MAX_INT_DIGITS 10 /* 2^32-1 in decimal */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
18 #define MAXFRACT 16 /* max sensible for 64-bit double */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
19 #define DEFPREC 6 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
20 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
21 static char * |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
22 emit_integer_portion(unsigned number, char *endp) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
23 { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
24 char *t = endp; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
25 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
26 do { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
27 *--t = tochar(number % 10); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
28 number /= 10; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
29 } while (number); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
30 return (t); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
31 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
32 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
33 static int |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
34 f_round(double fract, char *start, char *end, int sign) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
35 { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
36 double tmp; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
37 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
38 (void)modf(fract * 10, &tmp); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
39 if (tmp > 4) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
40 for (;; --end) { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
41 if (*end == '.') |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
42 --end; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
43 if (++*end <= '9') |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
44 break; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
45 *end = '0'; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
46 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
47 /* ``"%.3f", (double)-0.0004'' gives you a negative 0. */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
48 else if (sign == '-') |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
49 for (;; --end) { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
50 if (*end == '.') |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
51 --end; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
52 if (*end != '0') |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
53 break; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
54 if (end == start) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
55 return(1); /* clear the -ve */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
56 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
57 return(0); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
58 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
59 |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
60 u_char * |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
61 _sprintf_percent_f(u_char *op, int width, int flags, int sign, |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
62 double number, int prec) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
63 { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
64 char buf[MAX_INT_DIGITS + 1 + MAXFRACT]; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
65 int extra_prec = 0; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
66 int origsign = sign; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
67 double fract, tmp; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
68 char *start, *t; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
69 |
147
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
70 /* first order of business: weed out infinities and NaNs */ |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
71 if (isinf(number)) { |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
72 if (number < 0) |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
73 sign = '-'; |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
74 return _sprintf_field(op, width, flags, sign, "Inf", 3, 0, 0); |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
75 } |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
76 if (isnan(number)) |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
77 return _sprintf_field(op, width, flags, sign, "NaN", 3, 0, 0); |
4ac657b95f52
gsm-fw: sprintf %f: handle infinities and NaNs
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
146
diff
changeset
|
78 /* OK, we know it's a valid real like in the good old VAX days */ |
146
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
79 if (number < 0) { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
80 sign = '-'; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
81 number = -number; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
82 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
83 fract = modf(number, &tmp); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
84 if (tmp > (double) 0xFFFFFFFF) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
85 return _sprintf_field(op, width, flags, sign, "Toobig", 6, |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
86 0, 0); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
87 start = emit_integer_portion((unsigned) tmp, buf + MAX_INT_DIGITS); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
88 if (prec > MAXFRACT) { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
89 extra_prec = prec - MAXFRACT; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
90 prec = MAXFRACT; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
91 } else if (prec == -1) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
92 prec = DEFPREC; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
93 t = buf + MAX_INT_DIGITS; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
94 /* |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
95 * if precision required or alternate flag set, add in a |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
96 * decimal point. |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
97 */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
98 if (prec || flags&ALT) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
99 *t++ = '.'; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
100 /* if requires more precision and some fraction left */ |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
101 if (fract) { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
102 if (prec) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
103 do { |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
104 fract = modf(fract * 10, &tmp); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
105 *t++ = tochar((int)tmp); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
106 } while (--prec && fract); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
107 if (fract && f_round(fract, start, t - 1, sign)) |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
108 sign = origsign; |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
109 } |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
110 return _sprintf_field(op, width, flags, sign, start, t - start, |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
111 0, prec + extra_prec); |
4d629b6bbcfd
gsm-fw/sprintf: %f implemented, debug output looks correct
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff
changeset
|
112 } |