⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 locale.c

📁 用于嵌入式Linux系统的标准C的库函数
💻 C
字号:
/*FUNCTION<<setlocale>>, <<localeconv>>---select or query localeINDEX	setlocaleINDEX	localeconvINDEX	_setlocale_rINDEX	_localeconv_rANSI_SYNOPSIS	#include <locale.h>	char *setlocale(int <[category]>, const char *<[locale]>);	lconv *localeconv(void);	char *_setlocale_r(void *<[reent]>,                        int <[category]>, const char *<[locale]>);	lconv *_localeconv_r(void *<[reent]>);TRAD_SYNOPSIS	#include <locale.h>	char *setlocale(<[category]>, <[locale]>)	int <[category]>;	char *<[locale]>;	lconv *localeconv();	char *_setlocale_r(<[reent]>, <[category]>, <[locale]>)	char *<[reent]>;	int <[category]>;	char *<[locale]>;	lconv *_localeconv_r(<[reent]>);	char *<[reent]>;DESCRIPTION<<setlocale>> is the facility defined by ANSI C to condition theexecution environment for international collating and formattinginformation; <<localeconv>> reports on the settings of the currentlocale.This is a minimal implementation, supporting only the required <<"C">>value for <[locale]>; strings representing other locales are nothonored unless MB_CAPABLE is defined in which case three newextensions are allowed for LC_CTYPE or LC_MESSAGES only: <<"C-JIS">>, <<"C-EUCJP">>, <<"C-SJIS">>, or <<"C-ISO-8859-1">>.  (<<"">> is also accepted; it represents the default localefor an implementation, here equivalent to <<"C">>.)If you use <<NULL>> as the <[locale]> argument, <<setlocale>> returnsa pointer to the string representing the current locale (always<<"C">> in this implementation).  The acceptable values for<[category]> are defined in `<<locale.h>>' as macros beginning with<<"LC_">>, but this implementation does not check the values you passin the <[category]> argument.<<localeconv>> returns a pointer to a structure (also defined in`<<locale.h>>') describing the locale-specific conventions currentlyin effect.  <<_localeconv_r>> and <<_setlocale_r>> are reentrant versions of<<localeconv>> and <<setlocale>> respectively.  The extra argument<[reent]> is a pointer to a reentrancy structure.RETURNS<<setlocale>> returns either a pointer to a string naming the localecurrently in effect (always <<"C">> for this implementation, or, ifthe locale request cannot be honored, <<NULL>>.<<localeconv>> returns a pointer to a structure of type <<lconv>>,which describes the formatting and collating conventions in effect (inthis implementation, always those of the C locale).PORTABILITYANSI C requires <<setlocale>>, but the only locale required across allimplementations is the C locale.No supporting OS subroutines are required.*//* * setlocale, localeconv : internationalize your locale. *                         (Only "C" or null supported). */#include <locale.h>#include <string.h>#include <limits.h>#include <reent.h>#ifdef __CYGWIN__int __declspec(dllexport) __mb_cur_max = 1;#elseint __mb_cur_max = 1;#endifint __nlocale_changed = 0;int __mlocale_changed = 0;char *_PathLocale = NULL;static _CONST struct lconv lconv = {  ".", "", "", "", "", "", "", "", "", "",  CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX,  CHAR_MAX, CHAR_MAX, CHAR_MAX, CHAR_MAX,};char * _EXFUN(__locale_charset,(_VOID));static char *charset = "ISO-8859-1";char __lc_ctype[12] = "C";char *_DEFUN(_setlocale_r, (p, category, locale),       struct _reent *p _AND       int category _AND       _CONST char *locale){#ifndef MB_CAPABLE  if (locale)    {       if (strcmp (locale, "C") && strcmp (locale, ""))        return 0;      p->_current_category = category;        p->_current_locale = locale;    }  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  }char *_DEFUN_VOID(__locale_charset){  return charset;}struct lconv *_DEFUN(_localeconv_r, (data),       struct _reent *data){  return (struct lconv *) &lconv;}#ifndef _REENT_ONLYchar *_DEFUN(setlocale, (category, locale),       int category _AND       _CONST char *locale){  return _setlocale_r (_REENT, category, locale);}struct lconv *_DEFUN_VOID(localeconv){  return _localeconv_r (_REENT);}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -