[BACK]Return to locale.c CVS log [TXT][DIR] Up to [local] / src / usr.bin / locale

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: }