1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/ebcdic.c */
2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef CHARSET_EBCDIC
4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/e_os2.h>
6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX)
7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic void *dummy=&dummy;
8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /*CHARSET_EBCDIC*/
11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "ebcdic.h"
13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*      Initial Port for  Apache-1.3     by <Martin.Kraemer@Mch.SNI.De>
14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *      Adapted for       OpenSSL-0.9.4  by <Martin.Kraemer@Mch.SNI.De>
15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef _OSD_POSIX
18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    "BS2000 OSD" is a POSIX subsystem on a main frame.
20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    It is made by Siemens AG, Germany, for their BS2000 mainframe machines.
21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    Within the POSIX subsystem, the same character set was chosen as in
22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    "native BS2000", namely EBCDIC. (EDF04)
23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    The name "ASCII" in these routines is misleading: actually, conversion
25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    is not between EBCDIC and ASCII, but EBCDIC(EDF04) and ISO-8859.1;
26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    that means that (western european) national characters are preserved.
27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    This table is identical to the one used by rsh/rcp/ftp and other POSIX tools.
29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/
30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Here's the bijective ebcdic-to-ascii table: */
32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst unsigned char os_toascii[256] = {
33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*00*/ 0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f,
34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /*................*/
35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*10*/ 0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97,
36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /*................*/
37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*20*/ 0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b,
38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /*................*/
39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*30*/ 0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04,
40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /*................*/
41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*40*/ 0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5,
42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0xe7, 0xf1, 0x60, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /* .........`.<(+|*/
43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*50*/ 0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef,
44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x9f, /*&.........!$*);.*/
45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*60*/ 0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5,
46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0xc7, 0xd1, 0x5e, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /*-/........^,%_>?*/
47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*70*/ 0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf,
48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0xcc, 0xa8, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /*..........:#@'="*/
49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*80*/ 0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /*.abcdefghi......*/
51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*90*/ 0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70,
52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /*.jklmnopqr......*/
53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*a0*/ 0xb5, 0xaf, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,
54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0xdd, 0xde, 0xae, /*..stuvwxyz......*/
55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*b0*/ 0xa2, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc,
56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0xbd, 0xbe, 0xac, 0x5b, 0x5c, 0x5d, 0xb4, 0xd7, /*...........[\]..*/
57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*c0*/ 0xf9, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /*.ABCDEFGHI......*/
59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*d0*/ 0xa6, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50,
60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xdb, 0xfa, 0xff, /*.JKLMNOPQR......*/
61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*e0*/ 0xd9, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58,
62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /*..STUVWXYZ......*/
63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*f0*/ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project       0x38, 0x39, 0xb3, 0x7b, 0xdc, 0x7d, 0xda, 0x7e  /*0123456789.{.}.~*/
65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project};
66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The ascii-to-ebcdic table: */
69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst unsigned char os_toebcdic[256] = {
70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*00*/  0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f,
71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,  /*................*/
72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*10*/  0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26,
73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,  /*................*/
74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*20*/  0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d,
75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,  /* !"#$%&'()*+,-./ */
76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*30*/  0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,  /*0123456789:;<=>?*/
78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*40*/  0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,  /*@ABCDEFGHIJKLMNO*/
80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*50*/  0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6,
81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xe7, 0xe8, 0xe9, 0xbb, 0xbc, 0xbd, 0x6a, 0x6d,  /*PQRSTUVWXYZ[\]^_*/
82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*60*/  0x4a, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,  /*`abcdefghijklmno*/
84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*70*/  0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6,
85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0xa7, 0xa8, 0xa9, 0xfb, 0x4f, 0xfd, 0xff, 0x07,  /*pqrstuvwxyz{|}~.*/
86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*80*/  0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08,
87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14,  /*................*/
88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*90*/  0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17,
89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0x5f,  /*................*/
90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*a0*/  0x41, 0xaa, 0xb0, 0xb1, 0x9f, 0xb2, 0xd0, 0xb5,
91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x79, 0xb4, 0x9a, 0x8a, 0xba, 0xca, 0xaf, 0xa1,  /*................*/
92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*b0*/  0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3,
93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab,  /*................*/
94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*c0*/  0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68,
95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77,  /*................*/
96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*d0*/  0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf,
97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x80, 0xe0, 0xfe, 0xdd, 0xfc, 0xad, 0xae, 0x59,  /*................*/
98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*e0*/  0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48,
99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57,  /*................*/
100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*f0*/  0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1,
101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project	0x70, 0xc0, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf   /*................*/
102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project};
103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else  /*_OSD_POSIX*/
105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectThis code does basic character mapping for IBM's TPF and OS/390 operating systems.
108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectIt is a modified version of the BS2000 table.
109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectBijective EBCDIC (character set IBM-1047) to US-ASCII table:
111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectThis table is bijective - there are no ambigous or duplicate characters.
112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/
113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst unsigned char os_toascii[256] = {
114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x00, 0x01, 0x02, 0x03, 0x85, 0x09, 0x86, 0x7f, /* 00-0f:           */
115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x87, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x10, 0x11, 0x12, 0x13, 0x8f, 0x0a, 0x08, 0x97, /* 10-1f:           */
117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x18, 0x19, 0x9c, 0x9d, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x80, 0x81, 0x82, 0x83, 0x84, 0x92, 0x17, 0x1b, /* 20-2f:           */
119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07, /* ................ */
120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, /* 30-3f:           */
121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a, /* ................ */
122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x20, 0xa0, 0xe2, 0xe4, 0xe0, 0xe1, 0xe3, 0xe5, /* 40-4f:           */
123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xe7, 0xf1, 0xa2, 0x2e, 0x3c, 0x28, 0x2b, 0x7c, /*  ...........<(+| */
124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x26, 0xe9, 0xea, 0xeb, 0xe8, 0xed, 0xee, 0xef, /* 50-5f:           */
125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xec, 0xdf, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x5e, /* &.........!$*);^ */
126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x2d, 0x2f, 0xc2, 0xc4, 0xc0, 0xc1, 0xc3, 0xc5, /* 60-6f:           */
127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xc7, 0xd1, 0xa6, 0x2c, 0x25, 0x5f, 0x3e, 0x3f, /* -/.........,%_>? */
128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xf8, 0xc9, 0xca, 0xcb, 0xc8, 0xcd, 0xce, 0xcf, /* 70-7f:           */
129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xcc, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22, /* .........`:#@'=" */
130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xd8, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, /* 80-8f:           */
131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x68, 0x69, 0xab, 0xbb, 0xf0, 0xfd, 0xfe, 0xb1, /* .abcdefghi...... */
132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xb0, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, /* 90-9f:           */
133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x71, 0x72, 0xaa, 0xba, 0xe6, 0xb8, 0xc6, 0xa4, /* .jklmnopqr...... */
134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xb5, 0x7e, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, /* a0-af:           */
135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x79, 0x7a, 0xa1, 0xbf, 0xd0, 0x5b, 0xde, 0xae, /* .~stuvwxyz...[.. */
136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xac, 0xa3, 0xa5, 0xb7, 0xa9, 0xa7, 0xb6, 0xbc, /* b0-bf:           */
137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xbd, 0xbe, 0xdd, 0xa8, 0xaf, 0x5d, 0xb4, 0xd7, /* .............].. */
138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* c0-cf:           */
139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x48, 0x49, 0xad, 0xf4, 0xf6, 0xf2, 0xf3, 0xf5, /* {ABCDEFGHI...... */
140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, /* d0-df:           */
141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x51, 0x52, 0xb9, 0xfb, 0xfc, 0xf9, 0xfa, 0xff, /* }JKLMNOPQR...... */
142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x5c, 0xf7, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, /* e0-ef:           */
143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x59, 0x5a, 0xb2, 0xd4, 0xd6, 0xd2, 0xd3, 0xd5, /* \.STUVWXYZ...... */
144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* f0-ff:           */
145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x38, 0x39, 0xb3, 0xdb, 0xdc, 0xd9, 0xda, 0x9f  /* 0123456789...... */
146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project};
147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/*
150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectThe US-ASCII to EBCDIC (character set IBM-1047) table:
151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectThis table is bijective (no ambiguous or duplicate characters)
152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/
153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst unsigned char os_toebcdic[256] = {
154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, /* 00-0f:           */
155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x16, 0x05, 0x15, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, /* ................ */
156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, /* 10-1f:           */
157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f, /* ................ */
158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, /* 20-2f:           */
159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61, /*  !"#$%&'()*+,-./ */
160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* 30-3f:           */
161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f, /* 0123456789:;<=>? */
162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* 40-4f:           */
163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, /* @ABCDEFGHIJKLMNO */
164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, /* 50-5f:           */
165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d, /* PQRSTUVWXYZ[\]^_ */
166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 60-6f:           */
167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, /* `abcdefghijklmno */
168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, /* 70-7f:           */
169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07, /* pqrstuvwxyz{|}~. */
170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x20, 0x21, 0x22, 0x23, 0x24, 0x04, 0x06, 0x08, /* 80-8f:           */
171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x14, /* ................ */
172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x30, 0x31, 0x25, 0x33, 0x34, 0x35, 0x36, 0x17, /* 90-9f:           */
173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x38, 0x39, 0x3a, 0x3b, 0x1a, 0x1b, 0x3e, 0xff, /* ................ */
174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x41, 0xaa, 0x4a, 0xb1, 0x9f, 0xb2, 0x6a, 0xb5, /* a0-af:           */
175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xbb, 0xb4, 0x9a, 0x8a, 0xb0, 0xca, 0xaf, 0xbc, /* ................ */
176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x90, 0x8f, 0xea, 0xfa, 0xbe, 0xa0, 0xb6, 0xb3, /* b0-bf:           */
177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x9d, 0xda, 0x9b, 0x8b, 0xb7, 0xb8, 0xb9, 0xab, /* ................ */
178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x64, 0x65, 0x62, 0x66, 0x63, 0x67, 0x9e, 0x68, /* c0-cf:           */
179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x74, 0x71, 0x72, 0x73, 0x78, 0x75, 0x76, 0x77, /* ................ */
180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0xac, 0x69, 0xed, 0xee, 0xeb, 0xef, 0xec, 0xbf, /* d0-df:           */
181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x80, 0xfd, 0xfe, 0xfb, 0xfc, 0xba, 0xae, 0x59, /* ................ */
182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x44, 0x45, 0x42, 0x46, 0x43, 0x47, 0x9c, 0x48, /* e0-ef:           */
183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x54, 0x51, 0x52, 0x53, 0x58, 0x55, 0x56, 0x57, /* ................ */
184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x8c, 0x49, 0xcd, 0xce, 0xcb, 0xcf, 0xcc, 0xe1, /* f0-ff:           */
185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf  /* ................ */
186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project};
187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /*_OSD_POSIX*/
188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Translate a memory block from EBCDIC (host charset) to ASCII (net charset)
190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * dest and srce may be identical, or separate memory blocks, but
191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * should not overlap. These functions intentionally have an interface
192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * compatible to memcpy(3).
193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */
194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *
196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectebcdic2ascii(void *dest, const void *srce, size_t count)
197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    unsigned char *udest = dest;
199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    const unsigned char *usrce = srce;
200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    while (count-- != 0) {
202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        *udest++ = os_toascii[*usrce++];
203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    return dest;
206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid *
209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectascii2ebcdic(void *dest, const void *srce, size_t count)
210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project{
211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    unsigned char *udest = dest;
212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    const unsigned char *usrce = srce;
213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    while (count-- != 0) {
215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project        *udest++ = os_toebcdic[*usrce++];
216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    }
217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project    return dest;
219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}
220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project
221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif
222