blob: 325e714e6107abd4c2066e06439926efa6145b41 [file] [log] [blame] [raw]
#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
}