diff --git a/myprintf.c b/myprintf.c new file mode 100644 --- /dev/null +++ b/myprintf.c @@ -0,0 +1,70 @@ +/** + * test/demos/myprintf.c + * Copyright (C) 2008 Markus Broeker + */ + +#include +#include +#include +#include + +int myprintf (char *fmt, ...) +{ + int i, pos = 0; + va_list list; + + char c; + char *s; + char s_str[1024]; + + char v[12]; + int value; + + va_start (list, fmt); + + while (*fmt) { + switch (*fmt) { + case '%': + switch (*++fmt) { + case 'c': + c = va_arg (list, int); + s_str[pos++] = c; + c = *fmt++; + break; + case 's': + s = va_arg (list, char *); + for (i = 0; i < strlen (s); i++) { + s_str[pos++] = s[i]; + } + c = *fmt++; + break; + case 'd': + value = va_arg (list, int); + sprintf (v, "%d", value); + for (i = 0; i < strlen (v); i++) { + s_str[pos++] = v[i]; + } + c = *fmt++; + break; + default: + puts ("Unknown character"); + } + default: + s_str[pos++] = *fmt++; + } + va_end (list); + } + + s_str[pos] = '\0'; + + puts (s_str); + return pos; +} + +int main (int argc, char **argv) +{ + int len; + + len = myprintf ("Bugfix needed: %s\t[%d:%d]", "Lines", 20, 30); + return EXIT_SUCCESS; +}