[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.3

1.2       stsp        1: /*     $OpenBSD: locale.c,v 1.1 2013/06/03 14:27:50 stsp Exp $ */
1.1       stsp        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:        { 0,            NULL},
                     36: };
                     37:
                     38: void
                     39: show_current_locale()
                     40: {
1.3     ! jca        41:        char *lang, *lc_all;
1.1       stsp       42:        int i;
                     43:
1.3     ! jca        44:        lang = getenv("LANG");
        !            45:        lc_all = getenv("LC_ALL");
        !            46:
1.1       stsp       47:        printf("LANG=%s\n", lang ? lang : "");
1.3     ! jca        48:        for (i = 0; categories[i].name != NULL; i++) {
        !            49:                if (lc_all == NULL && getenv(categories[i].name))
        !            50:                        printf("%s=%s\n", categories[i].name,
        !            51:                            getenv(categories[i].name));
        !            52:                else
        !            53:                        printf("%s=\"%s\"\n", categories[i].name,
        !            54:                            setlocale(categories[i].category, NULL));
        !            55:        }
        !            56:        printf("LC_ALL=%s\n", lc_all ? lc_all : "");
1.1       stsp       57: }
                     58:
                     59: const char * const some_locales[] = {
                     60:        "C",
                     61:        "C.UTF-8",
                     62:        "POSIX",
                     63:        "POSIX.UTF-8",
1.3     ! jca        64:        "Pig",
1.1       stsp       65:        "ar_SD.UTF-8",
                     66:        "ar_SY.UTF-8",
                     67:        "bg_BG.CP1251",
                     68:        "ca_ES.ISO8859-1",
                     69:        "ca_ES.ISO8859-15",
                     70:        "ca_ES.UTF-8",
                     71:        "cs_CZ.ISO8859-2",
                     72:        "cs_CZ.UTF-8",
                     73:        "da_DK.ISO8859-1",
                     74:        "da_DK.ISO8859-15",
                     75:        "da_DK.UTF-8",
                     76:        "de_AT.ISO8859-1",
                     77:        "de_AT.ISO8859-15",
                     78:        "de_AT.UTF-8",
                     79:        "de_CH.ISO8859-1",
                     80:        "de_CH.ISO8859-15",
                     81:        "de_CH.UTF-8",
                     82:        "de_DE.ISO8859-1",
                     83:        "de_DE.ISO8859-15",
                     84:        "de_DE.UTF-8",
                     85:        "el_GR.ISO8859-7",
                     86:        "el_GR.UTF-8",
                     87:        "en_AU.ISO8859-1",
                     88:        "en_AU.ISO8859-15",
                     89:        "en_AU.UTF-8",
                     90:        "en_CA.ISO8859-1",
                     91:        "en_CA.ISO8859-15",
                     92:        "en_CA.UTF-8",
                     93:        "en_GB.ISO8859-1",
                     94:        "en_GB.ISO8859-15",
                     95:        "en_GB.UTF-8",
                     96:        "en_US.ISO8859-1",
                     97:        "en_US.ISO8859-15",
                     98:        "en_US.UTF-8",
                     99:        "es_AR.ISO8859-1",
                    100:        "es_AR.ISO8859-15",
                    101:        "es_AR.UTF-8",
                    102:        "es_BO.ISO8859-1",
                    103:        "es_BO.ISO8859-15",
                    104:        "es_BO.UTF-8",
                    105:        "es_CH.ISO8859-1",
                    106:        "es_CH.ISO8859-15",
                    107:        "es_CH.UTF-8",
                    108:        "es_CO.ISO8859-1",
                    109:        "es_CO.ISO8859-15",
                    110:        "es_CO.UTF-8",
                    111:        "es_CR.ISO8859-1",
                    112:        "es_CR.ISO8859-15",
                    113:        "es_CR.UTF-8",
                    114:        "es_CU.ISO8859-1",
                    115:        "es_CU.ISO8859-15",
                    116:        "es_CU.UTF-8",
                    117:        "es_DO.ISO8859-1",
                    118:        "es_DO.ISO8859-15",
                    119:        "es_DO.UTF-8",
                    120:        "es_EC.ISO8859-1",
                    121:        "es_EC.ISO8859-15",
                    122:        "es_EC.UTF-8",
                    123:        "es_ES.ISO8859-1",
                    124:        "es_ES.ISO8859-15",
                    125:        "es_ES.UTF-8",
                    126:        "es_GQ.ISO8859-1",
                    127:        "es_GQ.ISO8859-15",
                    128:        "es_GQ.UTF-8",
                    129:        "es_GT.ISO8859-1",
                    130:        "es_GT.ISO8859-15",
                    131:        "es_GT.UTF-8",
                    132:        "es_HN.ISO8859-1",
                    133:        "es_HN.ISO8859-15",
                    134:        "es_HN.UTF-8",
                    135:        "es_MX.ISO8859-1",
                    136:        "es_MX.ISO8859-15",
                    137:        "es_MX.UTF-8",
                    138:        "es_NI.ISO8859-1",
                    139:        "es_NI.ISO8859-15",
                    140:        "es_NI.UTF-8",
                    141:        "es_PA.ISO8859-1",
                    142:        "es_PA.ISO8859-15",
                    143:        "es_PA.UTF-8",
                    144:        "es_PE.ISO8859-1",
                    145:        "es_PE.ISO8859-15",
                    146:        "es_PE.UTF-8",
                    147:        "es_PR.ISO8859-1",
                    148:        "es_PR.ISO8859-15",
                    149:        "es_PR.UTF-8",
                    150:        "es_PY.ISO8859-1",
                    151:        "es_PY.ISO8859-15",
                    152:        "es_PY.UTF-8",
                    153:        "es_SV.ISO8859-1",
                    154:        "es_SV.ISO8859-15",
                    155:        "es_SV.UTF-8",
                    156:        "es_US.ISO8859-1",
                    157:        "es_US.ISO8859-15",
                    158:        "es_US.UTF-8",
                    159:        "es_UY.ISO8859-1",
                    160:        "es_UY.ISO8859-15",
                    161:        "es_UY.UTF-8",
                    162:        "es_VE.ISO8859-1",
                    163:        "es_VE.ISO8859-15",
                    164:        "es_VE.UTF-8",
                    165:        "fa_IR.UTF-8",
                    166:        "fi_FI.ISO8859-1",
                    167:        "fi_FI.ISO8859-15",
                    168:        "fi_FI.UTF-8",
                    169:        "fr_BE.ISO8859-1",
                    170:        "fr_BE.ISO8859-15",
                    171:        "fr_BE.UTF-8",
                    172:        "fr_CA.ISO8859-1",
                    173:        "fr_CA.ISO8859-15",
                    174:        "fr_CA.UTF-8",
                    175:        "fr_CH.ISO8859-1",
                    176:        "fr_CH.ISO8859-15",
                    177:        "fr_CH.UTF-8",
                    178:        "fr_FR.ISO8859-1",
                    179:        "fr_FR.ISO8859-15",
                    180:        "fr_FR.UTF-8",
                    181:        "hr_HR.ISO8859-2",
                    182:        "hu_HU.ISO8859-2",
                    183:        "hu_HU.UTF-8",
                    184:        "hy_AM.ARMSCII-8",
                    185:        "hy_AM.UTF-8",
                    186:        "is_IS.ISO8859-1",
                    187:        "is_IS.ISO8859-15",
                    188:        "is_IS.UTF-8",
                    189:        "it_CH.ISO8859-1",
                    190:        "it_CH.ISO8859-15",
                    191:        "it_CH.UTF-8",
                    192:        "it_IT.ISO8859-1",
                    193:        "it_IT.ISO8859-15",
                    194:        "it_IT.UTF-8",
                    195:        "ja_JP.UTF-8",
                    196:        "ko_KR.UTF-8",
                    197:        "lt_LT.ISO8859-13",
                    198:        "lt_LT.ISO8859-4",
                    199:        "lt_LT.UTF-8",
                    200:        "nl_BE.ISO8859-1",
                    201:        "nl_BE.ISO8859-15",
                    202:        "nl_BE.UTF-8",
                    203:        "nl_NL.ISO8859-1",
                    204:        "nl_NL.ISO8859-15",
                    205:        "nl_NL.UTF-8",
                    206:        "no_NO.ISO8859-1",
                    207:        "no_NO.ISO8859-15",
                    208:        "no_NO.UTF-8",
                    209:        "pl_PL.ISO8859-2",
                    210:        "pl_PL.UTF-8",
                    211:        "pt_PT.ISO8859-1",
                    212:        "pt_PT.ISO8859-15",
                    213:        "pt_PT.UTF-8",
                    214:        "ro_RO.UTF-8",
                    215:        "ru_RU.CP866",
                    216:        "ru_RU.ISO8859-5",
                    217:        "ru_RU.KOI8-R",
                    218:        "ru_RU.UTF-8",
                    219:        "sk_SK.ISO8859-2",
                    220:        "sk_SK.UTF-8",
                    221:        "sl_SI.ISO8859-2",
                    222:        "sl_SI.UTF-8",
                    223:        "sv_SE.ISO8859-1",
                    224:        "sv_SE.ISO8859-15",
                    225:        "sv_SE.UTF-8",
                    226:        "uk_UA.KOI8-U",
                    227:        "uk_UA.UTF-8",
                    228:        "zh_CN.UTF-8",
                    229:        "zh_TW.UTF-8",
                    230:        NULL
                    231: };
                    232:
                    233: void
                    234: show_locales(void)
                    235: {
                    236:        int i = 0;
                    237:
                    238:        while (some_locales[i])
                    239:                puts(some_locales[i++]);
                    240: }
                    241:
                    242: void
                    243: show_charsets(void)
                    244: {
                    245:        char *charset;
                    246:        char charsets[sizeof(LOCALE_CHARSETS)];
                    247:        char *s = charsets;
                    248:
                    249:        bcopy(LOCALE_CHARSETS, charsets, sizeof(charsets));
                    250:        do {
                    251:                charset = strsep(&s, " \t");
                    252:                if (charset && charset[0])
                    253:                        printf("%s\n", charset);
                    254:        } while (charset);
                    255: }
                    256:
                    257: void
                    258: usage(void)
                    259: {
                    260:        fprintf(stderr, "usage: %s [-a | -m]\n", __progname);
                    261:        exit(1);
                    262: }
                    263:
                    264: int
                    265: main(int argc, char *argv[])
                    266: {
                    267:        int opt, aflag = 0, mflag = 0;
                    268:
                    269:        setlocale(LC_ALL, "");
                    270:
                    271:        if (argc == 1) {
                    272:                show_current_locale();
                    273:                return 0;
                    274:        }
                    275:
                    276:        while ((opt = getopt(argc, argv, "am")) != -1) {
                    277:                switch (opt) {
                    278:                case 'a':
                    279:                        aflag = 1;
                    280:                        break;
                    281:                case 'm':
                    282:                        mflag = 1;
                    283:                        break;
                    284:                default:
                    285:                        usage();
                    286:                }
                    287:        }
                    288:        argc -= optind;
                    289:        argv += optind;
                    290:
                    291:        if (argc != 0 || (aflag && mflag))
                    292:                usage();
                    293:        else if (aflag)
                    294:                show_locales();
                    295:        else if (mflag)
                    296:                show_charsets();
                    297:
                    298:        return 0;
                    299: }