| #include <string.h> |
| |
| char *setlocale(int category, const char *locale) |
| { |
| #ifndef _MB_CAPABLE |
| if (locale) |
| { |
| if (strcmp (locale, "C") && strcmp (locale, "")) return 0; |
| } |
| return "C"; |
| #else |
| static char last_lc_ctype[12] = "C"; |
| static char lc_messages[12] = "C"; |
| static char last_lc_messages[12] = "C"; |
| |
| if (locale) |
| { |
| char *locale_name = (char *)locale; |
| if (category != LC_CTYPE && category != LC_MESSAGES) |
| { |
| if (strcmp (locale, "C") && strcmp (locale, "")) |
| return 0; |
| if (category == LC_ALL) |
| { |
| strcpy (last_lc_ctype, __lc_ctype); |
| strcpy (__lc_ctype, "C"); |
| strcpy (last_lc_messages, lc_messages); |
| strcpy (lc_messages, "C"); |
| __mb_cur_max = 1; |
| } |
| } |
| else |
| { |
| if (locale[0] == 'C' && locale[1] == '-') |
| { |
| switch (locale[2]) |
| { |
| case 'U': |
| if (strcmp (locale, "C-UTF-8")) |
| return 0; |
| break; |
| case 'J': |
| if (strcmp (locale, "C-JIS")) |
| return 0; |
| break; |
| case 'E': |
| if (strcmp (locale, "C-EUCJP")) |
| return 0; |
| break; |
| case 'S': |
| if (strcmp (locale, "C-SJIS")) |
| return 0; |
| break; |
| case 'I': |
| if (strcmp (locale, "C-ISO-8859-1")) |
| return 0; |
| break; |
| default: |
| return 0; |
| } |
| } |
| else |
| { |
| if (strcmp (locale, "C") && strcmp (locale, "")) |
| return 0; |
| locale_name = "C"; /* C is always the default locale */ |
| } |
| |
| if (category == LC_CTYPE) |
| { |
| strcpy (last_lc_ctype, __lc_ctype); |
| strcpy (__lc_ctype, locale_name); |
| |
| __mb_cur_max = 1; |
| if (locale[1] == '-') |
| { |
| switch (locale[2]) |
| { |
| case 'U': |
| __mb_cur_max = 6; |
| break; |
| case 'J': |
| __mb_cur_max = 8; |
| break; |
| case 'E': |
| __mb_cur_max = 2; |
| break; |
| case 'S': |
| __mb_cur_max = 2; |
| break; |
| case 'I': |
| default: |
| __mb_cur_max = 1; |
| } |
| } |
| } |
| else |
| { |
| strcpy (last_lc_messages, lc_messages); |
| strcpy (lc_messages, locale_name); |
| |
| charset = "ISO-8859-1"; |
| if (locale[1] == '-') |
| { |
| switch (locale[2]) |
| { |
| case 'U': |
| charset = "UTF-8"; |
| break; |
| case 'J': |
| charset = "JIS"; |
| break; |
| case 'E': |
| charset = "EUCJP"; |
| break; |
| case 'S': |
| charset = "SJIS"; |
| break; |
| case 'I': |
| charset = "ISO-8859-1"; |
| break; |
| default: |
| return 0; |
| } |
| } |
| } |
| } |
| p->_current_category = category; |
| p->_current_locale = locale; |
| |
| if (category == LC_CTYPE) |
| return last_lc_ctype; |
| else if (category == LC_MESSAGES) |
| return last_lc_messages; |
| } |
| else |
| { |
| if (category == LC_CTYPE) |
| return __lc_ctype; |
| else if (category == LC_MESSAGES) |
| return lc_messages; |
| } |
| |
| return "C"; |
| #endif |
| } |