Embedded Artistry libc
C Standard Library Support for Bare-metal Systems
g__fmt.c File Reference
#include "gdtoaimp.h"
Include dependency graph for g__fmt.c:

Go to the source code of this file.

Macros

#define decimalpoint   '.'
 

Functions

char * g__fmt (char *b, char *s, const char *se, int decpt, ULong sign)
 

Macro Definition Documentation

◆ decimalpoint

#define decimalpoint   '.'

Function Documentation

◆ g__fmt()

char* g__fmt ( char *  b,
char *  s,
const char *  se,
int  decpt,
ULong  sign 
)

Definition at line 46 of file g__fmt.c.

48 {
49  char* s0 = s;
50 #ifdef USE_LOCALE
52 #else
53 #define decimalpoint '.'
54 #endif
55  if(sign)
56  {
57  {
58  *b++ = '-';
59  }
60  }
61  if(decpt <= -4 || decpt > se - s + 5)
62  {
63  int j, k;
64  *b++ = *s++;
65  if(*s)
66  {
67  *b++ = decimalpoint;
68  while((*b = *s++) != 0)
69  {
70  b++;
71  }
72  }
73  *b++ = 'e';
74  /* sprintf(b, "%+.2d", decpt - 1); */
75  if(--decpt < 0)
76  {
77  *b++ = '-';
78  decpt = -decpt;
79  }
80  else
81  {
82  {
83  *b++ = '+';
84  }
85  }
86  for(j = 2, k = 10; 10 * k <= decpt; j++, k *= 10)
87  {
88  }
89  for(;;)
90  {
91  int i = decpt / k;
92  *b++ = (char)i + '0';
93  if(--j <= 0)
94  {
95  break;
96  }
97  decpt -= i * k;
98  decpt *= 10;
99  }
100  *b = 0;
101  }
102  else if(decpt <= 0)
103  {
104  *b++ = decimalpoint;
105  for(; decpt < 0; decpt++)
106  {
107  {
108  *b++ = '0';
109  }
110  }
111  while((*b = *s++) != 0)
112  {
113  {
114  b++;
115  }
116  }
117  }
118  else
119  {
120  while((*b = *s++) != 0)
121  {
122  b++;
123  if(--decpt == 0 && *s)
124  {
125  {
126  *b++ = decimalpoint;
127  }
128  }
129  }
130  for(; decpt > 0; decpt--)
131  {
132  {
133  *b++ = '0';
134  }
135  }
136  *b = 0;
137  }
138  freedtoa(s0);
139  return b;
140 }
void freedtoa(char *s)
Definition: dmisc.c:99
#define decimalpoint
struct lconv * localeconv(void)
char * decimal_point
Definition: locale.h:20

References lconv::decimal_point, decimalpoint, freedtoa(), and localeconv().

Referenced by g_ddfmt(), g_dfmt(), g_ffmt(), g_Qfmt(), g_xfmt(), and g_xLfmt().