nif_tree.def を使っていたら、いくつか不具合に遭遇しました。
文太さんに頂いた 1メガ超のDC過去ログを見ていたら
特定のファイルで、ジャンプ先が該当発言番号より手前になるんです。
具体的には DC14階の
2008/08/08 14:02 1,007,705 DC14~003.LOG
2008/08/08 14:09 1,017,395 DC14~021.LOG
この2つで現象が起きました。
古い nif_tree.def でも同じです。
各種DOSエミュ、各種VZ で同じ症状が出ます。
特定のファイルで出るということは、作成されているデータがおかしいかも。
nif_tree.def を起動すると、ログフォルダの下に CT フォルダが作られて
ログファイルと同じ名前の番号ジャンプデータが作られます。
件のデータは、文太さんから頂いた当時からあったものです。
2004/10/23 18:27 66,757 DC14~003.LOG
2006/09/14 16:25 57,826 DC14~021.LOG
結構古いデータですね。
このデータをリネームして新規データを作成したら、正常にジャンプしました。
この新旧データを比較したら、かなり違いがありました。
ジャンプ先アドレスはもちろん、コメントなどのツリー構造も違ってました。
初期の nif_tree.def のバグのようです。
飛び先がおかしいと思ったら、このデータを削除して作り直すのが良さそうです。
さて、これで安心、と思ったら、今度は起動に失敗するケースが有りました。
やはり同じ 1メガ超のDC過去ログです。
色々実験してみてわかったこと。
通常にログファイルをオープンした場合は正常に起動します。
オープン窓の履歴から開くと起動失敗しておかしくなります。
色々試してみると、どうやらテンポラリエラーになっているようです。
これも各種DOSエミュ、各種VZ で同じ症状が出ます。
ということで、テンポラリエラー対策を入れてみました。
nif_tree.def 67行目から
#W
ky[, #M ((wa..64)[) ((wa..63)[)
mp[=2,ps[, eu[-,
↓
#W ;--- DATA LOG
; ---- テンポラリエラー対策 ★
#M ;カーソル位置マーク
&00 p=r, ;自前バッファ pの先頭アドレスを取得 ★
&Le(p,wa+126) ;mark0の値をp先頭に擬似プッシュ ★
ky[, ((wa..64)[) ((wa..63)[) ;カーソル位置マーク、ロング
pn.7=pn.8-, ; pn.7=pn.8-,: プロファイル呪文 m.gann
#] (mr==1)?{ &a(37) (r<=0)?. } ; &Im(pn+7,0) としてもよい
#L (s==4)?'n' #P #m mr$80, ; クローズ・オープン
&Le(wa+126,p) ;mark0の値をポップ ★
#U ;現在位置に戻す
mp[=2,ps[, eu[-,
207行目の 09: の前に
00: (3+$)."$[8]"
を追加しました。
うまく動いているようです。
ということで、改造版 nif_tree.def v8c を公開します。
#txt:NIF_TR8c.DEF
右クリックで保存できます。
ファイル名が違っているのでリネームしてお使いください。