半角全角判定

全角半角判定 : 幻惑郷
素晴らしい研究。
ちょいと手直ししてから、現在組んでるライブラリに組み込ませてもらった。

半角全角判定俺バージョン(define以下game以上)

mov %0,100
numalias is_zen_result,%0:inc %0
numalias is_zen_target,%0:inc %0
numalias is_zen_cmp,%0:inc %0
defsub is_zenkaku
defsub is_hankaku
defsub letter_len

半角全角判定俺バージョン(game以下start以上)

;==================
; is_zenkaku
;==================
; 文字列を与え、その文字列の先頭の文字が全角かどうか判定する。
; 第一引数:結果を受け取る数値変数
; 第二引数:判定対象の文字列(変数)
; 結果は、0が半角、1が全角
; 依存:なし
*is_zenkaku
getparam i%is_zen_result,$is_zen_target
cmp %is_zen_cmp,$is_zen_target,"、"
if %is_zen_cmp<0 mov %%is_zen_result,0:return
cmp %is_zen_cmp,$is_zen_target,"。"
if %is_zen_cmp<0 mov %%is_zen_result,1:return
cmp %is_zen_cmp,$is_zen_target,"゚"
if %is_zen_cmp>0 mov %%is_zen_result,1:return
mov %%is_zen_result,0:return

;==================
; is_hankaku
;==================
; 文字列を与え、その文字列の先頭の文字が半角かどうか判定する。
; 第一引数:結果を受け取る数値変数
; 第二引数:判定対象の文字列(変数)
; 結果は、0が全角、1が半角
; 依存:is_zenkaku
*is_hankaku
getparam i%is_zen_result,$is_zen_target
is_zenkaku %%is_zen_result,$is_zen_target
if %%is_zen_result=0 mov %%is_zen_result,1:return
mov %%is_zen_result,0:return

;==================
; letter_len
;==================
; 文字列を与え、その文字列の先頭の文字が、1バイトか2バイトかを判定する。
; 第一引数:結果を受け取る数値変数
; 第二引数:判定対象の文字列(変数)
; 結果は、1が半角、2が全角
; 依存:is_zenkaku
*letter_len
getparam i%is_zen_result,$is_zen_target
is_zenkaku %%is_zen_result,$is_zen_target
inc %%is_zen_result
return

そんでもって

これを基礎技術にして、半角全角交じり文でバイト数ではなく文字数を返すlen2とか、とにかく左端の文字を切り取って返すleft_chopとか、あるいはそれらの派生命令を全部で10以上作成することができた。実にありがたい限りである。
このスクリプトが何をするかはそれこそスクリプトを読んで欲しいなりよー。