記事閲覧

− 野ざらし言 −

5734 Re^2: N88-BASICのRENUMのようなマクロ

としき 2025/03/30(Sun) 17:19 [5733]へのコメント
http://toshiki.la.coocan.jp/
まずはじめに。

> 一方で、ジャンプ先が実在しない場合は、変換例の
> 110行目のように、変換が発生しないようにしたい。実機でもこういう仕様だった
> と記憶しています。

タッチアンドゴーで実家に行き、ちょっとN88-BASICの仕様を確認してきました。
滞在時間5分。
結果、記憶違いもあって。
飛び先の部分の変換が発生しないという部分は正解でしたが、行番号の変換自体
は行われていました。そして、「Undefined line number」なるエラーを吐く。
このエラーは、例えばGOTOの飛び先がないときに発生するエラーなんで、わりと
よく見かけるものですが、まさかプログラムの実行時以外で見かけるとは覚えて
いなかった。
もうひとつ、RENUMコマンドの引数って「新行番号、旧行番号、増分」なんです
が、それぞれの引数は省略可能。そして増分を省略した場合のデフォルトは10。
ここで、先に例に出した4行のプログラムで「RENUM 65520」とかやると、最後
の行の行番号はデフォルトの最大値の65529を越えてしまいます。この場合は
「Illegal function call」エラーとなります。こちらはマニュアルにも明記
してあります。今回検討しているマクロでは、サブセット版であればこの上限値
は別の値でもいいでしょう。

ということで

> 増分が1000番刻みって,あまりにも非現実的な気がする

これはおっしゃるとおり。
ただ、「増分が1000」ではなく「初期値が65500」でもいいのですが、要は上限を
超えるときの挙動をあらかじめ決めておきたい、ということです。
そして、その挙動としては、変換を全くはじめることなくマクロが終了すること
を希望しています。

> そもそも増分をどこで設定するのでしょう。

これは、#5731にも書きましたが、マクロのコード内にハードコーディング。
絶対にないと思いますが、将来的には可変にしたい。

> > また、BASICとして正当ではない行がある場合。
> この判定は,無理ということはないですか?

テキスト処理だけで行うと無理かもしれない。だけど、#5731に書いた正統性要件
だけでもチェックしたい。つまり

・半角数字で始まっていない行がある
・行頭の半角数字を数値として取得したときに上限値を越えている
(上限値は別途定義)
・行頭の半角数字列のあとが半角空白でもタブでもない

これらいずれかの要件を満たす行が1つでもある場合は処理を開始したくない。
ということで、このチェックに当たって私が考えた方法が
「1文字ごとに cd で見ていく」
なのです。というか、これしか思いつかなかった。
もちろん、他にもっと良い方法があればご教示いただきたい。

> > 行番号の上限チェック。
> 行数と増分の積というわけではないのですか?

たぶんそれでいくと思うのですが、何か見落としがあることが怖い。

> > 初期値の取得
> 例えば,初期値と増分を決めておいてはいけないのですか?

上にも書きましたが、増分はマクロコード埋め込みでよいと思っております。
が、初期値については、BASICのコードから、すなわち処理対象ファイルから取得
したい。そして、どうやって取得するかというと、ファイル先頭の行の行番号を
採用するということで。って、このへんのことは#5731にも書いていましたね。

> 「カーソル位置の数字列を数値として取得するには」(VZマクロFAQ)

ぅぉぉ、こういうのがほしかったんですよ。
とても参考になります。
 

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

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

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

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

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


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

処理 記事No. 暗証キー