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

Go to the source code of this file.

Functions

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

Function Documentation

◆ g_xfmt()

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

Definition at line 61 of file g_xfmt.c.

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