ebcdic.c revision 43c3e6a4b559b76b750c245ee95e2782c15b4296
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/* Copyright 1999-2005 The Apache Software Foundation or its licensors, as
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * applicable.
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder *
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * Licensed under the Apache License, Version 2.0 (the "License");
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * you may not use this file except in compliance with the License.
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * You may obtain a copy of the License at
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder *
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * http://www.apache.org/licenses/LICENSE-2.0
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder *
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * Unless required by applicable law or agreed to in writing, software
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * distributed under the License is distributed on an "AS IS" BASIS,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * See the License for the specific language governing permissions and
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * limitations under the License.
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder */
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder
3ab1e7a18f3fc3eb004464bc54b7df4483f1f060Christian Maeder#include "ap_config.h"
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder#if APR_CHARSET_EBCDIC
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder#include "ebcdic.h"
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder Initial Port for Apache-1.3 by <Martin.Kraemer Mch.SNI.De>
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang"BS2000 OSD" is a POSIX on a main frame. It is made by Siemens AG, Germany.
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian MaederWithin the POSIX subsystem, the same character set was chosen as in
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian Maeder"native BS2000", namely EBCDIC.
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian Maeder
264b794970b6f2bd437f14233f367f1067565728Jian Chun WangEBCDIC Table. (Yes, in EBCDIC, the letters 'a'..'z' are not contiguous!)
264b794970b6f2bd437f14233f367f1067565728Jian Chun WangThis apr_table_t is bijective, i.e. there are no ambigous or duplicate characters
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang00 00 01 02 03 85 09 86 7f 87 8d 8e 0b 0c 0d 0e 0f *................*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang10 10 11 12 13 8f 0a 08 97 18 19 9c 9d 1c 1d 1e 1f *................*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang20 80 81 82 83 84 92 17 1b 88 89 8a 8b 8c 05 06 07 *................*
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian Maeder30 90 91 16 93 94 95 96 04 98 99 9a 9b 14 15 9e 1a *................*
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian Maeder40 20 a0 e2 e4 e0 e1 e3 e5 e7 f1 60 2e 3c 28 2b 7c * .........`.<(+|*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang50 26 e9 ea eb e8 ed ee ef ec df 21 24 2a 29 3b 9f *&.........!$*);.*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang60 2d 2f c2 c4 c0 c1 c3 c5 c7 d1 5e 2c 25 5f 3e 3f *-/........^,%_>?*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang70 f8 c9 ca cb c8 cd ce cf cc a8 3a 23 40 27 3d 22 *..........:#@'="*
57d9ffd4f0d821632c5dd116a5301c3305599b19Christian Maeder80 d8 61 62 63 64 65 66 67 68 69 ab bb f0 fd fe b1 *.abcdefghi......*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang90 b0 6a 6b 6c 6d 6e 6f 70 71 72 aa ba e6 b8 c6 a4 *.jklmnopqr......*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wanga0 b5 af 73 74 75 76 77 78 79 7a a1 bf d0 dd de ae *..stuvwxyz......*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wangb0 a2 a3 a5 b7 a9 a7 b6 bc bd be ac 5b 5c 5d b4 d7 *...........[\]..*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wangc0 f9 41 42 43 44 45 46 47 48 49 ad f4 f6 f2 f3 f5 *.ABCDEFGHI......*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wangd0 a6 4a 4b 4c 4d 4e 4f 50 51 52 b9 fb fc db fa ff *.JKLMNOPQR......*
8519df804b37f95a2394a6cd5662da02efa3400bChristian Maedere0 d9 f7 53 54 55 56 57 58 59 5a b2 d4 d6 d2 d3 d5 *..STUVWXYZ......*
8519df804b37f95a2394a6cd5662da02efa3400bChristian Maederf0 30 31 32 33 34 35 36 37 38 39 b3 7b dc 7d da 7e *0123456789.{.}.~*
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang*/
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang
8519df804b37f95a2394a6cd5662da02efa3400bChristian Maeder/* The bijective ebcdic-to-ascii table: */
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wangconst unsigned char os_toascii_strictly[256] = {
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang 0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
8519df804b37f95a2394a6cd5662da02efa3400bChristian Maeder/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
8519df804b37f95a2394a6cd5662da02efa3400bChristian Maeder 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
264b794970b6f2bd437f14233f367f1067565728Jian Chun Wang 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder};
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/* This apr_table_t is (almost) identical to the previous one. The only difference
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * is the fact that it maps every EBCDIC *except 0x0A* to its ASCII
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * equivalent. The reason for this apr_table_t is simple: Throughout the
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * server, protocol strings are used in the form
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * "Content-Type: text/plain\015\012". Now all the characters in the string
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * are stored as EBCDIC, only the semantics of \012 is completely
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * different from LF (look it up in the apr_table_t above). \015 happens to be
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * mapped to \015 anyway, so there's no special case for it.
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder *
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * In THIS table, EBCDIC-\012 is mapped to ASCII-\012.
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * This apr_table_t is therefore used wherever an EBCDIC to ASCII conversion is
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder * needed in the server.
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder */
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/* ebcdic-to-ascii with \012 mapped to ASCII-\n */
0015e1756b734b34d4b550318c078f9a0c585611Christian Maederconst unsigned char os_toascii[256] = {
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder 0x87, 0x8d, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder 0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder 0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder 0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
03a6bbff551286168d0b15dc53476c2ede4e60d0Christian Maeder 0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder 0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
0015e1756b734b34d4b550318c078f9a0c585611Christian Maeder/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder 0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder 0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e /*0123456789.{.}.~*/
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder};
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder
c4a8059d0469a85bb58c28ac66729ac19d743d3cChristian Maeder/* The ascii-to-ebcdic table:
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder00 00 01 02 03 37 2d 2e 2f 16 05 15 0b 0c 0d 0e 0f *................*
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder10 10 11 12 13 3c 3d 32 26 18 19 3f 27 1c 1d 1e 1f *................*
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder20 40 5a 7f 7b 5b 6c 50 7d 4d 5d 5c 4e 6b 60 4b 61 * !"#$%&'()*+,-./
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder30 f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 7a 5e 4c 7e 6e 6f *0123456789:;<=>?*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder40 7c c1 c2 c3 c4 c5 c6 c7 c8 c9 d1 d2 d3 d4 d5 d6 *@ABCDEFGHIJKLMNO*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder50 d7 d8 d9 e2 e3 e4 e5 e6 e7 e8 e9 bb bc bd 6a 6d *PQRSTUVWXYZ[\]^_*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder60 4a 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96 *`abcdefghijklmno*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder70 97 98 99 a2 a3 a4 a5 a6 a7 a8 a9 fb 4f fd ff 07 *pqrstuvwxyz{|}~.*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder80 20 21 22 23 24 04 06 08 28 29 2a 2b 2c 09 0a 14 *................*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder90 30 31 25 33 34 35 36 17 38 39 3a 3b 1a 1b 3e 5f *................*
50ed946595d60c06f773e73bb22b21f5cf1199caChristian Maedera0 41 aa b0 b1 9f b2 d0 b5 79 b4 9a 8a ba ca af a1 *................*
50ed946595d60c06f773e73bb22b21f5cf1199caChristian Maederb0 90 8f ea fa be a0 b6 b3 9d da 9b 8b b7 b8 b9 ab *................*
50ed946595d60c06f773e73bb22b21f5cf1199caChristian Maederc0 64 65 62 66 63 67 9e 68 74 71 72 73 78 75 76 77 *................*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maederd0 ac 69 ed ee eb ef ec bf 80 e0 fe dd fc ad ae 59 *................*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maedere0 44 45 42 46 43 47 9c 48 54 51 52 53 58 55 56 57 *................*
50ed946595d60c06f773e73bb22b21f5cf1199caChristian Maederf0 8c 49 cd ce cb cf cc e1 70 c0 de db dc 8d 8e df *................*
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder*/
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maederconst unsigned char os_toebcdic[256] = {
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder/*00*/ 0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*10*/ 0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*20*/ 0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
690e4ab8f298d9cff3803316cda70ad9b98e9c43Christian Maeder 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /* !"#$%&'()*+,-./ */
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*30*/ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /*0123456789:;<=>?*/
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder/*40*/ 0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /*@ABCDEFGHIJKLMNO*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*50*/ 0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d, /*PQRSTUVWXYZ[\]^_*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*60*/ 0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /*`abcdefghijklmno*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*70*/ 0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07, /*pqrstuvwxyz{|}~.*/
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder/*80*/ 0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*90*/ 0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*a0*/ 0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*b0*/ 0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /*................*/
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder/*c0*/ 0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder 0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /*................*/
d06598e0c310f65ab552ca55626c2f7694ffd5e3Christian Maeder/*d0*/ 0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59, /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/*e0*/ 0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder 0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /*................*/
690e4ab8f298d9cff3803316cda70ad9b98e9c43Christian Maeder/*f0*/ 0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
84855a862ab77950c0c5059b1bba98cce0fb8ac3Christian Maeder 0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf /*................*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder};
690e4ab8f298d9cff3803316cda70ad9b98e9c43Christian Maeder
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
690e4ab8f298d9cff3803316cda70ad9b98e9c43Christian Maeder * dest and srce may be identical, or separate memory blocks, but
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder * should not overlap.
abcb1baa565c878598d732d0aa7724f474c9265cChristian Maeder */
abcb1baa565c878598d732d0aa7724f474c9265cChristian Maedervoid
f799084b320209cdd71a29e74fff1be054c1d342Christian Maederebcdic2ascii(unsigned char *dest, const unsigned char *srce, size_t count)
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder{
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder while (count-- != 0) {
690e4ab8f298d9cff3803316cda70ad9b98e9c43Christian Maeder *dest++ = os_toascii[*srce++];
479da8506f391abe070ced2fb93c9759a280fa68Christian Maeder }
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder}
f799084b320209cdd71a29e74fff1be054c1d342Christian Maedervoid
f799084b320209cdd71a29e74fff1be054c1d342Christian Maederebcdic2ascii_strictly(unsigned char *dest, const unsigned char *srce, size_t count)
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder{
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder while (count-- != 0) {
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder *dest++ = os_toascii_strictly[*srce++];
c26ff5708c4a855bf9503b3001bcc19e5fd6286fChristian Maeder }
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder}
f799084b320209cdd71a29e74fff1be054c1d342Christian Maedervoid
f799084b320209cdd71a29e74fff1be054c1d342Christian Maederascii2ebcdic(unsigned char *dest, const unsigned char *srce, size_t count)
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder{
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder while (count-- != 0) {
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder *dest++ = os_toebcdic[*srce++];
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder }
c26ff5708c4a855bf9503b3001bcc19e5fd6286fChristian Maeder}
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder#endif /*APR_CHARSET_EBCDIC*/
f799084b320209cdd71a29e74fff1be054c1d342Christian Maeder