home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
back2roots/padua
/
padua.7z
/
padua
/
ftp.vapor.com
/
microdot-1
/
md1_src_02.lzx
/
newiso.c
< prev
next >
Wrap
C/C++ Source or Header
|
2014-05-19
|
5KB
|
138 lines
/*
* Der ZConnect Zeichensatz ist eine Untermenge des IBM-PC Zeichensatzes,
* CodePage 437. Erlaubt sind die folgenden Zeichen:
* <Tab> (009)
* <LineFeed> (010)
* <FormFeed> (012)
* <CR> (013)
* <???> (020)
* <Paragraph> (021)
* sowie die Zeichen von 32-255.
*
* Die Konvertierung von und nach ISO 8859-1 (z.B. bei RFC-Relays)
* geschieht nach den folgenden Tabellen.
*/
#include <sys/types.h>
/* BAD changed from 160 to 32 (Space) */
#define BAD 32
/*
* Table converting IBM Code Page 437 (CP437) to ISO 8859-1
*
* 0-31 changed to BAD except Tab,LF,FF,CR,20 and Paragraph
* 201 changed from '-' to '+'
* 203 changed from '|' to '-'
* 237 changed from 'O' to 248
*/
static unsigned char pc437xiso [] = /* 000-255 */
{
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 000-007 */
BAD, 9, 10, BAD, 12, 13, BAD, BAD, /* 008-015 */
BAD, BAD, BAD, BAD, 182, 167, BAD, BAD, /* 016-023 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 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 */
'+', '-', '-', '|', 173, '+', '|', '|', /* 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 */
} ;
void pc2iso(unsigned char *buffer, size_t len)
{
unsigned char c;
while (len--) {
c = pc437xiso[*buffer];
*buffer++ = c;
}
}
/*
* Table converting ISO 8859-1 to IBM Code Page 437 (CP437)
*
* 0-31 changed to BAD except Tab,LF,FF,CR
* 173 changed from '-' to 196
* 248 changed from 'o' to 237
*/
static unsigned char isoxpc437 [] = /* 000-255 */
{
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 000-007 */
BAD, 9, 10, BAD, 12, 13, BAD, BAD, /* 008-015 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 016-023 */
BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD, /* 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, 196, '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 */
237, 151, 163, 150, 129, 'y', 'p', 152 /* 248-255 */
} ;
void iso2pc(unsigned char *buffer, size_t len)
{
unsigned char c;
while (len--) {
c = isoxpc437[*buffer];
*buffer++ = c;
}
}