aboutsummaryrefslogtreecommitdiff
path: root/libc/stdio.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-02 21:48:38 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-02 21:48:38 -0500
commitc8a195e1eb19d346c03c1dfa6ed66c6215caefa2 (patch)
tree3096ea08f7f213d7efe56a86391ab79b27333d40 /libc/stdio.c
parent5c84e678defa9333aefcdcd0870564fb945a8c61 (diff)
downloadkappa-c8a195e1eb19d346c03c1dfa6ed66c6215caefa2.zip
kappa-c8a195e1eb19d346c03c1dfa6ed66c6215caefa2.tar.gz
kappa-c8a195e1eb19d346c03c1dfa6ed66c6215caefa2.tar.bz2
kappa-c8a195e1eb19d346c03c1dfa6ed66c6215caefa2.tar.xz
Refactor, begin writing a PS/2 driver
Diffstat (limited to 'libc/stdio.c')
-rw-r--r--libc/stdio.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libc/stdio.c b/libc/stdio.c
index 4888338..17c5a2f 100644
--- a/libc/stdio.c
+++ b/libc/stdio.c
@@ -14,6 +14,21 @@ int puts(const char* str)
return 0;
}
+static char hex_table[16] = { '0', '1', '2', '3', '4', '5', '6', '7',
+ '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
+
+static void print_hex(unsigned int n)
+{
+ unsigned mask = 0xF0000000;
+ unsigned shift = 28;
+ while(mask)
+ {
+ putchar(hex_table[(n & mask) >> shift]);
+ mask >>= 4;
+ shift -= 4;
+ }
+}
+
int printf(const char *fmt, ...)
{
va_list ap;
@@ -33,6 +48,9 @@ int printf(const char *fmt, ...)
case 's':
puts(va_arg(ap, const char*));
break;
+ case 'x':
+ print_hex(va_arg(ap, unsigned));
+ break;
default:
puts("printf: unknown format\n");
break;