--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/openenvutils/commandshell/shell/src/modules/langinfo.c Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,544 @@
+// langinfo.c - parameter interface to langinfo via curses
+//
+// © Portions Copyright (c) Symbian Software Ltd 2007. All rights reserved.
+//
+/*
+ * This file is part of zsh, the Z shell.
+ *
+ * Copyright (c) 2002 Peter Stephenson, Clint Adams
+ * All rights reserved.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and to distribute modified versions of this software for any
+ * purpose, provided that the above copyright notice and the following
+ * two paragraphs appear in all copies of this software.
+ *
+ * In no event shall Peter Stephenson, Clint Adams or the Zsh Development Group
+ * be liable to any party for direct, indirect, special, incidental, or
+ * consequential damages arising out of the use of this software and its
+ * documentation, even if Sven Wishnowsky, Clint Adams and the Zsh
+ * Development Group have been advised of the possibility of such damage.
+ *
+ * Peter Stephenson, Clint Adams and the Zsh Development Group specifically
+ * disclaim any warranties, including, but not limited to, the implied
+ * warranties of merchantability and fitness for a particular purpose.
+ * The software provided hereunder is on an "as is" basis, and Peter
+ * Stephenson, Clint Adams and the Zsh Development Group have no obligation
+ * to provide maintenance, support, updates, enhancements, or modifications.
+ *
+ */
+#include "langinfo.mdh"
+#include "langinfo.pro"
+
+static char langinfo_nam[] = "langinfo";
+
+#ifdef HAVE_LANGINFO_H
+# include <langinfo.h>
+#endif
+
+#ifdef __SYMBIAN32__
+#ifdef __WINSCW__
+#pragma warn_unusedarg off
+#endif//__WINSCW__
+#endif//__SYMBIAN32__
+
+static Param langinfo_pm;
+
+/**/
+#ifdef HAVE_NL_LANGINFO
+
+static char *nl_names[] = {
+#ifdef CODESET
+ "CODESET",
+#endif /* CODESET */
+#ifdef D_T_FMT
+ "D_T_FMT",
+#endif /* D_T_FMT */
+#ifdef D_FMT
+ "D_FMT",
+#endif /* D_FMT */
+#ifdef T_FMT
+ "T_FMT",
+#endif /* T_FMT */
+#ifdef RADIXCHAR
+ "RADIXCHAR",
+#endif /* RADIXCHAR */
+#ifdef THOUSEP
+ "THOUSEP",
+#endif /* THOUSEP */
+#ifdef YESEXPR
+ "YESEXPR",
+#endif /* YESEXPR */
+#ifdef NOEXPR
+ "NOEXPR",
+#endif /* NOEXPR */
+#ifdef CRNCYSTR
+ "CRNCYSTR",
+#endif /* CRNCYSTR */
+#ifdef ABDAY_1
+ "ABDAY_1",
+#endif /* ABDAY_1 */
+#ifdef ABDAY_2
+ "ABDAY_2",
+#endif /* ABDAY_2 */
+#ifdef ABDAY_3
+ "ABDAY_3",
+#endif /* ABDAY_3 */
+#ifdef ABDAY_4
+ "ABDAY_4",
+#endif /* ABDAY_4 */
+#ifdef ABDAY_5
+ "ABDAY_5",
+#endif /* ABDAY_5 */
+#ifdef ABDAY_6
+ "ABDAY_6",
+#endif /* ABDAY_6 */
+#ifdef ABDAY_7
+ "ABDAY_7",
+#endif /* ABDAY_7 */
+#ifdef DAY_1
+ "DAY_1",
+#endif /* DAY_1 */
+#ifdef DAY_2
+ "DAY_2",
+#endif /* DAY_2 */
+#ifdef DAY_3
+ "DAY_3",
+#endif /* DAY_3 */
+#ifdef DAY_4
+ "DAY_4",
+#endif /* DAY_4 */
+#ifdef DAY_5
+ "DAY_5",
+#endif /* DAY_5 */
+#ifdef DAY_6
+ "DAY_6",
+#endif /* DAY_6 */
+#ifdef DAY_7
+ "DAY_7",
+#endif /* DAY_7 */
+#ifdef ABMON_1
+ "ABMON_1",
+#endif /* ABMON_1 */
+#ifdef ABMON_2
+ "ABMON_2",
+#endif /* ABMON_2 */
+#ifdef ABMON_3
+ "ABMON_3",
+#endif /* ABMON_3 */
+#ifdef ABMON_4
+ "ABMON_4",
+#endif /* ABMON_4 */
+#ifdef ABMON_5
+ "ABMON_5",
+#endif /* ABMON_5 */
+#ifdef ABMON_6
+ "ABMON_6",
+#endif /* ABMON_6 */
+#ifdef ABMON_7
+ "ABMON_7",
+#endif /* ABMON_7 */
+#ifdef ABMON_8
+ "ABMON_8",
+#endif /* ABMON_8 */
+#ifdef ABMON_9
+ "ABMON_9",
+#endif /* ABMON_9 */
+#ifdef ABMON_10
+ "ABMON_10",
+#endif /* ABMON_10 */
+#ifdef ABMON_11
+ "ABMON_11",
+#endif /* ABMON_11 */
+#ifdef ABMON_12
+ "ABMON_12",
+#endif /* ABMON_12 */
+#ifdef MON_1
+ "MON_1",
+#endif /* MON_1 */
+#ifdef MON_2
+ "MON_2",
+#endif /* MON_2 */
+#ifdef MON_3
+ "MON_3",
+#endif /* MON_3 */
+#ifdef MON_4
+ "MON_4",
+#endif /* MON_4 */
+#ifdef MON_5
+ "MON_5",
+#endif /* MON_5 */
+#ifdef MON_6
+ "MON_6",
+#endif /* MON_6 */
+#ifdef MON_7
+ "MON_7",
+#endif /* MON_7 */
+#ifdef MON_8
+ "MON_8",
+#endif /* MON_8 */
+#ifdef MON_9
+ "MON_9",
+#endif /* MON_9 */
+#ifdef MON_10
+ "MON_10",
+#endif /* MON_10 */
+#ifdef MON_11
+ "MON_11",
+#endif /* MON_11 */
+#ifdef MON_12
+ "MON_12",
+#endif /* MON_12 */
+#ifdef T_FMT_AMPM
+ "T_FMT_AMPM",
+#endif /* T_FMT_AMPM */
+#ifdef AM_STR
+ "AM_STR",
+#endif /* AM_STR */
+#ifdef PM_STR
+ "PM_STR",
+#endif /* PM_STR */
+#ifdef ERA
+ "ERA",
+#endif /* ERA */
+#ifdef ERA_D_FMT
+ "ERA_D_FMT",
+#endif /* ERA_D_FMT */
+#ifdef ERA_D_T_FMT
+ "ERA_D_T_FMT",
+#endif /* ERA_D_T_FMT */
+#ifdef ERA_T_FMT
+ "ERA_T_FMT",
+#endif /* ERA_T_FMT */
+#ifdef ALT_DIGITS
+ "ALT_DIGITS",
+#endif /* ALT_DIGITS */
+ NULL
+};
+
+static nl_item nl_vals[] = {
+#ifdef CODESET
+ CODESET,
+#endif /* CODESET */
+#ifdef D_T_FMT
+ D_T_FMT,
+#endif /* D_T_FMT */
+#ifdef D_FMT
+ D_FMT,
+#endif /* D_FMT */
+#ifdef T_FMT
+ T_FMT,
+#endif /* T_FMT */
+#ifdef RADIXCHAR
+ RADIXCHAR,
+#endif /* RADIXCHAR */
+#ifdef THOUSEP
+ THOUSEP,
+#endif /* THOUSEP */
+#ifdef YESEXPR
+ YESEXPR,
+#endif /* YESEXPR */
+#ifdef NOEXPR
+ NOEXPR,
+#endif /* NOEXPR */
+#ifdef CRNCYSTR
+ CRNCYSTR,
+#endif /* CRNCYSTR */
+#ifdef ABDAY_1
+ ABDAY_1,
+#endif /* ABDAY_1 */
+#ifdef ABDAY_2
+ ABDAY_2,
+#endif /* ABDAY_2 */
+#ifdef ABDAY_3
+ ABDAY_3,
+#endif /* ABDAY_3 */
+#ifdef ABDAY_4
+ ABDAY_4,
+#endif /* ABDAY_4 */
+#ifdef ABDAY_5
+ ABDAY_5,
+#endif /* ABDAY_5 */
+#ifdef ABDAY_6
+ ABDAY_6,
+#endif /* ABDAY_6 */
+#ifdef ABDAY_7
+ ABDAY_7,
+#endif /* ABDAY_7 */
+#ifdef DAY_1
+ DAY_1,
+#endif /* DAY_1 */
+#ifdef DAY_2
+ DAY_2,
+#endif /* DAY_2 */
+#ifdef DAY_3
+ DAY_3,
+#endif /* DAY_3 */
+#ifdef DAY_4
+ DAY_4,
+#endif /* DAY_4 */
+#ifdef DAY_5
+ DAY_5,
+#endif /* DAY_5 */
+#ifdef DAY_6
+ DAY_6,
+#endif /* DAY_6 */
+#ifdef DAY_7
+ DAY_7,
+#endif /* DAY_7 */
+#ifdef ABMON_1
+ ABMON_1,
+#endif /* ABMON_1 */
+#ifdef ABMON_2
+ ABMON_2,
+#endif /* ABMON_2 */
+#ifdef ABMON_3
+ ABMON_3,
+#endif /* ABMON_3 */
+#ifdef ABMON_4
+ ABMON_4,
+#endif /* ABMON_4 */
+#ifdef ABMON_5
+ ABMON_5,
+#endif /* ABMON_5 */
+#ifdef ABMON_6
+ ABMON_6,
+#endif /* ABMON_6 */
+#ifdef ABMON_7
+ ABMON_7,
+#endif /* ABMON_7 */
+#ifdef ABMON_8
+ ABMON_8,
+#endif /* ABMON_8 */
+#ifdef ABMON_9
+ ABMON_9,
+#endif /* ABMON_9 */
+#ifdef ABMON_10
+ ABMON_10,
+#endif /* ABMON_10 */
+#ifdef ABMON_11
+ ABMON_11,
+#endif /* ABMON_11 */
+#ifdef ABMON_12
+ ABMON_12,
+#endif /* ABMON_12 */
+#ifdef MON_1
+ MON_1,
+#endif /* MON_1 */
+#ifdef MON_2
+ MON_2,
+#endif /* MON_2 */
+#ifdef MON_3
+ MON_3,
+#endif /* MON_3 */
+#ifdef MON_4
+ MON_4,
+#endif /* MON_4 */
+#ifdef MON_5
+ MON_5,
+#endif /* MON_5 */
+#ifdef MON_6
+ MON_6,
+#endif /* MON_6 */
+#ifdef MON_7
+ MON_7,
+#endif /* MON_7 */
+#ifdef MON_8
+ MON_8,
+#endif /* MON_8 */
+#ifdef MON_9
+ MON_9,
+#endif /* MON_9 */
+#ifdef MON_10
+ MON_10,
+#endif /* MON_10 */
+#ifdef MON_11
+ MON_11,
+#endif /* MON_11 */
+#ifdef MON_12
+ MON_12,
+#endif /* MON_12 */
+#ifdef T_FMT_AMPM
+ T_FMT_AMPM,
+#endif /* T_FMT_AMPM */
+#ifdef AM_STR
+ AM_STR,
+#endif /* AM_STR */
+#ifdef PM_STR
+ PM_STR,
+#endif /* PM_STR */
+#ifdef ERA
+ ERA,
+#endif /* ERA */
+#ifdef ERA_D_FMT
+ ERA_D_FMT,
+#endif /* ERA_D_FMT */
+#ifdef ERA_D_T_FMT
+ ERA_D_T_FMT,
+#endif /* ERA_D_T_FMT */
+#ifdef ERA_T_FMT
+ ERA_T_FMT,
+#endif /* ERA_T_FMT */
+#ifdef ALT_DIGITS
+ ALT_DIGITS,
+#endif /* ALT_DIGITS */
+ 0
+};
+
+static nl_item *
+liitem(char *name)
+{
+ char **element;
+ nl_item *nlcode;
+
+ nlcode = &nl_vals[0];
+
+ for (element = (char **)nl_names; *element; element++, nlcode++) {
+ if ((!strcmp(*element, name)))
+ return nlcode;
+ }
+
+ return NULL;
+}
+
+/**/
+static void
+shempty(void)
+{
+}
+
+/* Create a simple special hash parameter. */
+
+/**/
+static Param
+createlihash()
+{
+ Param pm;
+ HashTable ht;
+
+ unsetparam(langinfo_nam);
+
+ if (!(pm = createparam(langinfo_nam, PM_SPECIAL|PM_HIDE|PM_HIDEVAL|
+ PM_REMOVABLE|PM_HASHED)))
+ return NULL;
+
+ pm->level = pm->old ? locallevel : 0;
+ pm->gsu.h = &stdhash_gsu;
+ pm->u.hash = ht = newhashtable(7, langinfo_nam, NULL);
+
+ ht->hash = hasher;
+ ht->emptytable = (TableFunc) shempty;
+ ht->filltable = NULL;
+ ht->addnode = (AddNodeFunc) shempty;
+ ht->getnode = ht->getnode2 = getlanginfo;
+ ht->removenode = (RemoveNodeFunc) shempty;
+ ht->disablenode = NULL;
+ ht->enablenode = NULL;
+ ht->freenode = (FreeNodeFunc) shempty;
+ ht->printnode = printparamnode;
+ ht->scantab = scanlanginfo;
+
+ return (langinfo_pm = pm);
+}
+
+/**/
+static HashNode
+getlanginfo(UNUSED(HashTable ht), char *name)
+{
+ int len, *elem;
+ char *listr;
+ Param pm = NULL;
+
+ unmetafy(name, &len);
+
+ pm = (Param) hcalloc(sizeof(struct param));
+ pm->nam = dupstring(name);
+ pm->flags = PM_READONLY | PM_SCALAR;
+ pm->gsu.s = &nullsetscalar_gsu;
+
+ if(name)
+ elem = liitem(name);
+ else
+ elem = NULL;
+
+ if (elem && (listr = nl_langinfo(*elem))) {
+ pm->u.str = dupstring(listr);
+ }
+ else
+ {
+ /* zwarn("no such lang info: %s", name, 0); */
+ pm->u.str = dupstring("");
+ pm->flags |= PM_UNSET;
+ }
+ return (HashNode) pm;
+}
+
+/**/
+static void
+scanlanginfo(UNUSED(HashTable ht), ScanFunc func, int flags)
+{
+ Param pm = NULL;
+ char **element, *langstr;
+ nl_item *nlcode;
+
+ pm = (Param) hcalloc(sizeof(struct param));
+ pm->gsu.s = &nullsetscalar_gsu;
+ pm->flags = PM_READONLY | PM_SCALAR;
+
+ nlcode = &nl_vals[0];
+ for (element = (char **)nl_names; *element; element++, nlcode++) {
+ if ((langstr = nl_langinfo(*nlcode)) != NULL) {
+ pm->u.str = dupstring(langstr);
+ pm->nam = dupstring(*element);
+ func((HashNode) pm, flags);
+ }
+ }
+
+}
+
+/**/
+#endif /* HAVE_NL_LANGINFO */
+
+/**/
+int
+setup_(UNUSED(Module m))
+{
+ return 0;
+}
+
+/**/
+int
+boot_(UNUSED(Module m))
+{
+#ifdef HAVE_NL_LANGINFO
+ if (!createlihash())
+ return 1;
+#else
+ unsetparam(langinfo_nam);
+#endif
+ return 0;
+}
+
+/**/
+int
+cleanup_(UNUSED(Module m))
+{
+#ifdef HAVE_NL_LANGINFO
+ Param pm;
+
+ if ((pm = (Param) paramtab->getnode(paramtab, langinfo_nam)) &&
+ pm == langinfo_pm) {
+ pm->flags &= ~PM_READONLY;
+ unsetparam_pm(pm, 0, 1);
+ }
+#endif
+ return 0;
+}
+
+/**/
+int
+finish_(UNUSED(Module m))
+{
+ return 0;
+}