home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / FWINDOWS / Win31 / Mm220 / MM220.LZH / ZENHAN.MAC < prev   
Text File  |  1996-05-16  |  2KB  |  99 lines

  1. // [全角/半角変換マクロ]
  2. //  zenhan.mac
  3. //
  4. // 現カーソル位置から連続する全角文字列を半角文字列へ、
  5. // 連続する半角文字列を全角文字列へ変換します。
  6. // ・変換例
  7. //  1234567890 <--> 1234567890
  8. //  アイウエオガギグゲゴ <--> アイウエオガギグゲゴ
  9. //  サシスセソパピプペポ <--> サシスセソパピプペポ
  10. //
  11.  
  12. int aCode, oCode;
  13. char *p;
  14.  
  15. main()
  16. {
  17.     int saveIns;
  18.     
  19. p = " !”#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_‘abcdefghijklmnopqrstuvwxyz{|}~  。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜ガギグゲゴザジズゼゾダヂヅデドパピプペポバビブベボ";
  20.     
  21.     saveIns = Ins;
  22.     InsMode(0);
  23.     aCode = Tcode;
  24.     if(Kcode)
  25.       zentohan();
  26.     else
  27.       hantozen();
  28.     InsMode(saveIns);
  29. }
  30.  
  31. // 半角 --> 全角/変換
  32. hantozen()
  33. {
  34.     int c, c1, c2;
  35.     
  36.     DispOff();
  37.     while(Tcode == aCode)
  38.     {
  39.       c = Code - 0x20;
  40.       if(c < 0)
  41.         break;
  42.       if(c >= 0x80)
  43.         c = c - 0x20;
  44.       if(Code == '゙' && oCode >= 0x76 && oCode <= 0x8e)
  45.       {
  46.         c = oCode + (0xa0 - 0x76);
  47.         Bs();
  48.       }
  49.       else if(Code == '゚' && oCode >= 0x8a && oCode <= 0x8e)
  50.       {
  51.         c = oCode + (0xaf - 0x8a);
  52.         Bs();
  53.       }
  54.       oCode = c;
  55.       PutChr((p[c*2] << 8) + (p[c*2+1] & 0xff));
  56.     }
  57.     DispOn();
  58. }
  59.  
  60. // 全角 --> 半角/変換
  61. zentohan()
  62. {
  63.     int c, d, d1, d2;
  64.     
  65.     DispOff();
  66.     while(Tcode == aCode)
  67.     {
  68.       StrChr(Code, p);
  69.       c = Result / 2;
  70.       if(c < 0)
  71.         break;
  72.       d = 0;
  73.       if(c >= 0xa0)
  74.       {
  75.         if(c < 0xaf || c > 0xb3)
  76.         {
  77.           c = c - (0xa0 - 0x76);
  78.           d = '゙';
  79.         }
  80.         else
  81.         {
  82.           c = c - (0xaf - 0x8a);
  83.           d = '゚';
  84.         }
  85.       }
  86.       c = c + 0x20;
  87.       if(c >= 0x80)
  88.         c = c + 0x20;
  89.       PutChr(c);
  90.       if(d)
  91.       {
  92.         InsMode(1);
  93.         PutChr(d);
  94.         InsMode(0);
  95.       }
  96.     }
  97.     DispOn();
  98. }
  99.