forked from KolibriOS/kolibrios
small polish, samples
git-svn-id: svn://kolibrios.org@6443 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -47,7 +47,7 @@ int vscanf ( const char * format, va_list arg )
|
||||
return format_scan(NULL, format, arg, &virtual_getc_con, &virtual_ungetc_con);
|
||||
};
|
||||
|
||||
int kos_scanf ( const char * format, ...)
|
||||
int scanf ( const char * format, ...)
|
||||
{
|
||||
va_list arg;
|
||||
int n;
|
||||
|
97
programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c
Normal file
97
programs/develop/ktcc/trunk/libc/stdio/sprintf_tiny.c
Normal file
@@ -0,0 +1,97 @@
|
||||
/*
|
||||
function for format output to the string. much lighter than standard sprintf
|
||||
because of lesser formats supported
|
||||
*/
|
||||
|
||||
|
||||
#include <string.h>
|
||||
//#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
char* __itoa(int n,char* s);
|
||||
char* itoab(unsigned int n, char* s, int b);
|
||||
|
||||
int tiny_vsnprintf (char * s, size_t n, const char * format, va_list args )
|
||||
// support %c, %s, %d, %x, %u, %% for 32-bit values only. no width specs, left align
|
||||
// always zero-ended
|
||||
{
|
||||
char *fmt, *dest, buf[32];
|
||||
fmt = (char*)format;
|
||||
dest = s; dest[n - 1] = '\0';
|
||||
int arg, len;
|
||||
while (*fmt && (dest - s < n - 1))
|
||||
{
|
||||
if (*fmt != '%')
|
||||
{
|
||||
*dest++ = *fmt++;
|
||||
continue;
|
||||
}
|
||||
if (fmt[1] == '%') // %%
|
||||
{
|
||||
*dest++ = '%';
|
||||
fmt += 2;
|
||||
continue;
|
||||
}
|
||||
arg = va_arg(args, int);
|
||||
len = n - 1 - (dest - s);
|
||||
switch (*++fmt)
|
||||
{
|
||||
case 'c':
|
||||
*dest++ = (char)arg;
|
||||
break;
|
||||
case 's':
|
||||
strncpy(dest, (char*)arg, len);
|
||||
dest = strchr(dest, 0);
|
||||
break;
|
||||
case 'd':
|
||||
__itoa(arg, buf);
|
||||
strncpy(dest, buf, len);
|
||||
dest = strchr(dest, 0);
|
||||
break;
|
||||
case 'x':
|
||||
itoab((unsigned)arg, buf, 16);
|
||||
strncpy(dest, buf, len);
|
||||
dest = strchr(dest, 0);
|
||||
break;
|
||||
case 'u':
|
||||
itoab((unsigned)arg, buf, 10);
|
||||
strncpy(dest, buf, len);
|
||||
dest = strchr(dest, 0);
|
||||
break;
|
||||
default:
|
||||
*dest++ = *fmt;
|
||||
}
|
||||
fmt++;
|
||||
}
|
||||
*dest = '\0';
|
||||
return dest - s;
|
||||
}
|
||||
|
||||
|
||||
int tiny_snprintf (char * s, size_t n, const char * format, ... )
|
||||
{
|
||||
va_list arg;
|
||||
int rc;
|
||||
va_start(arg, format);
|
||||
|
||||
rc = tiny_vsnprintf(s, n, format, arg);
|
||||
|
||||
va_end(arg);
|
||||
return rc;
|
||||
}
|
||||
|
||||
int tiny_sprintf (char * s, const char * format, ... )
|
||||
{
|
||||
va_list arg;
|
||||
int rc;
|
||||
va_start(arg, format);
|
||||
|
||||
rc = tiny_vsnprintf(s, 4096, format, arg);
|
||||
|
||||
va_end(arg);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user