27 #define putchar(c) pchar(c)
32 static void printchar(
char **str,
int c);
33 static int prints(
char **out,
const char *
string,
int width,
int pad);
34 static int printi(
char **out,
int i,
int b,
int sg,
int width,
int pad,
int letbase);
35 static int print(
char **out,
const char *format, va_list args );
37 int pchar (
const char char_data)
40 while(!(UART0->UART_SR & UART_SR_TXRDY));
42 UART0->UART_THR = char_data;
49 while(!(UART0->UART_SR & UART_SR_RXRDY));
51 *puc_data = (uint8_t) UART0->UART_RHR;
55 static void printchar(
char **str,
int c)
57 extern int pchar(
const char c);
70 static int prints(
char **out,
const char *
string,
int width,
int pad)
72 register int pc = 0, padchar =
' ';
77 register const char *ptr;
78 for (ptr =
string; *ptr; ++ptr) ++len;
79 if (len >= width) width = 0;
85 for ( ; width > 0; --width)
87 printchar (out, padchar);
91 for ( ; *string ; ++string)
93 printchar (out, *
string);
96 for ( ; width > 0; --width)
98 printchar (out, padchar);
106 #define PRINT_BUF_LEN 12
108 static int printi(
char **out,
int i,
int b,
int sg,
int width,
int pad,
int letbase)
112 register int t, neg = 0, pc = 0;
113 register unsigned int u = i;
119 return prints (out, print_buf, width, pad);
122 if (sg && b == 10 && i < 0)
135 t += letbase -
'0' - 10;
144 printchar (out,
'-');
154 return pc + prints (out, s, width, pad);
157 static int print(
char **out,
const char *format, va_list args )
159 register int width, pad;
163 for (; *format != 0; ++format)
169 if (*format ==
'\0')
break;
170 if (*format ==
'%')
goto out;
176 while (*format ==
'0')
181 for ( ; *format >=
'0' && *format <=
'9'; ++format)
184 width += *format -
'0';
188 register char *s = (
char *)va_arg( args,
int );
189 pc += prints (out, s?s:
"(null)", width, pad);
194 pc += printi (out, va_arg( args,
int ), 10, 1, width, pad,
'a');
199 pc += printi (out, va_arg( args,
int ), 16, 0, width, pad,
'a');
204 pc += printi (out, va_arg( args,
int ), 16, 0, width, pad,
'A');
209 pc += printi (out, va_arg( args,
int ), 10, 0, width, pad,
'a');
215 scr[0] = (char)va_arg( args,
int );
217 pc += prints (out, scr, width, pad);
224 printchar (out, *format);
228 if (out) **out =
'\0';
237 va_start( args, format );
238 return print( 0, format, args );
241 int sprintf(
char *out,
const char *format, ...)
245 va_start( args, format );
246 return print( &out, format, args );
250 int snprintf(
char *buf,
unsigned int count,
const char *format, ... )
256 va_start( args, format );
257 return print( &buf, format, args );
264 char *ptr =
"Hello world!";
267 unsigned int bs =
sizeof(int)*8;
271 mi = (1 << (bs-1)) + 1;
274 printf(
"%s is null pointer\n", np);
276 printf(
"%d = - max int\n", mi);
277 printf(
"char %c = 'a'\n",
'a');
278 printf(
"hex %x = ff\n", 0xff);
279 printf(
"hex %02x = 00\n", 0);
280 printf(
"signed %d = unsigned %u = hex %x\n", -3, -3, -3);
281 printf(
"%d %s(s)%", 0,
"message");
283 printf(
"%d %s(s) with %%\n", 0,
"message");
284 sprintf(buf,
"justif: \"%-10s\"\n",
"left");
printf(
"%s", buf);
285 sprintf(buf,
"justif: \"%10s\"\n",
"right");
printf(
"%s", buf);
286 sprintf(buf,
" 3: %04d zero padded\n", 3);
printf(
"%s", buf);
287 sprintf(buf,
" 3: %-4d left justif.\n", 3);
printf(
"%s", buf);
288 sprintf(buf,
" 3: %4d right justif.\n", 3);
printf(
"%s", buf);
289 sprintf(buf,
"-3: %04d zero padded\n", -3);
printf(
"%s", buf);
290 sprintf(buf,
"-3: %-4d left justif.\n", -3);
printf(
"%s", buf);
291 sprintf(buf,
"-3: %4d right justif.\n", -3);
printf(
"%s", buf);
int printf(const char *format,...)
int sprintf(char *out, const char *format,...)
int gchar(uint8_t *puc_data)
int pchar(const char char_data)
int main(void)
Application entry point.
int snprintf(char *buf, unsigned int count, const char *format,...)