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

Go to the source code of this file.

Functions

char * g_xLfmt (char *buf, void *V, int ndig, unsigned bufsize)
 

Function Documentation

◆ g_xLfmt()

char* g_xLfmt ( char *  buf,
void *  V,
int  ndig,
unsigned  bufsize 
)

Definition at line 57 of file g_xLfmt.c.

59 {
60  static FPI fpi = {64, 1 - 16383 - 64 + 1, 32766 - 16383 - 64 + 1, 1, 0};
61  char *b, *s, *se;
62  ULong bits[2], *L, sign;
63  int decpt, ex, i, mode;
64 
65  if(ndig < 0)
66  {
67  ndig = 0;
68  }
69  if(bufsize < (unsigned)ndig + 10)
70  {
71  return 0;
72  }
73 
74  L = (ULong*)V;
75  sign = L[_0] & 0x80000000L;
76  bits[1] = L[_1];
77  bits[0] = L[_2];
78  if((ex = (L[_0] >> 16) & 0x7fff) != 0)
79  {
80  if(ex == 0x7fff)
81  {
82  /* Infinity or NaN */
83  if(bits[0] | bits[1])
84  {
85  {
86  b = strcp(buf, "NaN");
87  }
88  }
89  else
90  {
91  b = buf;
92  if(sign)
93  {
94  {
95  *b++ = '-';
96  }
97  }
98  b = strcp(b, "Infinity");
99  }
100  return b;
101  }
102  i = STRTOG_Normal;
103  }
104  else if(bits[0] | bits[1])
105  {
106  i = STRTOG_Denormal;
107  }
108  else
109  {
110  b = buf;
111 #ifndef IGNORE_ZERO_SIGN
112  if(sign)
113  {
114  {
115  *b++ = '-';
116  }
117  }
118 #endif
119  *b++ = '0';
120  *b = 0;
121  return b;
122  }
123  ex -= 0x3fff + 63;
124  mode = 2;
125  if(ndig <= 0)
126  {
127  if(bufsize < 32)
128  {
129  {
130  return 0;
131  }
132  }
133  mode = 0;
134  }
135  s = gdtoa(&fpi, ex, bits, &i, mode, ndig, &decpt, &se);
136  return g__fmt(buf, s, se, decpt, sign);
137 }
char * g__fmt(char *b, char *s, const char *se, int decpt, ULong sign)
Definition: g__fmt.c:46
char * gdtoa(FPI *fpi, int be, ULong *bits, int *kindp, int mode, int ndigits, int *decpt, char **rve)
Definition: gdtoa.c:130
unsigned Long ULong
Definition: gdtoa.h:41
Definition: gdtoa.h:86
#define strcp
Definition: gdtoaimp.h:541

References g__fmt(), gdtoa(), strcp, STRTOG_Denormal, and STRTOG_Normal.