> ラインバッファを文字列として取得するってところからわからない。ごめんなさい。「取得」は不正確でした。 「ラインバッファの『文字列』化」と言うべきところでした。 どういうことかと言うと,文字列操作関数は対象が「文字列」でないと, 最悪暴走する可能性があるんですね。「文字列」とは釈迦に説法ですが, 終端にヌル(00h)がある文字キャラクタの並びです。ラインバッファは 他のバッファと異なり,もともと終端にヌルがありません。そのため ラインバッファの終端にヌルを意図的に埋め込んで「文字列」にします。 そして,使い終わったら行編集のキャンセルコマンドをかませます。> はたまた、ラインバッファのアドレスを直接、文字列関数に渡す?要は,これになります。他のバッファに転送するわけではありません。 次のサンプルは対象とするコードの行番号正当性をチェックするだけのもの。 上限の値が16ビットに微妙に収まる範囲のようですので,より正確な判定は もう少し仕様を固めてからでよいかと思いました。 = Test *mad for vz! 1 ^\ "Bas_chk" ?. ; #^ ;ファイルの先頭からなら生かす #< e-, ;エラーのフラグ(仮) (e) ;; ==== メインのループ :L &n (r+1)??{ e+, >E } ;行番号取得,不正なら終了 #28 wa..19.2-, ;ラインバッファの文字列化 a=wa..18, ;ラインバッファ先頭アドレス (a) &Sw(a) b=r, ;行番号の桁数 (b) c=a.0, ;行頭キャラクタ (c) #54 ;行編集のキャンセル (b>5)?>E ;行番号が5桁を超えるエラー (b==5)?{ (c-$30>6)?>E } ;5桁の場合で先頭が6を超えるエラー ;; (上限を確認するか or 丸めるか) #> #d (r)??>L (e)?{ ;; ==== エラーの処理 :E &m("行番号不正またはファイルの最後") } :Z ;; ==== Quit &d #] . * 第一段階のチェックが終わったら,次は飛び先番号の洗い出しという手順かと。
関連記事一覧ツリー (▼ を押すとツリー全体を一括表示します)
返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
- 以下のフォームから自分の投稿記事を修正・削除することができます -