Blame crypto/ebcdic.c

Packit c4476c
/*
Packit c4476c
 * Copyright 2000-2016 The OpenSSL Project Authors. All Rights Reserved.
Packit c4476c
 *
Packit c4476c
 * Licensed under the OpenSSL license (the "License").  You may not use
Packit c4476c
 * this file except in compliance with the License.  You can obtain a copy
Packit c4476c
 * in the file LICENSE in the source distribution or at
Packit c4476c
 * https://www.openssl.org/source/license.html
Packit c4476c
 */
Packit c4476c
Packit c4476c
# include <openssl/e_os2.h>
Packit c4476c
#ifndef CHARSET_EBCDIC
Packit c4476c
NON_EMPTY_TRANSLATION_UNIT
Packit c4476c
#else
Packit c4476c
Packit c4476c
# include <openssl/ebcdic.h>
Packit c4476c
Packit c4476c
# ifdef CHARSET_EBCDIC_TEST
Packit c4476c
/*
Packit c4476c
 * Here we're looking to test the EBCDIC code on an ASCII system so we don't do
Packit c4476c
 * any translation in these tables at all.
Packit c4476c
 */
Packit c4476c
Packit c4476c
/* The ebcdic-to-ascii table: */
Packit c4476c
const unsigned char os_toascii[256] = {
Packit c4476c
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit c4476c
    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
Packit c4476c
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
Packit c4476c
    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
Packit c4476c
    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
Packit c4476c
    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
Packit c4476c
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
Packit c4476c
    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit c4476c
    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
Packit c4476c
    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
Packit c4476c
    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
Packit c4476c
    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
Packit c4476c
    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
Packit c4476c
    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
Packit c4476c
    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
Packit c4476c
    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
Packit c4476c
    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
Packit c4476c
    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
Packit c4476c
    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
Packit c4476c
    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
Packit c4476c
    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
Packit c4476c
    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
Packit c4476c
    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
Packit c4476c
    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
Packit c4476c
    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
Packit c4476c
    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
Packit c4476c
    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
Packit c4476c
    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
Packit c4476c
    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
Packit c4476c
    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
Packit c4476c
    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit c4476c
    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
Packit c4476c
};
Packit c4476c
Packit c4476c
/* The ascii-to-ebcdic table: */
Packit c4476c
const unsigned char os_toebcdic[256] = {
Packit c4476c
    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
Packit c4476c
    0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
Packit c4476c
    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
Packit c4476c
    0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
Packit c4476c
    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
Packit c4476c
    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
Packit c4476c
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
Packit c4476c
    0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
Packit c4476c
    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
Packit c4476c
    0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
Packit c4476c
    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
Packit c4476c
    0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
Packit c4476c
    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
Packit c4476c
    0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
Packit c4476c
    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
Packit c4476c
    0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
Packit c4476c
    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
Packit c4476c
    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
Packit c4476c
    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
Packit c4476c
    0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
Packit c4476c
    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
Packit c4476c
    0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
Packit c4476c
    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
Packit c4476c
    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
Packit c4476c
    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
Packit c4476c
    0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
Packit c4476c
    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
Packit c4476c
    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
Packit c4476c
    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
Packit c4476c
    0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
Packit c4476c
    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit c4476c
    0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
Packit c4476c
};
Packit c4476c
Packit c4476c
# elif defined(_OSD_POSIX)
Packit c4476c
/*
Packit c4476c
 * "BS2000 OSD" is a POSIX subsystem on a main frame. It is made by Siemens
Packit c4476c
 * AG, Germany, for their BS2000 mainframe machines. Within the POSIX
Packit c4476c
 * subsystem, the same character set was chosen as in "native BS2000", namely
Packit c4476c
 * EBCDIC. (EDF04)
Packit c4476c
 *
Packit c4476c
 * The name "ASCII" in these routines is misleading: actually, conversion is
Packit c4476c
 * not between EBCDIC and ASCII, but EBCDIC(EDF04) and ISO-8859.1; that means
Packit c4476c
 * that (western european) national characters are preserved.
Packit c4476c
 *
Packit c4476c
 * This table is identical to the one used by rsh/rcp/ftp and other POSIX
Packit c4476c
 * tools.
Packit c4476c
 */
Packit c4476c
Packit c4476c
/* Here's the bijective ebcdic-to-ascii table: */
Packit c4476c
const unsigned char os_toascii[256] = {
Packit c4476c
    /*
Packit c4476c
     * 00
Packit c4476c
     */ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
Packit c4476c
    0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 10
Packit c4476c
     */ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
Packit c4476c
    0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 20
Packit c4476c
     */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
Packit c4476c
    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 30
Packit c4476c
     */ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
Packit c4476c
    0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 40
Packit c4476c
     */ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
Packit c4476c
    0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+| */
Packit c4476c
    /*
Packit c4476c
     * 50
Packit c4476c
     */ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
Packit c4476c
    0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /* &.........!$*);. */
Packit c4476c
    /*
Packit c4476c
     * 60
Packit c4476c
     */ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
Packit c4476c
    0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,    /*-/........^,%_>?*/
Packit c4476c
    /*
Packit c4476c
     * 70
Packit c4476c
     */ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
Packit c4476c
    0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* ..........:#@'=" */
Packit c4476c
    /*
Packit c4476c
     * 80
Packit c4476c
     */ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
Packit c4476c
    0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
Packit c4476c
    /*
Packit c4476c
     * 90
Packit c4476c
     */ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
Packit c4476c
    0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
Packit c4476c
    /*
Packit c4476c
     * a0
Packit c4476c
     */ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
Packit c4476c
    0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /* ..stuvwxyz...... */
Packit c4476c
    /*
Packit c4476c
     * b0
Packit c4476c
     */ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
Packit c4476c
    0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /* ...........[\].. */
Packit c4476c
    /*
Packit c4476c
     * c0
Packit c4476c
     */ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
Packit c4476c
    0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* .ABCDEFGHI...... */
Packit c4476c
    /*
Packit c4476c
     * d0
Packit c4476c
     */ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
Packit c4476c
    0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /* .JKLMNOPQR...... */
Packit c4476c
    /*
Packit c4476c
     * e0
Packit c4476c
     */ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
Packit c4476c
    0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* ..STUVWXYZ...... */
Packit c4476c
    /*
Packit c4476c
     * f0
Packit c4476c
     */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
Packit c4476c
    0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /* 0123456789.{.}.~ */
Packit c4476c
};
Packit c4476c
Packit c4476c
/* The ascii-to-ebcdic table: */
Packit c4476c
const unsigned char os_toebcdic[256] = {
Packit c4476c
    /*
Packit c4476c
     * 00
Packit c4476c
     */ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
Packit c4476c
    0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 10
Packit c4476c
     */ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
Packit c4476c
    0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 20
Packit c4476c
     */ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
Packit c4476c
    0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
Packit c4476c
    /*
Packit c4476c
     * 30
Packit c4476c
     */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
Packit c4476c
    0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
Packit c4476c
    /*
Packit c4476c
     * 40
Packit c4476c
     */ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
Packit c4476c
    0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
Packit c4476c
    /*
Packit c4476c
     * 50
Packit c4476c
     */ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
Packit c4476c
    0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d, /* PQRSTUVWXYZ[\]^_ */
Packit c4476c
    /*
Packit c4476c
     * 60
Packit c4476c
     */ 0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
Packit c4476c
    0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
Packit c4476c
    /*
Packit c4476c
     * 70
Packit c4476c
     */ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
Packit c4476c
    0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07, /* pqrstuvwxyz{|}~. */
Packit c4476c
    /*
Packit c4476c
     * 80
Packit c4476c
     */ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
Packit c4476c
    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * 90
Packit c4476c
     */ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
Packit c4476c
    0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * a0
Packit c4476c
     */ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
Packit c4476c
    0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * b0
Packit c4476c
     */ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
Packit c4476c
    0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * c0
Packit c4476c
     */ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
Packit c4476c
    0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * d0
Packit c4476c
     */ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
Packit c4476c
    0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * e0
Packit c4476c
     */ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
Packit c4476c
    0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
Packit c4476c
    /*
Packit c4476c
     * f0
Packit c4476c
     */ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
Packit c4476c
    0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */
Packit c4476c
};
Packit c4476c
Packit c4476c
# else /*_OSD_POSIX*/
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * This code does basic character mapping for IBM's TPF and OS/390 operating
Packit c4476c
 * systems. It is a modified version of the BS2000 table.
Packit c4476c
 *
Packit c4476c
 * Bijective EBCDIC (character set IBM-1047) to US-ASCII table: This table is
Packit c4476c
 * bijective - there are no ambiguous or duplicate characters.
Packit c4476c
 */
Packit c4476c
const unsigned char os_toascii[256] = {
Packit c4476c
    0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f: */
Packit c4476c
    0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
Packit c4476c
    0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f: */
Packit c4476c
    0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
Packit c4476c
    0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f: */
Packit c4476c
    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
Packit c4476c
    0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f: */
Packit c4476c
    0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
Packit c4476c
    0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f: */
Packit c4476c
    0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* ...........<(+| */
Packit c4476c
    0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f: */
Packit c4476c
    0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
Packit c4476c
    0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f: */
Packit c4476c
    0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
Packit c4476c
    0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f: */
Packit c4476c
    0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
Packit c4476c
    0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f: */
Packit c4476c
    0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
Packit c4476c
    0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f: */
Packit c4476c
    0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
Packit c4476c
    0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af: */
Packit c4476c
    0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
Packit c4476c
    0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf: */
Packit c4476c
    0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
Packit c4476c
    0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf: */
Packit c4476c
    0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
Packit c4476c
    0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df: */
Packit c4476c
    0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
Packit c4476c
    0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef: */
Packit c4476c
    0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
Packit c4476c
    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff: */
Packit c4476c
    0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f /* 0123456789...... */
Packit c4476c
};
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * The US-ASCII to EBCDIC (character set IBM-1047) table: This table is
Packit c4476c
 * bijective (no ambiguous or duplicate characters)
Packit c4476c
 */
Packit c4476c
const unsigned char os_toebcdic[256] = {
Packit c4476c
    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f: */
Packit c4476c
    0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
Packit c4476c
    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f: */
Packit c4476c
    0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
Packit c4476c
    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f: */
Packit c4476c
    0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
Packit c4476c
    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f: */
Packit c4476c
    0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
Packit c4476c
    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f: */
Packit c4476c
    0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
Packit c4476c
    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f: */
Packit c4476c
    0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */
Packit c4476c
    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f: */
Packit c4476c
    0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
Packit c4476c
    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f: */
Packit c4476c
    0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */
Packit c4476c
    0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f: */
Packit c4476c
    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
Packit c4476c
    0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f: */
Packit c4476c
    0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */
Packit c4476c
    0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af: */
Packit c4476c
    0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */
Packit c4476c
    0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf: */
Packit c4476c
    0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
Packit c4476c
    0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf: */
Packit c4476c
    0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
Packit c4476c
    0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df: */
Packit c4476c
    0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */
Packit c4476c
    0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef: */
Packit c4476c
    0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
Packit c4476c
    0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff: */
Packit c4476c
    0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /* ................ */
Packit c4476c
};
Packit c4476c
# endif/*_OSD_POSIX*/
Packit c4476c
Packit c4476c
/*
Packit c4476c
 * Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
Packit c4476c
 * dest and srce may be identical, or separate memory blocks, but should not
Packit c4476c
 * overlap. These functions intentionally have an interface compatible to
Packit c4476c
 * memcpy(3).
Packit c4476c
 */
Packit c4476c
Packit c4476c
void *ebcdic2ascii(void *dest, const void *srce, size_t count)
Packit c4476c
{
Packit c4476c
    unsigned char *udest = dest;
Packit c4476c
    const unsigned char *usrce = srce;
Packit c4476c
Packit c4476c
    while (count-- != 0) {
Packit c4476c
        *udest++ = os_toascii[*usrce++];
Packit c4476c
    }
Packit c4476c
Packit c4476c
    return dest;
Packit c4476c
}
Packit c4476c
Packit c4476c
void *ascii2ebcdic(void *dest, const void *srce, size_t count)
Packit c4476c
{
Packit c4476c
    unsigned char *udest = dest;
Packit c4476c
    const unsigned char *usrce = srce;
Packit c4476c
Packit c4476c
    while (count-- != 0) {
Packit c4476c
        *udest++ = os_toebcdic[*usrce++];
Packit c4476c
    }
Packit c4476c
Packit c4476c
    return dest;
Packit c4476c
}
Packit c4476c
Packit c4476c
#endif