カーソル位置の数値に税を加算して書き換えるためのマクロです。
Emmettさんの LXcash.def で小遣い帳をつけていまして,
同じレシートでも科目が異なるものがあるときは分けて記録するのですが,
商品ごとに税額が打たれているわけではないので,面倒だったんですね。
起動キーがないのは,テキストを自動で書き換えるマクロであることから,
不用意に単独で起動しないよう他のマクロからコールするようにしたからです。
= consTax.def = by H_ear
#if 0
カーソル位置の数値を取得して消費税率を掛けた数値に書き換える
通常実行で軽減税率,シフト実行で重税率(逆の設定可)
小数点以下は切り捨てがデフォルト(四捨五入の設定可)
カンマ区切りを半自動認識(3桁から4桁をまたぐ変換のみ対応)(仕様)
#endif
* mad for vz!
1 "" ?.
k1&ks, ;税率の選択 %k
;====^ カスタマイズ項目
a0, ;; シフト実行時の税率 0:重税率 1:軽減税率 %a
b0, ;; 四捨五入の設定 0:無効 1:有効 %b
;; c0, ;; 3桁から4桁になる場合のカンマ区切りの有無 0:無 1:有 %c
;====$ ここまで
d=",0123456789",
(cd==$20 || ct==1)?{ ;数字の直後なら位置を調整
#s &SF(d,cd) ;戻り値はアドレス(先頭カンマ)
(r==0 || r==d)?{ #d >q };ジャンプは使いたくないが…
}
&SF(d,cd) (r)??{ :q &m("数字ではない.") . }
mp[, ps[=pa, ;直接pwに取得できるが汎用性を考慮
&01 pw[=p=r, i-,
; ---- get str ----
(-1){ #d &SF(d,cd) (r)??{} } #b
(-1){ #s &SF(d,cd) (r)??{ #d } } #G
; ---- get num
#J #I ;作業窓で加工・取得
:l #s (cd==',')?{ #g i++, } (lx)?>l;ここもう少しスマートにしたい
&n r[, #[ n],
; ---- add tax ----
(k)?k110, ?k108, ;軽減税率と重税率 %k %a
&Im(p,0) &Ia(p,n)
&Im(p,k) &Id(p,100) m=r,
n=p..0,
(b)?{ (m>49)?n++, } ;四捨五入の場合 %b
(i==0 && n>999)?{ #s #s } ;桁の繰り上がり %c
mi[+, (p..1)?{ &?("%,lu",n,p..1) }?{ &?("%,u",n) } mi],
:z ; ---- exit ----
pw], ps], mp],
&d #] .
;;00: ; ---- look result ----
; &m("Result: %d %u $%x '%c' $"%16s$"",r,r,r,r,r)
01: ; ---- buffer ----
(5+$)."$(10,0)$[16]"
;;02: ; ---- sub routine ---
;<-- r =
;--> r =
*
[Variables]
a 加算する税率フラグ(シフト実行時分岐用)
b 四捨五入の設定フラグ
c カンマ区切りの有無フラグ(未使用)
d 数値文字列の先頭アドレス
i カウンタ(カンマ数)想定する用途と相違あり
k シフトキーフラグ→軽減税率/重税率
m mod 剰余(四捨五入有効時使用)
n 取得数値→課税後数値
p ロング演算用ポインタアドレス
[Buffers]
pa as ps
[local] as pw / long int.(4bytes)
[History]
2023/03/13 0.10
[Notes]
もっと無駄なくできるはずだが…
確かに無駄が多いように思うが,昔みたいに頑張って短くしなくても…とも思う。