Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions thorn/include/common/printf.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ regs Kusti, 23.10.2004

#include <stdarg.h>

#define PRINTF_LONG_SUPPORT

void init_printf (void * putp, void (*putf) (void *, char));

void tfp_printf (char * fmt, ...);
Expand Down
42 changes: 27 additions & 15 deletions thorn/src/common/printf.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ static void * stdout_putp;
#ifdef PRINTF_LONG_SUPPORT

static void uli2a (unsigned long int num, unsigned int base, int uc, char * bf) {
printf ("(%u)", num);
int n = 0;
unsigned int d = 1;
while (num / d >= base)
Expand Down Expand Up @@ -121,7 +122,7 @@ static void putchw (void * putp, putcf putf, int n, char z, char * bf) {
}

void tfp_format (void * putp, putcf putf, char * fmt, va_list va) {
char bf[12];
char bf[80];

char ch;

Expand Down Expand Up @@ -158,8 +159,9 @@ void tfp_format (void * putp, putcf putf, char * fmt, va_list va) {
uli2a (va_arg (va, unsigned long int), 10, 0, bf);
else
#endif
ui2a (va_arg (va,
unsigned int), 10, 0, bf);
ui2a (va_arg (va,
unsigned int),
10, 0, bf);
putchw (putp, putf, w, lz, bf);
break;
}
Expand All @@ -169,8 +171,9 @@ void tfp_format (void * putp, putcf putf, char * fmt, va_list va) {
li2a (va_arg (va, unsigned long int), bf);
else
#endif
i2a (va_arg (va,
int), bf);
i2a (va_arg (va,
int),
bf);
putchw (putp, putf, w, lz, bf);
break;
}
Expand All @@ -181,29 +184,39 @@ void tfp_format (void * putp, putcf putf, char * fmt, va_list va) {
uli2a (va_arg (va, unsigned long int), 16, (ch == 'X'), bf);
else
#endif
ui2a (va_arg (va,
unsigned int), 16, (ch == 'X'), bf);
ui2a (va_arg (va,
unsigned int),
16, (ch == 'X'), bf);
putchw (putp, putf, w, lz, bf);
break;
case 'c' :
case 'c':
putf (putp, (char) (va_arg (va,
int)));
break;
case 's' :
putchw (putp, putf, w, 0, va_arg (va,
char*));
case 's':
putchw (putp, putf, w, 0, va_arg (va, char *));
break;
case 'p':
case 'P':
putf (putp, '0');
putf (putp, 'x');
#ifdef PRINTF_LONG_SUPPORT
uli2a (va_arg (va, unsigned long int), 16, (ch == 'P'), bf);
#else
ui2a (va_arg (va, unsigned int), 16, (ch == 'P'), bf);
#endif
putchw (putp, putf, w, lz, bf);
break;
case 'b':
case 'B':
putf (putp, '0');
putf (putp, 'b');
#ifdef PRINTF_LONG_SUPPORT
if (lng)
uli2a (va_arg (va, unsigned long int), 16, (ch == 'P'), bf);
uli2a (va_arg (va, unsigned long int), 2, 0, bf);
else
#endif
ui2a (va_arg (va,
unsigned int), 16, (ch == 'P'), bf);
ui2a (va_arg (va, unsigned int), 2, 0, bf);
putchw (putp, putf, w, lz, bf);
break;
case '%':
Expand Down Expand Up @@ -233,7 +246,6 @@ static void putcp (void * p, char c) {
*(*((char **) p))++ = c;
}


void tfp_sprintf (char * s, char * fmt, ...) {
va_list va;
va_start (va, fmt);
Expand Down