summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/string/ccmapid.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/string/ccmapid.c')
-rw-r--r--usr/src/lib/libast/common/string/ccmapid.c173
1 files changed, 173 insertions, 0 deletions
diff --git a/usr/src/lib/libast/common/string/ccmapid.c b/usr/src/lib/libast/common/string/ccmapid.c
new file mode 100644
index 0000000000..946a283013
--- /dev/null
+++ b/usr/src/lib/libast/common/string/ccmapid.c
@@ -0,0 +1,173 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1985-2007 AT&T Knowledge Ventures *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Knowledge Ventures *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* Phong Vo <kpv@research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * 8 bit character code map name/id lookup support
+ */
+
+#include <ast.h>
+#include <ccode.h>
+#include <ctype.h>
+
+static const Ccmap_t maps[] =
+{
+ {
+ "ascii",
+ "a|ascii|?(iso)?(-)646|?(iso)?(-)8859|latin",
+ "8 bit ascii",
+ "ISO-8859-%s",
+ "1",
+ CC_ASCII,
+ },
+
+ {
+ "ebcdic",
+ "e|ebcdic?(-)?([1e])",
+ "X/Open ebcdic",
+ "EBCDIC",
+ 0,
+ CC_EBCDIC_E,
+ },
+
+ {
+ "ebcdic-o",
+ "o|ebcdic?(-)[3o]|?(cp|ibm)1047|open?(-)edition",
+ "mvs OpenEdition ebcdic",
+ "EBCDIC-O",
+ 0,
+ CC_EBCDIC_O,
+ },
+
+ {
+ "ebcdic-h",
+ "h|ebcdic?(-)h|?(cp|ibm)?(00)37|[oa]s?(/-)400",
+ "ibm OS/400 AS/400 ebcdic",
+ "EBCDIC-H",
+ 0,
+ CC_EBCDIC_H,
+ },
+
+ {
+ "ebcdic-s",
+ "s|ebcdic?(-)s|siemens|posix-bc",
+ "siemens posix-bc ebcdic",
+ "EBCDIC-S",
+ 0,
+ CC_EBCDIC_S,
+ },
+
+ {
+ "ebcdic-i",
+ "i|ebcdic?(-)[2i]|ibm",
+ "X/Open ibm ebcdic (not idempotent)",
+ "EBCDIC-I",
+ 0,
+ CC_EBCDIC_I,
+ },
+
+ {
+ "ebcdic-m",
+ "m|ebcdic?(-)m|mvs",
+ "mvs ebcdic",
+ "EBCDIC-M",
+ 0,
+ CC_EBCDIC_M,
+ },
+
+ {
+ "ebcdic-u",
+ "u|ebcdic?(-)(u|mf)|microfocus",
+ "microfocus cobol ebcdic",
+ "EBCDIC-U",
+ 0,
+ CC_EBCDIC_U,
+ },
+
+ {
+ "native",
+ "n|native|local",
+ "native code set",
+ 0,
+ 0,
+ CC_NATIVE,
+ },
+
+ { 0 },
+};
+
+/*
+ * ccode map list iterator
+ */
+
+Ccmap_t*
+ccmaplist(Ccmap_t* mp)
+{
+ return !mp ? (Ccmap_t*)maps : (++mp)->name ? mp : (Ccmap_t*)0;
+}
+
+/*
+ * return ccode map id given name
+ */
+
+int
+ccmapid(const char* name)
+{
+ register const Ccmap_t* mp;
+ register int c;
+ const Ccmap_t* bp;
+ int n;
+ int sub[2];
+
+ bp = 0;
+ n = 0;
+ for (mp = maps; mp->name; mp++)
+ if (strgrpmatch(name, mp->match, sub, elementsof(sub) / 2, STR_MAXIMAL|STR_LEFT|STR_ICASE))
+ {
+ if (!(c = name[sub[1]]))
+ return mp->ccode;
+ if (sub[1] > n && !isalpha(c))
+ {
+ n = sub[1];
+ bp = mp;
+ }
+ }
+ return bp ? bp->ccode : -1;
+}
+
+/*
+ * return ccode map name given id
+ */
+
+char*
+ccmapname(register int id)
+{
+ register const Ccmap_t* mp;
+
+ for (mp = maps; mp->name; mp++)
+ if (id == mp->ccode)
+ return (char*)mp->name;
+ return 0;
+}