X-Git-Url: https://pd.if.org/git/?p=pdclib.old;a=blobdiff_plain;f=internals%2F_PDCLIB_int.h;h=c200419e6133a0235fd92448066744cdf83db6d6;hp=0c48f33755a6c2e728a329a28f4b464bffcd6a44;hb=3309ec3ad8a5db735eaa2de7f5dc6a331d8e7319;hpb=92f939206a4edc57681503d2771eb925b80a33a9 diff --git a/internals/_PDCLIB_int.h b/internals/_PDCLIB_int.h index 0c48f33..c200419 100644 --- a/internals/_PDCLIB_int.h +++ b/internals/_PDCLIB_int.h @@ -314,8 +314,8 @@ extern char _PDCLIB_Xdigits[]; /* -------------------------------------------------------------------------- */ #ifndef __cplusplus -typedef _PDCLIB_int16_t _PDCLIB_char16_t; -typedef _PDCLIB_int32_t _PDCLIB_char32_t; +typedef _PDCLIB_uint16_t _PDCLIB_char16_t; +typedef _PDCLIB_uint32_t _PDCLIB_char32_t; #else typedef char16_t _PDCLIB_char16_t; typedef char32_t _PDCLIB_char32_t; @@ -338,13 +338,13 @@ typedef struct _PDCLIB_mbstate { */ _PDCLIB_uint16_t _Surrogate; - /* In cases where the underlying codec is capable of regurgitating a + /* In cases where the underlying codec is capable of regurgitating a * character without consuming any extra input (e.g. a surrogate pair in a - * UCS-4 to UTF-16 conversion) then these fields are used to track that + * UCS-4 to UTF-16 conversion) then these fields are used to track that * state. In particular, they are used to buffer/fake the input for mbrtowc * and similar functions. * - * See _PDCLIB_encoding.h for values of _PendState and the resultant value + * See _PDCLIB_encoding.h for values of _PendState and the resultant value * in _PendChar. */ unsigned char _PendState; @@ -375,17 +375,26 @@ typedef struct _PDCLIB_file _PDCLIB_file_t; // Rename to _PDCLIB_FILE? /* Status structure required by _PDCLIB_print(). */ struct _PDCLIB_status_t { + /* XXX This structure is horrible now. scanf needs its own */ + int base; /* base to which the value shall be converted */ _PDCLIB_int_fast32_t flags; /* flags and length modifiers */ - unsigned n; /* print: maximum characters to be written */ + unsigned n; /* print: maximum characters to be written (snprintf) */ /* scan: number matched conversion specifiers */ unsigned i; /* number of characters read/written */ unsigned current;/* chars read/written in the CURRENT conversion */ - char * s; /* *sprintf(): target buffer */ - /* *sscanf(): source string */ unsigned width; /* specified field width */ int prec; /* specified field precision */ - _PDCLIB_file_t * stream; /* *fprintf() / *fscanf() stream */ + + union { + void * ctx; /* context for callback */ + const char * s; /* input string for scanf */ + }; + + union { + _PDCLIB_size_t ( *write ) ( void *p, const char *buf, _PDCLIB_size_t size ); + _PDCLIB_file_t *stream; /* for scanf */ + }; _PDCLIB_va_list arg; /* argument stack */ };