%%%------------------------------------------------------------------- %%% File: swab_ebcdic.erl %%% @author Eric Pailleau %%% @copyright 2014 crownedgrouse.com %%% @doc %%% EBCDIC module for swab %%% @end %%% %%% Permission to use, copy, modify, and/or distribute this software %%% for any purpose with or without fee is hereby granted, provided %%% that the above copyright notice and this permission notice appear %%% in all copies. %%% %%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL %%% WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED %%% WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE %%% AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR %%% CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM %%% LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, %%% NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN %%% CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. %%% %%% Created : 2014-07-14 %%%------------------------------------------------------------------- -module(swab_ebcdic). -export([e2a/1,a2e/1]). %%------------------------------------------------------------------------- %%@doc EBCDIC to ASCII %%@end %%------------------------------------------------------------------------- -spec e2a(list() | binary()) -> list() | binary(). e2a(L) when is_list(L) -> lists:foldl(fun(X, Res) -> Res ++ [e2a_char(X)] end, [], L); e2a(L) when is_binary(L) -> iolist_to_binary(lists:foldl(fun(X, Res) -> Res ++ [e2a_char(X)] end, [], binary_to_list(L))). %%------------------------------------------------------------------------- %%@doc ASCII to EBCDIC %%@end %%------------------------------------------------------------------------- -spec a2e(list() | binary()) -> list() | binary(). a2e(L) when is_list(L) -> lists:foldl(fun(X, Res) -> Res ++ [a2e_char(X)] end, [], L); a2e(L) when is_binary(L) -> iolist_to_binary(lists:foldl(fun(X, Res) -> Res ++ [a2e_char(X)] end, [], binary_to_list(L))). %%------------------------------------------------------------------------- %%@doc ASCII to EBCDIC characters map %%@end %%------------------------------------------------------------------------- -spec a2e_char(integer()) -> integer(). a2e_char(_Char) -> case _Char of $\000 -> $\000; $\001 -> $\001; $\002 -> $\002; $\003 -> $\003; $\004 -> $\067; $\005 -> $\055; $\006 -> $\056; $\007 -> $\057; $\010 -> $\026; $\011 -> $\005; $\012 -> $\045; $\013 -> $\013 ; $\014 -> $\014 ; $\015 -> $\015 ; $\016 -> $\016 ; $\017 -> $\017 ; $\020 -> $\020 ; $\021 -> $\021 ; $\022 -> $\022 ; $\023 -> $\023 ; $\024 -> $\074 ; $\025 -> $\075 ; $\026 -> $\062 ; $\027 -> $\046 ; $\030 -> $\030 ; $\031 -> $\031 ; $\032 -> $\077 ; $\033 -> $\047 ; $\034 -> $\034 ; $\035 -> $\035 ; $\036 -> $\036 ; $\037 -> $\037 ; $\040 -> $\100 ; $\041 -> $\117 ; $\042 -> $\177 ; $\043 -> $\173 ; $\044 -> $\133 ; $\045 -> $\154 ; $\046 -> $\120 ; $\047 -> $\175 ; $\050 -> $\115 ; $\051 -> $\135 ; $\052 -> $\134 ; $\053 -> $\116 ; $\054 -> $\153 ; $\055 -> $\140 ; $\056 -> $\113 ; $\057 -> $\141 ; $\060 -> $\360 ; $\061 -> $\361 ; $\062 -> $\362 ; $\063 -> $\363 ; $\064 -> $\364 ; $\065 -> $\365 ; $\066 -> $\366 ; $\067 -> $\367 ; $\070 -> $\370 ; $\071 -> $\371 ; $\072 -> $\172 ; $\073 -> $\136 ; $\074 -> $\114 ; $\075 -> $\176 ; $\076 -> $\156 ; $\077 -> $\157 ; $\100 -> $\174 ; $\101 -> $\301 ; $\102 -> $\302 ; $\103 -> $\303 ; $\104 -> $\304 ; $\105 -> $\305 ; $\106 -> $\306 ; $\107 -> $\307 ; $\110 -> $\310 ; $\111 -> $\311 ; $\112 -> $\321 ; $\113 -> $\322 ; $\114 -> $\323 ; $\115 -> $\324 ; $\116 -> $\325 ; $\117 -> $\326 ; $\120 -> $\327 ; $\121 -> $\330 ; $\122 -> $\331 ; $\123 -> $\342 ; $\124 -> $\343 ; $\125 -> $\344 ; $\126 -> $\345 ; $\127 -> $\346 ; $\130 -> $\347 ; $\131 -> $\350 ; $\132 -> $\351 ; $\133 -> $\112 ; $\134 -> $\340 ; $\135 -> $\132 ; $\136 -> $\137 ; $\137 -> $\155 ; $\140 -> $\171 ; $\141 -> $\201 ; $\142 -> $\202 ; $\143 -> $\203 ; $\144 -> $\204 ; $\145 -> $\205 ; $\146 -> $\206 ; $\147 -> $\207 ; $\150 -> $\210 ; $\151 -> $\211 ; $\152 -> $\221 ; $\153 -> $\222 ; $\154 -> $\223 ; $\155 -> $\224 ; $\156 -> $\225 ; $\157 -> $\226 ; $\160 -> $\227 ; $\161 -> $\230 ; $\162 -> $\231 ; $\163 -> $\242 ; $\164 -> $\243 ; $\165 -> $\244 ; $\166 -> $\245 ; $\167 -> $\246 ; $\170 -> $\247 ; $\171 -> $\250 ; $\172 -> $\251 ; $\173 -> $\300 ; $\174 -> $\152 ; $\175 -> $\320 ; $\176 -> $\241 ; $\177 -> $\007 ; $\200 -> $\040 ; $\201 -> $\041 ; $\202 -> $\042 ; $\203 -> $\043 ; $\204 -> $\044 ; $\205 -> $\025 ; $\206 -> $\006 ; $\207 -> $\027 ; $\210 -> $\050 ; $\211 -> $\051 ; $\212 -> $\052 ; $\213 -> $\053 ; $\214 -> $\054 ; $\215 -> $\011 ; $\216 -> $\012 ; $\217 -> $\033 ; $\220 -> $\060 ; $\221 -> $\061 ; $\222 -> $\032 ; $\223 -> $\063 ; $\224 -> $\064 ; $\225 -> $\065 ; $\226 -> $\066 ; $\227 -> $\010 ; $\230 -> $\070 ; $\231 -> $\071 ; $\232 -> $\072 ; $\233 -> $\073 ; $\234 -> $\004 ; $\235 -> $\024 ; $\236 -> $\076 ; $\237 -> $\341 ; $\240 -> $\101 ; $\241 -> $\102 ; $\242 -> $\103 ; $\243 -> $\104 ; $\244 -> $\105 ; $\245 -> $\106 ; $\246 -> $\107 ; $\247 -> $\110 ; $\250 -> $\111 ; $\251 -> $\121 ; $\252 -> $\122 ; $\253 -> $\123 ; $\254 -> $\124 ; $\255 -> $\125 ; $\256 -> $\126 ; $\257 -> $\127 ; $\260 -> $\130 ; $\261 -> $\131 ; $\262 -> $\142 ; $\263 -> $\143 ; $\264 -> $\144 ; $\265 -> $\145 ; $\266 -> $\146 ; $\267 -> $\147 ; $\270 -> $\150 ; $\271 -> $\151 ; $\272 -> $\160 ; $\273 -> $\161 ; $\274 -> $\162 ; $\275 -> $\163 ; $\276 -> $\164 ; $\277 -> $\165 ; $\300 -> $\166 ; $\301 -> $\167 ; $\302 -> $\170 ; $\303 -> $\200 ; $\304 -> $\212 ; $\305 -> $\213 ; $\306 -> $\214 ; $\307 -> $\215 ; $\310 -> $\216 ; $\311 -> $\217 ; $\312 -> $\220 ; $\313 -> $\232 ; $\314 -> $\233 ; $\315 -> $\234 ; $\316 -> $\235 ; $\317 -> $\236 ; $\320 -> $\237 ; $\321 -> $\240 ; $\322 -> $\252 ; $\323 -> $\253 ; $\324 -> $\254 ; $\325 -> $\255 ; $\326 -> $\256 ; $\327 -> $\257 ; $\330 -> $\260 ; $\331 -> $\261 ; $\332 -> $\262 ; $\333 -> $\263 ; $\334 -> $\264 ; $\335 -> $\265 ; $\336 -> $\266 ; $\337 -> $\267 ; $\340 -> $\270 ; $\341 -> $\271 ; $\342 -> $\272 ; $\343 -> $\273 ; $\344 -> $\274 ; $\345 -> $\275 ; $\346 -> $\276 ; $\347 -> $\277 ; $\350 -> $\312 ; $\351 -> $\313 ; $\352 -> $\314 ; $\353 -> $\315 ; $\354 -> $\316 ; $\355 -> $\317 ; $\356 -> $\332 ; $\357 -> $\333 ; $\360 -> $\334 ; $\361 -> $\335 ; $\362 -> $\336 ; $\363 -> $\337 ; $\364 -> $\352 ; $\365 -> $\353 ; $\366 -> $\354 ; $\367 -> $\355 ; $\370 -> $\356 ; $\371 -> $\357 ; $\372 -> $\372 ; $\373 -> $\373 ; $\374 -> $\374 ; $\375 -> $\375 ; $\376 -> $\376 ; $\377 -> $\377 end. %%------------------------------------------------------------------------- %%@doc EBCDIC to ASCII characters map %%@end %%------------------------------------------------------------------------- -spec e2a_char(integer()) -> integer(). e2a_char(_Char) -> case _Char of $\000 -> $\000 ; $\001 -> $\001 ; $\002 -> $\002 ; $\003 -> $\003 ; $\067 -> $\004 ; $\055 -> $\005 ; $\056 -> $\006 ; $\057 -> $\007 ; $\026 -> $\010 ; $\005 -> $\011 ; $\045 -> $\012 ; $\013 -> $\013 ; $\014 -> $\014 ; $\015 -> $\015 ; $\016 -> $\016 ; $\017 -> $\017 ; $\020 -> $\020 ; $\021 -> $\021 ; $\022 -> $\022 ; $\023 -> $\023 ; $\074 -> $\024 ; $\075 -> $\025 ; $\062 -> $\026 ; $\046 -> $\027 ; $\030 -> $\030 ; $\031 -> $\031 ; $\077 -> $\032 ; $\047 -> $\033 ; $\034 -> $\034 ; $\035 -> $\035 ; $\036 -> $\036 ; $\037 -> $\037 ; $\100 -> $\040 ; $\117 -> $\041 ; $\177 -> $\042 ; $\173 -> $\043 ; $\133 -> $\044 ; $\154 -> $\045 ; $\120 -> $\046 ; $\175 -> $\047 ; $\115 -> $\050 ; $\135 -> $\051 ; $\134 -> $\052 ; $\116 -> $\053 ; $\153 -> $\054 ; $\140 -> $\055 ; $\113 -> $\056 ; $\141 -> $\057 ; $\360 -> $\060 ; $\361 -> $\061 ; $\362 -> $\062 ; $\363 -> $\063 ; $\364 -> $\064 ; $\365 -> $\065 ; $\366 -> $\066 ; $\367 -> $\067 ; $\370 -> $\070 ; $\371 -> $\071 ; $\172 -> $\072 ; $\136 -> $\073 ; $\114 -> $\074 ; $\176 -> $\075 ; $\156 -> $\076 ; $\157 -> $\077 ; $\174 -> $\100 ; $\301 -> $\101 ; $\302 -> $\102 ; $\303 -> $\103 ; $\304 -> $\104 ; $\305 -> $\105 ; $\306 -> $\106 ; $\307 -> $\107 ; $\310 -> $\110 ; $\311 -> $\111 ; $\321 -> $\112 ; $\322 -> $\113 ; $\323 -> $\114 ; $\324 -> $\115 ; $\325 -> $\116 ; $\326 -> $\117 ; $\327 -> $\120 ; $\330 -> $\121 ; $\331 -> $\122 ; $\342 -> $\123 ; $\343 -> $\124 ; $\344 -> $\125 ; $\345 -> $\126 ; $\346 -> $\127 ; $\347 -> $\130 ; $\350 -> $\131 ; $\351 -> $\132 ; $\112 -> $\133 ; $\340 -> $\134 ; $\132 -> $\135 ; $\137 -> $\136 ; $\155 -> $\137 ; $\171 -> $\140 ; $\201 -> $\141 ; $\202 -> $\142 ; $\203 -> $\143 ; $\204 -> $\144 ; $\205 -> $\145 ; $\206 -> $\146 ; $\207 -> $\147 ; $\210 -> $\150 ; $\211 -> $\151 ; $\221 -> $\152 ; $\222 -> $\153 ; $\223 -> $\154 ; $\224 -> $\155 ; $\225 -> $\156 ; $\226 -> $\157 ; $\227 -> $\160 ; $\230 -> $\161 ; $\231 -> $\162 ; $\242 -> $\163 ; $\243 -> $\164 ; $\244 -> $\165 ; $\245 -> $\166 ; $\246 -> $\167 ; $\247 -> $\170 ; $\250 -> $\171 ; $\251 -> $\172 ; $\300 -> $\173 ; $\152 -> $\174 ; $\320 -> $\175 ; $\241 -> $\176 ; $\007 -> $\177 ; $\040 -> $\200 ; $\041 -> $\201 ; $\042 -> $\202 ; $\043 -> $\203 ; $\044 -> $\204 ; $\025 -> $\205 ; $\006 -> $\206 ; $\027 -> $\207 ; $\050 -> $\210 ; $\051 -> $\211 ; $\052 -> $\212 ; $\053 -> $\213 ; $\054 -> $\214 ; $\011 -> $\215 ; $\012 -> $\216 ; $\033 -> $\217 ; $\060 -> $\220 ; $\061 -> $\221 ; $\032 -> $\222 ; $\063 -> $\223 ; $\064 -> $\224 ; $\065 -> $\225 ; $\066 -> $\226 ; $\010 -> $\227 ; $\070 -> $\230 ; $\071 -> $\231 ; $\072 -> $\232 ; $\073 -> $\233 ; $\004 -> $\234 ; $\024 -> $\235 ; $\076 -> $\236 ; $\341 -> $\237 ; $\101 -> $\240 ; $\102 -> $\241 ; $\103 -> $\242 ; $\104 -> $\243 ; $\105 -> $\244 ; $\106 -> $\245 ; $\107 -> $\246 ; $\110 -> $\247 ; $\111 -> $\250 ; $\121 -> $\251 ; $\122 -> $\252 ; $\123 -> $\253 ; $\124 -> $\254 ; $\125 -> $\255 ; $\126 -> $\256 ; $\127 -> $\257 ; $\130 -> $\260 ; $\131 -> $\261 ; $\142 -> $\262 ; $\143 -> $\263 ; $\144 -> $\264 ; $\145 -> $\265 ; $\146 -> $\266 ; $\147 -> $\267 ; $\150 -> $\270 ; $\151 -> $\271 ; $\160 -> $\272 ; $\161 -> $\273 ; $\162 -> $\274 ; $\163 -> $\275 ; $\164 -> $\276 ; $\165 -> $\277 ; $\166 -> $\300 ; $\167 -> $\301 ; $\170 -> $\302 ; $\200 -> $\303 ; $\212 -> $\304 ; $\213 -> $\305 ; $\214 -> $\306 ; $\215 -> $\307 ; $\216 -> $\310 ; $\217 -> $\311 ; $\220 -> $\312 ; $\232 -> $\313 ; $\233 -> $\314 ; $\234 -> $\315 ; $\235 -> $\316 ; $\236 -> $\317 ; $\237 -> $\320 ; $\240 -> $\321 ; $\252 -> $\322 ; $\253 -> $\323 ; $\254 -> $\324 ; $\255 -> $\325 ; $\256 -> $\326 ; $\257 -> $\327 ; $\260 -> $\330 ; $\261 -> $\331 ; $\262 -> $\332 ; $\263 -> $\333 ; $\264 -> $\334 ; $\265 -> $\335 ; $\266 -> $\336 ; $\267 -> $\337 ; $\270 -> $\340 ; $\271 -> $\341 ; $\272 -> $\342 ; $\273 -> $\343 ; $\274 -> $\344 ; $\275 -> $\345 ; $\276 -> $\346 ; $\277 -> $\347 ; $\312 -> $\350 ; $\313 -> $\351 ; $\314 -> $\352 ; $\315 -> $\353 ; $\316 -> $\354 ; $\317 -> $\355 ; $\332 -> $\356 ; $\333 -> $\357 ; $\334 -> $\360 ; $\335 -> $\361 ; $\336 -> $\362 ; $\337 -> $\363 ; $\352 -> $\364 ; $\353 -> $\365 ; $\354 -> $\366 ; $\355 -> $\367 ; $\356 -> $\370 ; $\357 -> $\371 ; $\372 -> $\372 ; $\373 -> $\373 ; $\374 -> $\374 ; $\375 -> $\375 ; $\376 -> $\376 ; $\377 -> $\377 end.