ref: 723dcdf945237c6fa70e4f964cfce71d963ec90f
parent: a3d9c8a50f2bd94224725e329b1d2482a7b0718d
author: mkf <mkf@cloud9p.org>
date: Thu Nov 23 19:28:17 IST 2023
fix '☺' bug, fmt scanf.
--- a/libc/scanf.c
+++ b/libc/scanf.c
@@ -1,58 +1,64 @@
-
#include <u.h>
#include <libc.h>
-int scanf (char * str, ...)
+#include <vga.h>
+#include <ps2.h>
+
+int scanf(char *str, ...)
{- va_list vl;
- int i = 0, j=0, ret = 0;
- char buff[100] = {0}, tmp[20], c;- char *out_loc;
- while(c != '\0')
- {- c = ps2_getc();
- buff[i] = c;
- i++;
- }
- va_start( vl, str );
- i = 0;
- while (str && str[i])
- {- if (str[i] == '%')
- {- i++;
- switch (str[i])
- {- case 'c':
- {- *(char *)va_arg( vl, char* ) = buff[j];
- j++;
- ret ++;
- break;
- }
- case 'd':
- {- *(int *)va_arg( vl, int* ) =strtol(&buff[j], &out_loc, 10);
- j+=out_loc -&buff[j];
- ret++;
- break;
- }
- case 'x':
- {- *(int *)va_arg( vl, int* ) =strtol(&buff[j], &out_loc, 16);
- j+=out_loc -&buff[j];
- ret++;
- break;
- }
- }
- }
- else
- {- buff[j] =str[i];
- j++;
- }
- i++;
- }
- va_end(vl);
- return ret;
+ va_list vl;
+ int i = 0, j=0, ret = 0;
+ char buff[100] = {0}, tmp[20], c;+ char *out_loc;
+
+
+ while(c != '\r')
+ {+ c = ps2_getc();
+ vga_putc(c);
+ buff[i] = c;
+ i++;
+ }
+
+ va_start( vl, str );
+ i = 0;
+ while (str && str[i])
+ {+ if(str[i] == '%')
+ {+ i++;
+ switch (str[i])
+ {+ case 'c':
+ {+ *(char*)va_arg(vl, char*) = buff[j];
+ j++;
+ ret++;
+ break;
+ }
+ case 'd':
+ {+ *(int*)va_arg( vl, int* ) = strtol(&buff[j], &out_loc, 10);
+ j+=out_loc -&buff[j];
+ ret++;
+ break;
+ }
+ case 'x':
+ {+ *(int *)va_arg( vl, int* ) = strtol(&buff[j], &out_loc, 16);
+ j += out_loc -&buff[j];
+ ret++;
+ break;
+ }
+ }
+ }
+ else
+ {+ buff[j] =str[i];
+ j++;
+ }
+ i++;
+ }
+ va_end(vl);
+ return ret;
}
--
⑨