chop, chomp

id:eiji8pou:20050601:1117593390 の続き。と言うか焼き直し

numalias chop_str
numalias chop_len
numalias chop_chop
------
------
;==============================
; chop
;==============================
;機能:文字列の最後の文字を削除する。
;引数:削除したい文字列の入った文字変数
;結果:引数に与えられた文字列が一文字少なくなる。全角文字は考慮しない。
;付記:切り落とされた文字は、chopの直後であれば、chop_pick命令で取得できる。
 *chop
getparam s%chop_str ; 対象の文字列を取得。
mov $chop_chop,"" ; 変数の初期化
len %chop_len,$%chop_str ; 対象の文字列の長さを確定
if %chop_len < 1 return ; もし、対象の文字列が空なら、何もせずに終わる。
dec %chop_len ; 長さを減らす。
mid $chop_chop,$%chop_str,%chop_len,1 ; 切り落とされる文字を取得
mid $%chop_str,$%chop_str,0,%chop_len ; 実際に切り落とす
return
;==============================
; chop2
;==============================
;機能:文字列の最後を二文字削除する。
;引数:削除したい文字列の入った文字変数
;結果:引数に与えられた文字列が二文字(全角文字なら一字)少なくなる。
;付記:切り落とされた文字は、chop2の直後であれば、chop_pick命令で取得できる。
 *chop2
getparam s%chop_str ; 対象の文字列を取得。
mov $chop_chop,"" ; 変数の初期化
len %chop_len,$%chop_str ; 対象の文字列の長さを確定
if %chop_len < 2 return ; もし、対象の文字列が空なら、何もせずに終わる。
sub %chop_len,2 ; 長さを減らす。
mid $chop_chop,$%chop_str,%chop_len,2 ; 切り落とされる文字を取得
mid $%chop_str,$%chop_str,0,%chop_len ; 実際に切り落とす
return
;==============================
; chop_pick
;==============================
;機能:chop, chop2等で切り落とされた文字を取得する。
;引数:取得した文字列を入れる文字変数
;結果:引数に与えた文字変数に格納される。
;付記:直前に実行した、chopないしchop2に影響される。
 *chop_pick
getparam s%chop_str ; 格納する文字変数の番号を取得。
mov $%chop_str,$chop_chop
return
;==============================
; chomp
;==============================
;機能:末尾が特定の文字列の時以外にchopする。
;引数:削除したい文字列の入った文字変数と、切り落とさない文字列
;結果:
;付記:2バイト文字を対象とする場合は、chomp2を使うこと。
;付記:また、内部的にchopを使うので、chop_pickも有効になる。
 *chomp
getparam s%chop_str,$chop_str ; 対象文字列番号と、特定文字列を取得。
if $chop_str = "" return ; 特定文字列が空だったら、何もせずに戻る。
mid $chop_str,$chop_str,0,1 ; 特定文字列の先頭だけが有効。
chop $%chop_str
chop_pick $chop_len
if $chop_len = $chop_str add $%chop_str,$chop_len
return
;==============================
; chomp2
;==============================
;機能:末尾が特定の文字列の時以外にchop2する。
;引数:削除したい文字列の入った文字変数と、切り落とさない文字列
;結果:
;付記:また、内部的にchop2を使うので、chop_pickも有効になる。
 *chomp
getparam s%chop_str,$chop_str ; 対象文字列番号と、特定文字列を取得。
len %chop_len,$chop_str
if %chop_len < 1 return ; 特定文字列が空か無効だったら、何もせずに戻る。
mid $chop_str,$chop_str,0,2 ; 特定文字列の先頭だけが有効。
chop2 $%chop_str
if $chop_chop = $chop_str add $%chop_str,$chop_chop
return