--- mstools/h/wchar.h 2018/08/09 18:20:30 1.1.1.1 +++ mstools/h/wchar.h 2018/08/09 18:23:03 1.1.1.3 @@ -1,7 +1,7 @@ /*** *wchar.h - declarations for wide character functions * -* Copyright (c) 1992, Microsoft Corporation. All rights reserved. +* Copyright (c) 1992-1993, Microsoft Corporation. All rights reserved. * *Purpose: * This file contains the types, macros and function declarations for @@ -21,18 +21,35 @@ extern "C" { #endif -#ifndef MIPS -#if (_MSC_VER <= 600) -#define __cdecl _cdecl -#endif + +/* + * Conditional macro definition for function calling type and variable type + * qualifiers. + */ +#if ( (_MSC_VER >= 800) && (_M_IX86 >= 300) ) + +/* + * Definitions for MS C8-32 (386/486) compiler + */ +#define _CRTAPI1 __cdecl +#define _CRTAPI2 __cdecl + +#else + +/* + * Other compilers (e.g., MIPS) + */ +#define _CRTAPI1 +#define _CRTAPI2 + #endif + #ifndef _SIZE_T_DEFINED typedef unsigned int size_t; #define _SIZE_T_DEFINED #endif - #ifndef _WCHAR_T_DEFINED typedef unsigned short wchar_t; #define _WCHAR_T_DEFINED @@ -45,7 +62,14 @@ typedef wchar_t wctype_t; #endif #ifndef _VA_LIST_DEFINED -typedef char * va_list; +#if defined(_ALPHA_) +typedef struct { + char *a0; /* pointer to first homed integer argument */ + int offset; /* byte offset of next parameter */ +} va_list; +#else +typedef char * va_list; +#endif #define _VA_LIST_DEFINED #endif @@ -68,8 +92,6 @@ typedef struct _iobuf FILE; #define _FILE_DEFINED #endif -/* UNDONE: define struct tm */ - /* define NULL pointer value */ #ifndef NULL @@ -80,39 +102,29 @@ typedef struct _iobuf FILE; #endif #endif -/* function prototypes */ - -#ifndef _WCTYPE_DEFINED - /* * This declaration allows the user access to the ctype look-up * array _ctype defined in ctype.obj by simply including ctype.h */ -#ifndef _NEWCTYPETABLE +#ifdef _DLL -#ifdef _DLL -extern unsigned char * _ctype; -#else -extern unsigned char _ctype[]; -#endif +extern unsigned short * _ctype; -extern unsigned char *_pctype; -extern unsigned char *_pwctype; +#define _pctype (*_pctype_dll) +extern unsigned short **_pctype_dll; -#else +#define _pwctype (*_pwctype_dll) +extern unsigned short **_pwctype_dll; + +#else /* _DLL */ -#ifdef _DLL -extern unsigned short * _ctype; -#else -extern unsigned short _ctype[]; -#endif +extern unsigned short _ctype[]; extern unsigned short *_pctype; extern wctype_t *_pwctype; -#endif - +#endif /* _DLL */ /* set bit masks for the possible character types */ @@ -126,97 +138,129 @@ extern wctype_t *_pwctype; #define _BLANK 0x40 /* space char */ #define _HEX 0x80 /* hexadecimal digit */ +#define _LEADBYTE 0x8000 /* multibyte leadbyte */ +#define _ALPHA (0x0100|_UPPER|_LOWER) /* alphabetic character */ + + +/* function prototypes */ +#ifndef _WCTYPE_DEFINED /* character classification function prototypes */ +/* also defined in ctype.h */ -int iswalpha(wint_t); -int iswupper(wint_t); -int iswlower(wint_t); -int iswdigit(wint_t); -int iswxdigit(wint_t); -int iswspace(wint_t); -int iswpunct(wint_t); -int iswalnum(wint_t); -int iswprint(wint_t); -int iswgraph(wint_t); -int iswcntrl(wint_t); -int iswascii(wint_t); +int _CRTAPI1 iswalpha(wint_t); +int _CRTAPI1 iswupper(wint_t); +int _CRTAPI1 iswlower(wint_t); +int _CRTAPI1 iswdigit(wint_t); +int _CRTAPI1 iswxdigit(wint_t); +int _CRTAPI1 iswspace(wint_t); +int _CRTAPI1 iswpunct(wint_t); +int _CRTAPI1 iswalnum(wint_t); +int _CRTAPI1 iswprint(wint_t); +int _CRTAPI1 iswgraph(wint_t); +int _CRTAPI1 iswcntrl(wint_t); +int _CRTAPI1 iswascii(wint_t); +int _CRTAPI1 isleadbyte(int); -wchar_t towupper(wchar_t); -wchar_t towlower(wchar_t); +wchar_t _CRTAPI1 towupper(wchar_t); +wchar_t _CRTAPI1 towlower(wchar_t); -/* UNDONE: add wctype_t set_wctype(const char* property); */ -int is_wctype(wint_t, wctype_t); +int _CRTAPI1 iswctype(wint_t, wctype_t); -#define isleadbyte(_c) (0) -/* #define is_wctype(_c,_t) ((_c) < 256 ? _pwctype[_c] & _t : 0 ) */ +int _CRTAPI1 _isctype(int, int); #define _WCTYPE_DEFINED #endif -#define iswalpha(_c) ((_c) < 256 ? _pwctype[_c] &_ALPHA:is_wctype(_c,_ALPHA)) -#define iswupper(_c) ((_c) < 256 ? _pwctype[_c] &_UPPER:is_wctype(_c,_UPPER)) -#define iswlower(_c) ((_c) < 256 ? _pwctype[_c] &_LOWER:is_wctype(_c,_LOWER)) -#define iswdigit(_c) ((_c) < 256 ? _pwctype[_c] &_DIGIT:is_wctype(_c,_DIGIT)) -#define iswxdigit(_c) ((_c) < 256 ? _pwctype[_c] &_HEX:is_wctype(_c,_HEX)) -#define iswspace(_c) ((_c) < 256 ? _pwctype[_c] &_SPACE:is_wctype(_c,_SPACE)) -#define iswpunct(_c) ((_c) < 256 ? _pwctype[_c] &_PUNCT:is_wctype(_c,_PUNCT)) -#define iswalnum(_c) ((_c) < 256 ? _pwctype[_c] &(_ALPHA|_DIGIT):is_wctype(_c,_ALPHA|_DIGIT)) -#define iswprint(_c) ((_c) < 256 ? _pwctype[_c] &(_BLANK|_PUNCT|_ALPHA|_DIGIT):is_wctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT)) -#define iswgraph(_c) ((_c) < 256 ? _pwctype[_c] &(_PUNCT|_ALPHA|_DIGIT):is_wctype(_c,_PUNCT|_ALPHA|_DIGIT)) -#define iswcntrl(_c) ((_c) < 256 ? _pwctype[_c] &_CONTROL:is_wctype(_c,_CONTROL)) +#define iswalpha(_c) ( iswctype(_c,_ALPHA) ) +#define iswupper(_c) ( iswctype(_c,_UPPER) ) +#define iswlower(_c) ( iswctype(_c,_LOWER) ) +#define iswdigit(_c) ( iswctype(_c,_DIGIT) ) +#define iswxdigit(_c) ( iswctype(_c,_HEX) ) +#define iswspace(_c) ( iswctype(_c,_SPACE) ) +#define iswpunct(_c) ( iswctype(_c,_PUNCT) ) +#define iswalnum(_c) ( iswctype(_c,_ALPHA|_DIGIT) ) +#define iswprint(_c) ( iswctype(_c,_BLANK|_PUNCT|_ALPHA|_DIGIT) ) +#define iswgraph(_c) ( iswctype(_c,_PUNCT|_ALPHA|_DIGIT) ) +#define iswcntrl(_c) ( iswctype(_c,_CONTROL) ) #define iswascii(_c) ( (unsigned)(_c) < 0x80 ) +/* note: MS-specific routine, may evaluate its arguments more than once */ +#define isleadbyte(_c) ((_c) < 256 ? _pctype[_c] & _LEADBYTE : 0) #ifndef _WSTDIO_DEFINED -int fwprintf(FILE *, const wchar_t *, ...); -int wprintf(const wchar_t *, ...); -int _snwprintf(wchar_t *, size_t, const wchar_t *, ...); -int swprintf(wchar_t *, const wchar_t *, ...); -int vfwprintf(FILE *, const wchar_t *, va_list); -int vwprintf(const wchar_t *, va_list); -int _vsnwprintf(wchar_t *, size_t, const wchar_t *, va_list); -int vswprintf(wchar_t *, const wchar_t *, va_list); -/* UNDONE: add wscanf, swscanf, fwscanf */ + +wint_t _CRTAPI1 fgetwc(FILE *); +wint_t _CRTAPI1 _fgetwchar(void); +wint_t _CRTAPI1 fputwc(wint_t, FILE *); +wint_t _CRTAPI1 _fputwchar(wint_t); +wint_t _CRTAPI1 getwc(FILE *); +wint_t _CRTAPI1 getwchar(void); +wint_t _CRTAPI1 putwc(wint_t, FILE *); +wint_t _CRTAPI1 putwchar(wint_t); +wint_t _CRTAPI1 ungetwc(wint_t, FILE *); + +int _CRTAPI2 fwprintf(FILE *, const wchar_t *, ...); +int _CRTAPI2 wprintf(const wchar_t *, ...); +int _CRTAPI2 _snwprintf(wchar_t *, size_t, const wchar_t *, ...); +int _CRTAPI2 swprintf(wchar_t *, const wchar_t *, ...); +int _CRTAPI1 vfwprintf(FILE *, const wchar_t *, va_list); +int _CRTAPI1 vwprintf(const wchar_t *, va_list); +int _CRTAPI1 _vsnwprintf(wchar_t *, size_t, const wchar_t *, va_list); +int _CRTAPI1 vswprintf(wchar_t *, const wchar_t *, va_list); +int _CRTAPI2 fwscanf(FILE *, const wchar_t *, ...); +int _CRTAPI2 swscanf(const wchar_t *, const wchar_t *, ...); +int _CRTAPI2 wscanf(const wchar_t *, ...); + +#define getwchar() fgetwc(stdin) +#define putwchar(_c) fputwc((_c),stdout) +#define getwc(_stm) fgetwc(_stm) +#define putwc(_c,_stm) fputwc(_c,_stm) + + #define _WSTDIO_DEFINED #endif #ifndef _WSTDLIB_DEFINED -/* UNDONE: add wcstod, etc. */ -/* #define _WSTDLIB_DEFINED */ +/* also defined in stdlib.h */ +double _CRTAPI1 wcstod(const wchar_t *, wchar_t **); +long _CRTAPI1 wcstol(const wchar_t *, wchar_t **, int); +unsigned long _CRTAPI1 wcstoul(const wchar_t *, wchar_t **, int); +#define _WSTDLIB_DEFINED #endif #ifndef _WSTRING_DEFINED -wchar_t * wcscat(wchar_t *, const wchar_t *); -wchar_t * wcschr(const wchar_t *, wchar_t); -int wcscmp(const wchar_t *, const wchar_t *); -wchar_t * wcscpy(wchar_t *, const wchar_t *); -size_t wcscspn(const wchar_t *, const wchar_t *); -size_t wcslen(const wchar_t *); -wchar_t * wcsncat(wchar_t *, const wchar_t *, size_t); -int wcsncmp(const wchar_t *, const wchar_t *, size_t); -wchar_t * wcsncpy(wchar_t *, const wchar_t *, size_t); -wchar_t * wcspbrk(const wchar_t *, const wchar_t *); -wchar_t * wcsrchr(const wchar_t *, wchar_t); -size_t wcsspn(const wchar_t *, const wchar_t *); -wchar_t * wcsstr(const wchar_t *, const wchar_t *); - -wchar_t * _wcsdup(const wchar_t *); -int _wcsicmp(const wchar_t *, const wchar_t *); -int _wcsnicmp(const wchar_t *, const wchar_t *, size_t); -wchar_t * _wcsnset(wchar_t *, wchar_t, size_t); -wchar_t * _wcsrev(wchar_t *); -wchar_t * _wcsset(wchar_t *, wchar_t); - -wchar_t * _wcslwr(wchar_t *); -wchar_t * _wcsupr(wchar_t *); -size_t wcsxfrm(wchar_t *, const wchar_t *, size_t); -int wcscoll(const wchar_t *, const wchar_t *); -int _wcsicoll(const wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcscat(wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcschr(const wchar_t *, wchar_t); +int _CRTAPI1 wcscmp(const wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcscpy(wchar_t *, const wchar_t *); +size_t _CRTAPI1 wcscspn(const wchar_t *, const wchar_t *); +size_t _CRTAPI1 wcslen(const wchar_t *); +wchar_t * _CRTAPI1 wcsncat(wchar_t *, const wchar_t *, size_t); +int _CRTAPI1 wcsncmp(const wchar_t *, const wchar_t *, size_t); +wchar_t * _CRTAPI1 wcsncpy(wchar_t *, const wchar_t *, size_t); +wchar_t * _CRTAPI1 wcspbrk(const wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcsrchr(const wchar_t *, wchar_t); +size_t _CRTAPI1 wcsspn(const wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcsstr(const wchar_t *, const wchar_t *); +wchar_t * _CRTAPI1 wcstok(wchar_t *, const wchar_t *); + +wchar_t * _CRTAPI1 _wcsdup(const wchar_t *); +int _CRTAPI1 _wcsicmp(const wchar_t *, const wchar_t *); +int _CRTAPI1 _wcsnicmp(const wchar_t *, const wchar_t *, size_t); +wchar_t * _CRTAPI1 _wcsnset(wchar_t *, wchar_t, size_t); +wchar_t * _CRTAPI1 _wcsrev(wchar_t *); +wchar_t * _CRTAPI1 _wcsset(wchar_t *, wchar_t); + +wchar_t * _CRTAPI1 _wcslwr(wchar_t *); +wchar_t * _CRTAPI1 _wcsupr(wchar_t *); +size_t _CRTAPI1 wcsxfrm(wchar_t *, const wchar_t *, size_t); +int _CRTAPI1 wcscoll(const wchar_t *, const wchar_t *); +int _CRTAPI1 _wcsicoll(const wchar_t *, const wchar_t *); /* old names */ #define wcswcs wcsstr @@ -239,8 +283,8 @@ int _wcsicoll(const wchar_t *, const wch #ifndef _WTIME_DEFINED -/* UNDONE: add wcsftime, etc. */ -/* #define _WTIME_DEFINED */ +size_t _CRTAPI1 wcsftime(wchar_t *, size_t, const char *, const struct tm *); +#define _WTIME_DEFINED #endif