Changeset 2161
- Timestamp:
- Jul 3, 2005, 2:31:40 AM (20 years ago)
- Location:
- trunk/src/emx
- Files:
-
- 1 added
- 5 edited
-
ChangeLog.LIBC (modified) (1 diff, 1 prop)
-
src/lib/locale/locale_lconv.c (modified) (2 diffs, 1 prop)
-
src/lib/locale/locale_msg.c (added)
-
src/lib/locale/locale_time.c (modified) (1 diff, 1 prop)
-
src/lib/locale/nl_langinfo.c (modified) (2 diffs, 1 prop)
-
src/lib/locale/setlocale.c (modified) (12 diffs, 1 prop)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/emx/ChangeLog.LIBC
-
Property cvs2svn:cvs-rev
changed from
1.84to1.85
r2160 r2161 9 9 o Added %m (GLIBC extension) to the printf familiy. %m means 10 10 priting strerror(errno), it takes no arguments. 11 12 11 13 12 14 2005-07-01: knut st. osmundsen <[email protected]> -
Property cvs2svn:cvs-rev
changed from
-
trunk/src/emx/src/lib/locale/locale_lconv.c
-
Property cvs2svn:cvs-rev
changed from
1.6to1.7
r2160 r2161 42 42 "", //*mon_grouping; /** monetary size of grouping */ 43 43 "", //*positive_sign; /** non-negative values sign */ 44 " -", //*negative_sign; /** negative values sign */44 ", //*negative_sign; /** negative values sign */ 45 45 CHAR_MAX, //int_frac_digits; /** number of fractional digits - int currency */ 46 46 CHAR_MAX, //frac_digits; /** number of fractional digits - local currency */ … … 63 63 }; 64 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 -
Property cvs2svn:cvs-rev
changed from
-
trunk/src/emx/src/lib/locale/locale_time.c
-
Property cvs2svn:cvs-rev
changed from
1.4to1.5
r2160 r2161 34 34 .swdays = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }, 35 35 .lwdays = { "Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday" }, 36 .date_time_fmt = "%a %b % d%H:%M:%S %Y",36 .date_time_fmt = "%a %b % %H:%M:%S %Y", 37 37 .date_fmt = "%m/%d/%y", 38 38 .time_fmt = "%H:%M:%S", 39 39 .am = "AM", 40 40 .pm = "PM", 41 42 43 44 45 46 47 48 49 41 50 .fConsts = 1 42 51 }; 43 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 -
Property cvs2svn:cvs-rev
changed from
-
trunk/src/emx/src/lib/locale/nl_langinfo.c
-
Property cvs2svn:cvs-rev
changed from
1.2to1.3
r2160 r2161 101 101 102 102 case YESSTR: 103 return ""; ///@todo LC_MESSAGE103 return 104 104 case NOSTR: 105 return ""; ///@todo LC_MESSAGE105 return 106 106 107 107 case CRNCYSTR: … … 130 130 131 131 case YESEXPR: 132 return ""; ///@todo LC_MESSAGE132 return 133 133 case NOEXPR: 134 return ""; ///@todo LC_MESSAGE134 return 135 135 136 136 case DATESEP: -
Property cvs2svn:cvs-rev
changed from
-
trunk/src/emx/src/lib/locale/setlocale.c
-
Property cvs2svn:cvs-rev
changed from
1.20to1.21
r2160 r2161 135 135 /** Numeric and monetary data. */ 136 136 __LIBC_LOCALELCONV Lconv; 137 138 137 139 }; 138 140 … … 228 230 static int query_item(LocaleObject lobj, UconvObject uobj, LocaleItem iItem, char **ppszOut); 229 231 static int query_array(LocaleObject lobj, UconvObject uobj, int cElements, LocaleItem iFirst, char **papszOut); 230 static int localeTimeDo(__LIBC_PLOCALETIME pTime, UconvObject uobj, LocaleObject lobj );232 static int localeTimeDo(__LIBC_PLOCALETIME pTime, UconvObject uobj, LocaleObject lobj); 231 233 static void localeTimeFree(__LIBC_PLOCALETIME pTime); 232 234 static void localeNumericFree(__LIBC_PLOCALELCONV pLconv); … … 514 516 515 517 /* 516 * For "C" / "POSIX" we can justuse the static default locale.518 * For "C" / "POSIX" we can use the static default locale. 517 519 */ 518 520 if ( IS_C_LOCALE(pszLocale) … … 766 768 * @returns 0 on success. 767 769 * @returns negated errno on failure. 768 * @param pTime The time structure to operate on. 769 * @param uobj The UconvObject to use. 770 * @param lobj The LocaleObject to use. 771 */ 772 static int localeTimeDo(__LIBC_PLOCALETIME pTime, UconvObject uobj, LocaleObject lobj) 770 * @param pTime The time structure to operate on. 771 * @param uobj The UconvObject to use. 772 * @param lobj The LocaleObject to use. 773 * @param pszLocale Pointer to the locale base specifier. 774 */ 775 static int localeTimeDo(__LIBC_PLOCALETIME pTime, UconvObject uobj, LocaleObject lobj, const char *pszLocale) 773 776 { 774 777 int rc; … … 776 779 /* free old stuff. */ 777 780 localeTimeFree(pTime); 781 782 783 784 785 786 787 788 789 790 778 791 779 792 /* query the items. */ … … 899 912 { 900 913 int rc; 914 901 915 /* free any old stuff. */ 902 916 localeNumericFree(pLconv); 903 917 904 if ( !IS_C_LOCALE(pszLocale) 905 && !IS_POSIX_LOCALE(pszLocale)) 906 { 907 /* 908 * Convert the stuff. 909 */ 918 /* 919 * For "C" / "POSIX" we can simply use the static default locale. 920 */ 921 if ( IS_C_LOCALE(pszLocale) 922 || IS_POSIX_LOCALE(pszLocale)) 923 { 924 #define COPY(m) do { pLconv->m = __libc_gLocaleLconvDefault.m; } while (0) 925 pLconv->fNumericConsts = 1; 926 COPY(s.decimal_point); 927 COPY(s.thousands_sep); 928 COPY(s.grouping); 929 #undef COPY 930 return 0; 931 } 932 933 /* 934 * Convert the stuff. 935 */ 910 936 #define CONVERT_UCS(field) \ 911 937 do { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0) 912 CONVERT_UCS(decimal_point);913 CONVERT_UCS(thousands_sep);938 CONVERT_UCS(decimal_point); 939 CONVERT_UCS(thousands_sep); 914 940 #undef CONVERT_UCS 915 941 916 return localeConvertGrouping(pULconv->grouping, &pLconv->s.grouping); 917 } 918 else 919 { 920 /* the C/POSIX locale */ 921 LIBCLOG_MSG2("POSIX '%s'\n", pszLocale); 922 pLconv->fNumericConsts = 1; 923 pLconv->s.decimal_point = "."; 924 pLconv->s.thousands_sep = ","; 925 pLconv->s.grouping = ""; 926 return 0; 927 } 942 return localeConvertGrouping(pULconv->grouping, &pLconv->s.grouping); 928 943 } 929 944 … … 943 958 { 944 959 int rc; 960 945 961 /* free any old stuff. */ 946 962 localeMonetaryFree(pLconv); 947 963 948 if ( !IS_C_LOCALE(pszLocale) 949 && !IS_POSIX_LOCALE(pszLocale)) 950 { 951 /* 952 * Convert the stuff. 953 */ 964 /* 965 * For "C" / "POSIX" we can simply use the static default locale. 966 */ 967 if ( IS_C_LOCALE(pszLocale) 968 || IS_POSIX_LOCALE(pszLocale)) 969 { 970 #define COPY(m) do { pLconv->m = __libc_gLocaleLconvDefault.m; } while (0) 971 COPY(s.int_curr_symbol); 972 COPY(s.currency_symbol); 973 COPY(s.mon_decimal_point); 974 COPY(s.mon_thousands_sep); 975 COPY(s.positive_sign); 976 COPY(s.negative_sign); 977 COPY(pszCrncyStr); 978 COPY(s.mon_grouping); 979 COPY(s.int_frac_digits); 980 COPY(s.frac_digits); 981 COPY(s.p_cs_precedes); 982 COPY(s.p_sep_by_space); 983 COPY(s.n_cs_precedes); 984 COPY(s.n_sep_by_space); 985 COPY(s.p_sign_posn); 986 COPY(s.n_sign_posn); 987 COPY(s.int_p_cs_precedes); 988 COPY(s.int_n_cs_precedes); 989 COPY(s.int_p_sep_by_space); 990 COPY(s.int_n_sep_by_space); 991 COPY(s.int_p_sign_posn); 992 COPY(s.int_n_sign_posn); 993 pLconv->fMonetaryConsts = 1; 994 #undef COPY 995 return 0; 996 } 997 /* 998 * Convert the stuff. 999 */ 1000 #define FIXMAX(val) \ 1001 ( (val) != 0xff ? (val) : CHAR_MAX ) /* (assumes CHAR_MAX == 0x7f) */ 954 1002 #define CONVERT_UCS(field) \ 955 1003 do { rc = convert_ucs(uobj, pULconv->field, &pLconv->s.field); if (rc) return rc; } while (0) 956 1004 957 if (pszModifier && IS_EURO(pszModifier)) 958 { 959 /** @todo check for specs on a standard EURO grouping and stuff. */ 960 pLconv->s.currency_symbol = strdup("EUR"); 961 pLconv->s.int_curr_symbol = strdup("EUR"); 962 } 963 else 964 { 965 CONVERT_UCS(int_curr_symbol); 966 CONVERT_UCS(currency_symbol); 967 } 968 CONVERT_UCS(mon_decimal_point); 969 CONVERT_UCS(mon_thousands_sep); 970 CONVERT_UCS(positive_sign); 971 CONVERT_UCS(negative_sign); 972 pLconv->s.int_frac_digits = pULconv->int_frac_digits; 973 pLconv->s.frac_digits = pULconv->frac_digits; 974 pLconv->s.p_cs_precedes = pULconv->p_cs_precedes; 975 pLconv->s.p_sep_by_space = pULconv->p_sep_by_space; 976 pLconv->s.n_cs_precedes = pULconv->n_cs_precedes; 977 pLconv->s.n_sep_by_space = pULconv->n_sep_by_space; 978 pLconv->s.p_sign_posn = pULconv->p_sign_posn; 979 pLconv->s.n_sign_posn = pULconv->n_sign_posn; 980 /* we fake the international variants here. */ 981 pLconv->s.int_p_cs_precedes = pULconv->p_cs_precedes; 982 pLconv->s.int_n_cs_precedes = pULconv->n_cs_precedes; 983 pLconv->s.int_p_sep_by_space= pULconv->p_sep_by_space; 984 pLconv->s.int_n_sep_by_space= pULconv->n_sep_by_space; 985 pLconv->s.int_p_sign_posn = pULconv->p_sign_posn; 986 pLconv->s.int_n_sign_posn = pULconv->n_sign_posn; 987 1005 if (pszModifier && IS_EURO(pszModifier)) 1006 { 1007 /** @todo check for specs on a standard EURO grouping and stuff. */ 1008 pLconv->s.currency_symbol = strdup("EUR"); 1009 pLconv->s.int_curr_symbol = strdup("EUR"); 1010 } 1011 else 1012 { 1013 CONVERT_UCS(int_curr_symbol); 1014 CONVERT_UCS(currency_symbol); 1015 } 1016 CONVERT_UCS(mon_decimal_point); 1017 CONVERT_UCS(mon_thousands_sep); 1018 CONVERT_UCS(positive_sign); 1019 CONVERT_UCS(negative_sign); 1020 1021 pLconv->s.int_frac_digits = FIXMAX(pULconv->int_frac_digits); 1022 pLconv->s.frac_digits = FIXMAX(pULconv->frac_digits); 1023 pLconv->s.p_cs_precedes = FIXMAX(pULconv->p_cs_precedes); 1024 pLconv->s.p_sep_by_space = FIXMAX(pULconv->p_sep_by_space); 1025 pLconv->s.n_cs_precedes = FIXMAX(pULconv->n_cs_precedes); 1026 pLconv->s.n_sep_by_space = FIXMAX(pULconv->n_sep_by_space); 1027 pLconv->s.p_sign_posn = FIXMAX(pULconv->p_sign_posn); 1028 pLconv->s.n_sign_posn = FIXMAX(pULconv->n_sign_posn); 1029 /* we fake the international variants here. */ 1030 pLconv->s.int_p_cs_precedes = pLconv->s.p_cs_precedes; 1031 pLconv->s.int_n_cs_precedes = pLconv->s.n_cs_precedes; 1032 pLconv->s.int_p_sep_by_space= pLconv->s.p_sep_by_space; 1033 pLconv->s.int_n_sep_by_space= pLconv->s.n_sep_by_space; 1034 pLconv->s.int_p_sign_posn = pLconv->s.p_sign_posn; 1035 pLconv->s.int_n_sign_posn = pLconv->s.n_sign_posn; 1036 1037 #undef FIXMAX 988 1038 #undef CONVERT_UCS 989 1039 990 /* 991 * Extra stuff (which I don't know which member corresponds to). 992 */ 993 if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr))) 994 return rc; 995 996 return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping); 997 } 998 else 999 { 1000 /* 1001 * The C/POSIX locale. 1002 */ 1003 pLconv->fMonetaryConsts = 1; 1004 pLconv->s.int_curr_symbol = pLconv->s.currency_symbol = pLconv->s.mon_decimal_point 1005 = pLconv->s.mon_thousands_sep = pLconv->s.positive_sign = pLconv->s.negative_sign 1006 = pLconv->pszCrncyStr = pLconv->s.mon_grouping = ""; 1007 pLconv->s.int_frac_digits = -1; 1008 pLconv->s.frac_digits = -1; 1009 pLconv->s.p_cs_precedes = -1; 1010 pLconv->s.p_sep_by_space = -1; 1011 pLconv->s.n_cs_precedes = -1; 1012 pLconv->s.n_sep_by_space = -1; 1013 pLconv->s.p_sign_posn = -1; 1014 pLconv->s.n_sign_posn = -1; 1015 pLconv->s.int_p_cs_precedes = -1; 1016 pLconv->s.int_n_cs_precedes = -1; 1017 pLconv->s.int_p_sep_by_space= -1; 1018 pLconv->s.int_n_sep_by_space= -1; 1019 pLconv->s.int_p_sign_posn = -1; 1020 pLconv->s.int_n_sign_posn = -1; 1021 1022 return 0; 1023 } 1024 } 1040 /* 1041 * Extra stuff (which I don't know which member corresponds to). 1042 */ 1043 if ((rc = query_item(lobj, uobj, CRNCYSTR, &pLconv->pszCrncyStr))) 1044 return rc; 1045 1046 return localeConvertGrouping(pULconv->mon_grouping, &pLconv->s.mon_grouping); 1047 } 1048 1049 /** 1050 * Frees all heap strings in the monetary part of the lconv structure. 1051 * @param pLconv What to work on. 1052 */ 1053 static void localeMessagesFree(__LIBC_PLOCALEMSG pMsg) 1054 { 1055 if (!pMsg->fConsts) 1056 { 1057 #define FREE(x) do { if (pMsg->x) free(pMsg->x); pMsg->x = NULL; } while (0) 1058 FREE(pszYesExpr); 1059 FREE(pszNoExpr); 1060 FREE(pszYesStr); 1061 FREE(pszNoStr); 1062 #undef FREE 1063 } 1064 pMsg->fConsts = 0; 1065 } 1066 1067 1068 /** 1069 * Sets the LC_MESSAGES part of the locale. 1070 * 1071 * @returns 0 on success. 1072 * @returns negated errno on failure. 1073 * @param pMsg The messages locale info structure to operate on. 1074 * @param uobj The UconvObject to use. 1075 * @param lobj The LocaleObject to use. 1076 * @param pszLocale Pointer to the locale base specifier. 1077 */ 1078 static int localeMessagesDo(__LIBC_PLOCALEMSG pMsg, UconvObject uobj, LocaleObject lobj, const char *pszLocale) 1079 { 1080 int rc; 1081 /* free any old stuff. */ 1082 localeMessagesFree(pMsg); 1083 1084 /* 1085 * For "C" / "POSIX" we can simply use the static default locale. 1086 */ 1087 if ( IS_C_LOCALE(pszLocale) 1088 || IS_POSIX_LOCALE(pszLocale)) 1089 { 1090 memcpy(pMsg, &__libc_gLocaleMsgDefault, sizeof(*pMsg)); 1091 return 0; 1092 } 1093 1094 /* query the items. */ 1095 if ( (rc = query_item(lobj, uobj, YESEXPR, &pMsg->pszYesExpr)) 1096 || (rc = query_item(lobj, uobj, NOEXPR, &pMsg->pszNoExpr)) 1097 || (rc = query_item(lobj, uobj, YESSTR, &pMsg->pszYesStr)) 1098 || (rc = query_item(lobj, uobj, NOSTR, &pMsg->pszNoStr)) 1099 ) 1100 { 1101 return rc; 1102 } 1103 1104 return 0; 1105 } 1106 1025 1107 1026 1108 /** … … 1037 1119 } 1038 1120 } 1121 1039 1122 1040 1123 /** … … 1303 1386 1304 1387 case LC_TIME: 1305 rc = localeTimeDo(&pTemp->Time, uobj, lobj );1388 rc = localeTimeDo(&pTemp->Time, uobj, lobj); 1306 1389 break; 1307 1390 … … 1331 1414 1332 1415 case LC_MESSAGES: 1333 /* Nothing to do for now */ 1416 rc = localeMessagesDo(&pTemp->Msg, uobj, lobj, pszLocale); 1417 break; 1418 1334 1419 default: 1335 1420 rc = 0; … … 1597 1682 if (pTemp->afProcessed[LC_MESSAGES + 1]) 1598 1683 { 1684 1685 1599 1686 pTemp->afProcessed[LC_MESSAGES + 1] = 0; 1600 1687 gLocale.apszNames[LC_MESSAGES + 1] = pTemp->Global.apszNames[LC_MESSAGES + 1]; … … 1672 1759 if (pTemp->afProcessed[LC_MONETARY + 1]) 1673 1760 localeMonetaryFree(&pTemp->Lconv); 1761 1762 1674 1763 for (iCat = 0; iCat < _LC_LAST; iCat++) 1675 1764 if (pTemp->afProcessed[iCat + 1]) -
Property cvs2svn:cvs-rev
changed from
Note:
See TracChangeset
for help on using the changeset viewer.
