/* Copyright (C) 2001 Free Software Foundation, Inc.
   This file is part of the GNU LIBICONV Library.

   The GNU LIBICONV Library is free software; you can redistribute it
   and/or modify it under the terms of the GNU Library General Public
   License as published by the Free Software Foundation; either version 2
   of the License, or (at your option) any later version.

   The GNU LIBICONV Library is distributed in the hope that it will be
   useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Library General Public License for more details.

   You should have received a copy of the GNU Library General Public
   License along with the GNU LIBICONV Library; see the file COPYING.LIB.
   If not, write to the Free Software Foundation, Inc., 59 Temple Place -
   Suite 330, Boston, MA 02111-1307, USA.  */

/* Encodings used by system dependent locales on MSDOS. */

DEFENCODING(( "CP437",                  /* IANA, JDK 1.1 */
              "IBM437",                 /* IANA */
              "437",                    /* IANA */
              "csPC8CodePage437",       /* IANA */
            ),
            cp437,
            { cp437_mbtowc, NULL },       { cp437_wctomb, NULL })

DEFENCODING(( "CP775",                  /* IANA, JDK 1.1 */
              "IBM775",                 /* IANA */
              "csPC775Baltic",          /* IANA */
            ),
            cp775,
            { cp775_mbtowc, NULL },       { cp775_wctomb, NULL })

DEFENCODING(( "CP852",                  /* IANA, JDK 1.1 */
              "IBM852",                 /* IANA */
              "852",                    /* IANA */
              "csPCp852",               /* IANA */
            ),
            cp852,
            { cp852_mbtowc, NULL },       { cp852_wctomb, NULL })

DEFENCODING(( "CP855",                  /* IANA, JDK 1.1 */
              "IBM855",                 /* IANA */
              "855",                    /* IANA */
              "csIBM855",               /* IANA */
            ),
            cp855,
            { cp855_mbtowc, NULL },       { cp855_wctomb, NULL })

DEFENCODING(( "CP857",                  /* IANA, JDK 1.1 */
              "IBM857",                 /* IANA */
              "857",                    /* IANA */
              "csIBM857",               /* IANA */
            ),
            cp857,
            { cp857_mbtowc, NULL },       { cp857_wctomb, NULL })

DEFENCODING(( "CP861",                  /* IANA, JDK 1.1 */
              "IBM861",                 /* IANA */
              "861",                    /* IANA */
              "CP-IS",                  /* IANA */
              "csIBM861",               /* IANA */
            ),
            cp861,
            { cp861_mbtowc, NULL },       { cp861_wctomb, NULL })

DEFENCODING(( "CP864",                  /* IANA, JDK 1.1 */
              "IBM864",                 /* IANA */
              "csIBM864",               /* IANA */
            ),
            cp864,
            { cp864_mbtowc, NULL },       { cp864_wctomb, NULL })

DEFENCODING(( "CP865",                  /* IANA, JDK 1.1 */
              "IBM865",                 /* IANA */
              "865",                    /* IANA */
              "csIBM865",               /* IANA */
            ),
            cp865,
            { cp865_mbtowc, NULL },       { cp865_wctomb, NULL })

DEFENCODING(( "CP869",                  /* IANA, JDK 1.1 */
              "IBM869",                 /* IANA */
              "869",                    /* IANA */
              "CP-GR",                  /* IANA */
              "csIBM869",               /* IANA */
            ),
            cp869,
            { cp869_mbtowc, NULL },       { cp869_wctomb, NULL })
