Logo Search packages:      
Sourcecode: ksh version File versions  Download package

ccmapid.c

/***********************************************************************
*                                                                      *
*               This software is part of the ast package               *
*                  Copyright (c) 1985-2005 AT&T Corp.                  *
*                      and is licensed under the                       *
*                  Common Public License, Version 1.0                  *
*                            by AT&T Corp.                             *
*                                                                      *
*                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;
}

Generated by  Doxygen 1.6.0   Back to index