/*
 ******************************************************************************
 *
 *   Copyright (C) 1998-2000, International Business Machines
 *   Corporation and others.  All Rights Reserved.
 *
 ******************************************************************************
 *
 *
 *  ucnvstat.c:
 *  UConverterStaticData prototypes for data based converters
 */

#include "unicode/utypes.h"
#include "unicode/ucnv.h"
#include "ucnv_bld.h"

static const UConverterStaticData _SBCSStaticData={
  sizeof(UConverterStaticData),
  "SBCS",
    0, UCNV_IBM, UCNV_SBCS, 1, 1,
  1, { 0, 0, 0, 0 },FALSE, FALSE,
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved bytes */
};

static const UConverterStaticData _DBCSStaticData={
  sizeof(UConverterStaticData),
  "DBCS",
    0, UCNV_IBM, UCNV_DBCS, 2, 2,
     1, { 0, 0, 0, 0 }, FALSE, FALSE, /* subchar */
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved bytes */
};

static const UConverterStaticData _MBCSStaticData={
  sizeof(UConverterStaticData),
  "MBCS",
    0, UCNV_IBM, UCNV_MBCS, 1, 1,
    1, { 0, 0, 0, 0 }, FALSE, FALSE,
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved bytes */
};

static const UConverterStaticData _EBCDICStatefulStaticData={
  sizeof(UConverterStaticData),
 "EBCDICStateful",
    0, UCNV_IBM, UCNV_EBCDIC_STATEFUL, 1, 1,
    1, { 0, 0, 0, 0 }, FALSE, FALSE,
  { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } /* reserved bytes */
};

/* NULLs for algorithmic types, their tables live in ucnv_bld.c */
const UConverterStaticData *ucnv_converterStaticData[UCNV_NUMBER_OF_SUPPORTED_CONVERTER_TYPES]={
    &_SBCSStaticData, &_DBCSStaticData, &_MBCSStaticData, NULL/*Lat1*/,
    NULL/*UTF8*/, NULL/*UTF16be*/, NULL/*UTF16LE*/, &_EBCDICStatefulStaticData,
    NULL/*ISO2022*/,
    /* LMBCS */ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};

