Here's one version of the table. I have two tables - a 7-bit ASCII table and a UTF-8 table. Heres the 7-bit table. (a global var - char[256])
Code:
void init_translate_table_ascii7() {
int i, j ;
// Initialize the ascii translate table
for (i=0 ; i < sizeof(ascii_chars) ; ++i ) ascii_chars[i] = i ; // set each char to itself
// Initialize the ebcdic table with the ascii character set
j = (int) '0' ;
for (i = 0xF0 ; i <= 0xF9 ; ascii_chars[i] = j , i++, j++ ) ; // put 0-9 in F0 through F9
j = (int) 'A' ;
for (i = 0xC1 ; i <= 0xC9 ; ascii_chars[i] = j , i++, j++ ) ; // put A-I in C1 through C9
for (i = 0xD1 ; i <= 0xD9 ; ascii_chars[i] = j , i++, j++ ) ; // put J-R in D1 through D9
for (i = 0xE2 ; i <= 0xE9 ; ascii_chars[i] = j , i++, j++ ) ; // put S-Z in E2 through E9
j = (int) 'a' ;
for (i = 0x81 ; i <= 0x89 ; ascii_chars[i] = j , i++, j++ ) ; // put a-i in 81 through 89
for (i = 0x91 ; i <= 0x99 ; ascii_chars[i] = j , i++, j++ ) ; // put j-r in 91 through 99
for (i = 0xA2 ; i <= 0xA9 ; ascii_chars[i] = j , i++, j++ ) ; // put s-z in A2 through A9
ascii_chars[0x40] = ' ' ; ascii_chars[0x4B] = '.' ; ascii_chars[0x4C] = '<' ;
ascii_chars[0x4D] = '(' ; ascii_chars[0x4E] = '+' ; ascii_chars[0x4F] = '|' ;
ascii_chars[0x50] = '&' ; ascii_chars[0x5A] = '!' ; ascii_chars[0x5B] = '$' ;
ascii_chars[0x5C] = '*' ; ascii_chars[0x5D] = ')' ; ascii_chars[0x5E] = ';' ;
ascii_chars[0x5F] = '^' ;
ascii_chars[0x60] = '-' ; ascii_chars[0x61] = '/' ; ascii_chars[0x6A] = '|' ;
ascii_chars[0x6B] = ',' ; ascii_chars[0x6C] = '%' ; ascii_chars[0x6D] = '_' ;
ascii_chars[0x6E] = '>' ; ascii_chars[0x6F] = '?' ;
ascii_chars[0x79] = '`' ; ascii_chars[0x7A] = ':' ; ascii_chars[0x7B] = '#' ;
ascii_chars[0x7C] = '@' ; ascii_chars[0x7D] = '\'' ; ascii_chars[0x7E] = '=' ;
ascii_chars[0x7F] = '"' ;
ascii_chars[0xA1] = '~' ;
ascii_chars[0xAD] = '[' ;
ascii_chars[0xBD] = ']' ;
ascii_chars[0xC0] = '{' ;
ascii_chars[0xD0] = '}' ;
ascii_chars[0xE0] = '\\' ;
// These next couple lines are "data forgiveness" lines. They convert non-displayable ebcdic to chars to ascii blanks.
ascii_chars[0x00] = ' ' ; // Translate Binary zero to a blank
//for ( i = 0x01 ; i < 0x40 ; ascii_chars[i] = ' ' , i++ ) ; // Convert ebcdic 0x01 - 0x3F to a blank.
}