ref: d94edd4b9a13e1ead5782c72753f3a6b5b02f2a6
dir: /libc/scanf.c/
#include <u.h>
#include <libc.h>
#include <cons.h>
static char*
get_char()
{
int i = 0;
char *buff, c;
while (1 == 1)
{
c = cons_read(defcons);
cons_putc(defcons, c);
if (c != '\r')
{
buff[i] = c;
i++;
}
else break;
}
return buff;
}
int
scanf(char *str, ...)
{
va_list ap;
va_start(ap, str);
int count = 0;
char *buffer, *temp;
while (*str != '\0')
{
if (*str == '%')
{
buffer = get_char();
str++;
switch(*str)
{
case 'c':
*va_arg(ap, char*) = buffer[0];
count++;
break;
case 's':
*va_arg(ap, char**) = buffer;
count++;
break;
case 'd':
*va_arg(ap, int*) = strtol(buffer, &temp, 10);
count++;
break;
case 'x':
*va_arg(ap, int*) = strtol(buffer, &temp, 16);
count++;
break;
default:
break;
}
}
str++;
}
va_end(ap);
return count;
}