encoding8/
ebcdic.rs

1/// `to_ascii` makes a copy of a byte encoded as EBCDIC as it's ASCII equivalent.
2/// use `make_ascii` if you want to convert in-place
3#[inline]
4pub fn to_ascii(b: u8) -> u8 {
5    match b {
6        0x0 => 0x0,
7        0x1 => 0x1,
8        0x2 => 0x2,
9        0x3 => 0x3,
10        0x4 => 0x85,
11        0x5 => 0x9,
12        0x6 => 0x86,
13        0x7 => 0x7f,
14        0x8 => 0x87,
15        0x9 => 0x8d,
16        0xa => 0x8e,
17        0xb => 0xb,
18        0xc => 0xc,
19        0xd => 0xd,
20        0xe => 0xe,
21        0xf => 0xf,
22        0x10 => 0x10,
23        0x11 => 0x11,
24        0x12 => 0x12,
25        0x13 => 0x13,
26        0x14 => 0x8f,
27        0x15 => 0xa,
28        0x16 => 0x8,
29        0x17 => 0x97,
30        0x18 => 0x18,
31        0x19 => 0x19,
32        0x1a => 0x9c,
33        0x1b => 0x9d,
34        0x1c => 0x1c,
35        0x1d => 0x1d,
36        0x1e => 0x1e,
37        0x1f => 0x1f,
38        0x20 => 0x80,
39        0x21 => 0x81,
40        0x22 => 0x82,
41        0x23 => 0x83,
42        0x24 => 0x84,
43        0x25 => 0x92,
44        0x26 => 0x17,
45        0x27 => 0x1b,
46        0x28 => 0x88,
47        0x29 => 0x89,
48        0x2a => 0x8a,
49        0x2b => 0x8b,
50        0x2c => 0x8c,
51        0x2d => 0x5,
52        0x2e => 0x6,
53        0x2f => 0x7,
54        0x30 => 0x90,
55        0x31 => 0x91,
56        0x32 => 0x16,
57        0x33 => 0x93,
58        0x34 => 0x94,
59        0x35 => 0x95,
60        0x36 => 0x96,
61        0x37 => 0x4,
62        0x38 => 0x98,
63        0x39 => 0x99,
64        0x3a => 0x9a,
65        0x3b => 0x9b,
66        0x3c => 0x14,
67        0x3d => 0x15,
68        0x3e => 0x9e,
69        0x3f => 0x1a,
70        0x40 => 0x20,
71        0x41 => 0xa0,
72        0x42 => 0xe2,
73        0x43 => 0xe4,
74        0x44 => 0xe0,
75        0x45 => 0xe1,
76        0x46 => 0xe3,
77        0x47 => 0xe5,
78        0x48 => 0xe7,
79        0x49 => 0xf1,
80        0x4a => 0xa2,
81        0x4b => 0x2e,
82        0x4c => 0x3c,
83        0x4d => 0x28,
84        0x4e => 0x2b,
85        0x4f => 0x7c,
86        0x50 => 0x26,
87        0x51 => 0xe9,
88        0x52 => 0xea,
89        0x53 => 0xeb,
90        0x54 => 0xe8,
91        0x55 => 0xed,
92        0x56 => 0xee,
93        0x57 => 0xef,
94        0x58 => 0xec,
95        0x59 => 0xdf,
96        0x5a => 0x21,
97        0x5b => 0x24,
98        0x5c => 0x2a,
99        0x5d => 0x29,
100        0x5e => 0x3b,
101        0x5f => 0x5e,
102        0x60 => 0x2d,
103        0x61 => 0x2f,
104        0x62 => 0xc2,
105        0x63 => 0xc4,
106        0x64 => 0xc0,
107        0x65 => 0xc1,
108        0x66 => 0xc3,
109        0x67 => 0xc5,
110        0x68 => 0xc7,
111        0x69 => 0xd1,
112        0x6a => 0xa6,
113        0x6b => 0x2c,
114        0x6c => 0x25,
115        0x6d => 0x5f,
116        0x6e => 0x3e,
117        0x6f => 0x3f,
118        0x70 => 0xf8,
119        0x71 => 0xc9,
120        0x72 => 0xca,
121        0x73 => 0xcb,
122        0x74 => 0xc8,
123        0x75 => 0xcd,
124        0x76 => 0xce,
125        0x77 => 0xcf,
126        0x78 => 0xcc,
127        0x79 => 0x60,
128        0x7a => 0x3a,
129        0x7b => 0x23,
130        0x7c => 0x40,
131        0x7d => 0x27,
132        0x7e => 0x3d,
133        0x7f => 0x22,
134        0x80 => 0xd8,
135        0x81 => 0x61,
136        0x82 => 0x62,
137        0x83 => 0x63,
138        0x84 => 0x64,
139        0x85 => 0x65,
140        0x86 => 0x66,
141        0x87 => 0x67,
142        0x88 => 0x68,
143        0x89 => 0x69,
144        0x8a => 0xab,
145        0x8b => 0xbb,
146        0x8c => 0xf0,
147        0x8d => 0xfd,
148        0x8e => 0xfe,
149        0x8f => 0xb1,
150        0x90 => 0xb0,
151        0x91 => 0x6a,
152        0x92 => 0x6b,
153        0x93 => 0x6c,
154        0x94 => 0x6d,
155        0x95 => 0x6e,
156        0x96 => 0x6f,
157        0x97 => 0x70,
158        0x98 => 0x71,
159        0x99 => 0x72,
160        0x9a => 0xaa,
161        0x9b => 0xba,
162        0x9c => 0xe6,
163        0x9d => 0xb8,
164        0x9e => 0xc6,
165        0x9f => 0xa4,
166        0xa0 => 0xb5,
167        0xa1 => 0x7e,
168        0xa2 => 0x73,
169        0xa3 => 0x74,
170        0xa4 => 0x75,
171        0xa5 => 0x76,
172        0xa6 => 0x77,
173        0xa7 => 0x78,
174        0xa8 => 0x79,
175        0xa9 => 0x7a,
176        0xaa => 0xa1,
177        0xab => 0xbf,
178        0xac => 0xd0,
179        0xad => 0x5b,
180        0xae => 0xde,
181        0xaf => 0xae,
182        0xb0 => 0xac,
183        0xb1 => 0xa3,
184        0xb2 => 0xa5,
185        0xb3 => 0xb7,
186        0xb4 => 0xa9,
187        0xb5 => 0xa7,
188        0xb6 => 0xb6,
189        0xb7 => 0xbc,
190        0xb8 => 0xbd,
191        0xb9 => 0xbe,
192        0xba => 0xdd,
193        0xbb => 0xa8,
194        0xbc => 0xaf,
195        0xbd => 0x5d,
196        0xbe => 0xb4,
197        0xbf => 0xd7,
198        0xc0 => 0x7b,
199        0xc1 => 0x41,
200        0xc2 => 0x42,
201        0xc3 => 0x43,
202        0xc4 => 0x44,
203        0xc5 => 0x45,
204        0xc6 => 0x46,
205        0xc7 => 0x47,
206        0xc8 => 0x48,
207        0xc9 => 0x49,
208        0xca => 0xad,
209        0xcb => 0xf4,
210        0xcc => 0xf6,
211        0xcd => 0xf2,
212        0xce => 0xf3,
213        0xcf => 0xf5,
214        0xd0 => 0x7d,
215        0xd1 => 0x4a,
216        0xd2 => 0x4b,
217        0xd3 => 0x4c,
218        0xd4 => 0x4d,
219        0xd5 => 0x4e,
220        0xd6 => 0x4f,
221        0xd7 => 0x50,
222        0xd8 => 0x51,
223        0xd9 => 0x52,
224        0xda => 0xb9,
225        0xdb => 0xfb,
226        0xdc => 0xfc,
227        0xdd => 0xf9,
228        0xde => 0xfa,
229        0xdf => 0xff,
230        0xe0 => 0x5c,
231        0xe1 => 0xf7,
232        0xe2 => 0x53,
233        0xe3 => 0x54,
234        0xe4 => 0x55,
235        0xe5 => 0x56,
236        0xe6 => 0x57,
237        0xe7 => 0x58,
238        0xe8 => 0x59,
239        0xe9 => 0x5a,
240        0xea => 0xb2,
241        0xeb => 0xd4,
242        0xec => 0xd6,
243        0xed => 0xd2,
244        0xee => 0xd3,
245        0xef => 0xd5,
246        0xf0 => 0x30,
247        0xf1 => 0x31,
248        0xf2 => 0x32,
249        0xf3 => 0x33,
250        0xf4 => 0x34,
251        0xf5 => 0x35,
252        0xf6 => 0x36,
253        0xf7 => 0x37,
254        0xf8 => 0x38,
255        0xf9 => 0x39,
256        0xfa => 0xb3,
257        0xfb => 0xdb,
258        0xfc => 0xdc,
259        0xfd => 0xd9,
260        0xfe => 0xda,
261        0xff => 0x9f,
262        _ => unreachable!(),
263    }
264}
265
266
267/// `make_ascii` converts a byte encoded as ASCII to it's EBDIC equivalent, in-place.
268/// use `to_ascii` if you want to make a copy
269pub fn make_ascii(bp: &mut u8) {
270    *bp = to_ascii(*bp);
271}
272
273use super::ascii;
274
275#[inline]
276pub fn to_uppercase(b: u8) -> u8 {
277    ascii::to_ebcdic(ascii::to_uppercase(to_ascii(b)))
278}
279
280#[inline]
281pub fn to_lowercase(b: u8) -> u8 {
282    ascii::to_ebcdic(ascii::to_lowercase(to_ascii(b)))
283}