Blame iconvdata/iso646.c

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