home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 December / VPR0112B.ISO / OLS / JED194V / JEDDOC.LZH / ZENHAN.MCR < prev   
Text File  |  1993-10-24  |  3KB  |  102 lines

  1. ;**********************************************************
  2. ;    JED マクロサンプル
  3. ;    'ZENHAN.MCR'
  4. ;    [全角←→半角相互変換マクロ]
  5. ;    Ver 0.10    1992 初版
  6. ;        0.90    Oct.1993
  7. ;
  8. ;    Written by H.Orikawa 1992-1993
  9. ;
  10. ; 注)このマクロはVZ付属のサンプルマクロを参考にした
  11. ;
  12. ;   *VZ は(株)Village Centerの市販エディタです
  13. ;**********************************************************
  14.  
  15. ;全角英数記号の定義 ... 長い文字列は行末に[\]記号をつけて分割表記できる
  16.  
  17. ;0 1 2 3 4 5 6 7 8 9 A B C D E F
  18. t = "\
  19.  !”#$%&’()*+,-./\
  20. 0123456789:;<=>?\
  21. @ABCDEFGHIJKLMNO\
  22. PQRSTUVWXYZ[¥]^_\
  23. ‘abcdefghijklmno\
  24. pqrstuvwxyz{|}~ \
  25.  。「」、・ヲァィゥェォャュョッ\
  26. ーアイウエオカキクケコサシスセソ\
  27. タチツテトナニヌネノハヒフヘホマ\
  28. ミムメモヤユヨラリルレロワン゛゜\
  29. ガギグゲゴザジズゼゾダヂヅデドパピプペポバビブベボ\
  30. ",
  31.  
  32.     (mi) ?? #v        ;上書きモード
  33.     &s            ;画面表示停止
  34.     a = ct,            ;カーソル位置の文字タイプを記憶
  35.     (ck != 0) ? >H        ;カーソル位置の文字が全角か?
  36.  
  37. ;******************
  38. ; 半角→全角変換
  39. ;******************
  40.  
  41. :A
  42.     c = cd,            ;現カーソル位置の文字が
  43.     (c < ' ') ? >Z        ;制御コードなら終了
  44.     (c >= $A0) ? {        ;カタカナだったら
  45.         c -= $20,    ;ASCIIコード表の半角グラフィック文字部をパック
  46.     }
  47.     c -= $20,        ;ASCIIコード表の制御コード部をパック
  48.  
  49.     #d            ;(半)濁点付きカタカナ検査のため1文字進める
  50.                 ;濁点がつくカタカナ(B6..C4, CA..CE)の場合
  51.     (cd=='゙' && (c>=$76 && c<=$84 || c>=$8A && c<=$8E)) ? {
  52.         c += $A0 - $76,    ;定義文字列[t]内での濁点カナへのオフセットを加算
  53.         #g        ;濁点部分を削除
  54.     }
  55.                 ;半濁点がつくカタカナ(CA..CE)の場合
  56.     (cd=='゚' && c>=$8A && c<=$8E) ? {
  57.         c += $AF - $8A,    ;定義文字列[t]内での半濁点カナへのオフセットを加算
  58.         #g        ;半濁点部分を削除
  59.     }
  60.     #s            ;1文字戻す
  61.  
  62.     p = t + c * 2,        ;変換対象文字の定義文字列[t]内でのアドレス計算
  63.     &o((p..0)!!)        ;そのアドレスの1ワードを上下位バイトを入れ替え出力
  64.     (ct == a) ? >A        ;最初に記憶した文字と同じタイプの文字が続く間
  65.     >Z            ;ループし、そうでなければ終了
  66.  
  67. ;******************
  68. ; 全角→半角変換
  69. ;******************
  70.  
  71. :H    &f(cd, t)        ;定義文字列[t]から現カーソル位置と同じ文字を探す
  72.     c = r,            ;見つかった位置を記憶
  73.     (c < 0) ? >Z        ;見つからなければ終了
  74.     c /= 2,            ;全角文字なので位置を割り出すために1/2する
  75.     d = 0,            ;(半)濁点表示フラグの初期化
  76.     (c >= $A0)? {        ;(半)濁点付き全角カタカナの場合
  77.         (c<$AF || c>$B3) ? {    ;濁点付きの場合
  78.             c -= $A0 - $76,    ;濁点を取った文字位置を計算
  79.             d = '゙',
  80.         } ? {            ;半濁点付きの場合
  81.             c -= $AF - $8A,    ;半濁点を取った文字位置を計算
  82.             d = '゚',
  83.         }
  84.     }
  85.                 ;ASCIIコード表上の位置を求める
  86.     c += $20,        ;制御コード部のオフセットを加算
  87.     (c >= $80) ? {        ;半角グラフィック文字部を加算
  88.         c += $20,
  89.     }
  90.     &o(c)            ;1文字出力
  91.     (d != 0)?{        ;(半)濁点付きカタカナなら
  92.         #v        ;挿入モード
  93.         &o(d)        ;(半)濁点文字を出力
  94.         #v        ;上書きモード
  95.     }
  96.     (ct == a) ? >H        ;最初に記憶した文字と同じタイプの文字が続く間
  97.     >Z            ;ループし、そうでなければ終了
  98.  
  99. :Z
  100.     #v            ;挿入モードに戻す
  101.     &d            ;画面再表示
  102.