140fa5264SHeinz Graalfs /* 240fa5264SHeinz Graalfs * EBCDIC/ASCII conversion Support 340fa5264SHeinz Graalfs * 440fa5264SHeinz Graalfs * Copyright (c) 2011 Alexander Graf 540fa5264SHeinz Graalfs * Copyright IBM, Corp. 2013 640fa5264SHeinz Graalfs * 740fa5264SHeinz Graalfs * This work is licensed under the terms of the GNU GPL, version 2 or (at your 840fa5264SHeinz Graalfs * option) any later version. See the COPYING file in the top-level directory. 940fa5264SHeinz Graalfs * 1040fa5264SHeinz Graalfs */ 1140fa5264SHeinz Graalfs 12*2a6a4076SMarkus Armbruster #ifndef EBCDIC_H 13*2a6a4076SMarkus Armbruster #define EBCDIC_H 1440fa5264SHeinz Graalfs 1540fa5264SHeinz Graalfs /* EBCDIC handling */ 1640fa5264SHeinz Graalfs static const uint8_t ebcdic2ascii[] = { 1740fa5264SHeinz Graalfs 0x00, 0x01, 0x02, 0x03, 0x07, 0x09, 0x07, 0x7F, 1840fa5264SHeinz Graalfs 0x07, 0x07, 0x07, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 1940fa5264SHeinz Graalfs 0x10, 0x11, 0x12, 0x13, 0x07, 0x0A, 0x08, 0x07, 2040fa5264SHeinz Graalfs 0x18, 0x19, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 2140fa5264SHeinz Graalfs 0x07, 0x07, 0x1C, 0x07, 0x07, 0x0A, 0x17, 0x1B, 2240fa5264SHeinz Graalfs 0x07, 0x07, 0x07, 0x07, 0x07, 0x05, 0x06, 0x07, 2340fa5264SHeinz Graalfs 0x07, 0x07, 0x16, 0x07, 0x07, 0x07, 0x07, 0x04, 2440fa5264SHeinz Graalfs 0x07, 0x07, 0x07, 0x07, 0x14, 0x15, 0x07, 0x1A, 2540fa5264SHeinz Graalfs 0x20, 0xFF, 0x83, 0x84, 0x85, 0xA0, 0x07, 0x86, 2640fa5264SHeinz Graalfs 0x87, 0xA4, 0x5B, 0x2E, 0x3C, 0x28, 0x2B, 0x21, 2740fa5264SHeinz Graalfs 0x26, 0x82, 0x88, 0x89, 0x8A, 0xA1, 0x8C, 0x07, 2840fa5264SHeinz Graalfs 0x8D, 0xE1, 0x5D, 0x24, 0x2A, 0x29, 0x3B, 0x5E, 2940fa5264SHeinz Graalfs 0x2D, 0x2F, 0x07, 0x8E, 0x07, 0x07, 0x07, 0x8F, 3040fa5264SHeinz Graalfs 0x80, 0xA5, 0x07, 0x2C, 0x25, 0x5F, 0x3E, 0x3F, 3140fa5264SHeinz Graalfs 0x07, 0x90, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 3240fa5264SHeinz Graalfs 0x70, 0x60, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22, 3340fa5264SHeinz Graalfs 0x07, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 3440fa5264SHeinz Graalfs 0x68, 0x69, 0xAE, 0xAF, 0x07, 0x07, 0x07, 0xF1, 3540fa5264SHeinz Graalfs 0xF8, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 3640fa5264SHeinz Graalfs 0x71, 0x72, 0xA6, 0xA7, 0x91, 0x07, 0x92, 0x07, 3740fa5264SHeinz Graalfs 0xE6, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 3840fa5264SHeinz Graalfs 0x79, 0x7A, 0xAD, 0xAB, 0x07, 0x07, 0x07, 0x07, 3940fa5264SHeinz Graalfs 0x9B, 0x9C, 0x9D, 0xFA, 0x07, 0x07, 0x07, 0xAC, 4040fa5264SHeinz Graalfs 0xAB, 0x07, 0xAA, 0x7C, 0x07, 0x07, 0x07, 0x07, 4140fa5264SHeinz Graalfs 0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 4240fa5264SHeinz Graalfs 0x48, 0x49, 0x07, 0x93, 0x94, 0x95, 0xA2, 0x07, 4340fa5264SHeinz Graalfs 0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 4440fa5264SHeinz Graalfs 0x51, 0x52, 0x07, 0x96, 0x81, 0x97, 0xA3, 0x98, 4540fa5264SHeinz Graalfs 0x5C, 0xF6, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 4640fa5264SHeinz Graalfs 0x59, 0x5A, 0xFD, 0x07, 0x99, 0x07, 0x07, 0x07, 4740fa5264SHeinz Graalfs 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 4840fa5264SHeinz Graalfs 0x38, 0x39, 0x07, 0x07, 0x9A, 0x07, 0x07, 0x07, 4940fa5264SHeinz Graalfs }; 5040fa5264SHeinz Graalfs 5140fa5264SHeinz Graalfs static const uint8_t ascii2ebcdic[] = { 5240fa5264SHeinz Graalfs 0x00, 0x01, 0x02, 0x03, 0x37, 0x2D, 0x2E, 0x2F, 5340fa5264SHeinz Graalfs 0x16, 0x05, 0x15, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 5440fa5264SHeinz Graalfs 0x10, 0x11, 0x12, 0x13, 0x3C, 0x3D, 0x32, 0x26, 5540fa5264SHeinz Graalfs 0x18, 0x19, 0x3F, 0x27, 0x22, 0x1D, 0x1E, 0x1F, 5640fa5264SHeinz Graalfs 0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 5740fa5264SHeinz Graalfs 0x4D, 0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61, 5840fa5264SHeinz Graalfs 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 5940fa5264SHeinz Graalfs 0xF8, 0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F, 6040fa5264SHeinz Graalfs 0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 6140fa5264SHeinz Graalfs 0xC8, 0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 6240fa5264SHeinz Graalfs 0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 6340fa5264SHeinz Graalfs 0xE7, 0xE8, 0xE9, 0xBA, 0xE0, 0xBB, 0xB0, 0x6D, 6440fa5264SHeinz Graalfs 0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 6540fa5264SHeinz Graalfs 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 6640fa5264SHeinz Graalfs 0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 6740fa5264SHeinz Graalfs 0xA7, 0xA8, 0xA9, 0xC0, 0x4F, 0xD0, 0xA1, 0x07, 6840fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 6940fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7040fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7140fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7240fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7340fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7440fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7540fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7640fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7740fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7840fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 7940fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 8040fa5264SHeinz Graalfs 0x3F, 0x59, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 8140fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 8240fa5264SHeinz Graalfs 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 0x3F, 8340fa5264SHeinz Graalfs 0x90, 0x3F, 0x3F, 0x3F, 0x3F, 0xEA, 0x3F, 0xFF 8440fa5264SHeinz Graalfs }; 8540fa5264SHeinz Graalfs 8640fa5264SHeinz Graalfs static inline void ebcdic_put(uint8_t *p, const char *ascii, int len) 8740fa5264SHeinz Graalfs { 8840fa5264SHeinz Graalfs int i; 8940fa5264SHeinz Graalfs 9040fa5264SHeinz Graalfs for (i = 0; i < len; i++) { 9140fa5264SHeinz Graalfs p[i] = ascii2ebcdic[(uint8_t)ascii[i]]; 9240fa5264SHeinz Graalfs } 9340fa5264SHeinz Graalfs } 9440fa5264SHeinz Graalfs 9540fa5264SHeinz Graalfs static inline void ascii_put(uint8_t *p, const char *ebcdic, int len) 9640fa5264SHeinz Graalfs { 9740fa5264SHeinz Graalfs int i; 9840fa5264SHeinz Graalfs 9940fa5264SHeinz Graalfs for (i = 0; i < len; i++) { 10040fa5264SHeinz Graalfs p[i] = ebcdic2ascii[(uint8_t)ebcdic[i]]; 10140fa5264SHeinz Graalfs } 10240fa5264SHeinz Graalfs } 10340fa5264SHeinz Graalfs 104*2a6a4076SMarkus Armbruster #endif /* EBCDIC_H */ 105