summaryrefslogtreecommitdiff
path: root/src/c/stdio.c
diff options
context:
space:
mode:
authorAleksa Vučković <aleksav013@gmail.com>2021-10-25 00:36:33 +0200
committerAleksa Vučković <aleksav013@gmail.com>2021-10-25 00:36:33 +0200
commit20dd72e40dc2728d3c5335d860e4b8ab8da14fcc (patch)
treedabdfdf736c45f9632fa1388d2144b1de7a438b0 /src/c/stdio.c
parent0bca634f7e70b05239f46f3bd40bb37468d67957 (diff)
Changing build system to recursive make
Diffstat (limited to 'src/c/stdio.c')
-rw-r--r--src/c/stdio.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/c/stdio.c b/src/c/stdio.c
new file mode 100644
index 0000000..83d2b0a
--- /dev/null
+++ b/src/c/stdio.c
@@ -0,0 +1,37 @@
+#include"../include/types.h"
+#include"../include/string.h"
+#include<stdarg.h>
+
+void terminal_putchar(char c);
+void terminal_writestring(char* data);
+void terminal_writeint(uint32_t data);
+void terminal_writefloat(double num);
+
+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((char)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 if(str[i]=='f') terminal_writefloat(va_arg(list,double));
+ else
+ {
+ terminal_writestring("wrong format using print function\n");
+ return;
+ }
+ }
+ else terminal_putchar(str[i]);
+ }
+
+ va_end(list);
+}