home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 December
/
VPR0112B.ISO
/
OLS
/
JED194V
/
JEDDOC.LZH
/
ZENHAN.MCR
< prev
Wrap
Text File
|
1993-10-24
|
3KB
|
102 lines
;**********************************************************
; JED マクロサンプル
; 'ZENHAN.MCR'
; [全角←→半角相互変換マクロ]
; Ver 0.10 1992 初版
; 0.90 Oct.1993
;
; Written by H.Orikawa 1992-1993
;
; 注)このマクロはVZ付属のサンプルマクロを参考にした
;
; *VZ は(株)Village Centerの市販エディタです
;**********************************************************
;全角英数記号の定義 ... 長い文字列は行末に[\]記号をつけて分割表記できる
;0 1 2 3 4 5 6 7 8 9 A B C D E F
t = "\
!”#$%&’()*+,-./\
0123456789:;<=>?\
@ABCDEFGHIJKLMNO\
PQRSTUVWXYZ[¥]^_\
‘abcdefghijklmno\
pqrstuvwxyz{|}~ \
。「」、・ヲァィゥェォャュョッ\
ーアイウエオカキクケコサシスセソ\
タチツテトナニヌネノハヒフヘホマ\
ミムメモヤユヨラリルレロワン゛゜\
ガギグゲゴザジズゼゾダヂヅデドパピプペポバビブベボ\
",
(mi) ?? #v ;上書きモード
&s ;画面表示停止
a = ct, ;カーソル位置の文字タイプを記憶
(ck != 0) ? >H ;カーソル位置の文字が全角か?
;******************
; 半角→全角変換
;******************
:A
c = cd, ;現カーソル位置の文字が
(c < ' ') ? >Z ;制御コードなら終了
(c >= $A0) ? { ;カタカナだったら
c -= $20, ;ASCIIコード表の半角グラフィック文字部をパック
}
c -= $20, ;ASCIIコード表の制御コード部をパック
#d ;(半)濁点付きカタカナ検査のため1文字進める
;濁点がつくカタカナ(B6..C4, CA..CE)の場合
(cd=='゙' && (c>=$76 && c<=$84 || c>=$8A && c<=$8E)) ? {
c += $A0 - $76, ;定義文字列[t]内での濁点カナへのオフセットを加算
#g ;濁点部分を削除
}
;半濁点がつくカタカナ(CA..CE)の場合
(cd=='゚' && c>=$8A && c<=$8E) ? {
c += $AF - $8A, ;定義文字列[t]内での半濁点カナへのオフセットを加算
#g ;半濁点部分を削除
}
#s ;1文字戻す
p = t + c * 2, ;変換対象文字の定義文字列[t]内でのアドレス計算
&o((p..0)!!) ;そのアドレスの1ワードを上下位バイトを入れ替え出力
(ct == a) ? >A ;最初に記憶した文字と同じタイプの文字が続く間
>Z ;ループし、そうでなければ終了
;******************
; 全角→半角変換
;******************
:H &f(cd, t) ;定義文字列[t]から現カーソル位置と同じ文字を探す
c = r, ;見つかった位置を記憶
(c < 0) ? >Z ;見つからなければ終了
c /= 2, ;全角文字なので位置を割り出すために1/2する
d = 0, ;(半)濁点表示フラグの初期化
(c >= $A0)? { ;(半)濁点付き全角カタカナの場合
(c<$AF || c>$B3) ? { ;濁点付きの場合
c -= $A0 - $76, ;濁点を取った文字位置を計算
d = '゙',
} ? { ;半濁点付きの場合
c -= $AF - $8A, ;半濁点を取った文字位置を計算
d = '゚',
}
}
;ASCIIコード表上の位置を求める
c += $20, ;制御コード部のオフセットを加算
(c >= $80) ? { ;半角グラフィック文字部を加算
c += $20,
}
&o(c) ;1文字出力
(d != 0)?{ ;(半)濁点付きカタカナなら
#v ;挿入モード
&o(d) ;(半)濁点文字を出力
#v ;上書きモード
}
(ct == a) ? >H ;最初に記憶した文字と同じタイプの文字が続く間
>Z ;ループし、そうでなければ終了
:Z
#v ;挿入モードに戻す
&d ;画面再表示