2 * Routines for handling character sets
6 * Wireshark - Network traffic analyzer
7 * By Gerald Combs <gerald@wireshark.org>
8 * Copyright 1998 Gerald Combs
10 * This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public License
12 * as published by the Free Software Foundation; either version 2
13 * of the License, or (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
33 /* ASCII/EBCDIC conversion tables from
34 * http://www.room42.com/store/computer_center/code_tables.shtml
37 static guint8 ASCII_translate_EBCDIC [ 256 ] = {
38 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
39 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
40 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
41 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
42 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 0x4D,
43 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
44 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
45 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
46 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,
47 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
48 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
49 0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
50 0x7D, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
51 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
52 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
53 0xA8, 0xA9, 0xC0, 0x6A, 0xD0, 0xA1, 0x4B,
54 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
55 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
56 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
57 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
58 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
59 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
60 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
61 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
62 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
63 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
64 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
65 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
66 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
67 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
68 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
69 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B
73 ASCII_to_EBCDIC(guint8 *buf, guint bytes)
80 for (i = 0; i < bytes; i++, bufptr++) {
81 *bufptr = ASCII_translate_EBCDIC[*bufptr];
86 ASCII_to_EBCDIC1(guint8 c)
88 return ASCII_translate_EBCDIC[c];
92 static guint8 EBCDIC_translate_ASCII [ 256 ] = {
93 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
94 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
95 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
96 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
97 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
98 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
99 0x2E, 0x2E, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
100 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x2E, 0x3F,
101 0x20, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
102 0x2E, 0x2E, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
103 0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
104 0x2E, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
105 0x2D, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
106 0x2E, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
107 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
108 0x2E, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
109 0x2E, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
110 0x69, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
111 0x2E, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
112 0x72, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
113 0x2E, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
114 0x7A, 0x2E, 0x2E, 0x2E, 0x5B, 0x2E, 0x2E,
115 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
116 0x2E, 0x2E, 0x2E, 0x2E, 0x5D, 0x2E, 0x2E,
117 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
118 0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
119 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
120 0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
121 0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
122 0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
123 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
124 0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E
128 EBCDIC_to_ASCII(guint8 *buf, guint bytes)
135 for (i = 0; i < bytes; i++, bufptr++) {
136 *bufptr = EBCDIC_translate_ASCII[*bufptr];
141 EBCDIC_to_ASCII1(guint8 c)
143 return EBCDIC_translate_ASCII[c];