#include "stdio.h" #include "stddef.h" #include "stdlib.h" #include "string.h" console_t *stdio_console = NULL; int puts( const char *s ) { if( stdio_console == NULL ) { return EOF; } console_put_string( stdio_console, s ); console_put_newline( stdio_console ); return 1; } int printf( const char *format, ... ) { va_list args; va_start( args, format ); int res = vprintf( format, args ); va_end( args ); return res; } int vprintf( const char *format, va_list args ) { const char *s = format; int n = 0; if( stdio_console == NULL ) { return -1; } while( *s != '\0' ) { switch( *s ) { case '\n': console_put_newline( stdio_console ); n++; break; case '%': s++; if( *s == '\0' ) { console_put_string( stdio_console, "" ); console_put_newline( stdio_console ); return -1; } switch( *s ) { case '%': console_put_char( stdio_console, '%' ); break; case 'X': { char buf[19]; itoa( va_arg( args, int ), (char *)buf, 16 ); console_put_string( stdio_console, buf ); n += strlen( buf ); } break; case 'd': { char buf[19]; itoa( va_arg( args, int ), (char *)buf, 10 ); console_put_string( stdio_console, buf ); n += strlen( buf ); } break; case 'c': console_put_char( stdio_console, va_arg( args, int ) ); break; case 's': console_put_string( stdio_console, va_arg( args, const char * ) ); break; default: console_put_string( stdio_console, "" ); console_put_newline( stdio_console ); } break; default: console_put_char( stdio_console, *s ); n++; } s++; } return n; } void __stdio_set_console( console_t *console ) { stdio_console = console; }