Blame iconvdata/iso646.c

Packit 6c4009
/* Conversion to and from the various ISO 646 CCS.
Packit 6c4009
   Copyright (C) 1998-2018 Free Software Foundation, Inc.
Packit 6c4009
   This file is part of the GNU C Library.
Packit 6c4009
   Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
Packit 6c4009
Packit 6c4009
   The GNU C Library is free software; you can redistribute it and/or
Packit 6c4009
   modify it under the terms of the GNU Lesser General Public
Packit 6c4009
   License as published by the Free Software Foundation; either
Packit 6c4009
   version 2.1 of the License, or (at your option) any later version.
Packit 6c4009
Packit 6c4009
   The GNU C Library is distributed in the hope that it will be useful,
Packit 6c4009
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 6c4009
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 6c4009
   Lesser General Public License for more details.
Packit 6c4009
Packit 6c4009
   You should have received a copy of the GNU Lesser General Public
Packit 6c4009
   License along with the GNU C Library; if not, see
Packit 6c4009
   <http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
/* The implementation of the conversion which can be performed by this
Packit 6c4009
   module are not very sophisticated and not tuned at all.  There are
Packit 6c4009
   zillions of ISO 646 derivates and supporting them all in a separate
Packit 6c4009
   module is overkill since these coded character sets are hardly ever
Packit 6c4009
   used anymore (except ANSI_X3.4-1968 == ASCII, which is compatible
Packit 6c4009
   with ISO 8859-1).  The European variants are superceded by the
Packit 6c4009
   various ISO 8859-? standards and the Asian variants are embedded in
Packit 6c4009
   larger character sets.  Therefore this implementation is simply
Packit 6c4009
   here to make it possible to do the conversion if it is necessary.
Packit 6c4009
   The cost in the gconv-modules file is set to `2' and therefore
Packit 6c4009
   allows one to easily provide a tuned implementation in case this
Packit 6c4009
   proofs to be necessary.  */
Packit 6c4009
Packit 6c4009
#include <dlfcn.h>
Packit 6c4009
#include <gconv.h>
Packit 6c4009
#include <stdint.h>
Packit 6c4009
#include <stdlib.h>
Packit 6c4009
#include <string.h>
Packit 6c4009
Packit 6c4009
/* Definitions used in the body of the `gconv' function.  */
Packit 6c4009
#define FROM_LOOP		from_ascii
Packit 6c4009
#define TO_LOOP			to_ascii
Packit 6c4009
#define DEFINE_INIT		0
Packit 6c4009
#define DEFINE_FINI		0
Packit 6c4009
#define MIN_NEEDED_FROM		1
Packit 6c4009
#define MIN_NEEDED_TO		4
Packit 6c4009
#define ONE_DIRECTION		0
Packit 6c4009
Packit 6c4009
#define FROM_DIRECTION		(dir == from_iso646)
Packit 6c4009
#define PREPARE_LOOP \
Packit 6c4009
  enum direction dir = ((struct iso646_data *) step->__data)->dir;	      \
Packit 6c4009
  enum variant var = ((struct iso646_data *) step->__data)->var;
Packit 6c4009
#define EXTRA_LOOP_ARGS		, var
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Direction of the transformation.  */
Packit 6c4009
enum direction
Packit 6c4009
{
Packit 6c4009
  illegal_dir,
Packit 6c4009
  to_iso646,
Packit 6c4009
  from_iso646
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
/* See names below, must be in the same order.  */
Packit 6c4009
enum variant
Packit 6c4009
{
Packit 6c4009
  GB,		/* BS_4730 */
Packit 6c4009
  CA,		/* CSA_Z243.4-1985-1 */
Packit 6c4009
  CA2,		/* CSA_Z243.4-1985-2 */
Packit 6c4009
  DE,		/* DIN_66003 */
Packit 6c4009
  DK,		/* DS_2089 */
Packit 6c4009
  ES,		/* ES */
Packit 6c4009
  ES2,		/* ES2 */
Packit 6c4009
  CN,		/* GB_1988-80 */
Packit 6c4009
  IT,		/* IT */
Packit 6c4009
  JP,		/* JIS_C6220-1969-RO */
Packit 6c4009
  JP_OCR_B,	/* JIS_C6229-1984-B */
Packit 6c4009
  YU,		/* JUS_I.B1.002 */
Packit 6c4009
  KR,		/* KSC5636 */
Packit 6c4009
  HU,		/* MSZ_7795.3 */
Packit 6c4009
  CU,		/* NC_NC00-10 */
Packit 6c4009
  FR,		/* NF_Z_62-010 */
Packit 6c4009
  FR1,		/* NF_Z_62-010_(1973) */
Packit 6c4009
  NO,		/* NS_4551-1 */
Packit 6c4009
  NO2,		/* NS_4551-2 */
Packit 6c4009
  PT,		/* PT */
Packit 6c4009
  PT2,		/* PT2 */
Packit 6c4009
  SE,		/* SEN_850200_B */
Packit 6c4009
  SE2		/* SEN_850200_C */
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
/* Must be in the same order as enum variant above.  */
Packit 6c4009
static const char names[] =
Packit 6c4009
  "BS_4730//\0"
Packit 6c4009
  "CSA_Z243.4-1985-1//\0"
Packit 6c4009
  "CSA_Z243.4-1985-2//\0"
Packit 6c4009
  "DIN_66003//\0"
Packit 6c4009
  "DS_2089//\0"
Packit 6c4009
  "ES//\0"
Packit 6c4009
  "ES2//\0"
Packit 6c4009
  "GB_1988-80//\0"
Packit 6c4009
  "IT//\0"
Packit 6c4009
  "JIS_C6220-1969-RO//\0"
Packit 6c4009
  "JIS_C6229-1984-B//\0"
Packit 6c4009
  "JUS_I.B1.002//\0"
Packit 6c4009
  "KSC5636//\0"
Packit 6c4009
  "MSZ_7795.3//\0"
Packit 6c4009
  "NC_NC00-10//\0"
Packit 6c4009
  "NF_Z_62-010//\0"
Packit 6c4009
  "NF_Z_62-010_1973//\0" /* Note that we don't have the parenthesis in
Packit 6c4009
			    the name.  */
Packit 6c4009
  "NS_4551-1//\0"
Packit 6c4009
  "NS_4551-2//\0"
Packit 6c4009
  "PT//\0"
Packit 6c4009
  "PT2//\0"
Packit 6c4009
  "SEN_850200_B//\0"
Packit 6c4009
  "SEN_850200_C//\0"
Packit 6c4009
  "\0";
Packit 6c4009
Packit 6c4009
struct iso646_data
Packit 6c4009
{
Packit 6c4009
  enum direction dir;
Packit 6c4009
  enum variant var;
Packit 6c4009
};
Packit 6c4009
Packit 6c4009
Packit 6c4009
extern int gconv_init (struct __gconv_step *step);
Packit 6c4009
int
Packit 6c4009
gconv_init (struct __gconv_step *step)
Packit 6c4009
{
Packit 6c4009
  /* Determine which direction.  */
Packit 6c4009
  struct iso646_data *new_data;
Packit 6c4009
  enum direction dir = illegal_dir;
Packit 6c4009
  int result;
Packit 6c4009
Packit 6c4009
  enum variant var = 0;
Packit 6c4009
  for (const char *name = names; *name != '\0';
Packit 6c4009
       name = __rawmemchr (name, '\0') + 1)
Packit 6c4009
    {
Packit 6c4009
      if (__strcasecmp (step->__from_name, name) == 0)
Packit 6c4009
	{
Packit 6c4009
	  dir = from_iso646;
Packit 6c4009
	  break;
Packit 6c4009
	}
Packit 6c4009
      else if (__strcasecmp (step->__to_name, name) == 0)
Packit 6c4009
	{
Packit 6c4009
	  dir = to_iso646;
Packit 6c4009
	  break;
Packit 6c4009
	}
Packit 6c4009
      ++var;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  result = __GCONV_NOCONV;
Packit 6c4009
  if (__builtin_expect (dir, from_iso646) != illegal_dir)
Packit 6c4009
    {
Packit 6c4009
      new_data = (struct iso646_data *) malloc (sizeof (struct iso646_data));
Packit 6c4009
Packit 6c4009
      result = __GCONV_NOMEM;
Packit 6c4009
      if (new_data != NULL)
Packit 6c4009
	{
Packit 6c4009
	  new_data->dir = dir;
Packit 6c4009
	  new_data->var = var;
Packit 6c4009
	  step->__data = new_data;
Packit 6c4009
Packit 6c4009
	  if (dir == from_iso646)
Packit 6c4009
	    {
Packit 6c4009
	      step->__min_needed_from = MIN_NEEDED_FROM;
Packit 6c4009
	      step->__max_needed_from = MIN_NEEDED_FROM;
Packit 6c4009
	      step->__min_needed_to = MIN_NEEDED_TO;
Packit 6c4009
	      step->__max_needed_to = MIN_NEEDED_TO;
Packit 6c4009
	    }
Packit 6c4009
	  else
Packit 6c4009
	    {
Packit 6c4009
	      step->__min_needed_from = MIN_NEEDED_TO;
Packit 6c4009
	      step->__max_needed_from = MIN_NEEDED_TO;
Packit 6c4009
	      step->__min_needed_to = MIN_NEEDED_FROM;
Packit 6c4009
	      step->__max_needed_to = MIN_NEEDED_FROM;
Packit 6c4009
	    }
Packit 6c4009
Packit 6c4009
	  step->__stateful = 0;
Packit 6c4009
Packit 6c4009
	  result = __GCONV_OK;
Packit 6c4009
	}
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
  return result;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
extern void gconv_end (struct __gconv_step *data);
Packit 6c4009
void
Packit 6c4009
gconv_end (struct __gconv_step *data)
Packit 6c4009
{
Packit 6c4009
  free (data->__data);
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* First define the conversion function from ASCII to UCS4.  */
Packit 6c4009
#define MIN_NEEDED_INPUT	MIN_NEEDED_FROM
Packit 6c4009
#define MIN_NEEDED_OUTPUT	MIN_NEEDED_TO
Packit 6c4009
#define LOOPFCT			FROM_LOOP
Packit 6c4009
#define BODY \
Packit 6c4009
  {									      \
Packit 6c4009
    uint32_t ch;							      \
Packit 6c4009
    int failure = __GCONV_OK;						      \
Packit 6c4009
									      \
Packit 6c4009
    ch = *inptr;							      \
Packit 6c4009
    switch (ch)								      \
Packit 6c4009
      {									      \
Packit 6c4009
      case 0x23:							      \
Packit 6c4009
	if (var == GB || var == ES || var == IT || var == FR || var == FR1)   \
Packit 6c4009
	  ch = 0xa3;							      \
Packit 6c4009
	else if (var == NO2)						      \
Packit 6c4009
	  ch = 0xa7;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x24:							      \
Packit 6c4009
	if (var == CN)							      \
Packit 6c4009
	  ch = 0xa5;							      \
Packit 6c4009
	else if (var == HU || var == CU || var == SE || var == SE2)	      \
Packit 6c4009
	  ch = 0xa4;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x40:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == FR || var == FR1)		      \
Packit 6c4009
	  ch = 0xe0;							      \
Packit 6c4009
	else if (var == DE || var == ES || var == IT || var == PT)	      \
Packit 6c4009
	  ch = 0xa7;							      \
Packit 6c4009
	else if (var == ES2)						      \
Packit 6c4009
	  ch = 0x2022;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x17d;							      \
Packit 6c4009
	else if (var == HU)						      \
Packit 6c4009
	  ch = 0xc1;							      \
Packit 6c4009
	else if (var == PT2)						      \
Packit 6c4009
	  ch = 0xb4;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0xc9;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5b:							      \
Packit 6c4009
	if (var == CA || var == CA2)					      \
Packit 6c4009
	  ch = 0xe2;							      \
Packit 6c4009
	else if (var == DE || var == SE || var == SE2)			      \
Packit 6c4009
	  ch = 0xc4;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2)			      \
Packit 6c4009
	  ch = 0xc6;							      \
Packit 6c4009
	else if (var == ES || var == ES2 || var == CU)			      \
Packit 6c4009
	  ch = 0xa1;							      \
Packit 6c4009
	else if (var == IT || var == FR || var == FR1)			      \
Packit 6c4009
	  ch = 0xb0;							      \
Packit 6c4009
	else if (var == JP_OCR_B)					      \
Packit 6c4009
	  ch = 0x2329;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x160;							      \
Packit 6c4009
	else if (var == HU)						      \
Packit 6c4009
	  ch = 0xc9;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xc3;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5c:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == IT || var == FR || var == FR1)  \
Packit 6c4009
	  ch = 0xe7;							      \
Packit 6c4009
	else if (var == DE || var == HU || var == SE || var == SE2)	      \
Packit 6c4009
	  ch = 0xd6;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2)			      \
Packit 6c4009
	  ch = 0xd8;							      \
Packit 6c4009
	else if (var == ES || var == ES2 || var == CU)			      \
Packit 6c4009
	  ch = 0xd1;							      \
Packit 6c4009
	else if (var == JP || var == JP_OCR_B)				      \
Packit 6c4009
	  ch = 0xa5;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x110;							      \
Packit 6c4009
	else if (var == KR)						      \
Packit 6c4009
	  ch = 0x20a9;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xc7;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5d:							      \
Packit 6c4009
	if (var == CA || var == CA2)					      \
Packit 6c4009
	  ch = 0xea;							      \
Packit 6c4009
	else if (var == DE || var == HU)				      \
Packit 6c4009
	  ch = 0xdc;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2 || var == SE	      \
Packit 6c4009
		 || var == SE2)						      \
Packit 6c4009
	  ch = 0xc5;							      \
Packit 6c4009
	else if (var == ES)						      \
Packit 6c4009
	  ch = 0xbf;							      \
Packit 6c4009
	else if (var == ES2)						      \
Packit 6c4009
	  ch = 0xc7;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0xe9;							      \
Packit 6c4009
	else if (var == JP_OCR_B)					      \
Packit 6c4009
	  ch = 0x232a;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x106;							      \
Packit 6c4009
	else if (var == FR || var == FR1)				      \
Packit 6c4009
	  ch = 0xa7;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xd5;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5e:							      \
Packit 6c4009
	if (var == CA)							      \
Packit 6c4009
	  ch = 0xee;							      \
Packit 6c4009
	else if (var == CA2)						      \
Packit 6c4009
	  ch = 0xc9;							      \
Packit 6c4009
	else if (var == ES2 || var == CU)				      \
Packit 6c4009
	  ch = 0xbf;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x10c;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0xdc;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x60:							      \
Packit 6c4009
	if (var == CA || var == CA2)					      \
Packit 6c4009
	  ch = 0xf4;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0xf9;							      \
Packit 6c4009
	else if (var == JP_OCR_B)					      \
Packit 6c4009
	  /* Illegal character.  */					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x17e;							      \
Packit 6c4009
	else if (var == HU)						      \
Packit 6c4009
	  ch = 0xe1;							      \
Packit 6c4009
	else if (var == FR)						      \
Packit 6c4009
	  ch = 0xb5;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0xe9;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7b:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == HU || var == FR || var == FR1)  \
Packit 6c4009
	  ch = 0xe9;							      \
Packit 6c4009
	else if (var == DE || var == SE || var == SE2)			      \
Packit 6c4009
	  ch = 0xe4;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2)			      \
Packit 6c4009
	  ch = 0xe6;							      \
Packit 6c4009
	else if (var == ES)						      \
Packit 6c4009
	  ch = 0xb0;							      \
Packit 6c4009
	else if (var == ES2 || var == CU)				      \
Packit 6c4009
	  ch = 0xb4;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0xe0;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x161;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xe3;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7c:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == FR || var == FR1)		      \
Packit 6c4009
	  ch = 0xf9;							      \
Packit 6c4009
	else if (var == DE || var == HU || var == SE || var == SE2)	      \
Packit 6c4009
	  ch = 0xf6;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2)			      \
Packit 6c4009
	  ch = 0xf8;							      \
Packit 6c4009
	else if (var == ES || var == ES2 || var == CU)			      \
Packit 6c4009
	  ch = 0xf1;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0xf2;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x111;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xe7;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7d:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == IT || var == FR || var == FR1)  \
Packit 6c4009
	  ch = 0xe8;							      \
Packit 6c4009
	else if (var == DE || var == HU)				      \
Packit 6c4009
	  ch = 0xfc;							      \
Packit 6c4009
	else if (var == DK || var == NO || var == NO2 || var == SE	      \
Packit 6c4009
		 || var == SE2)						      \
Packit 6c4009
	  ch = 0xe5;							      \
Packit 6c4009
	else if (var == ES || var == ES2)				      \
Packit 6c4009
	  ch = 0xe7;							      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x107;							      \
Packit 6c4009
	else if (var == CU)						      \
Packit 6c4009
	  ch = 0x5b;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0xf5;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7e:							      \
Packit 6c4009
	if (var == GB || var == CN || var == JP || var == NO || var == SE)    \
Packit 6c4009
	  ch = 0x203e;							      \
Packit 6c4009
	else if (var == CA || var == CA2)				      \
Packit 6c4009
	  ch = 0xfb;							      \
Packit 6c4009
	else if (var == DE)						      \
Packit 6c4009
	  ch = 0xdf;							      \
Packit 6c4009
	else if (var == ES2 || var == CU || var == FR || var == FR1)	      \
Packit 6c4009
	  ch = 0xa8;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0xec;							      \
Packit 6c4009
	else if (var == JP_OCR_B)					      \
Packit 6c4009
	  /* Illegal character.  */					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	else if (var == YU)						      \
Packit 6c4009
	  ch = 0x10d;							      \
Packit 6c4009
	else if (var == HU)						      \
Packit 6c4009
	  ch = 0x2dd;							      \
Packit 6c4009
	else if (var == NO2)						      \
Packit 6c4009
	  ch = 0x7c;							      \
Packit 6c4009
	else if (var == PT)						      \
Packit 6c4009
	  ch = 0xb0;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0xfc;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      default:								      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x80 ... 0xff:						      \
Packit 6c4009
	/* Illegal character.  */					      \
Packit 6c4009
	failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      }									      \
Packit 6c4009
									      \
Packit 6c4009
    /* Hopefully gcc can recognize that the following `if' is only true	      \
Packit 6c4009
       when we reach the default case in the `switch' statement.  */	      \
Packit 6c4009
    if (__builtin_expect (failure, __GCONV_OK) == __GCONV_ILLEGAL_INPUT)      \
Packit 6c4009
      {									      \
Packit 6c4009
	STANDARD_FROM_LOOP_ERR_HANDLER (1);				      \
Packit 6c4009
      }									      \
Packit 6c4009
    else								      \
Packit 6c4009
      {									      \
Packit 6c4009
	put32 (outptr, ch);						      \
Packit 6c4009
	outptr += 4;							      \
Packit 6c4009
      }									      \
Packit 6c4009
    ++inptr;								      \
Packit 6c4009
  }
Packit 6c4009
#define LOOP_NEED_FLAGS
Packit 6c4009
#define EXTRA_LOOP_DECLS	, enum variant var
Packit 6c4009
#include <iconv/loop.c>
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Next, define the other direction.  */
Packit 6c4009
#define MIN_NEEDED_INPUT	MIN_NEEDED_TO
Packit 6c4009
#define MIN_NEEDED_OUTPUT	MIN_NEEDED_FROM
Packit 6c4009
#define LOOPFCT			TO_LOOP
Packit 6c4009
#define BODY \
Packit 6c4009
  {									      \
Packit 6c4009
    unsigned int ch;							      \
Packit 6c4009
    int failure = __GCONV_OK;						      \
Packit 6c4009
									      \
Packit 6c4009
    ch = get32 (inptr);							      \
Packit 6c4009
    switch (ch)								      \
Packit 6c4009
      {									      \
Packit 6c4009
      case 0x23:							      \
Packit 6c4009
	if (var == GB || var == ES || var == IT || var == FR || var == FR1    \
Packit 6c4009
	    || var == NO2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x24:							      \
Packit 6c4009
	if (var == CN || var == HU || var == CU || var == SE || var == SE2)   \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x40:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == ES || var == ES2   \
Packit 6c4009
	    || var == IT || var == YU || var == HU || var == FR || var == FR1 \
Packit 6c4009
	    || var == PT || var == PT2 || var == SE2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5b:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == JP_OCR_B || var == YU	      \
Packit 6c4009
	    || var == HU || var == FR || var == FR1 || var == NO	      \
Packit 6c4009
	    || var == NO2 || var == PT || var == PT2 || var == SE	      \
Packit 6c4009
	    || var == SE2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	else if (var == CU)						      \
Packit 6c4009
	  ch = 0x7d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5c:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == JP || var == JP_OCR_B	      \
Packit 6c4009
	    || var == YU || var == KR || var == HU || var == CU || var == FR  \
Packit 6c4009
	    || var == FR1 || var == NO || var == NO2 || var == PT	      \
Packit 6c4009
	    || var == PT2 || var == SE || var == SE2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5d:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == JP_OCR_B || var == YU	      \
Packit 6c4009
	    || var == HU || var == FR || var == FR1 || var == NO	      \
Packit 6c4009
	    || var == NO2 || var == PT || var == PT2 || var == SE	      \
Packit 6c4009
	    || var == SE2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x5e:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == ES2 || var == YU || var == CU   \
Packit 6c4009
	    || var == SE2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x60:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == IT || var == JP_OCR_B	      \
Packit 6c4009
	    || var == YU || var == HU || var == FR || var == SE2)	      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7b:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == YU || var == HU	      \
Packit 6c4009
	    || var == CU || var == FR || var == FR1 || var == NO	      \
Packit 6c4009
	    || var == NO2 || var == PT || var == PT2 || var == SE	      \
Packit 6c4009
	    || var == SE2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7c:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == YU || var == HU || var == CU \
Packit 6c4009
	    || var == FR || var == FR1 || var == NO || var == PT	      \
Packit 6c4009
	    || var == PT2 || var == SE || var == SE2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	else if (var == NO2)						      \
Packit 6c4009
	  ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7d:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == DE || var == DK || var == ES    \
Packit 6c4009
	    || var == ES2 || var == IT || var == YU || var == HU || var == CU \
Packit 6c4009
	    || var == FR || var == FR1 || var == NO || var == NO2	      \
Packit 6c4009
	    || var == PT || var == PT2 || var == SE || var == SE2)	      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x7e:							      \
Packit 6c4009
	if (var == GB || var == CA || var == CA2 || var == DE || var == ES2   \
Packit 6c4009
	    || var == CN || var == IT || var == JP || var == JP_OCR_B	      \
Packit 6c4009
	    || var == YU || var == HU || var == CU || var == FR || var == FR1 \
Packit 6c4009
	    || var == NO || var == NO2 || var == PT || var == SE	      \
Packit 6c4009
	    || var == SE2)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa1:							      \
Packit 6c4009
	if (var != ES && var != ES2 && var != CU)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa3:							      \
Packit 6c4009
	if (var != GB && var != ES && var != IT && var != FR && var != FR1)   \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x23;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa4:							      \
Packit 6c4009
	if (var != HU && var != CU && var != SE && var != SE2)		      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x24;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa5:							      \
Packit 6c4009
	if (var == CN)							      \
Packit 6c4009
	  ch = 0x24;							      \
Packit 6c4009
	else if (var == JP || var == JP_OCR_B)				      \
Packit 6c4009
	  ch = 0x5c;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa7:							      \
Packit 6c4009
	if (var == DE || var == ES || var == IT || var == PT)		      \
Packit 6c4009
	  ch = 0x40;							      \
Packit 6c4009
	else if (var == FR || var == FR1)				      \
Packit 6c4009
	  ch = 0x5d;							      \
Packit 6c4009
	else if (var == NO2)						      \
Packit 6c4009
	  ch = 0x23;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xa8:							      \
Packit 6c4009
	if (var != ES2 && var != CU && var != FR && var != FR1)		      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xb0:							      \
Packit 6c4009
	if (var == ES)							      \
Packit 6c4009
	  ch = 0x7b;							      \
Packit 6c4009
	else if (var == IT || var == FR || var == FR1)			      \
Packit 6c4009
	  ch = 0x5b;							      \
Packit 6c4009
	else if (var == PT)						      \
Packit 6c4009
	  ch = 0x7e;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xb4:							      \
Packit 6c4009
	if (var == ES2 || var == CU)					      \
Packit 6c4009
	  ch = 0x7b;							      \
Packit 6c4009
	else if (var == PT2)						      \
Packit 6c4009
	  ch = 0x40;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xb5:							      \
Packit 6c4009
	if (var != FR)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x60;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xbf:							      \
Packit 6c4009
	if (var == ES)							      \
Packit 6c4009
	  ch = 0x5d;							      \
Packit 6c4009
	else if (var == ES2 || var == CU)				      \
Packit 6c4009
	  ch = 0x5e;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc1:							      \
Packit 6c4009
	if (var != HU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x40;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc3:							      \
Packit 6c4009
	if (var != PT && var != PT2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc4:							      \
Packit 6c4009
	if (var != DE && var != SE && var != SE2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc5:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2 && var != SE && var != SE2)  \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc6:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc7:							      \
Packit 6c4009
	if (var == ES2)							      \
Packit 6c4009
	  ch = 0x5d;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0x5c;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xc9:							      \
Packit 6c4009
	if (var == CA2)							      \
Packit 6c4009
	  ch = 0x5e;							      \
Packit 6c4009
	else if (var == HU)						      \
Packit 6c4009
	  ch = 0x5b;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0x40;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xd1:							      \
Packit 6c4009
	if (var != ES && var != ES2 && var != CU)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xd5:							      \
Packit 6c4009
	if (var != PT && var != PT2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xd6:							      \
Packit 6c4009
	if (var != DE && var != HU && var != SE && var != SE2)		      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xd8:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xdc:							      \
Packit 6c4009
	if (var == DE || var == HU)					      \
Packit 6c4009
	  ch = 0x5d;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0x5e;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xdf:							      \
Packit 6c4009
	if (var != DE)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe0:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == FR || var == FR1)		      \
Packit 6c4009
	  ch = 0x40;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0x7b;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe1:							      \
Packit 6c4009
	if (var != HU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x60;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe2:							      \
Packit 6c4009
	if (var != CA && var != CA2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe3:							      \
Packit 6c4009
	if (var != PT && var != PT2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe4:							      \
Packit 6c4009
	if (var != DE && var != SE && var != SE2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe5:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2 && var != SE && var != SE2)  \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe6:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe7:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == IT || var == FR || var == FR1)  \
Packit 6c4009
	  ch = 0x5c;							      \
Packit 6c4009
	else if (var == ES || var == ES2)				      \
Packit 6c4009
	  ch = 0x7d;							      \
Packit 6c4009
	else if (var == PT || var == PT2)				      \
Packit 6c4009
	  ch = 0x7c;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe8:							      \
Packit 6c4009
	if (var != CA && var != CA2 && var != IT && var != FR && var != FR1)  \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xe9:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == HU || var == FR || var == FR1)  \
Packit 6c4009
	  ch = 0x7b;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0x5d;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0x60;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xea:							      \
Packit 6c4009
	if (var != CA && var != CA2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xec:							      \
Packit 6c4009
	if (var != IT)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xee:							      \
Packit 6c4009
	if (var != CA)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf1:							      \
Packit 6c4009
	if (var != ES && var != ES2 && var != CU)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf2:							      \
Packit 6c4009
	if (var != IT)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf4:							      \
Packit 6c4009
	if (var != CA && var != CA2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x60;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf5:							      \
Packit 6c4009
	if (var != PT && var != PT2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf6:							      \
Packit 6c4009
	if (var != DE && var != HU && var != SE && var != SE2)		      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf8:							      \
Packit 6c4009
	if (var != DK && var != NO && var != NO2)			      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xf9:							      \
Packit 6c4009
	if (var == CA || var == CA2 || var == FR || var == FR1)		      \
Packit 6c4009
	  ch = 0x7c;							      \
Packit 6c4009
	else if (var == IT)						      \
Packit 6c4009
	  ch = 0x60;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xfb:							      \
Packit 6c4009
	if (var != CA && var != CA2)					      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0xfc:							      \
Packit 6c4009
	if (var == DE || var == HU)					      \
Packit 6c4009
	  ch = 0x7d;							      \
Packit 6c4009
	else if (var == SE2)						      \
Packit 6c4009
	  ch = 0x7e;							      \
Packit 6c4009
	else								      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x160:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x106:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x107:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x10c:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x10d:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x110:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x111:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x161:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x17d:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x40;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x17e:							      \
Packit 6c4009
	if (var != YU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x60;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x2dd:							      \
Packit 6c4009
	if (var != HU)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x2022:							      \
Packit 6c4009
	if (var != ES2)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x40;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x203e:							      \
Packit 6c4009
	if (var != GB && var != CN && var != JP && var != NO && var != SE)    \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x7e;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x20a9:							      \
Packit 6c4009
	if (var != KR)							      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5c;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x2329:							      \
Packit 6c4009
	if (var != JP_OCR_B)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5b;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      case 0x232a:							      \
Packit 6c4009
	if (var != JP_OCR_B)						      \
Packit 6c4009
	  failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	ch = 0x5d;							      \
Packit 6c4009
	break;								      \
Packit 6c4009
      default:								      \
Packit 6c4009
	if (__glibc_unlikely (ch > 0x7f))				      \
Packit 6c4009
	  {								      \
Packit 6c4009
	    UNICODE_TAG_HANDLER (ch, 4);				      \
Packit 6c4009
	    failure = __GCONV_ILLEGAL_INPUT;				      \
Packit 6c4009
	  }								      \
Packit 6c4009
	break;								      \
Packit 6c4009
      }									      \
Packit 6c4009
									      \
Packit 6c4009
    if (__builtin_expect (failure, __GCONV_OK) == __GCONV_ILLEGAL_INPUT)      \
Packit 6c4009
      {									      \
Packit 6c4009
	STANDARD_TO_LOOP_ERR_HANDLER (4);				      \
Packit 6c4009
      }									      \
Packit 6c4009
									      \
Packit 6c4009
    *outptr++ = (unsigned char) ch;					      \
Packit 6c4009
    inptr += 4;								      \
Packit 6c4009
  }
Packit 6c4009
#define LOOP_NEED_FLAGS
Packit 6c4009
#define EXTRA_LOOP_DECLS	, enum variant var
Packit 6c4009
#include <iconv/loop.c>
Packit 6c4009
Packit 6c4009
Packit 6c4009
/* Now define the toplevel functions.  */
Packit 6c4009
#include <iconv/skeleton.c>