]> git.sur5r.net Git - bacula/bacula/blob - bacula/src/stored/ebcdic.c
kes Add back code to open tape device nonblocking, but if rewind fails
[bacula/bacula] / bacula / src / stored / ebcdic.c
1 /*
2  * Taken from the public domain ansitape program for 
3  *   integration into Bacula. KES - Mar 2005
4  */
5
6 /* Mapping of EBCDIC codes to ASCII equivalents. */
7 static char to_ascii_table[256] = {
8    '\000', '\001', '\002', '\003',
9    '\234', '\011', '\206', '\177',
10    '\227', '\215', '\216', '\013',
11    '\014', '\015', '\016', '\017',
12    '\020', '\021', '\022', '\023',
13    '\235', '\205', '\010', '\207',
14    '\030', '\031', '\222', '\217',
15    '\034', '\035', '\036', '\037',
16    '\200', '\201', '\202', '\203',
17    '\204', '\012', '\027', '\033',
18    '\210', '\211', '\212', '\213',
19    '\214', '\005', '\006', '\007',
20    '\220', '\221', '\026', '\223',
21    '\224', '\225', '\226', '\004',
22    '\230', '\231', '\232', '\233',
23    '\024', '\025', '\236', '\032',
24    '\040', '\240', '\241', '\242',
25    '\243', '\244', '\245', '\246',
26    '\247', '\250', '\133', '\056',
27    '\074', '\050', '\053', '\041',
28    '\046', '\251', '\252', '\253',
29    '\254', '\255', '\256', '\257',
30    '\260', '\261', '\135', '\044',
31    '\052', '\051', '\073', '\136',
32    '\055', '\057', '\262', '\263',
33    '\264', '\265', '\266', '\267',
34    '\270', '\271', '\174', '\054',
35    '\045', '\137', '\076', '\077',
36    '\272', '\273', '\274', '\275',
37    '\276', '\277', '\300', '\301',
38    '\302', '\140', '\072', '\043',
39    '\100', '\047', '\075', '\042',
40    '\303', '\141', '\142', '\143',
41    '\144', '\145', '\146', '\147',
42    '\150', '\151', '\304', '\305',
43    '\306', '\307', '\310', '\311',
44    '\312', '\152', '\153', '\154',
45    '\155', '\156', '\157', '\160',
46    '\161', '\162', '\313', '\314',
47    '\315', '\316', '\317', '\320',
48    '\321', '\176', '\163', '\164',
49    '\165', '\166', '\167', '\170',
50    '\171', '\172', '\322', '\323',
51    '\324', '\325', '\326', '\327',
52    '\330', '\331', '\332', '\333',
53    '\334', '\335', '\336', '\337',
54    '\340', '\341', '\342', '\343',
55    '\344', '\345', '\346', '\347',
56    '\173', '\101', '\102', '\103',
57    '\104', '\105', '\106', '\107',
58    '\110', '\111', '\350', '\351',
59    '\352', '\353', '\354', '\355',
60    '\175', '\112', '\113', '\114',
61    '\115', '\116', '\117', '\120',
62    '\121', '\122', '\356', '\357',
63    '\360', '\361', '\362', '\363',
64    '\134', '\237', '\123', '\124',
65    '\125', '\126', '\127', '\130',
66    '\131', '\132', '\364', '\365',
67    '\366', '\367', '\370', '\371',
68    '\060', '\061', '\062', '\063',
69    '\064', '\065', '\066', '\067',
70    '\070', '\071', '\372', '\373',
71    '\374', '\375', '\376', '\377'
72 };
73
74
75 /* Mapping of ASCII codes to EBCDIC equivalents. */
76 static char to_ebcdic_table[256] = {
77    '\000', '\001', '\002', '\003',
78    '\067', '\055', '\056', '\057',
79    '\026', '\005', '\045', '\013',
80    '\014', '\015', '\016', '\017',
81    '\020', '\021', '\022', '\023',
82    '\074', '\075', '\062', '\046',
83    '\030', '\031', '\077', '\047',
84    '\034', '\035', '\036', '\037',
85    '\100', '\117', '\177', '\173',
86    '\133', '\154', '\120', '\175',
87    '\115', '\135', '\134', '\116',
88    '\153', '\140', '\113', '\141',
89    '\360', '\361', '\362', '\363',
90    '\364', '\365', '\366', '\367',
91    '\370', '\371', '\172', '\136',
92    '\114', '\176', '\156', '\157',
93    '\174', '\301', '\302', '\303',
94    '\304', '\305', '\306', '\307',
95    '\310', '\311', '\321', '\322',
96    '\323', '\324', '\325', '\326',
97    '\327', '\330', '\331', '\342',
98    '\343', '\344', '\345', '\346',
99    '\347', '\350', '\351', '\112',
100    '\340', '\132', '\137', '\155',
101    '\171', '\201', '\202', '\203',
102    '\204', '\205', '\206', '\207',
103    '\210', '\211', '\221', '\222',
104    '\223', '\224', '\225', '\226',
105    '\227', '\230', '\231', '\242',
106    '\243', '\244', '\245', '\246',
107    '\247', '\250', '\251', '\300',
108    '\152', '\320', '\241', '\007',
109    '\040', '\041', '\042', '\043',
110    '\044', '\025', '\006', '\027',
111    '\050', '\051', '\052', '\053',
112    '\054', '\011', '\012', '\033',
113    '\060', '\061', '\032', '\063',
114    '\064', '\065', '\066', '\010',
115    '\070', '\071', '\072', '\073',
116    '\004', '\024', '\076', '\341',
117    '\101', '\102', '\103', '\104',
118    '\105', '\106', '\107', '\110',
119    '\111', '\121', '\122', '\123',
120    '\124', '\125', '\126', '\127',
121    '\130', '\131', '\142', '\143',
122    '\144', '\145', '\146', '\147',
123    '\150', '\151', '\160', '\161',
124    '\162', '\163', '\164', '\165',
125    '\166', '\167', '\170', '\200',
126    '\212', '\213', '\214', '\215',
127    '\216', '\217', '\220', '\232',
128    '\233', '\234', '\235', '\236',
129    '\237', '\240', '\252', '\253',
130    '\254', '\255', '\256', '\257',
131    '\260', '\261', '\262', '\263',
132    '\264', '\265', '\266', '\267',
133    '\270', '\271', '\272', '\273',
134    '\274', '\275', '\276', '\277',
135    '\312', '\313', '\314', '\315',
136    '\316', '\317', '\332', '\333',
137    '\334', '\335', '\336', '\337',
138    '\352', '\353', '\354', '\355',
139    '\356', '\357', '\372', '\373',
140    '\374', '\375', '\376', '\377'
141 };
142
143
144 /*
145  * Convert from ASCII to EBCDIC 
146  */
147 void ascii_to_ebcdic(char *dst, char *src, int count)
148 {
149    while (count--) {
150       *dst++ = to_ebcdic_table[0377 & *src++];
151    }
152 }
153
154
155 /*
156  * Convert from EBCDIC to ASCII
157  */
158 void ebcdic_to_ascii(char *dst, char *src, int count)
159 {
160    while (count--) {
161       *dst++ = to_ascii_table[0377 & *src++];
162    }
163 }