[HOME]  [掲示板トップへもどる]  [全部表示]  [最新100]  [最新50]   [新着40] 
番号順 最新50記事     FGALVZ  

07747/07705 BQO00549 konno Re^6: LaCoocanのCGIでXMLの解析
( 1) 17/07/08 01:32 07744:10♯さんへのコメント コメント数:1

> 実のところJSONを利用する上で、JSON自体を覚える必要はほとんど無いですが…
> 次のPerlサンプルで出来ることは大体の言語で可能になってます。

おお、サンプルのソース、ありがとうございます。
上と下は別々のルーチンなんですよね。

> # $resの内容をJSONに変換して表示
上のルーチンをPerlCGIに張り付けてみましたが、実行時エラーになりました。
内容は全く分かっていません。




07748/07705 GST01234 10♯ Re^7: LaCoocanのCGIでXMLの解析
( 1) 17/07/08 01:36 07747:konnoさんへのコメント コメント数:1

一応Windows版のPerl 5.14.2 で動作確認済みです。
一番上の use JSON; 付けてますか?

07749/07705 BQO00549 konno Re^8: LaCoocanのCGIでXMLの解析
( 1) 17/07/08 01:46 07748:10♯さんへのコメント コメント数:1

> 一応Windows版のPerl 5.14.2 で動作確認済みです。
> 一番上の use JSON; 付けてますか?

その use JSON; だけ付けてもエラーになります。
新規のCGIにしてもダメみたいです。
LaCoocanの制限でしょうかね。
おいおい勉強します。


07750/07705 CXB00940 としき Re^24: UTF-8 から Shift JIS に変換
( 1) 17/07/08 01:47 07745:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> ところで、板塀のフレームの中の「掲示板トップ」というリンクを
> クリックすると、フレームが無限に増殖しますね。

おわっ、これは失敗。
板塀本体のほうはそのような事が起きないように慎重にテストを繰り返したと
いうのに、こちらのほうは全く何も試したことがなかった。
こちらの修正のほうを先に取り掛かります。


07751/07705 GST01234 10♯ Re^9: LaCoocanのCGIでXMLの解析
( 1) 17/07/08 02:16 07749:konnoさんへのコメント

エラーの内容が分からないのでなんともあれなんですけど、
LaCoocanでは JSON は使えないようになってるのかな?
ハッシュが使えないって事はないと思うんだけど…


07752/07705 BQO00549 konno Re^25: 壁の穴
( 1) 17/07/08 22:06 07750:としきさんへのコメント コメント数:1

> > ところで、板塀のフレームの中の「掲示板トップ」というリンクを
> > クリックすると、フレームが無限に増殖しますね。

なるほど、ようやくわかってきましたよ。
実は、板塀の直リンクをお気に入りから行くとフレーム無しになるんですね。
ところが、うちの掲示板に張り付けた直リンクをクリックすると・・・
なんと、無いはずのフレームが現れるではないですか。
こ、これは・・・

CGI経由を検知したらごにょごにょ・・・ですか〜

やっぱりATフィールドは存在したのか。
それも、無限力の井出ONの謎の壁力か。
壁は伝説の巨人に守られていたのだらうか。



07753/07705 CXB00940 としき Re^26: 壁の穴
( 1) 17/07/09 01:54 07752:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

増殖といったらYMOのアルバム。
#古いなぁ

とりあえず、無限に増殖する問題に対して、最終的な解決を与えることができた
ようです。宇宙のかなたへ送ったわけではありません。
そうです、残さず食べてしまえばいいのです。
#それはくりまんじゅう

って、これも古いネタですな。
まじめな話、何とか解決したっぽい。
例によって、十分な試験は行われておりません。


> 実は、板塀の直リンクをお気に入りから行くとフレーム無しになるんですね。
> ところが、うちの掲示板に張り付けた直リンクをクリックすると・・・
> なんと、無いはずのフレームが現れるではないですか。

過去数年は、お気に入りからもフレームが現れるようになっていました。
ところが、ほんの数ヶ月前、それでは不都合がある状況というものが存在する
ことに気がつきまして。あいにく、私の技術力では、その辺の問題を解決できな
かったので、このような仕様となっております。

> やっぱりATフィールドは存在したのか。

AT field ではなく AT fluid なら、そこらのイエローハットあたりで売っている
かも。エネルギー保存則は維持されるはずですが。


07754/07705 BQO00549 konno Re^27: 壁の穴
( 1) 17/07/09 19:08 07753:としきさんへのコメント コメント数:1

> とりあえず、無限に増殖する問題に対して、最終的な解決を与えることができた
> ようです。

えーと、試した範囲では変わっていないような気がします。
以下に直リンクを

  http://152.081.hinocatv.ne.jp:9801/bbs/wforum.cgi

これで見てもらえますか。
まあ、「掲示板トップ」という罠を踏まなければ問題ないんですが。

板塀#2737 のようなリンクは正常に動作しているようです。
この応用で更新情報できないかしらん。

> AT field ではなく AT fluid なら、そこらのイエローハットあたりで売っている
> かも。エネルギー保存則は維持されるはずですが。

これが切れると暴走が止められないわけですね。(^^;
やはりメンテは大事ということでまとまるのだらうか。


07755/07705 CXB00940 としき Re^28: 壁の穴
( 1) 17/07/10 13:30 07754:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> えーと、試した範囲では変わっていないような気がします。
> 以下に直リンクを

うちで試すと直っているようなんですけど。
もしかして、ブラウザ側に問題があって、フレームの中が再読み込みされていない
とか。
まず、再読み込みしないで状況が再現するか確認し、それから再読み込みして、
さらに状況が再現するか確認してみてください。あと、ブラウザが異なると
状況が異なるという可能性もあるかもしれません。


> これが切れると暴走が止められないわけですね。(^^;
> やはりメンテは大事ということでまとまるのだらうか。

暴走っていうのは、制御が効かない状態なワケです。
なので、設計の段階で、きちんと負帰還が効くようになっていれば、ちょっとや
そっとはメンテの手を抜いても、大抵は大丈夫なはずなんですがねぇ。
例えば、原子炉でも、既存の商用炉は穴をあけると冷却が止まって暴走しますが、
開発中の高温ガス炉なんかでは、冷却を止めると反応が止まる方向に進むように
なっているわけだし。もちろん、穴をあければ放射能は漏れますし、利点がある
だけ欠点も多々あるはずですけどね。


07756/07705 BQO00549 konno Re^29: 壁の穴
( 1) 17/07/11 22:55 07755:としきさんへのコメント

> うちで試すと直っているようなんですけど。
> もしかして、ブラウザ側に問題があって、フレームの中が再読み込みされていない
> とか。

あれ? 今試したら直ってる!?
共用のPCでは直ってましたね。
ノートPCのほうは、挙動がちょっと違っていて、フレーム無しの表示になりました。
再読み込みしたらフレームが現れてそれ以降は増殖しなくなりました。
うう、フレーム無しがよかったのにぃ・・・・

> 暴走っていうのは、制御が効かない状態なワケです。
> なので、設計の段階で、きちんと負帰還が効くようになっていれば、ちょっとや
> そっとはメンテの手を抜いても、大抵は大丈夫なはずなんですがねぇ。

機械はそうなんですが、最近の暴走は人の誤操作や思い込みやなんやらで
人間系の暴走が増えていますよね、

でも壁の穴をふさげばもう安心。
さあ、これから人類の反撃ののろしをあげ
人類補完計画の完遂だぁ!!



・・・ああ、暴走が止まらない。



07757/07757 BQO00549 konno 新コンテンツ 「BBS 新着情報」
( 1) 17/07/12 23:29 コメント数:3

タマの猫ハウスに新コンテンツ 「BBS 新着情報」(仮)を追加しました。

トップページの一番下のリンクです。

としきさんから頂いた、LWPのソースを元にしています。
ありがとうございます。

VTDOS BBS
野ざらし言
今日のテーマ
の新着記事3タイトル表示します。

VTDOS BBS は解析が不十分なので、親記事が上になる変則的な表示になっています。

完全試行錯誤の泥縄式(縄文式)どつぼです。

永遠のみかん製ともいう。


07758/07758 BQO00549 konno MS-DOS Player の更新
( 1) 17/07/14 23:42 コメント数:4

MS-DOS Player 2017-07-14版が出ました!!
最近頻繁に更新がありましたが、今回の更新はびっくり!!うれしい!!

MS-DOS Player for Win32-x64 のページです。
http://takeda-toshiya.my.coocan.jp/msdos/index.html

以下、更新内容の引用です。
--------------------------------------------------------
2017/7/14
INT 21h, AX=440Ch, CL=5Fhをサポートしました。
INT 2Fh, AX=1A01h, CL=5Fhをサポートしました。
いずれもディスプレイの情報を設定するサービスですが、画面サイズのみ設定可能です。
MODE CON COLS=40 LINES=25とか出来るようになっているかと思います。

INT 21h/2Fhのサービスによって、コンソールに文字を表示する際に、
INT 29hの処理がフックされている場合は、INT 29hを経由するように修正しました。

制限として、INT 29hの処理がフックされている場合、STDINからの入力を待って、
更に入力に対してエコーを返すサービス(INT 21h, AH=01h/0Ah/3Fh)を実行中は、
仮想マシンのCPUの動作が停止して、タイマ割り込みが発生しなくなります。

これらのサービスの入力待ちの処理は、仮想マシンのCPU上でループするのではなく、
MS-DOS Playerのサービスの処理上でループすることで待機しています。
この待機中も、タイマ割り込みが発生できるように、CPUを回し続けるために、
別スレッドでサービスの処理を実行して、そちらで入力待ちをしてやって、
メインスレッドでは、CPUでダミールーチンを実行し続けるようになっています。
(この辺りについては、2017/2/22の記事をご参照ください。)

この別スレッドで実行しているサービスの処理内で、コンソールにエコーを返す際に、
INT 29hを実行するために、メインスレッドで回っているCPUに茶々を入れることが
構造的にとても難しかったため、INT 29hの処理がフックされている場合は、
サービスの処理をそのままメインスレッドで実行するようにしました。
このとき、メインスレッドで入力待ちをしている間、CPUの動作が停止してしまうため、
タイマ割り込みは発生できなくなります。

また、INT 29hの処理内で、再度コンソールに文字を表示するINT 21h/2Fhのサービスが
呼び出された場合、無限ループに入らないように、INT 29hは再発生しません。

今回の実装で、CPUコアからDOSのシステムコールのエミュレーションが呼ばれて、
その中で、INT 29hを実行してIRETするまでCPUコアを回してやって、
その中で、またDOSのシステムコールのエミュレーションが呼ばれて、といった感じで、
再入することを想定していなかった色々な処理を再入しまくってます。
何かしら処理に矛盾を来たしていないか、安定性に問題ないか、色々と苛めテストに
ご協力いただけますと幸いです。

本件は、VZエディタの私家版を開発されている、金野様よりご指摘いただきました。
VZエディタからDOSコマンドを実行する際に、INT 29hをフックすることで、
DOSコマンドの実行結果を取り込む、みたいなことをしているそうです。

Windows NTやOS/2上のコマンドプロンプトでも、コンソールに文字を表示する際に、
INT 29hを経由しないそうですが、意外と互換性が微妙なんですかね?
(この問題を補うために、toint29というソフトが公開されています)

------------------------------------------------------------------

ということで、実はMS-DOS Player 作者の武田さんに、
VZのコンソールが使えるようにならないかメールしたのです。
構造的に難しいとのことで、諦めていたんですが、実現してくれました!!
超嬉しいです!!

VZerにとってコンソールは大きな武器なので、これが使えないと実使用が難しい。
これから MS-DOS Player を本格的に試験運用していくつもりです。

武田さん、本当にありがとうございます。


07759/07758 BQO00549 konno MS-DOS Player の使い方と利点
( 1) 17/07/15 01:03 07758:konnoさんへのコメント コメント数:1

・MS-DOS Player の使い方と利点

i486_x86 の中のmsdos.exeをパスを通したフォルダにコピーして
ショート−カットアイコンのプロパティのリンク先に

C:\UT\msdos.exe -n40,120 vzibmj.com /vz

と入れて起動したら、120桁40行のV-TEXTで起動する


・・・と思ったら、今回のVerでは、80桁25行のままみたい。
どうやら、-n を入れるとダメみたいですね。
-n は使えないが、プロパティの中のレイアウトで行桁数変更できます。

command.com を使えば、BAT も常駐もできます。

C:\UT\msdos.exe -x -v7.0 e:\command /c c:\ut\vzp.bat


・MS-DOS Player の利点

多種類のcommand.com が動作する
MSDOS Ver2.0〜Ver7.1 Win98のcommand.comまで動くそうです。
PCDOS,DRDOSやFreeCOMやGRDOSまでも・・・凄いですね。
ただ、Win95のcommand.comで試したら、DIRが表示しないようです。
なので、現状 DIR でLFN表示は実現出来ていません。

ソーサーが動く(英語版ソフトなので文字化けはするが80*25で)
VTDOSでは動かないソフトも動く可能性があるということですね。



07760/07757 CXB00940 としき Re: 新コンテンツ 「BBS 新着情報」
( 1) 17/07/15 13:49 07757:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> 永遠のみかん製ともいう。

みかんせいじんのこうげき!
うゎ〜、やられたぁ〜!

いや、そうではなくて。
大元のサンプルにバグがあると、それをそのまま使ったプログラムにも当然バグ
が組み込まれるわけで。
いや、何がいいたいかというと、バグってます。
それも、私のサンプルからして。
まさに、#7326で私が書いた事の類例といってもいいかも。

何が悪いかというと、発言日時の取得ルーチン。
これ、最低限のチェックしかしていません。なので当然、余分なものがいっぱい
引っかかってきてしまいます。
結果、#7758のように、発言本文中に日付形式の文字列があると、その部分が全て
発言日時のフィールドだと誤解して、以下、不具合発生。
解決策は、チェックを厳しくすること。

とりあえず、うちのdummy.cgiは、今回のkonnoさんの発言だけは誤認しない程度
にチェックを厳しくしましたが、当然、その程度はすり抜ける発言が現れること
は十分に考えられます。

この際、きちんと対応されることを強くお奨めいたします。


07761/07757 BQO00549 konno Re^2: 新コンテンツ 「BBS 新着情報」
( 1) 17/07/15 23:53 07760:としきさんへのコメント コメント数:1

> いや、何がいいたいかというと、バグってます。

思いっきりバグってましたね。

> それも、私のサンプルからして。
> まさに、#7326で私が書いた事の類例といってもいいかも。

うう、1年以上前の書き込みですか、ほとんど覚えてない・・・
ツリーがやたら長いし、思わず読みふけってしまうし・・・

> 何が悪いかというと、発言日時の取得ルーチン。
> これ、最低限のチェックしかしていません。なので当然、余分なものがいっぱい
> 引っかかってきてしまいます。

ああそうか、タイトルに日付を入れたせいか。なんでかなぁ〜と思ってました。
早速VerUPか(違うって)



07762/07757 CXB00940 としき Re^3: 新コンテンツ 「BBS 新着情報」
( 1) 17/07/16 13:45 07761:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> ああそうか、タイトルに日付を入れたせいか。なんでかなぁ〜と思ってました。

タイトルではなく、本文に 2017-07-14といった日付が入っているのがいけないの
ではないかと思います。
あと、今日のテーマの新着情報だけ、不等号が尻尾にくっついていたりします。
それから、太字指定タグがついているけど閉じタグがないとか、なんかいろいろ
微妙に不自然。

> 早速VerUPか(違うって)

いや、違いません。
ここは一発、ぜひとも。


07763/07757 BQO00549 konno Re^4: 新コンテンツ 「BBS 新着情報」 Ver0.3
( 1) 17/07/17 21:20 07762:としきさんへのコメント

> タイトルではなく、本文に 2017-07-14といった日付が入っているのがいけないの
> ではないかと思います。

うう、完全にボケてました。頭が全く働かなくなってますね。(;_;)


> あと、今日のテーマの新着情報だけ、不等号が尻尾にくっついていたりします。
> それから、太字指定タグがついているけど閉じタグがないとか、なんかいろいろ
> 微妙に不自然。

正規表現の使い方がわかっていませんでした。
夜も寝ないで昼寝して試行錯誤を重ねてやっとまともになったと思います。

> > 早速VerUPか(違うって)
> いや、違いません。
> ここは一発、ぜひとも。

VerUP って、改善されたものを言うイメージを持っているんです。
今回のは単なるバグ取りなんでねぇ。
仕事では書類などの更新を リビジョンアップと呼称しているので
どう違うのかなと思ったら

> 「バージョン」は「版」と言う意味で、ソフトウェアの機能が異なる(機能の追加や変更がある)場合に異なった番号になります。
> 「リビジョン」とは「修正」「改訂」といった意味で、機能は変更せずに不具合を修正する場合にリビジョン番号を変更します。

こういうことですか。
表示ではなく呼び方的な違いということかな。
せっかくなので、見栄えも少し弄りました。


07764/07764 CXB00940 としき マッシュアップもどき その2
( 1) 17/07/18 16:08 コメント数:1
参照先:http://toshiki.la.coocan.jp/

ツリーも大きくなっているので、新しいツリーを起こします。

ご要望にお答えして、いろいろと検討してみました。
まず、#7733で検討依頼を受けた更新情報の件。
当初は、投稿があるたびにどうするか、ということを考えていました。
実際、とりあえず動く程度のサンプルを実装してみたのですがね。
ちょっとサーバのタイミングがずれるだけでエラーを吐いてくださる。この点は、
ロジックを変更せずとも、もっと速いサーバならば問題は出ないはずです。
あと、このルーチンをどこに入れるか、というのも問題。
投稿完了メッセージ出力直前が一番簡単なんですが、するとエラーになった場合、
投稿が完了しているにもかかわらずエラーメッセージが表示されるわけで、これ
はよろしくない。
また、発言の修正や削除があった場合にも情報は更新される必要があると思うの
ですが、そんなあちこちに不安定なルーチンを仕込みたくないというのもあって。
結局、サーバ上で時刻指定でバッチを動かし、定期的に更新情報をアップロード
することにしました。アップロード先はLaCoocan。URLは以下のとおり。
tp://toshiki.la(略)jp/itabei.rss
わざと、微妙に正時からずれた時刻にしてありますが、毎日、だいたい午前4時
ごろにアップロードされます。こういう形なので、即時性は担保されませんが、
少なくとも1日たてば確実に更新情報は反映されます。

次に、このRSSを使って、再びマッシュアップもどきを作ってみました。
今度は、うちの板塀とVTDOSの掲示板です。
当初はVTDOSの掲示板もRSSを取得する形にしたかったのですが、FC2のBBSで提供
しているRSSって、件数が少ないのですね。
でも、そうしなかった最大の理由(または本当の理由)は、日付の形式。
月が、数字ではなく、アルファベット3文字だったのですね。
これの変換が、難しくはないのですが、面倒で。
いや、面倒というのも変か。関数一発ですから。
やっぱり、件数が少ないことが真の理由かも。

その他、いろいろと小技も盛り込んでいます。
例えば、文字コードの変換。
せっかく、LaCoocanにはEncodeってライブラリが組み込まれているのですから、
こいつを使いましょうよ、というサンプルになっています。
使い方としては、
  外部から読み込んだデータは内部コードにdecode
  外部にデータ出力する前に内部コードからencode
  文字列処理は内部コードで行う
  ただし、スクリプト自体がShift-JISなら、日本語の文字列定数もdecode要
  (スクリプト自体がUTF-8なら文字列定数の処理不要)
といったところでしょうか。

最後、おまけ。
これはもしかしたら10#さんが嫌がるかな。
VTDOS BBSへのリンクに、妖しいオプションを仕込んでみました。
FC2 BBSにはこんな機能もあるんだよ、というサンプルになっています。

ということで、いろいろと怪しいサンプルCGIのURLは以下のとおりです。
tp://toshiki.la(略)jp/cgi-bin/rssget.cgi
例によって、拡張子を変更すればダウンロード可能。
もちろん、サンプルなんで、エラーチェックは甘アマ。
顕在化していませんが、動かないパターンやこけるパターンは頻出の予定です。

07765/07764 BQO00549 konno Re: マッシュアップもどき その2
( 1) 17/07/19 07:18 07764:としきさんへのコメント

> ご要望にお答えして、いろいろと検討してみました。
> まず、#7733で検討依頼を受けた更新情報の件。
> 結局、サーバ上で時刻指定でバッチを動かし、定期的に更新情報をアップロード
> することにしました。アップロード先はLaCoocan。URLは以下のとおり。
> tp://toshiki.la(略)jp/itabei.rss


おお、ブラウザで開くとRSSの更新情報そのままなんですね。
対応いただきありがとうございます。

> 次に、このRSSを使って、再びマッシュアップもどきを作ってみました。
> 今度は、うちの板塀とVTDOSの掲示板です。

おおお、これはいいですね。完璧です。

> その他、いろいろと小技も盛り込んでいます。
> 例えば、文字コードの変換。
> せっかく、LaCoocanにはEncodeってライブラリが組み込まれているのですから、
> こいつを使いましょうよ、というサンプルになっています。

うおおお、凄いですね、やっぱりライブラリで出来たんですね。

> 最後、おまけ。
> これはもしかしたら10#さんが嫌がるかな。
> VTDOS BBSへのリンクに、妖しいオプションを仕込んでみました。
> FC2 BBSにはこんな機能もあるんだよ、というサンプルになっています。

おお、わくわく、これから中身を見てみます。


07766/07758 BQO00549 konno Re: MS-DOS Player の現状
( 1) 17/07/20 20:18 07759:konnoさんへのコメント コメント数:1

ショート−カットアイコンのプロパティのリンク先に

C:\UT\msdos.exe -x vzibmj.com /vz -nq

で取りあえずVZは起動しますが、やはり commannd.com が無いとまともに動かない。
この環境で、set , Ver などのコマンドは動くが、CMD.EXE なのかしら?
これらの内部コマンドはVZのコンソールに反映されません。
 toint29 を使用してもダメなので、もしかして内部コマンドとか?

この環境での Vmap これはVZのコンソールに反映されます。

VMAP Version 2.01  Copyright (C) 1989-91 by c.mos

addr PSP  blks   size  owner/parameters           hooked vectors
---- ---- ---- ------  -------------------------  -----------------------------
0205 sys    4    9152  <config>
0445        1    8192  <free>
0646 <--    1    3888  vzibmj 1.60t /vz -nq       1B 22 29
073A        1  724032  <free>
B800 sys    1       0  <config>

----- EMS ver4.0 (frame: C000h) -----       ----- XMS ver3.00 -----
handle pages   size  name                   HMA not used
------ ----- ------  --------               EMB free: 31680 KB
  free  2033 32528k
 total  2048-32768k


> command.com を使えば、BAT も常駐もできます。
> C:\UT\msdos.exe -x -v7.0  e:\command /c c:\ut\vzp.bat

さて、この指定で Windows10 Pro Ver 1607 のノートPCは動くが
 Windows10 Home Ver 1703 のデスクトップPCが動かない。
この詳細はもっと調べてから書きますが、まず現状の問題点を。

 shift + F08〜F10 キーが効かない
 ctrl  + F01 キーが効かない

これは痛いです。切り貼りなどで使っているので、これが使えないと実用出来ない。
この文は最初素のVZで書き始めたが、マクロも動かないので、Vmapの表示だけ。
次にcommannd.com経由のVZで続きを始めたが、切り貼り出来なくて即諦めました。

VTDOS 付属の KEYCODE.EXE で、キーコードが発行されてないのを確認しました。
 alt + F04 でMS-DOS Player が終了するのは仕様だから仕方ないですね。

ああ、やっぱりVTDOS環境は極楽だぁ。

> MSDOS Ver2.0〜Ver7.1 Win98のcommand.comまで動くそうです。
> PCDOS,DRDOSやFreeCOMやGRDOSまでも・・・凄いですね。

すみません、GRDOS は勘違いだったようです。
 GWBASIC をなぜかGRDOS と思い込んでしまったようです。
もうろくじじいだなぁ。


07767/07758 BQO00549 konno Re^2: MS-DOS Player の現状
( 1) 17/07/21 23:57 07766:konnoさんへのコメント

> > C:\UT\msdos.exe -x -v7.0 e:\command /c c:\ut\vzp.bat
> さて、この指定で Windows10 Pro Ver 1607 のノートPCは動くが
> Windows10 Home Ver 1703 のデスクトップPCが動かない。
> この詳細はもっと調べてから書きますが、まず現状の問題点を。

調べてみると、幽霊の正体見たり、みたいな面妖なことになっていた。
DOS6.2のcommannd.com が悪いのかも、と思ってFreeCOMのに入れ替えようと
VZで削除しようとしたが出来ない。他で使っていないのを確認して
エクスプローラーで削除しようとしたがファイルが見つからない。

システムファイルが表示されてないのかと確認し、隠しファイル
の表示にチェックを入れたら見えるようになった。
よく見ると、アイコンの色が薄いので、隠し属性になっているのか?
だが、VZの属性表示では何も属性が付いていない。
取りあえず、エクスプローラーで削除して、FreeCOMのに入れ替えた。

そうしたら、あっけなくMSDOS Player が動きましたよ。何だったんだ。

ところが今度はフォントのトラブルが。
英語モードになったのか、変なフォントに切り替わってしまった。
MSゴシックも消え、ターミナルもサイズ表示が消えて最小表示になる。

再起動しても変わらず、何をしても直らない。
色々試行錯誤した末にやったことはよく覚えていないが、たぶん
最小表示のまま起動させ、その窓の上のアイコンを右クリック
プロパティのフォントタブを開き、たぶん数字入力窓に20と入れて
Enter したら直ったみたいな。

ところで、CLPPST.EXE が動きませんね。古いデータを貼り付けるだけで
別窓のデータの切り張りができないです。

c:\vz\CLPPST.EXE /W c:\vz\CLPPST.TMP
This program must be run under Win32

コンソールの履歴にはこんな表示が。
32ビットコマンドがだめなのかなあ。

ZCPY32もダメみたい。

c:\vz\CLZCPY32 /u C:\VZ\-LES\12C1EA~1 C:\UT\IME
This program cannot be run in DOS mode.

ちょっと表示の化けがあるかな。

ZCPY32 /u C:\VZ\-LES\12C1EA~1 C:\UT\IME
This program cannot be run in DOS mode.

もう一度実行したら違う表示に。

ここまでMSDOS Playerで書いたが、CLPPST.EXEが動かないので
SAVEしてVTDOS窓で開いて切り貼りする羽目に。(^^;


07768/07757 BQO00549 konno Re: 新コンテンツ 「BBS 新着情報」 Ver0.4
( 1) 17/07/24 01:05 07757:konnoさんへのコメント コメント数:1

タマの猫ハウス新コンテンツ 「BBS 新着情報」Ver0.4 に更新しました。
としきさんから頂いた、LWPのソースを元にしています。
板塀の対応ありがとうございます。

VTDOS BBS
やしきの板塀
野ざらし言
今日のテーマ
の新着記事4タイトル表示します。



07769/07757 DGF01024 めざら Re^2: 新コンテンツ 「BBS 新着情報」 Ver0.4
( 1) 17/07/24 15:33 07768:konnoさんへのコメント コメント数:1
参照先:http://mezala.la.coocan.jp/

こりゃーいいや。
ブラウザのホームにある野ざらしをこっちに差し替えちゃえ。

07770/07757 BQO00549 konno Re^3: 新コンテンツ 「BBS 新着情報」 Ver0.4
( 1) 17/07/24 23:22 07769:めざらさんへのコメント

> こりゃーいいや。
> ブラウザのホームにある野ざらしをこっちに差し替えちゃえ。

おお、需要があったようで。(^_^)
私も更新チェックのためにいくつもクリックしていたのが一回で済むように
なったので、サンプルを提供してくれたとしきさんに感謝です。


07771/07758 BQO00549 konno MS-DOS Player の更新 2017/7/24版
( 1) 17/07/26 01:32 07758:konnoさんへのコメント コメント数:1

MS-DOS Player 2017-07-24版が出ました.

以下、更新内容の引用です。
--------------------------------------------------------
2017/7/24

キーの押し離し、キーの読み込みがあった際に、BIOSデータエリア内にある、
キーバッファの内容や、キーバッファの書き込み・読み込み位置の情報を、
然るべく更新するように修正しました。
キーバッファの内容を直接参照するソフトが動作するようになったかと思われます。

こちらの不具合は、Pedro Pablo Lopez Rodriguez様にご指摘いただきました。
スペインのマドリード工科大学(Polytechnic University of Madrid)で、
Operating Systemの教授をされているそうです。
もし拙作が、教育や研究のお役に立てているようでしたら光栄ですね。

Shift+F8〜F10、Ctrl+F1を入力できない不具合を修正しました。
WindowsキーおよびMenuキーを無視するために、スキャンコードが5Bh〜5Ehの場合は
キーバッファに入れないようにしていたのですが、
ShiftまたはCtrlキーとファンクションキーを同時に押したときのスキャンコードで、
5Bh〜5Ehになるものがあり、これらも無視されてしまっていたようです。

また、-nオプションが機能していなかった不具合を修正しました。

これらの不具合は、前回に引き続き、金野様にご指摘いただきました。

INT 29hの処理中、TSCが正しく更新されない不具合を修正しました。
RDTSC命令はPentium以降ですので、リリースしているバイナリでは無関係です。

また、INT 29h、またはINT 21h/2Fhでキー入力待ちなど時間が掛かるサービスの実行中に、
タイマ割り込みによって更にINT 21h/2Fhで時間が掛かるサービスを呼び出した場合は、
サービスの処理待ちの為に更に別スレッドを立ち上げないようにしました。
普通はそのようなことはないかと思いますが、念のための安全対策です。


------------------------------------------------------------------

ということで、Shift+F8〜F10、Ctrl+F1の不具合が修正されました。
武田さん、ありがとうございます。

command.com についてですが、Win98 の command.com が良いようです。
Dir で LFN が表示出来ます。
-V オプションがあると起動できないみたいです。

MEU というメモリ表示ソフトは表示が超遅いですね。
どこかでウエイトが効いているのかな。



07772/07758 BQO00549 konno MS-DOS Player の更新 2017/7/27版
( 1) 17/07/27 21:42 07771:konnoさんへのコメント コメント数:1

MS-DOS Player 2017-07-27版が出ました.

以下、更新内容の引用です。
--------------------------------------------------------
2017/7/27
通常のMS-DOS環境上で、Win32/64のプログラムを実行すると、
This program cannot be run in DOS mode.
と表示されて、そのままプログラムが終了するようになっています。
これは、Win32の実行ファイルのヘッダ内に、このようなメッセージを表示して
そのまま終了するようなMS-DOS用スタブプログラムが埋め込まれて、
MS-DOS環境ではそちらが実行されるようになっているからです。

MS-DOS Player上でWin32のプログラムを実行した場合も同様の動作でしたが、
INT 21h, AX=4B00h, INT 2Eh, またはINT 2Fh, AX=AE01hなどのサービスで、
Win32のプログラムを子プロセスとして起動しようとした場合は、
system() Win32 APIを使って、Win32の子プロセスとして実行するようにしました。
このとき、子プロセスが終了するまで、MS-DOS Playerは待機します。

ただし、INT 21h, AX=4B01h/4B03hなど、プログラムファイルをロードするだけで、
実際には実行しない場合は、プログラムファイルがそのままロードされます。
その後に、メモリ上にロードしたプログラムに処理が移った場合は、従来通り、
This program cannot be run in DOS mode.が表示されて終わりです。

なお、指定されたコマンドラインをそのまま丸ごと、system()に投げています。
16bitのプログラムとパイプで繋ぐようなケースは考慮していません。
また、子プロセスがコンソールに文字を表示する際、MS-DOS Player側のINT 29hは
経由されませんのでご注意ください。

こちらの処理は、あくまで子プロセスの起動時のみとなります。
「msdos (プログラム名)」で起動時に指定したプログラムがWin32の場合は、
This program cannot be run in DOS mode.が表示されますが、
この場合は素直に対象のプログラムを直接起動してください、ということで(を

MS-DOS PlayerでCOMMAND.COMを実行して、その上でWin32のコンソールアプリを
シームレスに使用できるようになっているかと思います。

Windows上でVZエディタを使用する際、CLPPST.EXEというWin32のプログラムを使って、
Windows側のクリップボードと連携しているそうです。
今回の修正で、この仕組みが動くようになっているといいのですが…。
素直にINT 21h, AX=4B00h辺りを使っててくれれば大丈夫だと思うんですけどね。

# DOS時代はSEDIT派でしたので、VZエディタの使い方をよく知らなかったり(苦笑)
# 検証ご協力お願いいたします>今野様

------------------------------------------------------------------

ということで、MS-DOS Player上のVZで CLPPST.EXEが動くようになりました。
その他のWin32プログラムもばっちり動いています。
武田さん、ありがとうございます。

前回の記事で
> command.com についてですが、Win98 の command.com が良いようです。
> Dir で LFN が表示出来ます。
> -V オプションがあると起動できないみたいです。
と書きましたが、使い方がいまいちわかっていなかったようです。
武田さんからメールを頂いたので引用します。

----------------------------------------------------------

Microsoft純正のCOMMAND.COMは、INT 21H, AX=3306Hを使ってDOSのバージョンを取得して、
それが期待した値であるかをチェックするようになっています。
デフォルトではV7.10を返すようになっていますので、Win98のCOMMAND.COMを使う場合は
-vオプションを指定しなくてもそのまま動作します。
(逆に、V7.10以外を-vオプションで指定してしまうと動作しなくなります。)

例えばMS-DOS V6.22のCOMMAND.COMを使用する場合は、"msdos -v6.22 command.com"のように
バージョンを指定する必要があります。
または、MS-DOS Player内蔵のデバッガを使って、INT 21H, AX=3306Hを呼んでいるところで
ブレークを掛けてやれば、起動時のバージョンチェックのルーチンを簡単に見つけられますので、
ルーチンを潰すようにCOMMAND.COMにパッチを当ててもいいかと思います。

FreeDOSで使われているFreeCOM辺りだと、そもそもバージョンチェックすらしてないので、
こちらを使う方が簡単かもしれません。

-------------------------------------------------------------


07773/07758 BQO00549 konno Re: MS-DOS Player の更新 2017/7/27版
( 1) 17/07/28 21:55 07772:konnoさんへのコメント コメント数:1

MS-DOS Player でVZをアセンブルしてみた。

ver
Windows 98 [Version 4.10.2222]

mk6.bat
Turbo Link  Version 2.0  Copyright (c) 1987, 1988 Borland International
msdos error, ax= 0006h
exe2com: can't find input file vzibmj.exe
exe2com 1.04 by Chris Dunford/The Cove Software Group

 ドライブ C: のボリュームラベルはありません.
 ボリュームシリアル番号は 0000-0000
 ディレクトリは C:\VZ\vzk\K07T4

ファイルが見つかりません.
                        24,118.86 メガバイトの空きがあります.


ということで、TLINK.EXE でエラーになって実行ファイルができないです。

Turbo Link  Version 2.0  Copyright (c) 1987, 1988 Borland International
Warning: no stack

正常ならこういう警告表示が出て、実行ファイルは出来ます。
警告表示でエラーになって終了しているのかな?

いっぽう、comannd.com 6.20 の場合、DELコマンドでエラーになります。

ver
MS-DOS Version 6.20

del *.obj
不明なエラーです.


VZ使用で出る不具合もあるかもしれませんが、実用にはもう少し検証を
続けるようですね。使いながら気づいたことを書いていきます。



07774/07758 BQO00549 konno Re^2: MS-DOS Player の試用報告
( 1) 17/07/30 15:47 07773:konnoさんへのコメント コメント数:1

GREP の動作の違い

VTDOS + izgrep
VTDOS|C:\VZ\K07T5>C:\UT\IZGREP.EXE "AF"
^C で終了できる。

MS-DOS Player + izgrep
C:\VZ\K07T5>C:\UT\IZGREP.EXE "AF"
^Cが効かない、どのキーでも終了できない。


VTDOS + ygrep
VTDOS|C:\VZ\K07T5>C:\UT\YGREP.EXE
検索 pattern を指定してください。
ygrep.hlpをygrepを起動するdirectoryに置いてください。

VTDOS|C:\VZ\K07T5>C:\UT\YGREP.EXE "AF"
普通に検索されます。

MS-DOS Player + ygrep
C:\VZ\K07T5>C:\UT\YGREP.EXE
何もしない?

C:\VZ\K07T5>C:\UT\YGREP.EXE "AF"
何もしない?


VTDOS + yagrep
VTDOS|C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
^C で終了できる。

MS-DOS Player + yagrep
C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
'C:\UT\YAGREP.EXE" "AF' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。


MS-DOS Player +VZで操作中何度か完全に固まりました。
一度はファイラーだったかな? キーコード調査中だったかな?
一度は日本語文の編集中で、作成中の文章が保存できなくなって困った。
窓を閉じることもできない状態でした。
タイトルバーのアイコンをクリック→編集→全選択→コピー
で、表示画面のデータは別窓VZに保存出来た。やれやれ

int29h 対応でかなり手を入れてもらったので、その影響かも。
VZ固有の問題かもしれないですが、追及は難しいですね。
ということで、実用にはまだ厳しいです。



07775/07758 GST01234 10♯ Re^3: MS-DOS Player の試用報告
( 1) 17/07/31 21:52 07774:konnoさんへのコメント コメント数:1

VTDOS+VZでも年数回はフリーズすることありますけどね…
初回リリース時点でその頻度には落ち着いてましたけど。

07776/07758 BQO00549 konno Re^4: MS-DOS Player の試用報告
( 1) 17/08/02 00:47 07775:10♯さんへのコメント コメント数:1

> VTDOS+VZでも年数回はフリーズすることありますけどね…
> 初回リリース時点でその頻度には落ち着いてましたけど。

そうですね、VTDOS登場のころを思い出します。
それで思い出したのが、各種command.comの非互換性です。
#4473 で、Win98やWin95のcommand.com で

> dirとたたいた結果は

>> 'r' は、内部コマンドまたは外部コマンド、
>> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

>なんか、最初の2文字がどこかに消えてしまった模様。

ということがあり、純DOSのcommand.comで調整されたVTDOSでは
Win98やWin95のcommand.com で ポインタのずれがあったような気がします。
MS-DOS PlayerはWin98のcommand.comを使用しているようなので、逆に
ポインタがずれたりとかないでしょうかね。

また、#5744 で、

> どうやら、DOSは、引数が無い場合、引数エリアのメモリをクリアしていないようです。
> なんという手抜き!!
> おそらくVTDOSと擬似常駐VZの環境ではクリアされていたということでしょうね。
> スペースによる違いはスペースまで読むか無視するかという動作の非互換性ですね。

と書いたように、command.com によって、スペースの処理とか違ったりして
今回の事象と何か関連ありそうにも思ったりしました。


> MS-DOS Player + yagrep
> C:\VZ\K07T5>C:\UT\YAGREP.EXE "AF"
> 'C:\UT\YAGREP.EXE" "AF' は、内部コマンドまたは外部コマンド、
> 操作可能なプログラムまたはバッチ ファイルとして認識されていません。

これ、よく見ると引用符の位置がおかしくなっていますね。

C:\VZ\K07T5>C:\UT\YAGREP.EXE 'AF'

と変えてみたら、コマンド入力待ちになって、^C で終了出来ました。


あとは、編集中、特定の文字入力でVZマクロが起動したりしました。
VZのキーコード取得は変態的なことをやっているので
キーバインドの調整が必要かもしれないと素人考えで思いました。
編集中に固まったのはこれが原因かもと思いました。
いずれにしても、再現できないと特定が難しいですね。


ところで、今までの動作検証は全て非常駐VZでした。
MS-DOS Player ではまだVZを常駐で動作できていません。
どなたか常駐で使用できている人はいませんか?


07777/07758 BQO00549 konno MS-DOS Player の使い方
( 1) 17/08/07 00:06 07776:konnoさんへのコメント

MS-DOS Player のページが更新されました。  
今回は、MS-DOS Player の使い方の記事になっています。
長いですが以下に引用します。

----------------------------------------------------------
2017/8/4
子プロセスとして32bit/64bitのプログラムを実行できるようになった件ですが、
 子プロセスとして起動した32bit/64bitのプログラムが終了するまで、
MS-DOS Playerに処理が戻らないことを意識していただく必要があります。
 特に子プロセスとパイプを繋ぐときはご注意ください。

 例題として、TYPEコマンドとMOREをパイプで繋ぐケースを考えてみます。
 以下、話を単純化するため、64bit Windows上の話とします。
COMMAND.COM, MORE.COMは16bit、CMD.EXT, MORE.EXEは64bitのプログラムとします。
 使用するMS-DOS Player(MSDOS.EXE)も64bit版とします。


	>MSDOS.EXE COMMAND.COM
	>TYPE HOGE.TXT | MORE.COM

MS-DOS Player上で動いている、16bitのCOMMAND.COMと、16bitのMORE.COMを
 パイプで繋いでいますが、これは問題なく動作します。
このパイプは、MS-DOS Playerの仮想DOS環境上で繋がれたパイプとなります。


	>MSDOS.EXE COMMAND.COM
	>TYPE HOGE.TXT | MORE.EXE

子プロセスとして起動した64bitのMORE.EXEが終了するまで、MS-DOS Playerに
処理が戻りませんので、TYPE HOGE.TXTの出力はMORE.EXEに繋がりません。
つまり、MS-DOS Playerの仮想DOS環境上では、32bit/64bitの子プロセスと
 パイプを繋ぐことはできません。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE.COM

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXE上では、
16bitのMORE.COMは動作しません。
また、CMD.EXE上でEXITして終了するまで、MS-DOS Playerには処理は戻りません。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE.EXE

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXEと、64bitのMORE.EXEを
 パイプで繋いでいますが、これは問題なく動作します。
MS-DOS Playerとは関係なく、普通にコマンドプロンプト(CMD.EXE)を起動して、
 普通にTYPE HOGE.TXT | MORE.EXEを実行したときと同じ状況です。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。


	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MSDOS.EXE MORE.COM

MS-DOS Playerから子プロセスとして起動された64bitのCMD.EXEと、別に起動された
MS-DOS Playerとパイプを繋いでいますが、これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
またこのとき、MORE.COMは、最初に起動したCOMMAND.COMとは別のDOS仮想環境上で
動作していることにご注意ください。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE.EXE

64bitのMS-DOS Playerと、64bitのMORE.EXEをパイプで繋いでいますが、
これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
またこのとき、MORE.EXEは、MS-DOS Player上の子プロセスとしてではなく、
MS-DOS Playerとは別のプロセスとして起動していることにご注意ください。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE.COM

MORE.COMは、MS-DOS Player上の子プロセスとしてではなく、MS-DOS Playerとは
別のプロセスとして起動することになりますが、勿論、64bit Windows上では
16bitのMORE.COMは動作しません。


	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MSDOS.EXE MORE.COM

MS-DOS Playerと、別に起動されたMS-DOS Playerとパイプを繋いでいますが、
これは問題なく動作します。
このパイプは、64bit Windows上で繋がれたパイプだということにご注意ください。
また、COMMAND.COMとMORE.COMは、別のDOS仮想環境上で動作していることに
 ご注意ください。


	>MSDOS.EXE -cMORE32.EXE MORE.COM
	>MSDOS.EXE COMMAND.COM /C TYPE.HOGE.TXT | MORE32.EXE
	>MSDOS.EXE COMMAND.COM
	>CMD.EXE
	>TYPE HOGE.TXT | MORE32.EXE

16bitのMORE.COMを、MS-DOS Playerに埋め込んで、64bitのプログラムに変換すれば、
64bitのプログラムとパイプを繋ぐことが可能です。

-------------------------------------------------------------------


どうやら、今回の32ビットのGrep が挙動不審だった原因も同じようですね。
16ビットのVZから32ビットの対話型コマンド(Grep)は使えないようです。
WGREPなどの16ビットのGrepを使えば問題ないということですね。

あるいは、shadowさんご紹介のKWIC FinderなどのGUIアプリを使って、
クリップボード経由でVZに張り付けるか。

今回の一連のVZ対応更新で、VZ使用環境が飛躍的に向上したのは間違いなく
本当にありがたいです。

よくわからないものを無理して使うのは素人ユーザーの所以か。


#ああ、またまた妄想が・・・


「消滅しただと!! 丸ごとか!!」
「よくわからないものを無理して使うから、使途が暴走したんだわ。」
「だがこれも全てシナリオ通りだ。四回文書が無くなるのも計画の内さ。」
「ああ、そうだな。」
「われわれが最初のVZを参考にして人の手で作り上げたものだからな。」
「VZ改シリーズは完成していたのか。」
「これで〇〇補完計画も進むだろう。」



07778/07758 BQO00549 konno MS-DOS Player 2017/8/12 の更新
( 1) 17/08/14 20:28 07758:konnoさんへのコメント

MS-DOS Player が更新されていました。
以下引用です。

----------------------------------------------------------------
2017/8/12
キーバッファの処理を改良しました。
SO1において、キー入力が安定するようになりました。

従来は、MS-DOS Playerのコード上のFIFOバッファで管理していたのですが、
これを、BIOSデータエリア上のキーバッファで管理するようにしました。
キーバッファの内容を直接参照するソフトの動作が改善しているかと思います。

また、BIOSデータエリア上のキーバッファが空でない場合は、32msecおきに
IRQ1(キーボード割り込み)を発生するようにしました。
キーバッファにまだデータが残っているのに読みに来なくて、次にキーが押されて
割り込みが発生したときに、その前に押されてキーバッファに残っていたキーが
遅れて取り込まれて、今押されたキーは取り込まれないままバッファに残る、
みたいな状況が改善しています。

ただし、BIOSデータエリア上のキーバッファはたった16文字分しかありません。
これに収まりきらない分は、従来のFIFOバッファの方に入れておいて、
BIOSデータエリア上のキーバッファに空きができたら、従来のFIFOバッファから
順次移していくようにしています。
IME上で長い文章を入力して、一気に変換して確定すると、コンソールに対して
一気に入力が反映されるので、このような仕組みが必要になります。

2017/8/11
INT 10h, AH=0Ehを修正しました。
画面に1文字表示する機能ですが、AH=09h/0Ahと同様に、BHに出力先の画面番号が
入っているものと勘違いしていました。
現在選択されている画面への出力、ということでいいみたいですね。

MEU.COM対策で、キー入力をチェックをしながらスピンロックしている場合に、
Sleep(10)のかわりに、_mm_pause()を実行するよう修正した件について、
もう少し修正をおこないました。

2017/8/9
メモリユーティリティのMEU.COMの表示が遅い問題を修正しました。

キー入力の有無のチェックの処理を、短期間に繰り返し実行している場合には、
スピンロックをしていると見做して、キーチェック毎にSleep(10)してやることで、
キー入力をスムーズにする処理が入っています。
こちらのソフトでは、1文字表示する毎に、何故かINT 21h, AH=06h, DL=FFhで
キー入力のチェックをしており、上記の条件に当てはまっていたため、
1文字表示する毎にSleep(10)してしまっていました。

Sleep(10)の代わりに、_mm_pause()を実行するように修正しています。

---------------------------------------------------------------

おお、MEU の表示が速くなった。\(^^)/ ヤッタ-

最近はVZのほうを弄っているので、あまり動作報告できないです。
10#さんから頂いたパッチを積み残したままだったんですが
最近必要を感じて、泥縄を弄っているところです。例えば、

MS-DOS Player for Win32-x64 謎WIPページ

このような長いタイトルのWEBのページをテキストに落として
VZで見るのに、SFNだとタイトルがわかりにくいので
LFNで表示させたいが、半角空白があるとうまくないのです。

やっと形が出来てきたところですが、MS-DOS Player+VZだと
現状開けないので、まずVZをきちんと形にしないとね。
この文章はMS-DOS Player+VZで書いてます。

# 全てはVZのために



07779/07779 BQO00549 konno #if から始まる真苦労道
( 1) 17/08/17 22:36

MSDOS PlayerでVZが使えるようになると色々検証することになります。
高橋版VZでLFNファイラーが使えるかどうか、また、新VZのバグ出しの
ためにRfとLfを連動させるようにファイラーマクロを修正した。

vzFl.def の SFN → LFN 切り替えマクロ、修正前は

.:V	 (s-3)?{ r'W'-fg.51&4, >^ }		 ;walkmnu:fg+51 dw
	&Sc(si=pa,pi,3) r++.0-,di=r,cx=ha-4,	;without si,di,cx ?
	ax$71a0, &i($21) (ax-$7100)?{		;H.Konno for XP etc.
#if tVZ
	(fv&4)?fv1,?(lf!)??fv5, fv^=4,} 
	#V.	;5-->1-->LFN
#else
	} #V.	;5-->1
#endif


これを、下記のように修正

.:V	 (s-3)?{ r'W'-fg.51&4, >^ }		 ;walkmnu:fg+51 dw
	&Sc(si=pa,pi,3) r++.0-,di=r,cx=ha-4,	;without si,di,cx ?
	ax$71a0, &i($21) (ax-$7100)?{		;H.Konno for XP etc.
#if (rf<2)					; Rf 対応VZ
	(fv&4)?fv1,?(lf!)??fv5, fv^=4,} 
;	#V.	;5-->1-->LFN
	rf=lf,#V.	;5-->1-->LFN		; Rf を Lf と連動(仮)
#elseif (Lf<2)					; Lf 対応VZ
	(fv&4)?fv1,?(lf!)??fv5, fv^=4,} 
	#V.	;5-->1-->LFN
#else
	} #V.	;5-->1
#endif


ここからが本題です。

#if (rf<2)					; Rf 対応VZ
#elseif (Lf<2)					; Lf 対応VZ

ここで、Rf や Lf に対応したVZ だけ通り、それ以前のVZは、スルーします。
どちらもフラグなので、この式で0でも1でも真になります。
こういう形式にすることで、オリジナルのVZでも未定義のIDとしてスルーし、
エラーにならず、全てのVZで共通のマクロが動作します。

この形式は高橋版で拡張された機能ですが、説明はFGALDCの会議室のログ
にしか存在しないので、知らない人もいるのではないでしょうか。
 stkhlp.def の VZMACRO.SHD にもありませんでした。

ということで、stkhlp.def と VZMACRO.SHD にまで手を付ける羽目に。


# 海賊VZの船長は積み残したお宝を乗せるためにVZの載る船を作ってくれる
  船大工を仲間に引き入れた。
  いつでもどこでもVZしたい、が当初からのテーマ、船は多い方がいい。
  (VZを)産めよ増やせよ地に満てよ
  いよいよマクロの4高の一角に手を出す展開に。
  さあ、次はどんな冒険が待っているんだ。



07780/07780 BQO00549 konno rensave.def v2.0 の再改造
( 1) 17/08/21 01:45 コメント数:2

ねこさんの RENSAVE.DEF の再改造です。


昔FGALDCの会議室で改造したんですが、テンポラリエラーが出るようになって、
使わなくなっていました。
今回また必要性が高まったので、見直してバグを見つけました。


> 08064/08074 KFR04247  H.Konno          rensave.def v2.0 にバグ?
> (14)   04/05/06 01:01
> 
> みなさんこんにちは。
> 
> 私は毎日のように rensave.def 2.0(世代管理セーブ by ねこ)の
> お世話になっています。(ねこさん、ありがとうございます。)
> これが無いとVZのバージョン管理も出来ないんですが、最近、
> バグと思われる現象に出会いました。
> 
> それは、拡張子が1文字の時に使用すると、ピリオドが消えて、
> ファイル名と拡張子がつながってしまうと言うものです。
> たとえば、
> 
> abc.c のようなファイルを編集し、rensave.def でセーブすると、
> abcc になってしまうんです。オリジナルVZでも、XP、Win98Me、
> LX でもなるので、rensave.def のバグかと思ったわけです。
> 皆さんの所ではどうでしょうか。
> 
> 08066/08074 KFR04247  H.Konno          RE:rensave.def v2.0 にバグ?
> (14)   04/05/12 02:34  08065へのコメント
> 
> > 問題のコードは,
> >        #82 #h #m #82 #u #m                     ;ファイルを読み込む
> >…の部分です。
> 
> 手動でやってみて納得しました。未修正のファイルも修正済みになりますね。
> 
> 最初の (mr-1)?. というのは、mr が1以外なら終了と言うことですよね。
> とすればこの時点で mr は1になっている?
> と言うことで、この部分をコメントにして見ました。
> 
> ;        #82 #h #m #82 #u #m                     ;ファイルを読み込む
> 
> なんかバグが無くなって正常に動いているように見えます。(^^;
> 
> -- H.Konno --

こんなやり取りをしていたんですが、実はこの部分が重要だったという落ち。
短いので全部張り付けます。


====== rensave.def    世代管理セーブ  by ねこ ======
;====== rensave.def 2.0  世代管理セーブ by ねこ ======
* m
80 [ESC]F "rename save"
	?. (mr-1)?. ;&s				;Readonlyは除外
	&m("世代管理セーブ")		;メッセージ
	#]					; ★k cp をテキストバッファに
	&s
;;	#82 #h #m #82 #u #m			;ファイルを読み込む
	&Sh(pf,nm) 				;ファイル名コピー
	ax$4e00, cx-, dx=pf, &i($21) n-,	;ファイル検索
	(ax!=$12)?{				;見つかったら
		&Sy(pf)				;ファイル名解析
		&Sc(pr,pf,cx-pf+(r&2/2-1))	;prにコピー
	:A	&Sp(r,".%03d",n)		;連番拡張子付加
		ax$5600,dx=pf,di=pr,
	#M #_ #U				; ★k テンポラリエラー対策
		r[, &i($21) r],			;rename
		(ax==5)?{n++,>A}		;既に有るなら連番増分
		&Sh(pf,pr)			;ファイル名ヒストリにコピー
	}
	&d &m("%sにバックアップ",pf) &s		;メッセージ
	#S #m &d #?				;現テキスト保存
	&m("%sにバックアップしました",pf)		;メッセージ
	#C
*
====== bottom of rensave.def ======


★印が今回の改造部分です。
要は、セーブ前にディスク上のファイルをリネームするのですが
その時点で大きいファイルでは一部しか読み込んでいないため
セーブ時にファイルの追加読み込みをしようとして、ファイルが無い!!
で、テンポラリファイルエラーになるわけです。

これは手動でやっても同じなので、セーブ前にディスク上のファイルを
リネームするときはその前にいったんテキストの最後までジャンプさせる
必要がある、ということでした。


# 過去に積み残したお宝が山積みで掘り起こしが大変だぁ〜!!



07781/07780 BQO00549 konno rensave.def バグ&返り値が・・・
( 1) 17/08/25 01:32 07780:konnoさんへのコメント コメント数:1

 rensave.def 大バグがありました。
 ループの中に挿入するなんて、頭がウニになってる。(>_<)
 取り敢えず改造の話は置いておいて
 
 ファンクションコールの返り値AXの値がおかしい?
 
テストのために、オリジナルの rensave.def にAXの表示と &tを追加しました。
&t で止まったら、AXの値を確認して、Enter します。


====== rentest.def ======
;====== rensave.def 2.0  世代管理セーブ by ねこ ======

* m
80 [ESC]T "rename save"
	?. (mr-1)?. ;&s				;Readonlyは除外
	&m("世代管理セーブ")		;メッセージ
	&s
;	#M #_ #U 				;★★★ テンポラリエラー対策
	#82 #h #m #82 #u #m			;ファイルを読み込む
	&Sh(pf,nm) 				;ファイル名コピー
	ax$4e00, cx-, dx=pf, &i($21) n-,	;ファイル検索
	&m("%d:4e00  ax=%x bx=%s pr=%s ",n,ax,bx,pr)			;★
	&w(100) &t							;★
	(ax!=$12)?{				;見つかったら
		&Sy(pf)				;ファイル名解析
		&Sc(pr,pf,cx-pf+(r&2/2-1))	;prにコピー
	:A	&Sp(r,".%03d",n)		;連番拡張子付加
		ax$5600,dx=pf,di=pr,
		r[, &i($21) r],			;rename
	&m("%d:5600  ax=%x bx=%s pr=%s ",n,ax,bx,pr)			;★
	&w(100) &t							;★
		(ax==5)?{n++,>A}		;既に有るなら連番増分
		&Sh(pf,pr)			;ファイル名ヒストリにコピー
	}
	&d &m("%sにバックアップ",pf) &s		;メッセージ
	#S #m &d #?				;現テキスト保存
	&m("%sにバックアップしました",pf)		;メッセージ
	&w(100)								;★
	#C
*
====== bottom of rensave.def ======


さて、マクロの実行結果です。 

 ax$4e00, cx-, dx=pf, &i($21) n-,	;ファイル検索

同名ファイル   存在する  存在しない
-----------------------------------
VTDOS       4E00    12
MSDOS Player   0     12
NP2       0     12
Win7  DOS窓   0     12
Win10 DOS窓   0     12

 ax$4e00のファンクションコールの返り値AXの値は
 VTDOSだけ違っています。


 ax$5600,dx=pf,di=pr, r[, &i($21) r], ;rename

同名ファイル   存在する  存在しない
-----------------------------------
VTDOS      5600 or B7?  5600
MSDOS Player   11     5600
NP2       5      12
Win7  DOS窓   5      FF00
Win10 DOS窓   5      FF00

 ax$5600のファンクションコールの返り値AXの値は
 DOS窓の値が正しいようで、キチンと動作します。
 
VZではどちらも使用しているので、影響ありそうですね。



07782/07780 CXB00940 としき Re: rensave.def バグ&返り値が・・・
( 1) 17/08/26 13:10 07781:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> ax$4e00のファンクションコールの返り値AXの値は
> VTDOSだけ違っています。

> ax$5600のファンクションコールの返り値AXの値は
> DOS窓の値が正しいようで、キチンと動作します。

一応、建前としては、どちらのファンクションもキャリーがセットされていない
場合、AXは不定のはず。とは言いつつも、過去のOSは不定ではなく安定だったの
で、裏技的に安定だと仮定しているソフトも多そう。
あと、56Hの方は、キャリーがセットされている場合のリターンは安定でなければ
ならないはずなので、こちらはかなり問題がありそうですね。

07783/07780 BQO00549 konno Re^2: rensave.def バグ&返り値が・・・
( 1) 17/08/27 00:37 07782:としきさんへのコメント コメント数:2

> 一応、建前としては、どちらのファンクションもキャリーがセットされていない
> 場合、AXは不定のはず。とは言いつつも、過去のOSは不定ではなく安定だったの
> で、裏技的に安定だと仮定しているソフトも多そう。

一応ブラウンリストには載っているようです。

Int 21/AH=4Eh - DOS 2+ - FINDFIRST - FIND FIRST MATCHING FILE

AH = 4Eh
AL = special flag for use by APPEND (refer to note below)
CX = file attribute mask (see #01420 at AX=4301h) (bits 0 and 5 ignored)
0088h (Novell DOS 7) find first deleted file
DS:DX -> ASCIZ file specification (may include path and wildcards)

Return:
CF clear if successful
Disk Transfer Area filled with FindFirst data block (see #01626)
CF set on error
AX = error code (02h,03h,12h) (see #01680 at AH=59h/BX=0000h)

ここで、AXのエラーコードが3つありますが、DOS窓でファイルが
存在しない場合、12hだったので、これがDOSの標準値なのでしょう。


Int 21/AH=56h - DOS 2+ - RENAME - RENAME FILE

AH = 56h
DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
ES:DI -> ASCIZ new filename (no wildcards)
CL = attribute mask (server call only, see below)

Return:
CF clear if successful
CF set on error
AX = error code (02h,03h,05h,11h) (see #01680)

こちらは、AXのエラーコードが4つありますが、DOS窓でファイルが
存在する場合、5hだったので、これがDOSの標準値なのでしょう。

通常(VZも)キャリーで判断しているので問題はなさそうですが
本当に大丈夫かどうかはわかりません。
連番セーブ系マクロは、とらじさんのvrensave.defも同じコード
なので駄目ですね。
Emmettさんの !Close を使用した連番セーブ系マクロは、
キチンと連番セーブしているようですね。
キャリーで判断しているんでしょうか。



07784/07780 BQO00549 konno Re^3: rensave.def バグ&返り値が・・・
( 1) 17/08/27 01:12 07783:konnoさんへのコメント

補足です。

> Int 21/AH=4Eh - DOS 2+ - FINDFIRST - FIND FIRST MATCHING FILE
> Return:
> AX = error code (02h,03h,12h) (see #01680 at AH=59h/BX=0000h)

> Int 21/AH=56h - DOS 2+ - RENAME - RENAME FILE
> Return:
> AX = error code (02h,03h,05h,11h) (see #01680)

この#01680 にエラーコードの一覧がありました。

(Table 01680)
Values for DOS extended error code:
---DOS 2.0+ ---
00h (0)   no error
01h (1)   function number invalid
02h (2)   file not found
03h (3)   path not found
04h (4)   too many open files (no handles available)
05h (5)   access denied
06h (6)   invalid handle
07h (7)   memory control block destroyed
08h (8)   insufficient memory
09h (9)   memory block address invalid
0Ah (10)  environment invalid (usually >32K in length)
0Bh (11)  format invalid
0Ch (12)  access code invalid

これだけ分けているということは、違いがあるんでしょうね。
 (11)  format invalid は書式エラーとか?



07785/07780 CXB00940 としき Re^3: rensave.def バグ&返り値が・・・
( 1) 17/08/27 18:16 07783:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> 一応ブラウンリストには載っているようです。

一応どころではなく、きちんと明記されていますよね。
AXが返ってくるのはキャリーフラグがセットされているときだけだ、って。
あれ、konnoさん、日本語で書かれたDOSファンクションの本て持っていたような
気がしましたが、私の気のせいかな。NEC版のDOSのプログラマーズリファレンス
か何か。もしそういうのがあれば、そちらを見たほうがいいかも。

07786/07780 BQO00549 konno Re^4: rensave.def バグ&返り値が・・・
( 1) 17/08/27 21:28 07785:としきさんへのコメント コメント数:2

> 一応どころではなく、きちんと明記されていますよね。
> AXが返ってくるのはキャリーフラグがセットされているときだけだ、って。

エラーコードはそうなんですが、私の記憶が不確かなれば、DOSコールとかは
その番号の関数が存在しないか対応してない場合、AXが同じになると思いました。
VTDOSは同じ番号が返っているので、どうかなと思ったのです。
存在しない場合はキャリーも立たないと思います。

・・・と思ったけど、MSDOS Player だと、AX=1 CF=1 になるようです。

> あれ、konnoさん、日本語で書かれたDOSファンクションの本て持っていたような
> 気がしましたが、私の気のせいかな。NEC版のDOSのプログラマーズリファレンス
> か何か。もしそういうのがあれば、そちらを見たほうがいいかも。

ということで、上記の件はすぐには見つけられないので、私の記憶が違ってる
場合はよろしくご指摘ください。



07787/07780 CXB00940 としき Re^5: rensave.def バグ&返り値が・・・
( 1) 17/08/28 21:31 07786:konnoさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> エラーコードはそうなんですが、私の記憶が不確かなれば、DOSコールとかは
> その番号の関数が存在しないか対応してない場合、AXが同じになると思いました。

そういえば、私も、そんなような話を聞いたことがある。
でも、私の不確かな記憶では、ある特定の条件の場合のみ、ということになって
いたような。その条件が思い出せない。
あぁ、加齢ってやぁね。


07788/07780 BQO00549 konno Re^5: rensave.def バグ&返り値が・・・
( 1) 17/08/28 21:54 07786:konnoさんへのコメント

> ということで、上記の件はすぐには見つけられないので、私の記憶が違ってる
> 場合はよろしくご指摘ください。

konnoさん、間違ってますよ。

そもそも2003年のkVZデビューの時に使ったテストマクロでは

=int.def
*m
80 ^\ "vol"	ax$71a0,&i($21) &m("vol: AX=%04x BX=%04x CF=%02x ",ax,bx,r).
*

実行結果
WinXP		AX=007B BX=0000 CF=01
LX(DOS5)	AX=7100 BX=FF00 CF=00

ということで、純DOSでは、AX$71a0 の返り値が AX7100h で、同じではなかった。
やっぱりAXの値は不定という結論が妥当でしょうか。

アンドックの闇毒は藪の中
つんどくしかないか。



07789/07758 BQO00549 konno MS-DOS Player 2017-08-28 の更新
( 1) 17/08/28 23:16 07758:konnoさんへのコメント

MS-DOS Player 2017-08-28版が出ました。
最近更新が頻繁でレポが追い付かないです。

以下、更新内容の一部引用です。
--------------------------------------------------------
2017/8/28

INT 21h, AH=56hを修正しました。
ファイルのリネームのサービスですが、リネーム後のファイル名が既に存在する場合、
エラーコードとしてAX=05h(Access Denied)を返すようにしました。

--------------------------------------------------------

ということで、rensave.def の連番セーブがキチンと動くようになりました。
武田さん、対応いただきありがとうございます。


07790/07780 CXB00940 としき Re^6: rensave.def バグ&返り値が・・・
( 1) 17/08/28 23:35 07787:としきさんへのコメント コメント数:1
参照先:http://toshiki.la.coocan.jp/

> そういえば、私も、そんなような話を聞いたことがある。

思いついた単語を片っ端からgoogle先生にぶち込んだ結果、引っかかった

http://www7a.biglobe.ne.jp/~tsuneoka/win32sub2/8.html

↑より引用。

> ○DOSのシステムコールによる動作環境の認識
> これらの機能は、Windows95 の DOSプロンプトでのみ動作するため、他の環境で
> 動作 していることを認識する必要があります。
> DOSのシステムコールは、ソフトウェア割り込みによって実現されまが、これらの
> システムコールは、OSによってサポートするものとそうでないものがあります。
> サポートされているときには、システムコールを実行すると、AXレジスタに
> ファンクション固有の値が設定されます。
> もし、サポートされていなければ、AXに設定されたファンクションがそのまま
> 返却されます。
> これにより、実行しようとしたファンクションをOSがサポートしているかを
> 識別する ことができます。

としき的に書き換えると

●OSがサポートしていれば
→・エラーがあればエラーコード
 ・エラーがなければ不定
●OSがサポートしていなければ
→AXは変更されずにそのままの値が返る

ということだと思います。つまり、konnoさんが正解のような気がする。
ただ、これ、もしかして、当てはまるのはWin95以降のみ、というような落とし穴
があるかも。

えと、いろいろと検索していたら#6311が引っかかってきました。
もうすっかり忘れている。自分のフリーウェアでも使っていたはずなのに。
私、再履修というやつをしないとだめかもしれない。


07791/07780 BQO00549 konno Re^7: int21の未定義API
( 1) 17/08/29 01:29 07790:としきさんへのコメント コメント数:1

> 思いついた単語を片っ端からgoogle先生にぶち込んだ結果、引っかかった
> http://www7a.biglobe.ne.jp/~tsuneoka/win32sub2/8.html

おお、これはお宝のページですね。

> としき的に書き換えると
>
> ●OSがサポートしていれば
> →・エラーがあればエラーコード
>  ・エラーがなければ不定
> ●OSがサポートしていなければ
> →AXは変更されずにそのままの値が返る

なるほどですね。

> えと、いろいろと検索していたら#6311が引っかかってきました。

ああ、こんな長〜いツリーを全部読んでしまった。
自分もこのころは結構まともそうなことも言ってたんだなぁ。
で、結局残ったのが、#6355 の 10#さんの御言葉

-------------------------------------------------------

int21の未定義APIは基本的にMSが予約してて、幾つかの挙動が想定されます。

1.機能が無く、エラーが返る。
2.機能が無く、エラーも返らない。
3.非公開(アンドキュメンテッド)機能がある。

将来的に仕様が変更される可能性があるため、行儀の良いプログラムは基本的に
呼び出しません。
今となってはさすがに「将来的な予約」とか「行儀の良い」とか、合理性ないですけどね。

TSRなど、プロセス間の通信には仕様が明確化されてたint2fが慣用されていましたね。

---------------------------------------------------------


07792/07757 BQO00549 konno Re: 新コンテンツ 「BBS 新着情報」
( 1) 17/08/29 01:36 07757:konnoさんへのコメント

タマの猫ハウス新コンテンツ 「BBS 新着情報」Ver0.5 に更新しました。

最近 MS-DOS Player の更新が頻繁なので、最新の日付付きで追加しました。

こういう1行表示もシンプルでいいかも。

中身は相変わらずの縄文式泥縄ですが。


07793/07780 GST01234 10♯ Re^8: int21の未定義API
( 1) 17/08/30 04:38 07791:konnoさんへのコメント コメント数:1

一般的なDOSの慣例に加えてVTDOSにはDOSエミュレーションの確立の都合上
固有の方針もあります。

まず、VTDOSのINT21APIは通常アプリに対して機能の有無を明示しないことにしています。

エミュレーションの性質上実現不可能であったり、事実上使用されていないため実装
していないAPIがあります。
これを「機能が無い」としてエラーを返すと、そこでアプリの実行上問題が出る
場合があるため、アプリに対しては機能が有るとも無いとも明示せず、
今後の機能追加への参考としてログを残すことにしています。

最小のAPIセットから機能する状態を確立して、
必要に応じて機能を追加していく方針です。

エラーが無い場合はCF=0でAXは不定というのがDOSの仕様なので、
アプリがAPIの結果をチェックする場合は必ずCFをチェックする必要があります。
ステータスの比較表を作っていただく場合はCFも入れていただくとありがたいです。

VTDOSはINT21APIの実行に際し、レジスターを破壊する必要が無いため、
特に処理を行わなかった場合、呼び出し時の内容で戻ります。

機能が実装されているかどうかはログをチェックする必要がありますね。


INT21AX=5600h "RENAME FILE" のファイルが既に有る場合のエラーコード 0B7h
についてですが、これはWin32のエラー183 ERROR_ALREADY_EXISTS に該当します。
Win32APIはバージョンやシステムの構成によって仕様が変更されることを念頭に
置いてるのか、各APIのエラーコードを明文化していません。
VTDOSはUNIX互換ランタイムに機能が有る場合そちらを呼び出し、通常はWin32API
を直接呼ぶことは有りません。
このUNIX互換ランタイムは概ねDOS互換のエラーコードが返りますが、
一部Win32APIのエラーがそのまま返るものも有るようです。
Win32APIのエラーコードも概ねはDOS互換のエラーコードではありますが、
全て同じでは無いようです。
Win32はDOSに対して大幅に拡張されているため、当然と言えば当然ですが、
歴史的にはDOSとの互換性をある程度確立する方針で進められてきたようですね。

これに関しては次回のアップデートで修正する予定です。



07794/07780 BQO00549 konno Re^9: int21の未定義API
( 1) 17/08/30 21:18 07793:10♯さんへのコメント

10#さん、詳細な説明ありがとうございます。

> 一般的なDOSの慣例に加えてVTDOSにはDOSエミュレーションの確立の都合上
> 固有の方針もあります。

おそらくそうだろうとは思っていました。
なので、対応のお願いまでは言えなかったです。

> エラーが無い場合はCF=0でAXは不定というのがDOSの仕様なので、
> アプリがAPIの結果をチェックする場合は必ずCFをチェックする必要があります。
> ステータスの比較表を作っていただく場合はCFも入れていただくとありがたいです。

これはうっかりしていました。心掛けます。

> これに関しては次回のアップデートで修正する予定です。

よろしくお願いします。

rensave.defの件は、CFで見るように変更するつもりでいたので無問題です。
ねこさんのやり方は裏技ということになりますが、DOSの時代はそれで
よかったのでしょう。
新しい時代になったら新しいやり方に対応しなくてはですね。



07795/07780 BQO00549 konno Re: rensave.def v2.0 の再改造
( 1) 17/09/01 23:47 07780:konnoさんへのコメント

ねこさんの RENSAVE.DEF の再再改造 (^^; 決定版

今までの経緯を踏まえ、AX での判定から CF に変更しました。
これで全ての環境で動作すると思います。


====== rensave.def 2.0  世代管理セーブ by ねこ ======

;	konno改 2017-08-31
;	拡張子1文字の時の不具合で改変 %1
;	改変でテンポラリエラーの不具合を対策 #M の位置に注意 %2
;	AX から CF に変更 nn=r 使用 %3

* m
80 [ESC]F "rename save"
	?. (mr-1)?. ;&s			;Readonlyは除外
	&m("世代管理セーブ")		;メッセージ
	&s
;	#82 #h #m #82 #u #m		;ファイルを最後まで読み込む %1
	&Sh(pf,nm) 			;ファイル名コピー
	#M #_ #U 			;ファイルを最後まで読み込む %2
	ax$4ea0, cx-, dx=pf, &i($21) n-,  ;ファイル検索
	nn=r,
;	&m("%d:4ea0  ax=%x bx=%s pf=%s r=%d",n,ax,bx,pf,nn)	;★
;	&w(30) &t .						;★
;	(ax!=$12)?{			;見つかったら
	(nn==0)?{			;見つかったら %3
	    &Sy(pf)			;ファイル名解析
	    &Sc(pr,pf,cx-pf+(r&2/2-1))	;prにコピー
	:A  &Sp(r,".%03d",n)		;連番拡張子付加
	    ax$5600,dx=pf,di=pr,
	    r[, &i($21) nn=r, r],	;rename
;	&m("%d:5600  ax=%x bx=%s pr=%s r=%d",n,ax,bx,pr,nn)	;★
;	&w(30) &t						;★
;	    (ax==5)?{n++,>A}		;既に有るなら連番増分
	    (nn!=0)?{n++,>A}		;既に有るなら連番増分 %3
	    &Sh(pf,pr)			;ファイル名ヒストリにコピー
	}
	&d &m("%sにバックアップ",pf) &s	;メッセージ
	#S #m &d #?			;現テキスト保存
	&m("%sにバックアップしました",pf)  ;メッセージ
	&w(50)				;
	#C
*
====== bottom of rensave.def ======



07796/07796 BQO00549 konno VTDOS1.53 の更新
( 1) 17/09/06 23:45

VTDOS1.53 の更新がありました。
内容を引用します。

---------------------------------------------
Version 1.53 リリースノート - 10♯  2017/09/06 (Wed) 12:00:00

MSゴシックが選択されている場合、正常に入力出来ない文字があるため、
その場合強制的にTerminalを選択するようにしました(Vista以降)
Int21/56 RENAME FILE のファイル名重複時のエラーコードを修正しました。
 
------------------------------------------------

> Int21/56 RENAME FILE のファイル名重複時のエラーコードを修正しました。

確認しました。対応ありがとうございました。

ちなみに、#7795 の rensave.def は、cf 対応に改造したので、
★印のコメント行を活かして確認したんですが、一か所ミスがありました。

;	&m("%d:4ea0  ax=%x bx=%s pf=%s r=%d",n,ax,bx,pf,nn)	;★
;	&w(30) &t .						;★
                  ↑
 ここにピリオドを入れたままだったので、ここで終了してしまいます。
 試される方はご注意ください。m(__)m