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 >
C/C++ Source or Header  |  2014-05-19  |  5KB  |  138 lines

  1. /*
  2.  * Der ZConnect Zeichensatz ist eine Untermenge des IBM-PC Zeichensatzes,
  3.  * CodePage 437. Erlaubt sind die folgenden Zeichen:
  4.  * <Tab>       (009)
  5.  * <LineFeed>  (010)
  6.  * <FormFeed>  (012)
  7.  * <CR>        (013)
  8.  * <???>       (020)
  9.  * <Paragraph> (021)
  10.  * sowie die Zeichen von 32-255.
  11.  *
  12.  * Die Konvertierung von und nach ISO 8859-1 (z.B. bei RFC-Relays)
  13.  * geschieht nach den folgenden Tabellen.
  14.  */
  15.  
  16. #include <sys/types.h>
  17.  
  18. /* BAD changed from 160 to 32 (Space) */
  19.  
  20. #define BAD 32
  21.  
  22. /*
  23.  * Table converting IBM Code Page 437 (CP437) to ISO 8859-1
  24.  *
  25.  * 0-31 changed to BAD except Tab,LF,FF,CR,20 and Paragraph
  26.  * 201  changed from '-' to '+'
  27.  * 203  changed from '|' to '-'
  28.  * 237  changed from 'O' to 248
  29.  */
  30.  
  31. static  unsigned char pc437xiso [] =                    /* 000-255 */
  32. {
  33. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 000-007 */
  34. BAD,   9,  10, BAD,  12,  13, BAD, BAD,         /* 008-015 */
  35. BAD, BAD, BAD, BAD, 182, 167, BAD, BAD,         /* 016-023 */
  36. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 024-031 */
  37.  
  38. ' ', '!',  34, '#', '$',  37, '&',  39,         /* 032-039 */
  39. '(', ')', '*', '+', ',', '-', '.', '/',         /* 040-047 */
  40. '0', '1', '2', '3', '4', '5', '6', '7',         /* 048-055 */
  41. '8', '9', ':', ';', '<', '=', '>', '?',         /* 056-063 */
  42. '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',         /* 064-071 */
  43. 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',         /* 072-079 */
  44. 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',         /* 080-087 */
  45. 'X', 'Y', 'Z', '[',  92, ']', '^', '_',         /* 088-095 */
  46.  96, 'a', 'b', 'c', 'd', 'e', 'f', 'g',         /* 096-103 */
  47. 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',         /* 104-111 */
  48. 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',         /* 112-119 */
  49. 'x', 'y', 'z', '{', '|', '}', 126, 127,         /* 120-127 */
  50.  
  51. 199, 252, 233, 226, 228, 224, 229, 231,         /* 128-135 */
  52. 234, 235, 232, 239, 238, 236, 196, 197,         /* 136-143 */
  53. 201, 230, 198, 244, 246, 242, 251, 249,         /* 144-151 */
  54. 255, 214, 220, 162, 163, 165, 'P', 'f',         /* 152-159 */
  55. 225, 237, 243, 250, 241, 209, 170, 186,         /* 160-167 */
  56. 191, '-', 172, 189, 188, 161, 171, 187,         /* 168-175 */
  57.  
  58. '#', '#', '#', '|', '|', '|', '|', '+',         /* 176-183 */
  59. '+', '|', '|', '+', '+', '+', '+', '+',         /* 184-191 */
  60. '+', '-', '-', '|', 173, '+', '|', '|',         /* 192-199 */
  61. '+', '+', '-', '-', '|', '-', '+', '-',         /* 200-207 */
  62. '-', '-', '-', '+', '+', '+', '+', '+',         /* 208-215 */
  63. '+', '+', '+', '#', '#', '#', '#', '#',         /* 216-223 */
  64.  
  65. 'a', 223, 'G', 'n', 'S', 's', 181, 't',         /* 224-231 */
  66. 'O', 'O', 'O', 'd', BAD, 'O', 'e', BAD,         /* 232-239 */
  67. '=', 177, BAD, BAD, BAD, BAD, 247, '=',         /* 240-247 */
  68. 176, 183, 183, 'V', 'n', 178, 183, ' '          /* 248-255 */
  69. } ;
  70.  
  71. void pc2iso(unsigned char *buffer, size_t len)
  72. {
  73. unsigned char c;
  74.  
  75. while (len--) {
  76. c = pc437xiso[*buffer];
  77. *buffer++ = c;
  78. }
  79. }
  80.  
  81.  
  82. /*
  83.  * Table converting ISO 8859-1 to IBM Code Page 437 (CP437)
  84.  *
  85.  * 0-31  changed to BAD except Tab,LF,FF,CR
  86.  * 173   changed from '-' to 196
  87.  * 248   changed from 'o' to 237
  88.  */
  89.  
  90. static unsigned char isoxpc437 [] =                     /* 000-255 */
  91. {
  92. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 000-007 */
  93. BAD,   9,  10, BAD,  12,  13, BAD, BAD,         /* 008-015 */
  94. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 016-023 */
  95. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 024-031 */
  96.  
  97. ' ', '!',  34, '#', '$',  37, '&',  39,         /* 032-039 */
  98. '(', ')', '*', '+', ',', '-', '.', '/',         /* 040-047 */
  99. '0', '1', '2', '3', '4', '5', '6', '7',         /* 048-055 */
  100. '8', '9', ':', ';', '<', '=', '>', '?',         /* 056-063 */
  101. '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',         /* 064-071 */
  102. 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',         /* 072-079 */
  103. 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',         /* 080-087 */
  104. 'X', 'Y', 'Z', '[',  92, ']', '^', '_',         /* 088-095 */
  105.  96, 'a', 'b', 'c', 'd', 'e', 'f', 'g',         /* 096-103 */
  106. 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',         /* 104-111 */
  107. 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',         /* 112-119 */
  108. 'x', 'y', 'z', '{', '|', '}', 126, 127,         /* 120-127 */
  109.  
  110. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 128-135 */
  111. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 136-143 */
  112. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 144-151 */
  113. BAD, BAD, BAD, BAD, BAD, BAD, BAD, BAD,         /* 152-159 */
  114.  
  115. ' ', 173, 155, 156, 'o', 157, '|',  21,         /* 160-167 */
  116.  34, 'C', 166, 174, 170, 196, 'R', '-',         /* 168-175 */
  117. 248, 241, 253, '3',  39, 230,  20, 250,         /* 176-183 */
  118. ',', '1', 167, 175, 172, 171, BAD, 168,         /* 184-191 */
  119. 'A', 'A', 'A', 'A', 142, 143, 146, 128,         /* 192-199 */
  120. 'E', 144, 'E', 'E', 'I', 'I', 'I', 'I',         /* 200-207 */
  121. 'D', 165, 'O', 'O', 'O', 'O', 153, 'x',         /* 208-215 */
  122. 'O', 'U', 'U', 'U', 154, 'Y', 'P', 225,         /* 216-223 */
  123. 133, 160, 131, 'a', 132, 134, 145, 135,         /* 224-231 */
  124. 138, 130, 136, 137, 141, 161, 140, 139,         /* 232-239 */
  125. 'd', 164, 149, 162, 147, 'o', 148, 246,         /* 240-247 */
  126. 237, 151, 163, 150, 129, 'y', 'p', 152          /* 248-255 */
  127. } ;
  128.  
  129. void iso2pc(unsigned char *buffer, size_t len)
  130. {
  131. unsigned char c;
  132.  
  133. while (len--) {
  134. c = isoxpc437[*buffer];
  135. *buffer++ = c;
  136. }
  137. }
  138.