ref: 75b1fcc9cf71fa5e72ac5030ac8815c7e6be674e
dir: /libc/scanf.c/
#include <u.h>
#include <libc.h>
#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 != '\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;
}