ansiLocale.c
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:11k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ansiLocale.c - ANSI `locale' documentation */
  2. /* Copyright 1992-1995 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01e,10jul97,dgp  doc: fix SPR 6145, clarify setlocale() functionalitY
  7. 01d,11feb95,jdi  doc tweaks.
  8. 01c,14mar93,jdi  fixed typo.
  9. 01b,07feb93,jdi  documentation cleanup for 5.1.
  10. 01a,24oct92,smb  written.
  11. */
  12. /*
  13. DESCRIPTION
  14. The header locale.h declares two functions and one type, and defines several
  15. macros.  The type is:
  16. .iP "`struct lconv'" 15
  17. contains members related to the formatting of numeric values.  The
  18. structure should contain at least the members defined in locale.h,
  19. in any order.
  20. SEE ALSO: localeconv(), setlocale(), American National Standard X3.159-1989
  21. INTERNAL:
  22. This documentation module is built by appending the following files:
  23.     localeconv.c
  24.     setlocale.c
  25. */
  26. /* localeconv.c - ANSI locale */
  27. /* Copyright 1992-1995 Wind River Systems, Inc. */
  28. /*
  29. modification history
  30. --------------------
  31. 01f,11feb95,jdi  doc tweaks.
  32. 01e,14mar93,jdi  fixed typo.
  33. 01d,07feb93,jdi  documentation cleanup for 5.1.
  34. 01c,20sep92,smb  documentation additions
  35. 01b,12jul92,smb  changed definition of localeconv for MIPS cpp.
  36. 01a,08jul92,smb  written.
  37. */
  38. /*
  39. DESCRIPTION
  40.  
  41. INCLUDE FILE: locale.h limits.h
  42.  
  43. SEE ALSO: American National Standard X3.159-1989
  44. NOMANUAL
  45. */
  46. #include "vxWorks.h"
  47. #include "locale.h"
  48. #include "limits.h"
  49. /* locals */
  50. static char null[] = "";
  51. struct lconv __locale = 
  52.     {
  53.     /* LC_NUMERIC */
  54.     ".",  /* decimal_point */
  55.     null,  /* thousands_sep */
  56.     null,  /* grouping */
  57.     /* LC_MONETARY */
  58.     null,  /* int_curr_symbol */
  59.     null,  /* currency_symbol */
  60.     null,  /* mon_decimal_point */
  61.     null,  /* mon_thousands_sep */
  62.     null,  /* mon_grouping */
  63.     null,  /* positive_sign */
  64.     null, /* negative_sign */
  65.     CHAR_MAX,  /* int_frac_digits */
  66.     CHAR_MAX,  /* frac_digits */
  67.     CHAR_MAX,  /* p_cs_precedes */
  68.     CHAR_MAX, /* p_sep_by_space */
  69.     CHAR_MAX,  /* n_cs_precedes */
  70.     CHAR_MAX,  /* n_sep_by_space */
  71.     CHAR_MAX,  /* p_sign_posn */
  72.     CHAR_MAX  /* n_sign_posn */
  73.     };
  74. #undef localeconv
  75. /*******************************************************************************
  76. *
  77. * localeconv - set the components of an object with type `lconv' (ANSI)
  78. *
  79. * This routine sets the components of an object with type `struct lconv'
  80. * with values appropriate for the formatting of numeric quantities
  81. * (monetary and otherwise) according to the rules of the current locale.
  82. *
  83. * The members of the structure with type `char *' are pointers to strings
  84. * any of which (except `decimal_point') can point to "" to indicate that
  85. * the value is not available in the current locale or is of zero length.
  86. * The members with type `char' are nonnegative numbers, any of which can be
  87. * CHAR_MAX to indicate that the value is not available in the current locale.
  88. * The members include the following:
  89. * .iP "char *decimal_point" "" 3
  90. * The decimal-point character used to format nonmonetary quantities.
  91. * .iP "char *thousands_sep"
  92. * The character used to separate groups of digits before the
  93. * decimal-point character in formatted nonmonetary quantities.
  94. * .iP "char *grouping"
  95. * A string whose elements indicate the size of each group of
  96. * digits in formatted nonmonetary quantities.
  97. * .iP "char *int_curr_symbol"
  98. * The international currency symbol applicable to the current
  99. * locale. The first three characters contain the alphabetic international
  100. * currency symbol in accordance with those specified in ISO 4217:1987.
  101. * The fourth character (immediately preceding the null character) is the
  102. * character used to separate the international currency symbol from
  103. * the monetary quantity.
  104. * .iP "char *currency_symbol"
  105. * The local currency symbol applicable to the current locale.
  106. * .iP "char *mon_decimal_point"
  107. * The decimal-point used to format monetary quantities.
  108. * .iP "char *mon_thousands_sep"
  109. * The separator for groups of digits before the decimal-point in
  110. * formatted monetary quantities.
  111. * .iP "char *mon_grouping"
  112. * A string whose elements indicate the size of each group of digits in
  113. * formatted monetary quantities.
  114. * .iP "char *positive_sign"
  115. * The string used to indicate a nonnegative-valued formatted monetary
  116. * quantity.
  117. * .iP "char *negative_sign"
  118. * The string used to indicate a negative-valued formatted monetary
  119. * quantity.
  120. * .iP "char int_frac_digits"
  121. * The number of fractional digits (those after the decimal-point)
  122. * to be displayed in an internationally formatted monetary quantity.
  123. * .iP "char frac_digits"
  124. * The number of fractional digits (those after the decimal-point)
  125. * to be displayed in a formatted monetary quantity.
  126. * .iP "char p_cs_precedes"
  127. * Set to 1 or 0 if the `currency_symbol' respectively precedes or
  128. * succeeds the value for a nonnegative formatted monetary quantity.
  129. * .iP "char p_sep_by_space"
  130. * Set to 1 or 0 if the `currency_symbol' respectively is or is not
  131. * separated by a space from the value for a nonnegative formatted
  132. * monetary quantity.
  133. * .iP "char n_cs_precedes"
  134. * Set to 1 or 0 if the `currency_symbol' respectively precedes or
  135. * succeeds the value for a negative formatted monetary quantity.
  136. * .iP "char n_sep_by_space"
  137. * Set to 1 or 0 if the `currency_symbol' respectively is or is not
  138. * separated by a space from the value for a negative formatted monetary
  139. * quantity.
  140. * .iP "char p_sign_posn"
  141. * Set to a value indicating the positioning of the `positive_sign'
  142. * for a nonnegative formatted monetary quantity.
  143. * .iP "char n_sign_posn"
  144. * Set to a value indicating the positioning of the `negative_sign'
  145. * for a negative formatted monetary quantity.
  146. *
  147. * .LP
  148. * The elements of `grouping' and `mon_grouping' are interpreted according
  149. * to the following:
  150. * .iP "CHAR_MAX" "" 1
  151. * No further grouping is to be performed.
  152. * .iP "0"
  153. * The previous element is to be repeatedly used for the remainder of the digits.
  154. * .iP "other"
  155. * The integer value is the number of the digits that comprise the current
  156. * group.  The next element is examined to determined the size of the next
  157. * group of digits before the current group.
  158. *
  159. * .LP
  160. * The values of `p_sign_posn' and `n_sign_posn' are interpreted according to
  161. * the following:
  162. * .iP "0"
  163. * Parentheses surround the quantity and `currency_symbol'.
  164. * .iP "1"
  165. * The sign string precedes the quantity and `currency_symbol'.
  166. * .iP "2"
  167. * The sign string succeeds the quantity and `currency_symbol'.
  168. * .iP "3"
  169. * The sign string immediately precedes the `currency_symbol'.
  170. * .iP "4"
  171. * The sign string immediately succeeds the `currency_symbol'.
  172. *
  173. * .LP
  174. * The implementation behaves as if no library function calls localeconv().
  175. *
  176. * The localeconv() routine returns a pointer to the filled-in object.  The
  177. * structure pointed to by the return value is not modified by the
  178. * program, but may be overwritten by a subsequent call to localeconv().
  179. * In addition, calls to setlocale() with categories LC_ALL, LC_MONETARY,
  180. * or LC_NUMERIC may overwrite the contents of the structure.
  181. *
  182. * INCLUDE FILES: locale.h, limits.h
  183. *
  184. * RETURNS: A pointer to the structure `lconv'.
  185. */
  186. struct lconv *localeconv (void)
  187.     {
  188.     return (&__locale);
  189.     }
  190. /* setlocale.c - ANSI locale */
  191. /* Copyright 1992-1993 Wind River Systems, Inc. */
  192. /*
  193. modification history
  194. --------------------
  195. 01f,30aug93,jmm  fixed null pointer dereference in setlocale() (spr 2490)
  196. 01e,07feb93,jdi  documentation cleanup for 5.1.
  197. 01d,28sep92,smb  added ANSI to function description
  198. 01c,20sep92,smb  documentation additions
  199. 01b,14sep92,smb  added some minor error checking.
  200. 01a,08jul92,smb  written
  201. */
  202. /*
  203. DESCRIPTION
  204. INCLUDE FILE: locale.h string.h stdlib.h 
  205. SEE ALSO: American National Standard X3.159-1989
  206. NOMANUAL
  207. */
  208. #include "vxWorks.h"
  209. #include "locale.h"
  210. #include "string.h"
  211. #include "stdlib.h"
  212. #include "ctype.h"
  213. #include "private/localeP.h"
  214. LOCAL char *currentName = "C"; /* current locale name */
  215. __linfo     __clocale = 
  216.     {
  217.     "C"
  218.     };
  219. /*******************************************************************************
  220. *
  221. * setlocale - set the appropriate locale (ANSI)
  222. *
  223. * This function is included for ANSI compatibility.  Only the default is
  224. * implemented.  At program start-up, the equivalent of the following is
  225. * executed:
  226. * .CS
  227. *     setlocale (LC_ALL, "C");
  228. * .CE
  229. * This specifies the program's entire locale and the minimal environment
  230. * for C translation.
  231. *
  232. * INTERNAL
  233. * This function selects the appropriate portion of the program's locale as
  234. * specified by the <category> and <localeName> arguments.  This routine can
  235. * be used to change or query the program's entire current locale or portions
  236. * thereof.
  237. *
  238. * Values for <category> affect the locale as follows:
  239. * .iP LC_ALL
  240. * specifies the program's entire locale.
  241. * .iP LC_COLLATE
  242. * affects the behavior of the strcoll() and strxfrm() functions.
  243. * .iP LC_CTYPE
  244. * affects the behavior of the character-handling functions and the multi-byte
  245. * functions.
  246. * .iP LC_MONETARY
  247. * affects the monetary-formatting information returned by localeconv().
  248. * .iP LC_NUMERIC
  249. * affects the decimal-point character for the formatted input/output
  250. * functions and the string-conversion functions, as well as the
  251. * nonmonetary-formatting information returned by localeconv().
  252. * .iP LC_TIME
  253. * affects the behavior of the strftime() function.
  254. * .LP
  255. *
  256. * A value of "C" for <localeName> specifies the minimal environment for C
  257. * translation; a value of "" specifies the implementation-defined native
  258. * environment.  Other implementation-defined strings may be passed as the
  259. * second argument.
  260. *
  261. * At program start-up, the equivalent of the following is executed:
  262. * .CS
  263. *     setlocale (LC_ALL, "C");
  264. * .CE
  265. *
  266. * The implementation behaves as if no library function calls setlocale().
  267. *
  268. * If <localeName> is a pointer to a string and the selection can be
  269. * honored, setlocale() returns a pointer to the string associated with the
  270. * specified category for the new locale.  If the selection cannot be
  271. * honored, it returns a null pointer and the program's locale is unchanged.
  272. *
  273. * If <localeName> is null pointer, setlocale() returns a pointer to the
  274. * string associated with the category for the program's current locale; the
  275. * program's locale is unchanged.
  276. *
  277. * The string pointer returned by setlocale() is such that a subsequent call
  278. * with that string value and its associated category will restore that part
  279. * of the program's locale.  The string is not modified by the program, but
  280. * may be overwritten by a subsequent call to setlocale().
  281. *
  282. * INCLUDE FILES: locale.h, string.h, stdlib.h 
  283. *
  284. * RETURNS: A pointer to the string "C".
  285. */
  286. char *setlocale 
  287.     (
  288.     int category, /* category to change */
  289.     const char *localeName /* locale name */
  290.     )
  291.     {
  292.     if (localeName != NULL &&
  293. (strcmp (localeName, currentName) != 0) && 
  294. (strcmp (localeName, "") != 0))
  295.         return (NULL);
  296.     return (CHAR_FROM_CONST(currentName));
  297.     }