記事閲覧

− 野ざらし言 −

5842 Re^15: N88-BASICのRENUMのようなマクロ

としき 2025/04/29(Tue) 17:45 [5769]へのコメント
http://toshiki.la.coocan.jp/
相変わらずツリーが乱れているようですが、大丈夫でしょうか。

実は、年度が変わって人が少なくなり、4月はそれまでの平均の倍の時間外労働
をやっている。といっても、たかが20時間前後なんでたいした事はない。
有給も取れているし。が、先日の金曜日から土曜日にかけて、臨時で宿直に
入ったら、明け方の仕事でやらかしてしまいまして。抜いてはいけないケーブル
を抜いてしまったのです。幸い、お客様にはたいした影響がなかったようです。
ということで、ストレス解消を兼ねて、続きをやってみました。

= renum.def
i:初期値   initial num
a:増分     addition
n:新行番号 new num
o:旧行番号 old num

N88-BASICのコードは半角大文字が前提(半角小文字はあえて未対応)

*m
1 ^^ "renum.def"
;初期設定                                   ;vwxの常駐確認とか?
a=10,
n=o=0,
;mp[=2, ps[=pa, RX[+,
;&s

#^ #<                                       ;カーソルを先頭行の行頭にして
&n i=r,                                     ;初期値取得
(r+1)??{ &m(41) >e }                        ;準備ができていないなら終了

;メインループ
                                            ;先頭行は行番号の変更なし
:w                                          ;while(次の行に動ければ)
#> #d                                       ;次の行にカーソルを移動し
#d (r==-1)?>u                               ;その結果が最終行ならループ脱出
#<
&n o=r,                                     ;旧行番号取得
n=i+(ln-1)*a,                               ;新行番号算出
#t                                          ;旧行番号削除
&?("%d",n)                                  ;新行番号出力

#56 "\([ \t]+\)GOTO\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FGOTO\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)GOTO\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FGOTO\2" &?("%d",n) "\3" #m "ay"

#56 "\([ \t]+\)GOSUB\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FGOSUB\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)GOSUB\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FGOSUB\2" &?("%d",n) "\3" #m "ay"

#56 "\([ \t]+\)THEN\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FTHEN\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)THEN\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FTHEN\2" &?("%d",n) "\3" #m "ay"

#56 "\([ \t]+\)ELSE\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FELSE\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)ELSE\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FELSE\2" &?("%d",n) "\3" #m "ay"

#56 "\([ \t]+\)RESTORE\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FRESTORE\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)RESTORE\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FRESTORE\2" &?("%d",n) "\3" #m "ay"

#56 "\([ \t]+\)RESUME\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FRESUME\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)RESUME\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FRESUME\2" &?("%d",n) "\3" #m "ay"
    
>w
:u
;後処理
#56 "\([ \t]+\)FGOTO" #m "\1GOTO" #m "ay"
#56 "\([ \t]+\)FGOSUB" #m "\1GOSUB" #m "ay"
#56 "\([ \t]+\)FTHEN" #m "\1THEN" #m "ay"
#56 "\([ \t]+\)FELSE" #m "\1ELSE" #m "ay"
#56 "\([ \t]+\)FRESTORE" #m "\1RESTORE" #m "ay"
#56 "\([ \t]+\)FRESUME" #m "\1RESUME" #m "ay"

RX], ps], mp],
:e ;end
&d
*

きちんと動くこともあるようです。
が、遅い。行数が増えるほど遅くなる。&sで画面表示を抑止しても、
びっくりするほどは早くならない。速度は、めざらさんのマクロのほうが
圧勝です。
ただ、#5776 で危惧されている事象が発生することも確認できました。
う〜む、いくらトレードオフとはいえ、これはちょっと。
あと、上記のマクロでは対応しているつもりだけど、行番号が行末では
ないとき、なぜか変換してくれない。つまり

#56 "\([ \t]+\)GOTO\([ \t]+\)" &?("%d",o) "$$" #m
    "\1FGOTO\2" &?("%d",n) #m "ay"
#56 "\([ \t]+\)GOTO\([ \t]+\)" &?("%d",o) "\([^0-9]\)" #m
    "\1FGOTO\2" &?("%d",n) "\3" #m "ay"

最初の置換はきちんと動作するのに、次の置換はなぜかうまく動かない、
といった感じの挙動。でも、手作業で\[F7]で変換窓を開き、&?相当の
ところに数字を入れれば、後者の置換もきちんと動作してくれる。
うぅん、何を見逃しているのだ?
 

関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)

- 5731.N88-BASICのRENUMのようなマクロ - としき 25/03/29-14:22

返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

おなまえ :
Eメール :
タイトル :
メッセージ: 通常モード(推奨)  整形モード(非推奨)  preモード(空白再現)
※ プログラムコード等を含まない場合は,できるだけ通常モードをご利用ください。

参照先 :
暗証キー: (英数字で8文字以内) プレビューなし


- 以下のフォームから自分の投稿記事を修正・削除することができます -

処理 記事No. 暗証キー