Current section
Files
Jump to
Current section
Files
src/swab_ebcdic.erl
%%%-------------------------------------------------------------------
%%% File: swab_ebcdic.erl
%%% @author Eric Pailleau <swab@crownedgrouse.com>
%%% @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.