| @@ -289,142 +289,6 @@ static const short wchar_toupper[] = { | |||
| 0, 0 | |||
| }; | |||
| #ifdef NEED_WCHAR_FUNCTIONS | |||
| // use ctype.h functions for Latin1 (character < 0x100) | |||
| int iswalpha(int c) | |||
| { | |||
| if (c < 0x80) | |||
| return isalpha(c); | |||
| if ((c > 0x3040) && (c <= 0xa700)) | |||
| return 1; // japanese, chinese characters | |||
| if (c > MAX_WALPHA) | |||
| return 0; | |||
| return walpha_tab[c-0x80]; | |||
| } | |||
| int iswdigit(int c) | |||
| { | |||
| if (c < 0x80) | |||
| return isdigit(c); | |||
| return 0; | |||
| } | |||
| int iswalnum(int c) | |||
| { | |||
| if (iswdigit(c)) | |||
| return 1; | |||
| return iswalpha(c); | |||
| } | |||
| int towlower(int c) | |||
| { | |||
| int x; | |||
| int ix; | |||
| if (c < 0x80) | |||
| return tolower(c); | |||
| if ((c > MAX_WALPHA) || ((x = walpha_tab[c-0x80]) >= 0xfe)) | |||
| return c; | |||
| if (x == 0xfd) { | |||
| // special cases, lookup translation table | |||
| for (ix = 0; wchar_tolower[ix] != 0; ix += 2) { | |||
| if (wchar_tolower[ix] == c) | |||
| return wchar_tolower[ix+1]; | |||
| } | |||
| } | |||
| return c + x; // convert to lower case | |||
| } | |||
| int towupper(int c) | |||
| { | |||
| int ix; | |||
| // check whether a previous character code is the upper-case equivalent of this character | |||
| if (towlower(c-32) == c) | |||
| return c-32; // yes, use it | |||
| if (towlower(c-1) == c) | |||
| return c-1; | |||
| for (ix = 0; wchar_toupper[ix] != 0; ix += 2) { | |||
| if (wchar_toupper[ix] == c) | |||
| return wchar_toupper[ix+1]; | |||
| } | |||
| return c; // no | |||
| } | |||
| int iswupper(int c) | |||
| { | |||
| int x; | |||
| if (c < 0x80) | |||
| return isupper(c); | |||
| if (((c > MAX_WALPHA) || (x = walpha_tab[c-0x80]) == 0) || (x == 0xff)) | |||
| return 0; | |||
| return 1; | |||
| } | |||
| int iswlower(int c) | |||
| { | |||
| if (c < 0x80) | |||
| return islower(c); | |||
| if ((c > MAX_WALPHA) || (walpha_tab[c-0x80] != 0xff)) | |||
| return 0; | |||
| return 1; | |||
| } | |||
| int iswspace(int c) | |||
| { | |||
| if (c < 0x80) | |||
| return isspace(c); | |||
| if (c == 0xa0) | |||
| return 1; | |||
| return 0; | |||
| } | |||
| int iswpunct(int c) | |||
| { | |||
| if (c < 0x100) | |||
| return ispunct(c); | |||
| return 0; | |||
| } | |||
| const wchar_t *wcschr(const wchar_t *str, int c) | |||
| { | |||
| while (*str != 0) { | |||
| if (*str == c) | |||
| return str; | |||
| str++; | |||
| } | |||
| return NULL; | |||
| } | |||
| #ifndef WINCE | |||
| // wcslen() is provided by WINCE, but not the other wchar functions | |||
| const int wcslen(const wchar_t *str) | |||
| { | |||
| int ix = 0; | |||
| while (*str != 0) | |||
| ix++; | |||
| return ix; | |||
| } | |||
| #endif | |||
| float wcstod(const wchar_t *str, wchar_t **tailptr) | |||
| { | |||
| int ix; | |||
| char buf[80]; | |||
| while (isspace(*str)) str++; | |||
| for (ix = 0; ix < 80; ix++) { | |||
| buf[ix] = str[ix]; | |||
| if (isspace(buf[ix])) | |||
| break; | |||
| } | |||
| *tailptr = (wchar_t *)&str[ix]; | |||
| return atof(buf); | |||
| } | |||
| #endif | |||
| // use internal data for iswalpha up to U+024F | |||
| // iswalpha() on Windows is unreliable (U+AA, U+BA). | |||
| int iswalpha2(int c) | |||