b2g.c
上传用户:minyiyu
上传日期:2018-12-24
资源大小:864k
文件大小:2k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. /* $Id: b2g.c,v 1.1 2000/01/15 01:45:36 edwardc Exp $ */
  2. #ifndef lint
  3. static char *rcs_id="$Id: b2g.c,v 1.1 2000/01/15 01:45:36 edwardc Exp $";
  4. #endif /* lint */
  5. #include "io.h"
  6. #define BtoG_bad1 0xa1
  7. #define BtoG_bad2 0xf5
  8. #define GtoB_bad1 0xa1
  9. #define GtoB_bad2 0xbc
  10. extern unsigned char GtoB[], BtoG[];
  11. extern int GtoB_count, BtoG_count;
  12. #define c1 (unsigned char)(s[0])
  13. #define c2 (unsigned char)(s[1])
  14. static void g2b(s)
  15.      register char *s;
  16. {
  17.   register unsigned int i;
  18. if ((c2 >= 0xa1) && (c2 <= 0xfe)) {
  19. if ((c1 >= 0xa1) && (c1 <= 0xa9)) {
  20. i = ((c1 - 0xa1) * 94 + (c2 - 0xa1)) * 2;
  21. s[0] = GtoB[i++];  s[1] = GtoB[i];
  22. return;
  23. } else if ((c1 >= 0xb0) && (c1 <= 0xf7)) {
  24. i = ((c1 - 0xb0 + 9) * 94 + (c2 - 0xa1)) * 2;
  25. s[0] = GtoB[i++];  s[1] = GtoB[i];
  26. return;
  27. }
  28. }
  29. s[0] = GtoB_bad1;  s[1] = GtoB_bad2;
  30. }
  31. static void b2g(s)
  32.      register char *s;
  33. {
  34.   register int i;
  35. if ((c1 >= 0xa1) && (c1 <= 0xf6)) {
  36. if ((c2 >= 0x40) && (c2 <= 0x7e)) {
  37. i = ((c1 - 0xa1) * 157 + (c2 - 0x40)) * 2;
  38. s[0] = BtoG[i++];  s[1] = BtoG[i];
  39. return;
  40. } else if ((c2 >= 0xa1) && (c2 <= 0xfe)) {
  41. i = ((c1 - 0xa1) * 157 + (c2 - 0xa1) + 63) * 2;
  42. s[0] = BtoG[i++];  s[1] = BtoG[i];
  43. return;
  44. }
  45. } else if ((c1 == 0xf7) && (c2 >= 0x40) && (c2 <= 0x55)) {
  46. i = ((c1 - 0xa1) * 157 + (c2 - 0x40)) * 2;
  47. s[0] = BtoG[i++];  s[1] = BtoG[i];
  48. return;
  49. }
  50. s[0] = BtoG_bad1;  s[1] = BtoG_bad2;
  51. }
  52. #undef c1
  53. #undef c2
  54. extern char *hzconvert ();
  55. static char gb2big_savec[MAX_MODULE];
  56. static char big2gb_savec[MAX_MODULE];
  57. int gb2big_init (arg)
  58.      char *arg;
  59. {
  60.   static int gb2big_inst = 0;
  61. gb2big_savec[gb2big_inst] = '';
  62. return (gb2big_inst++);
  63. }
  64. int big2gb_init (arg)
  65.      char *arg;
  66. {
  67.   static int big2gb_inst = 0;
  68. big2gb_savec[big2gb_inst] = '';
  69. return (big2gb_inst++);
  70. }
  71. char *gb2big (s,plen,inst)
  72.      char *s;
  73.      int *plen;
  74.      int inst;
  75. {
  76. return (hzconvert (s, plen, &gb2big_savec[inst], g2b));
  77. }
  78. char *big2gb (s,plen,inst)
  79.      char *s;
  80.      int *plen;
  81.      int inst;
  82. {
  83. return (hzconvert (s, plen, &big2gb_savec[inst], b2g));
  84. }