Annotation of src/usr.bin/locale/locale.c, Revision 1.1
1.1 ! stsp 1: /* $OpenBSD$ */
! 2: /*
! 3: * Copyright (c) 2013 Stefan Sperling <stsp@openbsd.org>
! 4: *
! 5: * Permission to use, copy, modify, and distribute this software for any
! 6: * purpose with or without fee is hereby granted, provided that the above
! 7: * copyright notice and this permission notice appear in all copies.
! 8: *
! 9: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 10: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 11: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 12: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 13: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 14: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
! 15: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 16: */
! 17:
! 18: #include <stdio.h>
! 19: #include <stdlib.h>
! 20: #include <string.h>
! 21: #include <locale.h>
! 22:
! 23: extern char *__progname;
! 24:
! 25: struct category_name {
! 26: int category;
! 27: const char *name;
! 28: } categories[] = {
! 29: { LC_COLLATE, "LC_COLLATE" },
! 30: { LC_CTYPE, "LC_CTYPE" },
! 31: { LC_MONETARY, "LC_MONETARY" },
! 32: { LC_NUMERIC, "LC_NUMERIC" },
! 33: { LC_TIME, "LC_TIME" },
! 34: { LC_MESSAGES, "LC_MESSAGES" },
! 35: { LC_ALL, "LC_ALL" },
! 36: { 0, NULL},
! 37: };
! 38:
! 39: void
! 40: show_current_locale()
! 41: {
! 42: char *lang = getenv("LANG");
! 43: int i;
! 44:
! 45: printf("LANG=%s\n", lang ? lang : "");
! 46: for (i = 0; categories[i].name != NULL; i++)
! 47: printf("%s=%s\n", categories[i].name,
! 48: setlocale(categories[i].category, NULL));
! 49: }
! 50:
! 51: const char * const some_locales[] = {
! 52: "C",
! 53: "C.UTF-8",
! 54: "POSIX",
! 55: "POSIX.UTF-8",
! 56: "Pig",
! 57: "ar_SD.UTF-8",
! 58: "ar_SY.UTF-8",
! 59: "bg_BG.CP1251",
! 60: "ca_ES.ISO8859-1",
! 61: "ca_ES.ISO8859-15",
! 62: "ca_ES.UTF-8",
! 63: "cs_CZ.ISO8859-2",
! 64: "cs_CZ.UTF-8",
! 65: "da_DK.ISO8859-1",
! 66: "da_DK.ISO8859-15",
! 67: "da_DK.UTF-8",
! 68: "de_AT.ISO8859-1",
! 69: "de_AT.ISO8859-15",
! 70: "de_AT.UTF-8",
! 71: "de_CH.ISO8859-1",
! 72: "de_CH.ISO8859-15",
! 73: "de_CH.UTF-8",
! 74: "de_DE.ISO8859-1",
! 75: "de_DE.ISO8859-15",
! 76: "de_DE.UTF-8",
! 77: "el_GR.ISO8859-7",
! 78: "el_GR.UTF-8",
! 79: "en_AU.ISO8859-1",
! 80: "en_AU.ISO8859-15",
! 81: "en_AU.UTF-8",
! 82: "en_CA.ISO8859-1",
! 83: "en_CA.ISO8859-15",
! 84: "en_CA.UTF-8",
! 85: "en_GB.ISO8859-1",
! 86: "en_GB.ISO8859-15",
! 87: "en_GB.UTF-8",
! 88: "en_US.ISO8859-1",
! 89: "en_US.ISO8859-15",
! 90: "en_US.UTF-8",
! 91: "es_AR.ISO8859-1",
! 92: "es_AR.ISO8859-15",
! 93: "es_AR.UTF-8",
! 94: "es_BO.ISO8859-1",
! 95: "es_BO.ISO8859-15",
! 96: "es_BO.UTF-8",
! 97: "es_CH.ISO8859-1",
! 98: "es_CH.ISO8859-15",
! 99: "es_CH.UTF-8",
! 100: "es_CO.ISO8859-1",
! 101: "es_CO.ISO8859-15",
! 102: "es_CO.UTF-8",
! 103: "es_CR.ISO8859-1",
! 104: "es_CR.ISO8859-15",
! 105: "es_CR.UTF-8",
! 106: "es_CU.ISO8859-1",
! 107: "es_CU.ISO8859-15",
! 108: "es_CU.UTF-8",
! 109: "es_DO.ISO8859-1",
! 110: "es_DO.ISO8859-15",
! 111: "es_DO.UTF-8",
! 112: "es_EC.ISO8859-1",
! 113: "es_EC.ISO8859-15",
! 114: "es_EC.UTF-8",
! 115: "es_ES.ISO8859-1",
! 116: "es_ES.ISO8859-15",
! 117: "es_ES.UTF-8",
! 118: "es_GQ.ISO8859-1",
! 119: "es_GQ.ISO8859-15",
! 120: "es_GQ.UTF-8",
! 121: "es_GT.ISO8859-1",
! 122: "es_GT.ISO8859-15",
! 123: "es_GT.UTF-8",
! 124: "es_HN.ISO8859-1",
! 125: "es_HN.ISO8859-15",
! 126: "es_HN.UTF-8",
! 127: "es_MX.ISO8859-1",
! 128: "es_MX.ISO8859-15",
! 129: "es_MX.UTF-8",
! 130: "es_NI.ISO8859-1",
! 131: "es_NI.ISO8859-15",
! 132: "es_NI.UTF-8",
! 133: "es_PA.ISO8859-1",
! 134: "es_PA.ISO8859-15",
! 135: "es_PA.UTF-8",
! 136: "es_PE.ISO8859-1",
! 137: "es_PE.ISO8859-15",
! 138: "es_PE.UTF-8",
! 139: "es_PR.ISO8859-1",
! 140: "es_PR.ISO8859-15",
! 141: "es_PR.UTF-8",
! 142: "es_PY.ISO8859-1",
! 143: "es_PY.ISO8859-15",
! 144: "es_PY.UTF-8",
! 145: "es_SV.ISO8859-1",
! 146: "es_SV.ISO8859-15",
! 147: "es_SV.UTF-8",
! 148: "es_US.ISO8859-1",
! 149: "es_US.ISO8859-15",
! 150: "es_US.UTF-8",
! 151: "es_UY.ISO8859-1",
! 152: "es_UY.ISO8859-15",
! 153: "es_UY.UTF-8",
! 154: "es_VE.ISO8859-1",
! 155: "es_VE.ISO8859-15",
! 156: "es_VE.UTF-8",
! 157: "fa_IR.UTF-8",
! 158: "fi_FI.ISO8859-1",
! 159: "fi_FI.ISO8859-15",
! 160: "fi_FI.UTF-8",
! 161: "fr_BE.ISO8859-1",
! 162: "fr_BE.ISO8859-15",
! 163: "fr_BE.UTF-8",
! 164: "fr_CA.ISO8859-1",
! 165: "fr_CA.ISO8859-15",
! 166: "fr_CA.UTF-8",
! 167: "fr_CH.ISO8859-1",
! 168: "fr_CH.ISO8859-15",
! 169: "fr_CH.UTF-8",
! 170: "fr_FR.ISO8859-1",
! 171: "fr_FR.ISO8859-15",
! 172: "fr_FR.UTF-8",
! 173: "hr_HR.ISO8859-2",
! 174: "hu_HU.ISO8859-2",
! 175: "hu_HU.UTF-8",
! 176: "hy_AM.ARMSCII-8",
! 177: "hy_AM.UTF-8",
! 178: "is_IS.ISO8859-1",
! 179: "is_IS.ISO8859-15",
! 180: "is_IS.UTF-8",
! 181: "it_CH.ISO8859-1",
! 182: "it_CH.ISO8859-15",
! 183: "it_CH.UTF-8",
! 184: "it_IT.ISO8859-1",
! 185: "it_IT.ISO8859-15",
! 186: "it_IT.UTF-8",
! 187: "ja_JP.UTF-8",
! 188: "ko_KR.UTF-8",
! 189: "lt_LT.ISO8859-13",
! 190: "lt_LT.ISO8859-4",
! 191: "lt_LT.UTF-8",
! 192: "nl_BE.ISO8859-1",
! 193: "nl_BE.ISO8859-15",
! 194: "nl_BE.UTF-8",
! 195: "nl_NL.ISO8859-1",
! 196: "nl_NL.ISO8859-15",
! 197: "nl_NL.UTF-8",
! 198: "no_NO.ISO8859-1",
! 199: "no_NO.ISO8859-15",
! 200: "no_NO.UTF-8",
! 201: "pl_PL.ISO8859-2",
! 202: "pl_PL.UTF-8",
! 203: "pt_PT.ISO8859-1",
! 204: "pt_PT.ISO8859-15",
! 205: "pt_PT.UTF-8",
! 206: "ro_RO.UTF-8",
! 207: "ru_RU.CP866",
! 208: "ru_RU.ISO8859-5",
! 209: "ru_RU.KOI8-R",
! 210: "ru_RU.UTF-8",
! 211: "sk_SK.ISO8859-2",
! 212: "sk_SK.UTF-8",
! 213: "sl_SI.ISO8859-2",
! 214: "sl_SI.UTF-8",
! 215: "sv_SE.ISO8859-1",
! 216: "sv_SE.ISO8859-15",
! 217: "sv_SE.UTF-8",
! 218: "uk_UA.KOI8-U",
! 219: "uk_UA.UTF-8",
! 220: "zh_CN.UTF-8",
! 221: "zh_TW.UTF-8",
! 222: NULL
! 223: };
! 224:
! 225: void
! 226: show_locales(void)
! 227: {
! 228: int i = 0;
! 229:
! 230: while (some_locales[i])
! 231: puts(some_locales[i++]);
! 232: }
! 233:
! 234: void
! 235: show_charsets(void)
! 236: {
! 237: char *charset;
! 238: char charsets[sizeof(LOCALE_CHARSETS)];
! 239: char *s = charsets;
! 240:
! 241: bcopy(LOCALE_CHARSETS, charsets, sizeof(charsets));
! 242: do {
! 243: charset = strsep(&s, " \t");
! 244: if (charset && charset[0])
! 245: printf("%s\n", charset);
! 246: } while (charset);
! 247: }
! 248:
! 249: void
! 250: usage(void)
! 251: {
! 252: fprintf(stderr, "usage: %s [-a | -m]\n", __progname);
! 253: exit(1);
! 254: }
! 255:
! 256: int
! 257: main(int argc, char *argv[])
! 258: {
! 259: int opt, aflag = 0, mflag = 0;
! 260:
! 261: setlocale(LC_ALL, "");
! 262:
! 263: if (argc == 1) {
! 264: show_current_locale();
! 265: return 0;
! 266: }
! 267:
! 268: while ((opt = getopt(argc, argv, "am")) != -1) {
! 269: switch (opt) {
! 270: case 'a':
! 271: aflag = 1;
! 272: break;
! 273: case 'm':
! 274: mflag = 1;
! 275: break;
! 276: default:
! 277: usage();
! 278: }
! 279: }
! 280: argc -= optind;
! 281: argv += optind;
! 282:
! 283: if (argc != 0 || (aflag && mflag))
! 284: usage();
! 285: else if (aflag)
! 286: show_locales();
! 287: else if (mflag)
! 288: show_charsets();
! 289:
! 290: return 0;
! 291: }