1 /* 2 * Copyright 2010, Oliver Tappe, zooey@hirschkaefer.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include <ctype.h> 8 #include <limits.h> 9 10 #include <PosixCtype.h> 11 #include <PosixLocaleConv.h> 12 13 #ifndef _KERNEL_MODE 14 #include <langinfo.h> 15 #include <PosixLanginfo.h> 16 #include <PosixLCTimeInfo.h> 17 #endif 18 19 20 /* 21 * The values below initialize the structs for the "C"/"POSIX" locale 22 * which is the default locale (and the only one supported without any locale 23 * backend). 24 */ 25 26 27 namespace BPrivate { 28 namespace Libroot { 29 30 31 /* 32 * The following arrays have 384 elements where the elements at index -128..-2 33 * mirror the elements at index 128..255 (to protect against invocations of 34 * ctype macros with negative character values). 35 * The element at index -1 is a dummy element containing the neutral/identity 36 * value used when the array is accessed as in 'isblank(EOF)' (i.e. with 37 * index -1). 38 */ 39 const unsigned short gPosixClassInfo[384] = { 40 /*-128 */ 0, 0, 0, 0, 0, 0, 0, 0, 41 /*-120 */ 0, 0, 0, 0, 0, 0, 0, 0, 42 /*-112 */ 0, 0, 0, 0, 0, 0, 0, 0, 43 /*-104 */ 0, 0, 0, 0, 0, 0, 0, 0, 44 /* -96 */ 0, 0, 0, 0, 0, 0, 0, 0, 45 /* -88 */ 0, 0, 0, 0, 0, 0, 0, 0, 46 /* -80 */ 0, 0, 0, 0, 0, 0, 0, 0, 47 /* -72 */ 0, 0, 0, 0, 0, 0, 0, 0, 48 /* -64 */ 0, 0, 0, 0, 0, 0, 0, 0, 49 /* -56 */ 0, 0, 0, 0, 0, 0, 0, 0, 50 /* -48 */ 0, 0, 0, 0, 0, 0, 0, 0, 51 /* -40 */ 0, 0, 0, 0, 0, 0, 0, 0, 52 /* -32 */ 0, 0, 0, 0, 0, 0, 0, 0, 53 /* -24 */ 0, 0, 0, 0, 0, 0, 0, 0, 54 /* -16 */ 0, 0, 0, 0, 0, 0, 0, 0, 55 /* -8 */ 0, 0, 0, 0, 0, 0, 0, 56 /* -1 */ 0, // neutral value 57 /* 0 */ _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, 58 /* 8 */ _IScntrl, _ISblank|_IScntrl|_ISspace, _IScntrl|_ISspace, _IScntrl|_ISspace, _IScntrl|_ISspace, _IScntrl|_ISspace, _IScntrl, _IScntrl, 59 /* 16 */ _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, 60 /* 24 */ _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, _IScntrl, 61 /* 32 */ _ISblank|_ISspace|_ISprint, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, 62 /* 40 */ _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, 63 /* 48 */ _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, 64 /* 56 */ _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISdigit|_ISxdigit|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, 65 /* 64 */ _ISpunct|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, 66 /* 72 */ _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, 67 /* 80 */ _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, 68 /* 88 */ _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISupper|_ISalpha|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, 69 /* 96 */ _ISpunct|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISxdigit|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, 70 /* 104 */ _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, 71 /* 112 */ _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, 72 /* 120 */ _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISalnum|_ISlower|_ISalpha|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _ISpunct|_ISprint|_ISgraph, _IScntrl, 73 /* 128 */ 0, 0, 0, 0, 0, 0, 0, 0, 74 /* 136 */ 0, 0, 0, 0, 0, 0, 0, 0, 75 /* 144 */ 0, 0, 0, 0, 0, 0, 0, 0, 76 /* 152 */ 0, 0, 0, 0, 0, 0, 0, 0, 77 /* 160 */ 0, 0, 0, 0, 0, 0, 0, 0, 78 /* 168 */ 0, 0, 0, 0, 0, 0, 0, 0, 79 /* 176 */ 0, 0, 0, 0, 0, 0, 0, 0, 80 /* 184 */ 0, 0, 0, 0, 0, 0, 0, 0, 81 /* 192 */ 0, 0, 0, 0, 0, 0, 0, 0, 82 /* 200 */ 0, 0, 0, 0, 0, 0, 0, 0, 83 /* 208 */ 0, 0, 0, 0, 0, 0, 0, 0, 84 /* 216 */ 0, 0, 0, 0, 0, 0, 0, 0, 85 /* 224 */ 0, 0, 0, 0, 0, 0, 0, 0, 86 /* 232 */ 0, 0, 0, 0, 0, 0, 0, 0, 87 /* 240 */ 0, 0, 0, 0, 0, 0, 0, 0, 88 /* 248 */ 0, 0, 0, 0, 0, 0, 0, 0 89 }; 90 91 const int gPosixToLowerMap[384] = { 92 /*-128 */ 128, 129, 130, 131, 132, 133, 134, 135, 93 /*-120 */ 136, 137, 138, 139, 140, 141, 142, 143, 94 /*-112 */ 144, 145, 146, 147, 148, 149, 150, 151, 95 /*-104 */ 152, 153, 154, 155, 156, 157, 158, 159, 96 /* -96 */ 160, 161, 162, 163, 164, 165, 166, 167, 97 /* -88 */ 168, 169, 170, 171, 172, 173, 174, 175, 98 /* -80 */ 176, 177, 178, 179, 180, 181, 182, 183, 99 /* -72 */ 184, 185, 186, 187, 188, 189, 190, 191, 100 /* -64 */ 192, 193, 194, 195, 196, 197, 198, 199, 101 /* -56 */ 200, 201, 202, 203, 204, 205, 206, 207, 102 /* -48 */ 208, 209, 210, 211, 212, 213, 214, 215, 103 /* -40 */ 216, 217, 218, 219, 220, 221, 222, 223, 104 /* -32 */ 224, 225, 226, 227, 228, 229, 230, 231, 105 /* -24 */ 232, 233, 234, 235, 236, 237, 238, 239, 106 /* -16 */ 240, 241, 242, 243, 244, 245, 246, 247, 107 /* -8 */ 248, 249, 250, 251, 252, 253, 254, 108 /* -1 */ -1, // identity value 109 /* 0 */ 0, 1, 2, 3, 4, 5, 6, 7, 110 /* 8 */ 8, 9, 10, 11, 12, 13, 14, 15, 111 /* 16 */ 16, 17, 18, 19, 20, 21, 22, 23, 112 /* 24 */ 24, 25, 26, 27, 28, 29, 30, 31, 113 /* 32 */ 32, 33, 34, 35, 36, 37, 38, 39, 114 /* 40 */ 40, 41, 42, 43, 44, 45, 46, 47, 115 /* 48 */ '0', '1', '2', '3', '4', '5', '6', '7', 116 /* 56 */ '8', '9', 58, 59, 60, 61, 62, 63, 117 /* 64 */ 64, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 118 /* 72 */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 119 /* 80 */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 120 /* 88 */ 'x', 'y', 'z', 91, 92, 93, 94, 95, 121 /* 96 */ 96, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 122 /* 104 */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 123 /* 112 */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 124 /* 120 */ 'x', 'y', 'z', 123, 124, 125, 126, 127, 125 /* 128 */ 128, 129, 130, 131, 132, 133, 134, 135, 126 /* 136 */ 136, 137, 138, 139, 140, 141, 142, 143, 127 /* 144 */ 144, 145, 146, 147, 148, 149, 150, 151, 128 /* 152 */ 152, 153, 154, 155, 156, 157, 158, 159, 129 /* 160 */ 160, 161, 162, 163, 164, 165, 166, 167, 130 /* 168 */ 168, 169, 170, 171, 172, 173, 174, 175, 131 /* 176 */ 176, 177, 178, 179, 180, 181, 182, 183, 132 /* 184 */ 184, 185, 186, 187, 188, 189, 190, 191, 133 /* 192 */ 192, 193, 194, 195, 196, 197, 198, 199, 134 /* 200 */ 200, 201, 202, 203, 204, 205, 206, 207, 135 /* 208 */ 208, 209, 210, 211, 212, 213, 214, 215, 136 /* 216 */ 216, 217, 218, 219, 220, 221, 222, 223, 137 /* 224 */ 224, 225, 226, 227, 228, 229, 230, 231, 138 /* 232 */ 232, 233, 234, 235, 236, 237, 238, 239, 139 /* 240 */ 240, 241, 242, 243, 244, 245, 246, 247, 140 /* 248 */ 248, 249, 250, 251, 252, 253, 254, 255 141 }; 142 143 144 const int gPosixToUpperMap[384] = { 145 /*-128 */ 128, 129, 130, 131, 132, 133, 134, 135, 146 /*-120 */ 136, 137, 138, 139, 140, 141, 142, 143, 147 /*-112 */ 144, 145, 146, 147, 148, 149, 150, 151, 148 /*-104 */ 152, 153, 154, 155, 156, 157, 158, 159, 149 /* -96 */ 160, 161, 162, 163, 164, 165, 166, 167, 150 /* -88 */ 168, 169, 170, 171, 172, 173, 174, 175, 151 /* -80 */ 176, 177, 178, 179, 180, 181, 182, 183, 152 /* -72 */ 184, 185, 186, 187, 188, 189, 190, 191, 153 /* -64 */ 192, 193, 194, 195, 196, 197, 198, 199, 154 /* -56 */ 200, 201, 202, 203, 204, 205, 206, 207, 155 /* -48 */ 208, 209, 210, 211, 212, 213, 214, 215, 156 /* -40 */ 216, 217, 218, 219, 220, 221, 222, 223, 157 /* -32 */ 224, 225, 226, 227, 228, 229, 230, 231, 158 /* -24 */ 232, 233, 234, 235, 236, 237, 238, 239, 159 /* -16 */ 240, 241, 242, 243, 244, 245, 246, 247, 160 /* -8 */ 248, 249, 250, 251, 252, 253, 254, 161 /* -1 */ -1, // identity value 162 /* 0 */ 0, 1, 2, 3, 4, 5, 6, 7, 163 /* 8 */ 8, 9, 10, 11, 12, 13, 14, 15, 164 /* 16 */ 16, 17, 18, 19, 20, 21, 22, 23, 165 /* 24 */ 24, 25, 26, 27, 28, 29, 30, 31, 166 /* 32 */ 32, 33, 34, 35, 36, 37, 38, 39, 167 /* 40 */ 40, 41, 42, 43, 44, 45, 46, 47, 168 /* 48 */ '0', '1', '2', '3', '4', '5', '6', '7', 169 /* 56 */ '8', '9', 58, 59, 60, 61, 62, 63, 170 /* 64 */ 64, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 171 /* 72 */ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 172 /* 80 */ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 173 /* 88 */ 'X', 'Y', 'Z', 91, 92, 93, 94, 95, 174 /* 96 */ 96, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 175 /* 104 */ 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 176 /* 112 */ 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 177 /* 120 */ 'X', 'Y', 'Z', 123, 124, 125, 126, 127, 178 /* 128 */ 128, 129, 130, 131, 132, 133, 134, 135, 179 /* 136 */ 136, 137, 138, 139, 140, 141, 142, 143, 180 /* 144 */ 144, 145, 146, 147, 148, 149, 150, 151, 181 /* 152 */ 152, 153, 154, 155, 156, 157, 158, 159, 182 /* 160 */ 160, 161, 162, 163, 164, 165, 166, 167, 183 /* 168 */ 168, 169, 170, 171, 172, 173, 174, 175, 184 /* 176 */ 176, 177, 178, 179, 180, 181, 182, 183, 185 /* 184 */ 184, 185, 186, 187, 188, 189, 190, 191, 186 /* 192 */ 192, 193, 194, 195, 196, 197, 198, 199, 187 /* 200 */ 200, 201, 202, 203, 204, 205, 206, 207, 188 /* 208 */ 208, 209, 210, 211, 212, 213, 214, 215, 189 /* 216 */ 216, 217, 218, 219, 220, 221, 222, 223, 190 /* 224 */ 224, 225, 226, 227, 228, 229, 230, 231, 191 /* 232 */ 232, 233, 234, 235, 236, 237, 238, 239, 192 /* 240 */ 240, 241, 242, 243, 244, 245, 246, 247, 193 /* 248 */ 248, 249, 250, 251, 252, 253, 254, 255 194 }; 195 196 197 struct lconv gPosixLocaleConv = { 198 (char*)".", // decimal point 199 (char*)"", // thousands separator 200 (char*)"", // grouping 201 (char*)"", // international currency symbol 202 (char*)"", // local currency symbol 203 (char*)"", // monetary decimal point 204 (char*)"", // monetary thousands separator 205 (char*)"", // monetary grouping 206 (char*)"", // positive sign 207 (char*)"", // negative sign 208 CHAR_MAX, // int_frac_digits 209 CHAR_MAX, // frac_digits 210 CHAR_MAX, // p_cs_precedes 211 CHAR_MAX, // p_sep_by_space 212 CHAR_MAX, // n_cs_precedes 213 CHAR_MAX, // n_sep_by_space 214 CHAR_MAX, // p_sign_posn 215 CHAR_MAX, // n_sign_posn 216 CHAR_MAX, // int_p_cs_precedes 217 CHAR_MAX, // int_p_sep_by_space 218 CHAR_MAX, // int_n_cs_precedes 219 CHAR_MAX, // int_n_sep_by_space 220 CHAR_MAX, // int_p_sign_posn 221 CHAR_MAX // int_n_sign_posn 222 }; 223 224 225 #ifndef _KERNEL_MODE 226 227 const struct lc_time_t gPosixLCTimeInfo = { 228 { 229 "Jan", "Feb", "Mar", "Apr", "May", "Jun", 230 "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 231 }, 232 { 233 "January", "February", "March", "April", "May", "June", 234 "July", "August", "September", "October", "November", "December" 235 }, 236 { 237 "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" 238 }, 239 { 240 "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", 241 "Saturday" 242 }, 243 "%H:%M:%S", 244 "%m/%d/%y", 245 "%a %b %e %H:%M:%S %Y", 246 "AM", 247 "PM", 248 "%a %b %e %H:%M:%S %Z %Y", 249 { 250 "January", "February", "March", "April", "May", "June", 251 "July", "August", "September", "October", "November", "December" 252 }, 253 "md", 254 "%I:%M:%S %p" 255 }; 256 257 258 const char* gPosixLanginfo[_NL_LANGINFO_LAST] = { 259 "US-ASCII", 260 gPosixLCTimeInfo.c_fmt, 261 gPosixLCTimeInfo.x_fmt, 262 gPosixLCTimeInfo.X_fmt, 263 gPosixLCTimeInfo.ampm_fmt, 264 gPosixLCTimeInfo.am, 265 gPosixLCTimeInfo.pm, 266 267 gPosixLCTimeInfo.weekday[0], 268 gPosixLCTimeInfo.weekday[1], 269 gPosixLCTimeInfo.weekday[2], 270 gPosixLCTimeInfo.weekday[3], 271 gPosixLCTimeInfo.weekday[4], 272 gPosixLCTimeInfo.weekday[5], 273 gPosixLCTimeInfo.weekday[6], 274 275 gPosixLCTimeInfo.wday[0], 276 gPosixLCTimeInfo.wday[1], 277 gPosixLCTimeInfo.wday[2], 278 gPosixLCTimeInfo.wday[3], 279 gPosixLCTimeInfo.wday[4], 280 gPosixLCTimeInfo.wday[5], 281 gPosixLCTimeInfo.wday[6], 282 283 gPosixLCTimeInfo.month[0], 284 gPosixLCTimeInfo.month[1], 285 gPosixLCTimeInfo.month[2], 286 gPosixLCTimeInfo.month[3], 287 gPosixLCTimeInfo.month[4], 288 gPosixLCTimeInfo.month[5], 289 gPosixLCTimeInfo.month[6], 290 gPosixLCTimeInfo.month[7], 291 gPosixLCTimeInfo.month[8], 292 gPosixLCTimeInfo.month[9], 293 gPosixLCTimeInfo.month[10], 294 gPosixLCTimeInfo.month[11], 295 296 gPosixLCTimeInfo.mon[0], 297 gPosixLCTimeInfo.mon[1], 298 gPosixLCTimeInfo.mon[2], 299 gPosixLCTimeInfo.mon[3], 300 gPosixLCTimeInfo.mon[4], 301 gPosixLCTimeInfo.mon[5], 302 gPosixLCTimeInfo.mon[6], 303 gPosixLCTimeInfo.mon[7], 304 gPosixLCTimeInfo.mon[8], 305 gPosixLCTimeInfo.mon[9], 306 gPosixLCTimeInfo.mon[10], 307 gPosixLCTimeInfo.mon[11], 308 309 "%EC, %Ey, %EY", 310 "%Ex", 311 "%Ec", 312 "%EX", 313 "%O", 314 315 gPosixLocaleConv.decimal_point, 316 gPosixLocaleConv.thousands_sep, 317 318 "^[yY]", 319 "^[nN]", 320 321 gPosixLocaleConv.currency_symbol 322 }; 323 324 #endif // !_KERNEL_MODE 325 326 327 } // namespace Libroot 328 } // namespace BPrivate 329 330 331 const unsigned short* __ctype_b = &BPrivate::Libroot::gPosixClassInfo[128]; 332 const int* __ctype_tolower = &BPrivate::Libroot::gPosixToLowerMap[128]; 333 const int* __ctype_toupper = &BPrivate::Libroot::gPosixToUpperMap[128]; 334