diff options
| author | Aleksa Vučković <aleksav013@gmail.com> | 2021-10-15 22:41:18 +0200 |
|---|---|---|
| committer | Aleksa Vučković <aleksav013@gmail.com> | 2021-10-15 22:41:18 +0200 |
| commit | 1395dc42159d52ba36524fabe805897cd20bd01e (patch) | |
| tree | 85ab198e0e2497c70eced46ba1e16e035d48eb24 /src/stdio.c | |
| parent | 4528b2347ac72ffdabdbe4d9e7bf7789c81e664f (diff) | |
Adding string.h & printf()
Diffstat (limited to 'src/stdio.c')
| -rw-r--r-- | src/stdio.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/stdio.c b/src/stdio.c new file mode 100644 index 0000000..31f7dbc --- /dev/null +++ b/src/stdio.c @@ -0,0 +1,37 @@ +#include<stdbool.h> +#include<stddef.h> +#include<stdint.h> +#include<stdarg.h> +#include"string.h" + +void terminal_putchar(char c); +void terminal_writestring(const char* data); +void terminal_writeint(const uint32_t data); + +void printf(char *str, ...) +{ + size_t count=0; + for(size_t i=0;str[i]!='\0';i++) if(str[i]=='%') count++; + + va_list list; + va_start(list, str); + + for(size_t i=0;str[i]!='\0';i++) + { + if(str[i]=='%') + { + i++; + if(str[i]=='c') terminal_putchar(va_arg(list,int)); + else if(str[i]=='s') terminal_writestring(va_arg(list,char*)); + else if(str[i]=='d') terminal_writeint(va_arg(list,int)); + else + { + terminal_writestring("wrong format using print function\n"); + return; + } + } + else terminal_putchar(str[i]); + } + + va_end(list); +} |
