ujis2sjis.c
上传用户:tianjinjs
上传日期:2007-01-05
资源大小:309k
文件大小:1k
源码类别:

Modem编程

开发平台:

Unix_Linux

  1. /*
  2.  * This file is a part of minicom.
  3.  *
  4.  * Convert from ja_JP.ujis (EUC-Japan) to ja_JP.sjis (Shift-JIS).
  5.  * with duplicating backslash and percent, which may appear
  6.  * in the 2nd byte of Shift-JIS characters.
  7.  *
  8.  * by Tomohiro KUBOTA <kubota@debian.or.jp>
  9.  */
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <string.h>
  13. unsigned short ujis2sjis(unsigned char ku, unsigned char ten)
  14. {
  15. unsigned char s1,s2;
  16. s1 = (ku-1)/2 + 129;
  17. if (ku >= 63) s1 += 193-129;
  18. if (!(ku&1)) s2 = ten+158;
  19. else if (ten <= 63) s2 = ten+63;
  20. else s2 = ten+64;
  21. return s1*256+s2;
  22. }
  23. int decode_line(unsigned char buf[],int format)
  24. {
  25. unsigned char kanji=0, *p=buf,c1,c2;
  26. unsigned short c;
  27. while(1){
  28. if (!*p) break;
  29. if (kanji) {
  30. c=ujis2sjis((kanji&127)-32,(*p&127)-32);
  31. c1=c>>8; c2=c&255;
  32. putchar(c1); putchar(c2);
  33. if (c2=='\') putchar('\');
  34. if (c2=='%' && format) putchar('%');
  35. kanji=0;
  36. } else {
  37. if (*p&0x80) kanji=*p; else putchar(*p);
  38. }
  39. p++;
  40. }
  41. return 0;
  42. }
  43. main()
  44. {
  45. unsigned char buf[256];
  46. int format=0;
  47. while(1){
  48. if (fgets(buf,255,stdin)==NULL) break;
  49. if (buf[0]=='n' || buf[0]==0) format=0;
  50. if (buf[0]=='#' && strstr(buf,"c-format")) format=1;
  51. decode_line(buf,format);
  52. }
  53. exit(0);
  54. }