新規投稿は記事一覧のフォームからお願いします
> > #rとか#cの場合、検索して発見できた、または発見できなかったという結果は
> r に返ってきます。
> ■内部レジスタ
> (式)で評価した値が内部レジスタに格納される。
> #rとか#cの場合、検索して発見できた、または発見できなかったという結果は
> 戻り値(r)と内部レジスタを混同しないようにしましょう。
> あくまでも全置換の直後の r に置換した数が格納されるということしか分かりません。
> 知りたかったのは、8000h 以上の値を返してくることはあるのか、ということ
> 知ってて敢えて質問していません? いけずやなぁ……
> 置換数の最大値って、符号付きで返ってくるのですか?
> v1.6 のマニュアル類には記載が見つからないようですね。
> > プッシュの行がコメントになっていると、異常動作の確率が圧倒的に高い。
> プッシュをせずにポップだけ行っていたら,動作が異常になるのは必然です。
> プッシュの行がコメントになっていると、異常動作の確率が圧倒的に高い。
> プッシュの行がコメントになっているために ps のアドレスが
> 短いサンプルに対して実行したところ,正常に動いています。
短いサンプルに対して実行したところ,正常に動いています。 100 IF A=B THEN 110 ELSE 120 110 GOTO 200 120 GOSUB 130:END 130 REM SUBROUTINE ……のように,行末でない場合も正しく変換されているようです。 はじめ,「最初の置換」と「次の置換」の意味を, マクロをリロードすることなく実行すると正常ではなくなる ……のことだと思い込み, ;mp[=2, ps[=pa, RX[+, RX], ps], mp], プッシュの行がコメントになっているために ps のアドレスが 入れ替わってしまうための不具合だと早とちりしたのですが, さすがにそんなことではないですよね。 トレースしてみたのですが,(結果が正常なのだから)わからず。
> 手元で動作を確認してみたいので,サンプルの処理対象コード短いものなら、以下のようなもので。 100 IF A=B THEN 130 ELSE 150 130 GOTO 200 150 GOSUB 330:END 330 REM SUBROUTINE あとは、先日一時的にアップしたオセロのコードとか。 めざらさんのマクロの処理結果と比較すれば、挙動の適否はわかるかと。
相変わらずツリーが乱れているようですが、大丈夫でしょうか。 実は、年度が変わって人が少なくなり、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]で変換窓を開き、&?相当の ところに数字を入れれば、後者の置換もきちんと動作してくれる。 うぅん、何を見逃しているのだ?