openenvutils/commandshell/shell/src/modules/langinfo.c
changeset 0 2e3d3ce01487
child 1 0fdb7f6b0309
equal deleted inserted replaced
-1:000000000000 0:2e3d3ce01487
       
     1 // langinfo.c - parameter interface to langinfo via curses
       
     2 //
       
     3 // © Portions Copyright (c) Symbian Software Ltd 2007. All rights reserved.
       
     4 //
       
     5 /*
       
     6  * This file is part of zsh, the Z shell.
       
     7  *
       
     8  * Copyright (c) 2002 Peter Stephenson, Clint Adams
       
     9  * All rights reserved.
       
    10  *
       
    11  * Permission is hereby granted, without written agreement and without
       
    12  * license or royalty fees, to use, copy, modify, and distribute this
       
    13  * software and to distribute modified versions of this software for any
       
    14  * purpose, provided that the above copyright notice and the following
       
    15  * two paragraphs appear in all copies of this software.
       
    16  *
       
    17  * In no event shall Peter Stephenson, Clint Adams or the Zsh Development Group
       
    18  * be liable to any party for direct, indirect, special, incidental, or
       
    19  * consequential damages arising out of the use of this software and its
       
    20  * documentation, even if Sven Wishnowsky, Clint Adams and the Zsh
       
    21  * Development Group have been advised of the possibility of such damage.
       
    22  *
       
    23  * Peter Stephenson, Clint Adams and the Zsh Development Group specifically
       
    24  * disclaim any warranties, including, but not limited to, the implied
       
    25  * warranties of merchantability and fitness for a particular purpose.
       
    26  * The software provided hereunder is on an "as is" basis, and Peter
       
    27  * Stephenson, Clint Adams and the Zsh Development Group have no obligation
       
    28  * to provide maintenance, support, updates, enhancements, or modifications.
       
    29  *
       
    30  */
       
    31 #include "langinfo.mdh"
       
    32 #include "langinfo.pro"
       
    33 
       
    34 static char langinfo_nam[] = "langinfo";
       
    35 
       
    36 #ifdef HAVE_LANGINFO_H
       
    37 # include <langinfo.h>
       
    38 #endif
       
    39 
       
    40 #ifdef __SYMBIAN32__
       
    41 #ifdef __WINSCW__
       
    42 #pragma warn_unusedarg off
       
    43 #endif//__WINSCW__
       
    44 #endif//__SYMBIAN32__
       
    45 
       
    46 static Param langinfo_pm;
       
    47 
       
    48 /**/
       
    49 #ifdef HAVE_NL_LANGINFO
       
    50 
       
    51 static char *nl_names[] = {
       
    52 #ifdef CODESET
       
    53     "CODESET",
       
    54 #endif /* CODESET */
       
    55 #ifdef D_T_FMT
       
    56     "D_T_FMT",
       
    57 #endif /* D_T_FMT */
       
    58 #ifdef D_FMT
       
    59     "D_FMT",
       
    60 #endif /* D_FMT */
       
    61 #ifdef T_FMT
       
    62     "T_FMT",
       
    63 #endif /* T_FMT */
       
    64 #ifdef RADIXCHAR
       
    65     "RADIXCHAR",
       
    66 #endif /* RADIXCHAR */
       
    67 #ifdef THOUSEP
       
    68     "THOUSEP",
       
    69 #endif /* THOUSEP */
       
    70 #ifdef YESEXPR
       
    71     "YESEXPR",
       
    72 #endif /* YESEXPR */
       
    73 #ifdef NOEXPR
       
    74     "NOEXPR",
       
    75 #endif /* NOEXPR */
       
    76 #ifdef CRNCYSTR
       
    77     "CRNCYSTR",
       
    78 #endif /* CRNCYSTR */
       
    79 #ifdef ABDAY_1
       
    80     "ABDAY_1",
       
    81 #endif /* ABDAY_1 */
       
    82 #ifdef ABDAY_2
       
    83     "ABDAY_2",
       
    84 #endif /* ABDAY_2 */
       
    85 #ifdef ABDAY_3
       
    86     "ABDAY_3",
       
    87 #endif /* ABDAY_3 */
       
    88 #ifdef ABDAY_4
       
    89     "ABDAY_4",
       
    90 #endif /* ABDAY_4 */
       
    91 #ifdef ABDAY_5
       
    92     "ABDAY_5",
       
    93 #endif /* ABDAY_5 */
       
    94 #ifdef ABDAY_6
       
    95     "ABDAY_6",
       
    96 #endif /* ABDAY_6 */
       
    97 #ifdef ABDAY_7
       
    98     "ABDAY_7",
       
    99 #endif /* ABDAY_7 */
       
   100 #ifdef DAY_1
       
   101     "DAY_1",
       
   102 #endif /* DAY_1 */
       
   103 #ifdef DAY_2
       
   104     "DAY_2",
       
   105 #endif /* DAY_2 */
       
   106 #ifdef DAY_3
       
   107     "DAY_3",
       
   108 #endif /* DAY_3 */
       
   109 #ifdef DAY_4
       
   110     "DAY_4",
       
   111 #endif /* DAY_4 */
       
   112 #ifdef DAY_5
       
   113     "DAY_5",
       
   114 #endif /* DAY_5 */
       
   115 #ifdef DAY_6
       
   116     "DAY_6",
       
   117 #endif /* DAY_6 */
       
   118 #ifdef DAY_7
       
   119     "DAY_7",
       
   120 #endif /* DAY_7 */
       
   121 #ifdef ABMON_1
       
   122     "ABMON_1",
       
   123 #endif /* ABMON_1 */
       
   124 #ifdef ABMON_2
       
   125     "ABMON_2",
       
   126 #endif /* ABMON_2 */
       
   127 #ifdef ABMON_3
       
   128     "ABMON_3",
       
   129 #endif /* ABMON_3 */
       
   130 #ifdef ABMON_4
       
   131     "ABMON_4",
       
   132 #endif /* ABMON_4 */
       
   133 #ifdef ABMON_5
       
   134     "ABMON_5",
       
   135 #endif /* ABMON_5 */
       
   136 #ifdef ABMON_6
       
   137     "ABMON_6",
       
   138 #endif /* ABMON_6 */
       
   139 #ifdef ABMON_7
       
   140     "ABMON_7",
       
   141 #endif /* ABMON_7 */
       
   142 #ifdef ABMON_8
       
   143     "ABMON_8",
       
   144 #endif /* ABMON_8 */
       
   145 #ifdef ABMON_9
       
   146     "ABMON_9",
       
   147 #endif /* ABMON_9 */
       
   148 #ifdef ABMON_10
       
   149     "ABMON_10",
       
   150 #endif /* ABMON_10 */
       
   151 #ifdef ABMON_11
       
   152     "ABMON_11",
       
   153 #endif /* ABMON_11 */
       
   154 #ifdef ABMON_12
       
   155     "ABMON_12",
       
   156 #endif /* ABMON_12 */
       
   157 #ifdef MON_1
       
   158     "MON_1",
       
   159 #endif /* MON_1 */
       
   160 #ifdef MON_2
       
   161     "MON_2",
       
   162 #endif /* MON_2 */
       
   163 #ifdef MON_3
       
   164     "MON_3",
       
   165 #endif /* MON_3 */
       
   166 #ifdef MON_4
       
   167     "MON_4",
       
   168 #endif /* MON_4 */
       
   169 #ifdef MON_5
       
   170     "MON_5",
       
   171 #endif /* MON_5 */
       
   172 #ifdef MON_6
       
   173     "MON_6",
       
   174 #endif /* MON_6 */
       
   175 #ifdef MON_7
       
   176     "MON_7",
       
   177 #endif /* MON_7 */
       
   178 #ifdef MON_8
       
   179     "MON_8",
       
   180 #endif /* MON_8 */
       
   181 #ifdef MON_9
       
   182     "MON_9",
       
   183 #endif /* MON_9 */
       
   184 #ifdef MON_10
       
   185     "MON_10",
       
   186 #endif /* MON_10 */
       
   187 #ifdef MON_11
       
   188     "MON_11",
       
   189 #endif /* MON_11 */
       
   190 #ifdef MON_12
       
   191     "MON_12",
       
   192 #endif /* MON_12 */
       
   193 #ifdef T_FMT_AMPM
       
   194     "T_FMT_AMPM",
       
   195 #endif /* T_FMT_AMPM */
       
   196 #ifdef AM_STR
       
   197     "AM_STR",
       
   198 #endif /* AM_STR */
       
   199 #ifdef PM_STR
       
   200     "PM_STR",
       
   201 #endif /* PM_STR */
       
   202 #ifdef ERA
       
   203     "ERA",
       
   204 #endif /* ERA */
       
   205 #ifdef ERA_D_FMT
       
   206     "ERA_D_FMT",
       
   207 #endif /* ERA_D_FMT */
       
   208 #ifdef ERA_D_T_FMT
       
   209     "ERA_D_T_FMT",
       
   210 #endif /* ERA_D_T_FMT */
       
   211 #ifdef ERA_T_FMT
       
   212     "ERA_T_FMT",
       
   213 #endif /* ERA_T_FMT */
       
   214 #ifdef ALT_DIGITS
       
   215     "ALT_DIGITS",
       
   216 #endif /* ALT_DIGITS */
       
   217     NULL
       
   218 };
       
   219 
       
   220 static nl_item nl_vals[] = {
       
   221 #ifdef CODESET
       
   222     CODESET,
       
   223 #endif /* CODESET */
       
   224 #ifdef D_T_FMT
       
   225     D_T_FMT,
       
   226 #endif /* D_T_FMT */
       
   227 #ifdef D_FMT
       
   228     D_FMT,
       
   229 #endif /* D_FMT */
       
   230 #ifdef T_FMT
       
   231     T_FMT,
       
   232 #endif /* T_FMT */
       
   233 #ifdef RADIXCHAR
       
   234     RADIXCHAR,
       
   235 #endif /* RADIXCHAR */
       
   236 #ifdef THOUSEP
       
   237     THOUSEP,
       
   238 #endif /* THOUSEP */
       
   239 #ifdef YESEXPR
       
   240     YESEXPR,
       
   241 #endif /* YESEXPR */
       
   242 #ifdef NOEXPR
       
   243     NOEXPR,
       
   244 #endif /* NOEXPR */
       
   245 #ifdef CRNCYSTR
       
   246     CRNCYSTR,
       
   247 #endif /* CRNCYSTR */
       
   248 #ifdef ABDAY_1
       
   249     ABDAY_1,
       
   250 #endif /* ABDAY_1 */
       
   251 #ifdef ABDAY_2
       
   252     ABDAY_2,
       
   253 #endif /* ABDAY_2 */
       
   254 #ifdef ABDAY_3
       
   255     ABDAY_3,
       
   256 #endif /* ABDAY_3 */
       
   257 #ifdef ABDAY_4
       
   258     ABDAY_4,
       
   259 #endif /* ABDAY_4 */
       
   260 #ifdef ABDAY_5
       
   261     ABDAY_5,
       
   262 #endif /* ABDAY_5 */
       
   263 #ifdef ABDAY_6
       
   264     ABDAY_6,
       
   265 #endif /* ABDAY_6 */
       
   266 #ifdef ABDAY_7
       
   267     ABDAY_7,
       
   268 #endif /* ABDAY_7 */
       
   269 #ifdef DAY_1
       
   270     DAY_1,
       
   271 #endif /* DAY_1 */
       
   272 #ifdef DAY_2
       
   273     DAY_2,
       
   274 #endif /* DAY_2 */
       
   275 #ifdef DAY_3
       
   276     DAY_3,
       
   277 #endif /* DAY_3 */
       
   278 #ifdef DAY_4
       
   279     DAY_4,
       
   280 #endif /* DAY_4 */
       
   281 #ifdef DAY_5
       
   282     DAY_5,
       
   283 #endif /* DAY_5 */
       
   284 #ifdef DAY_6
       
   285     DAY_6,
       
   286 #endif /* DAY_6 */
       
   287 #ifdef DAY_7
       
   288     DAY_7,
       
   289 #endif /* DAY_7 */
       
   290 #ifdef ABMON_1
       
   291     ABMON_1,
       
   292 #endif /* ABMON_1 */
       
   293 #ifdef ABMON_2
       
   294     ABMON_2,
       
   295 #endif /* ABMON_2 */
       
   296 #ifdef ABMON_3
       
   297     ABMON_3,
       
   298 #endif /* ABMON_3 */
       
   299 #ifdef ABMON_4
       
   300     ABMON_4,
       
   301 #endif /* ABMON_4 */
       
   302 #ifdef ABMON_5
       
   303     ABMON_5,
       
   304 #endif /* ABMON_5 */
       
   305 #ifdef ABMON_6
       
   306     ABMON_6,
       
   307 #endif /* ABMON_6 */
       
   308 #ifdef ABMON_7
       
   309     ABMON_7,
       
   310 #endif /* ABMON_7 */
       
   311 #ifdef ABMON_8
       
   312     ABMON_8,
       
   313 #endif /* ABMON_8 */
       
   314 #ifdef ABMON_9
       
   315     ABMON_9,
       
   316 #endif /* ABMON_9 */
       
   317 #ifdef ABMON_10
       
   318     ABMON_10,
       
   319 #endif /* ABMON_10 */
       
   320 #ifdef ABMON_11
       
   321     ABMON_11,
       
   322 #endif /* ABMON_11 */
       
   323 #ifdef ABMON_12
       
   324     ABMON_12,
       
   325 #endif /* ABMON_12 */
       
   326 #ifdef MON_1
       
   327     MON_1,
       
   328 #endif /* MON_1 */
       
   329 #ifdef MON_2
       
   330     MON_2,
       
   331 #endif /* MON_2 */
       
   332 #ifdef MON_3
       
   333     MON_3,
       
   334 #endif /* MON_3 */
       
   335 #ifdef MON_4
       
   336     MON_4,
       
   337 #endif /* MON_4 */
       
   338 #ifdef MON_5
       
   339     MON_5,
       
   340 #endif /* MON_5 */
       
   341 #ifdef MON_6
       
   342     MON_6,
       
   343 #endif /* MON_6 */
       
   344 #ifdef MON_7
       
   345     MON_7,
       
   346 #endif /* MON_7 */
       
   347 #ifdef MON_8
       
   348     MON_8,
       
   349 #endif /* MON_8 */
       
   350 #ifdef MON_9
       
   351     MON_9,
       
   352 #endif /* MON_9 */
       
   353 #ifdef MON_10
       
   354     MON_10,
       
   355 #endif /* MON_10 */
       
   356 #ifdef MON_11
       
   357     MON_11,
       
   358 #endif /* MON_11 */
       
   359 #ifdef MON_12
       
   360     MON_12,
       
   361 #endif /* MON_12 */
       
   362 #ifdef T_FMT_AMPM
       
   363     T_FMT_AMPM,
       
   364 #endif /* T_FMT_AMPM */
       
   365 #ifdef AM_STR
       
   366     AM_STR,
       
   367 #endif /* AM_STR */
       
   368 #ifdef PM_STR
       
   369     PM_STR,
       
   370 #endif /* PM_STR */
       
   371 #ifdef ERA
       
   372     ERA,
       
   373 #endif /* ERA */
       
   374 #ifdef ERA_D_FMT
       
   375     ERA_D_FMT,
       
   376 #endif /* ERA_D_FMT */
       
   377 #ifdef ERA_D_T_FMT
       
   378     ERA_D_T_FMT,
       
   379 #endif /* ERA_D_T_FMT */
       
   380 #ifdef ERA_T_FMT
       
   381     ERA_T_FMT,
       
   382 #endif /* ERA_T_FMT */
       
   383 #ifdef ALT_DIGITS
       
   384     ALT_DIGITS,
       
   385 #endif /* ALT_DIGITS */
       
   386     0
       
   387 };
       
   388 
       
   389 static nl_item *
       
   390 liitem(char *name)
       
   391 {
       
   392     char **element;
       
   393     nl_item *nlcode;
       
   394 
       
   395     nlcode = &nl_vals[0];
       
   396 
       
   397     for (element = (char **)nl_names; *element; element++, nlcode++) {
       
   398 	if ((!strcmp(*element, name)))
       
   399 	    return nlcode;
       
   400     }
       
   401 
       
   402     return NULL;
       
   403 }
       
   404 
       
   405 /**/
       
   406 static void
       
   407 shempty(void)
       
   408 {
       
   409 }
       
   410 
       
   411 /* Create a simple special hash parameter. */
       
   412 
       
   413 /**/
       
   414 static Param
       
   415 createlihash()
       
   416 {
       
   417     Param pm;
       
   418     HashTable ht;
       
   419 
       
   420     unsetparam(langinfo_nam);
       
   421 
       
   422     if (!(pm = createparam(langinfo_nam, PM_SPECIAL|PM_HIDE|PM_HIDEVAL|
       
   423 			   PM_REMOVABLE|PM_HASHED)))
       
   424 	return NULL;
       
   425 
       
   426     pm->level = pm->old ? locallevel : 0;
       
   427     pm->gsu.h = &stdhash_gsu;
       
   428     pm->u.hash = ht = newhashtable(7, langinfo_nam, NULL);
       
   429 
       
   430     ht->hash        = hasher;
       
   431     ht->emptytable  = (TableFunc) shempty;
       
   432     ht->filltable   = NULL;
       
   433     ht->addnode     = (AddNodeFunc) shempty;
       
   434     ht->getnode     = ht->getnode2 = getlanginfo;
       
   435     ht->removenode  = (RemoveNodeFunc) shempty;
       
   436     ht->disablenode = NULL;
       
   437     ht->enablenode  = NULL;
       
   438     ht->freenode    = (FreeNodeFunc) shempty;
       
   439     ht->printnode   = printparamnode;
       
   440     ht->scantab     = scanlanginfo;
       
   441 
       
   442     return (langinfo_pm = pm);
       
   443 }
       
   444 
       
   445 /**/
       
   446 static HashNode
       
   447 getlanginfo(UNUSED(HashTable ht), char *name)
       
   448 {
       
   449     int len, *elem;
       
   450     char *listr;
       
   451     Param pm = NULL;
       
   452 
       
   453     unmetafy(name, &len);
       
   454 
       
   455     pm = (Param) hcalloc(sizeof(struct param));
       
   456     pm->nam = dupstring(name);
       
   457     pm->flags = PM_READONLY | PM_SCALAR;
       
   458     pm->gsu.s = &nullsetscalar_gsu;
       
   459 
       
   460     if(name)
       
   461 	elem = liitem(name);
       
   462     else
       
   463 	elem = NULL;
       
   464 
       
   465     if (elem && (listr = nl_langinfo(*elem))) {
       
   466 	pm->u.str = dupstring(listr);
       
   467     }
       
   468     else
       
   469     {
       
   470 	/* zwarn("no such lang info: %s", name, 0); */
       
   471 	pm->u.str = dupstring("");
       
   472 	pm->flags |= PM_UNSET;
       
   473     }
       
   474     return (HashNode) pm;
       
   475 }
       
   476 
       
   477 /**/
       
   478 static void
       
   479 scanlanginfo(UNUSED(HashTable ht), ScanFunc func, int flags)
       
   480 {
       
   481     Param pm = NULL;
       
   482     char **element, *langstr;
       
   483     nl_item *nlcode;
       
   484 
       
   485     pm = (Param) hcalloc(sizeof(struct param));
       
   486     pm->gsu.s = &nullsetscalar_gsu;
       
   487     pm->flags = PM_READONLY | PM_SCALAR;
       
   488 
       
   489     nlcode = &nl_vals[0];
       
   490     for (element = (char **)nl_names; *element; element++, nlcode++) {
       
   491 	if ((langstr = nl_langinfo(*nlcode)) != NULL) {
       
   492 	    pm->u.str = dupstring(langstr);
       
   493 	    pm->nam = dupstring(*element);
       
   494 	    func((HashNode) pm, flags);
       
   495 	}
       
   496     }
       
   497     
       
   498 }
       
   499 
       
   500 /**/
       
   501 #endif /* HAVE_NL_LANGINFO */
       
   502 
       
   503 /**/
       
   504 int
       
   505 setup_(UNUSED(Module m))
       
   506 {
       
   507     return 0;
       
   508 }
       
   509 
       
   510 /**/
       
   511 int
       
   512 boot_(UNUSED(Module m))
       
   513 {
       
   514 #ifdef HAVE_NL_LANGINFO
       
   515     if (!createlihash())
       
   516     	return 1;
       
   517 #else
       
   518     unsetparam(langinfo_nam);
       
   519 #endif
       
   520     return 0;
       
   521 }
       
   522 
       
   523 /**/
       
   524 int
       
   525 cleanup_(UNUSED(Module m))
       
   526 {
       
   527 #ifdef HAVE_NL_LANGINFO
       
   528     Param pm;
       
   529 
       
   530     if ((pm = (Param) paramtab->getnode(paramtab, langinfo_nam)) &&
       
   531 	pm == langinfo_pm) {
       
   532 	pm->flags &= ~PM_READONLY;
       
   533 	unsetparam_pm(pm, 0, 1);
       
   534     }
       
   535 #endif
       
   536     return 0;
       
   537 }
       
   538 
       
   539 /**/
       
   540 int
       
   541 finish_(UNUSED(Module m))
       
   542 {
       
   543     return 0;
       
   544 }