2 * GINGE - GINGE Is Not Gp2x Emulator
5 * This work is licensed under the MAME license, see COPYING file for details.
14 // lame, broken and slow, but enough for ginge's needs
15 static void format_number(char **dst_, int dst_len, unsigned int n,
16 char fmt, int justify, int zeropad)
18 char buf[32], *p = buf, *dst;
27 w = justify < 0 ? -justify : justify;
34 if ((signed int)n < 0) {
51 if (neg && t && !printing) {
73 *p++ = zeropad ? '0' : ' ';
78 t = n >> (left * 4 - 4);
83 *p++ = t < 10 ? t + '0' : t + 'a' - 10;
85 *p++ = zeropad ? '0' : ' ';
93 memcpy(buf, "<FMTODO>", 9);
108 while (*p != 0 && dst_len > 1) {
112 while (spaces > 0 && dst_len > 1) {
121 int parse_dec(const char **p_)
132 while ('0' <= *p && *p <= '9') {
133 r = r * 10 + *p - '0';
141 void g_fprintf(int fd, const char *fmt, ...)
143 char buf[256], *d = buf;
145 int left = sizeof(buf);;
151 while (*s != 0 && left > 1) {
167 justify = parse_dec(&s);
168 if (*s == 'l' || *s == 'z')
169 s++; // ignore for now
171 const char *ns = va_arg(ap, const char *);
174 int len = strlen(ns);
175 while (justify > len && left > 1) {
180 if (len > left - 1) {
181 memcpy(d, ns, left - 1);
187 while (justify < -len && left > 1) {
196 format_number(&d, left, va_arg(ap, int), *s++, justify, zeropad);
201 g_write_raw(fd, buf, d - buf);
204 // vim:shiftwidth=2:expandtab