forked from KolibriOS/kolibrios
ctype+scanf fix
git-svn-id: svn://kolibrios.org@6432 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
9eb1268c4d
commit
cd8030cee3
@ -16,19 +16,19 @@
|
|||||||
#define __UPPER 512
|
#define __UPPER 512
|
||||||
#define __XDIGIT 1024
|
#define __XDIGIT 1024
|
||||||
|
|
||||||
extern char __is[128];
|
extern unsigned short __is[128];
|
||||||
|
|
||||||
#define isalnum(c)(__is[c] & __ALNUM ) /* 'a'-'z', 'A'-'Z', '0'-'9' */
|
#define isalnum(c)(__is[c+1] & __ALNUM ) /* 'a'-'z', 'A'-'Z', '0'-'9' */
|
||||||
#define isalpha(c)(__is[c] & __ALPHA ) /* 'a'-'z', 'A'-'Z' */
|
#define isalpha(c)(__is[c+1] & __ALPHA ) /* 'a'-'z', 'A'-'Z' */
|
||||||
#define iscntrl(c)(__is[c] & __CNTRL ) /* 0-31, 127 */
|
#define iscntrl(c)(__is[c+1] & __CNTRL ) /* 0-31, 127 */
|
||||||
#define isdigit(c)(__is[c] & __DIGIT ) /* '0'-'9' */
|
#define isdigit(c)(__is[c+1] & __DIGIT ) /* '0'-'9' */
|
||||||
#define isgraph(c)(__is[c] & __GRAPH ) /* '!'-'~' */
|
#define isgraph(c)(__is[c+1] & __GRAPH ) /* '!'-'~' */
|
||||||
#define islower(c)(__is[c] & __LOWER ) /* 'a'-'z' */
|
#define islower(c)(__is[c+1] & __LOWER ) /* 'a'-'z' */
|
||||||
#define isprint(c)(__is[c] & __PRINT ) /* ' '-'~' */
|
#define isprint(c)(__is[c+1] & __PRINT ) /* ' '-'~' */
|
||||||
#define ispunct(c)(__is[c] & __PUNCT ) /* !alnum && !cntrl && !space */
|
#define ispunct(c)(__is[c+1] & __PUNCT ) /* !alnum && !cntrl && !space */
|
||||||
#define isspace(c)(__is[c] & __BLANK ) /* HT, LF, VT, FF, CR, ' ' */
|
#define isspace(c)(__is[c+1] & __BLANK ) /* HT, LF, VT, FF, CR, ' ' */
|
||||||
#define isupper(c)(__is[c] & __UPPER ) /* 'A'-'Z' */
|
#define isupper(c)(__is[c+1] & __UPPER ) /* 'A'-'Z' */
|
||||||
#define isxdigit(c)(__is[c] & __XDIGIT) /* '0'-'9', 'a'-'f', 'A'-'F' */
|
#define isxdigit(c)(__is[c+1] & __XDIGIT) /* '0'-'9', 'a'-'f', 'A'-'F' */
|
||||||
|
|
||||||
#define isascii(c) (!((c)&(~0x7f)))
|
#define isascii(c) (!((c)&(~0x7f)))
|
||||||
#define toascii(c) ((c)&0x7f)
|
#define toascii(c) ((c)&0x7f)
|
||||||
|
@ -71,5 +71,12 @@ char * gets (char * str);
|
|||||||
typedef int (*virtual_getc)(void *sp, const void *obj);
|
typedef int (*virtual_getc)(void *sp, const void *obj);
|
||||||
typedef void (*virtual_ungetc)(void *sp, int c, const void *obj);
|
typedef void (*virtual_ungetc)(void *sp, int c, const void *obj);
|
||||||
int format_scan(const void *src, const char *fmt, va_list argp, virtual_getc vgetc, virtual_ungetc vungetc);
|
int format_scan(const void *src, const char *fmt, va_list argp, virtual_getc vgetc, virtual_ungetc vungetc);
|
||||||
|
int vscanf ( const char * format, va_list arg );
|
||||||
|
int scanf ( const char * format, ...);
|
||||||
|
int vsscanf ( const char * s, const char * format, va_list arg );
|
||||||
|
int sscanf ( const char * s, const char * format, ...);
|
||||||
|
int vfscanf ( FILE * stream, const char * format, va_list arg );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -18,6 +18,8 @@ todo:
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
typedef int (*virtual_getc)(void *sp, const void *obj);
|
||||||
|
typedef void (*virtual_ungetc)(void *sp, int c, const void *obj);
|
||||||
|
|
||||||
enum flags_t
|
enum flags_t
|
||||||
{
|
{
|
||||||
@ -170,7 +172,9 @@ int try_parse_int(long long *digit, int ch, const void *src, void *save, vir
|
|||||||
{
|
{
|
||||||
base = 8;
|
base = 8;
|
||||||
ch = vgetc(save, src);
|
ch = vgetc(save, src);
|
||||||
if (ch == EOF) return EOF;
|
if (ch == EOF || isspace(ch))
|
||||||
|
have_digits++;
|
||||||
|
else
|
||||||
if (ch == 'x' || ch == 'X')
|
if (ch == 'x' || ch == 'X')
|
||||||
{
|
{
|
||||||
base = 16;
|
base = 16;
|
||||||
@ -201,6 +205,8 @@ int try_parse_int(long long *digit, int ch, const void *src, void *save, vir
|
|||||||
ch = vgetc(save, src);
|
ch = vgetc(save, src);
|
||||||
if (ch == EOF || isspace(ch)) break; // ok, just finish num
|
if (ch == EOF || isspace(ch)) break; // ok, just finish num
|
||||||
}
|
}
|
||||||
|
else if (ch == EOF || isspace(ch))
|
||||||
|
break;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
vungetc(save, ch, src);
|
vungetc(save, ch, src);
|
||||||
@ -365,9 +371,9 @@ int format_scan(const void *src, const char *fmt, va_list argp, virtual_getc vge
|
|||||||
arg_str = va_arg(argp, char*);
|
arg_str = va_arg(argp, char*);
|
||||||
if (fmt1 == 0) length = 1;
|
if (fmt1 == 0) length = 1;
|
||||||
else length = fmt1;
|
else length = fmt1;
|
||||||
for (i = 0; i < length; i++)
|
for (i = 0; i < length;)
|
||||||
{
|
{
|
||||||
*arg_str++ = ch;
|
*arg_str++ = ch; i++;
|
||||||
ch = vgetc(&save, src);
|
ch = vgetc(&save, src);
|
||||||
if (ch == EOF) break;
|
if (ch == EOF) break;
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,11 @@ int virtual_getc_file(void *sp, const void *obj)
|
|||||||
// get next chat from file obj, save point is ptr to string char ptr
|
// get next chat from file obj, save point is ptr to string char ptr
|
||||||
{
|
{
|
||||||
FILE *f = (FILE *)obj;
|
FILE *f = (FILE *)obj;
|
||||||
|
int ch = fgetc(f);
|
||||||
|
|
||||||
return fgetc(f);
|
//printf("getc '%c'[%d];", ch, ch);
|
||||||
|
|
||||||
|
return ch;
|
||||||
}
|
}
|
||||||
|
|
||||||
void virtual_ungetc_file(void *sp, int c, const void *obj)
|
void virtual_ungetc_file(void *sp, int c, const void *obj)
|
||||||
|
16
programs/develop/ktcc/trunk/libc/stdio/ungetc.c
Normal file
16
programs/develop/ktcc/trunk/libc/stdio/ungetc.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
// non standard realization - no support for virtually change char
|
||||||
|
int ungetc(int c,FILE* file)
|
||||||
|
{
|
||||||
|
dword res;
|
||||||
|
|
||||||
|
if ((file->mode & 3!=FILE_OPEN_READ) && (file->mode & FILE_OPEN_PLUS==0)) return EOF;
|
||||||
|
|
||||||
|
if (file->filepos>file->filesize || file->filepos==0)
|
||||||
|
{
|
||||||
|
return EOF;
|
||||||
|
}
|
||||||
|
file->filepos--;
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
#include "ctype.h"
|
#include <ctype.h>
|
||||||
char __is[128] = {
|
unsigned short __is[129] = {
|
||||||
|
0, /* EOF */
|
||||||
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
||||||
0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004,
|
0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004,
|
||||||
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
||||||
|
Loading…
Reference in New Issue
Block a user