#include <string.h>
#include <ctype.h>
#include <charsettools.h>
void ibm2ascii(const char *in, char *out, bool clean)
{
while(*in!=0)
{
if(*in>=0 && *in<126)
{
if(*in>=' ' || clean)
*(out++)=*in;
}
else
{
switch(*in)
{
case '':
*(out++)='a';
*(out++)='e';
break;
case '':
*(out++)='o';
*(out++)='e';
break;
case '':
*(out++)='u';
*(out++)='e';
break;
case '':
*(out++)='s';
*(out++)='s';
break;
case '':
*(out++)='A';
*(out++)=islower(*(in+1))?'e':'E';
break;
case '':
*(out++)='O';
*(out++)=islower(*(in+1))?'e':'E';
break;
case '':
*(out++)='U';
*(out++)=islower(*(in+1))?'e':'E';
break;
default:
{
char data=*in;
ibm2iso(&data, 1);
if(data>=0 && data<126) *(out++)=data;
}
}
}
in++;
}
*out=0;
}
void iso2ascii(const char *in, char *out, bool clean)
{
while(*in!=0)
{
if(*in>=0 && *in<126)
{
if(*in>=' ' || clean)
*(out++)=*in;
}
else
{
char data=*in;
iso2ibm(&data, 1);
switch(data)
{
case '':
*(out++)='a';
*(out++)='e';
break;
case '':
*(out++)='o';
*(out++)='e';
break;
case '':
*(out++)='u';
*(out++)='e';
break;
case '':
*(out++)='s';
*(out++)='s';
break;
case '':
*(out++)='A';
*(out++)=islower(*(in+1))?'e':'E';
break;
case '':
*(out++)='O';
*(out++)=islower(*(in+1))?'e':'E';
break;
case '':
*(out++)='U';
*(out++)=islower(*(in+1))?'e':'E';
break;
default:
if(data>=0 && data<126) *(out++)=data;
}
}
in++;
}
*out=0;
}
#define BAD ' '
static char s_437xiso[]= /* 000-255 */
{
0, 1, 2, 3, 4, 5, 6, 7, /* 000-007 */
8, 9, 10, 11, 12, 13, 14, 15, /* 008-015 */
16, 17, 18, 19, 182, 167, 22, 23, /* 016-023 */
24, 25, 26, 27, 28, 29, 30, 31, /* 024-031 */
' ', '!', 34, '#', '$', 37, '&', 39, /* 032-039 */
'(', ')', '*', '+', ',', '-', '.', '/', /* 040-047 */
'0', '1', '2', '3', '4', '5', '6', '7', /* 048-055 */
'8', '9', ':', ';', '<', '=', '>', '?', /* 056-063 */
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', /* 064-071 */
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', /* 072-079 */
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', /* 080-087 */
'X', 'Y', 'Z', '[', 92, ']', '^', '_', /* 088-095 */
96, 'a', 'b', 'c', 'd', 'e', 'f', 'g', /* 096-103 */
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', /* 104-111 */
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', /* 112-119 */
'x', 'y', 'z', '{', '|', '}', 126, 127, /* 120-127 */
199, 252, 233, 226, 228, 224, 229, 231, /* 128-135 */
234, 235, 232, 239, 238, 236, 196, 197, /* 136-143 */
201, 230, 198, 244, 246, 242, 251, 249, /* 144-151 */
255, 214, 220, 162, 163, 165, 'P', 'f', /* 152-159 */
225, 237, 243, 250, 241, 209, 170, 186, /* 160-167 */
191, '-', 172, 189, 188, 161, 171, 187, /* 168-175 */
'#', '#', '#', '|', '|', '|', '|', '+', /* 176-183 */
'+', '|', '|', '+', '+', '+', '+', '+', /* 184-191 */
'+', '-', '-', '|', '-', '+', '|', '|', /* 192-199 */
'+', '+', '-', '|', '|', '-', '+', '-', /* 200-207 */
'-', '-', '-', '+', '+', '+', '+', '+', /* 208-215 */
'+', '+', '+', '#', '#', '#', '#', '#', /* 216-223 */
'a', 223, 'G', 'n', 'S', 's', 181, 't', /* 224-231 */
'O', 'O', 'O', 'd', BAD, 'O', 'e', BAD, /* 232-239 */
'=', 177, BAD, BAD, BAD, BAD, 247, '=', /* 240-247 */
176, 183, 183, 'V', 'n', 178, 183, ' ' /* 248-255 */
};
#undef BAD
void ibm2iso(char *buffer, size_t len)
{
while(len--)
{
*buffer=s_437xiso[(byte)*buffer];
buffer++;
}
}
#define BAD ' '
static char s_isox437[]= /* 000-255 */
{
0, 1, 2, 3, 4, 5, 6, 7, /* 000-007 */
8, 9, 10, 11, 12, 13, 14, 15, /* 008-015 */
16, 17, 18, 19, 20, 21, 22, 23, /* 016-023 */
24, 25, 26, 27, 28, 29, 30, 31, /* 024-031 */
' ', '!', 34, '#', '$', 37, '&', 39, /* 032-039 */
'(', ')', '*', '+', ',', '-', '.', '/', /* 040-047 */
'0', '1', '2', '3', '4', '5', '6', '7', /* 048-055 */
'8', '9', ':', ';', '<', '=', '>', '?', /* 056-063 */
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', /* 064-071 */
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', /* 072-079 */
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', /* 080-087 */
'X', 'Y', 'Z', '[', 92, ']', '^', '_', /* 088-095 */
96, 'a', 'b', 'c', 'd', 'e', 'f', 'g', /* 096-103 */
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', /* 104-111 */
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', /* 112-119 */
'x', 'y', 'z', '{', '|', '}', 126, 127, /* 120-127 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 128-135 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 136-143 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 144-151 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 152-159 */
' ', 173, 155, 156, 'o', 157, '|', 21, /* 160-167 */
34, 'C', 166, 174, 170, '-', 'R', '-', /* 168-175 */
248, 241, 253, '3', 39, 230, 20, 250, /* 176-183 */
',', '1', 167, 175, 172, 171, BAD, 168, /* 184-191 */
'A', 'A', 'A', 'A', 142, 143, 146, 128, /* 192-199 */
'E', 144, 'E', 'E', 'I', 'I', 'I', 'I', /* 200-207 */
'D', 165, 'O', 'O', 'O', 'O', 153, 'X', /* 208-215 */
'O', 'U', 'U', 'U', 154, 'Y', 'P', 225, /* 216-223 */
133, 160, 131, 'a', 132, 134, 145, 135, /* 224-231 */
138, 130, 136, 137, 141, 161, 140, 139, /* 232-239 */
'd', 164, 149, 162, 147, 'o', 148, 246, /* 240-247 */
'o', 151, 163, 150, 129, 'y', 'p', 152 /* 248-255 */
};
void iso2ibm(char *buffer, size_t len)
{
while(len--)
{
*buffer=s_isox437[(byte)*buffer];
buffer++;
}
}
#undef BAD
syntax highlighted by Code2HTML, v. 0.9.1