ccmapid.c revision 1
1N/A/***********************************************************************
1N/A* *
1N/A* This software is part of the ast package *
1N/A* Copyright (c) 1985-2011 AT&T Intellectual Property *
1N/A* and is licensed under the *
1N/A* Common Public License, Version 1.0 *
1N/A* by AT&T Intellectual Property *
1N/A* *
1N/A* A copy of the License is available at *
1N/A* http://www.opensource.org/licenses/cpl1.0.txt *
1N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
1N/A* *
1N/A* Information and Software Systems Research *
1N/A* AT&T Research *
1N/A* Florham Park NJ *
1N/A* *
1N/A* Glenn Fowler <gsf@research.att.com> *
1N/A* David Korn <dgk@research.att.com> *
1N/A* Phong Vo <kpv@research.att.com> *
1N/A* *
1N/A***********************************************************************/
1N/A#pragma prototyped
1N/A
1N/A/*
1N/A * Glenn Fowler
1N/A * AT&T Research
1N/A *
1N/A * 8 bit character code map name/id lookup support
1N/A */
1N/A
1N/A#include <ast.h>
1N/A#include <ccode.h>
1N/A#include <ctype.h>
1N/A
1N/Astatic const Ccmap_t maps[] =
1N/A{
1N/A {
1N/A "ascii",
1N/A "a|ascii|?(iso)?(-)646|?(iso)?(-)8859|latin",
1N/A "8 bit ascii",
1N/A "ISO-8859-%s",
1N/A "1",
1N/A CC_ASCII,
1N/A },
1N/A
1N/A {
1N/A "ebcdic",
1N/A "e|ebcdic?(-)?([1e])",
1N/A "X/Open ebcdic",
1N/A "EBCDIC",
1N/A 0,
1N/A CC_EBCDIC_E,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-o",
1N/A "o|ebcdic?(-)[3o]|?(cp|ibm)1047|open?(-)edition",
1N/A "mvs OpenEdition ebcdic",
1N/A "EBCDIC-O",
1N/A 0,
1N/A CC_EBCDIC_O,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-h",
1N/A "h|ebcdic?(-)h|?(cp|ibm)?(00)37|[oa]s?(/-)400",
1N/A "ibm OS/400 AS/400 ebcdic",
1N/A "EBCDIC-H",
1N/A 0,
1N/A CC_EBCDIC_H,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-s",
1N/A "s|ebcdic?(-)s|siemens|posix-bc",
1N/A "siemens posix-bc ebcdic",
1N/A "EBCDIC-S",
1N/A 0,
1N/A CC_EBCDIC_S,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-i",
1N/A "i|ebcdic?(-)[2i]|ibm",
1N/A "X/Open ibm ebcdic (not idempotent)",
1N/A "EBCDIC-I",
1N/A 0,
1N/A CC_EBCDIC_I,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-m",
1N/A "m|ebcdic?(-)m|mvs",
1N/A "mvs ebcdic",
1N/A "EBCDIC-M",
1N/A 0,
1N/A CC_EBCDIC_M,
1N/A },
1N/A
1N/A {
1N/A "ebcdic-u",
1N/A "u|ebcdic?(-)(u|mf)|microfocus",
1N/A "microfocus cobol ebcdic",
1N/A "EBCDIC-U",
1N/A 0,
1N/A CC_EBCDIC_U,
1N/A },
1N/A
1N/A {
1N/A "native",
1N/A "n|native|local",
1N/A "native code set",
1N/A 0,
1N/A 0,
1N/A CC_NATIVE,
1N/A },
1N/A
1N/A { 0 },
1N/A};
1N/A
1N/A/*
1N/A * ccode map list iterator
1N/A */
1N/A
1N/ACcmap_t*
1N/Accmaplist(Ccmap_t* mp)
1N/A{
1N/A return !mp ? (Ccmap_t*)maps : (++mp)->name ? mp : (Ccmap_t*)0;
1N/A}
1N/A
1N/A/*
1N/A * return ccode map id given name
1N/A */
1N/A
1N/Aint
1N/Accmapid(const char* name)
1N/A{
1N/A register const Ccmap_t* mp;
1N/A register int c;
1N/A const Ccmap_t* bp;
1N/A int n;
1N/A int sub[2];
1N/A
1N/A bp = 0;
1N/A n = 0;
1N/A for (mp = maps; mp->name; mp++)
1N/A if (strgrpmatch(name, mp->match, sub, elementsof(sub) / 2, STR_MAXIMAL|STR_LEFT|STR_ICASE))
1N/A {
1N/A if (!(c = name[sub[1]]))
1N/A return mp->ccode;
1N/A if (sub[1] > n && !isalpha(c))
1N/A {
1N/A n = sub[1];
1N/A bp = mp;
1N/A }
1N/A }
1N/A return bp ? bp->ccode : -1;
1N/A}
1N/A
1N/A/*
1N/A * return ccode map name given id
1N/A */
1N/A
1N/Achar*
1N/Accmapname(register int id)
1N/A{
1N/A register const Ccmap_t* mp;
1N/A
1N/A for (mp = maps; mp->name; mp++)
1N/A if (id == mp->ccode)
1N/A return (char*)mp->name;
1N/A return 0;
1N/A}