[HOME]  [リストへもどる]  [全部表示]  [最新100]  [最新50]   [新着40] 
新着記事 15

7796VTDOS1.53 の更新 投稿者:konno   2017/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


    - No.7796 -             [リストへもどる ]
pre

7795Re: rensave.def v2.0 の再改造 投稿者:konno   2017/09/01(金) 23:47
  7780 番 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 ======


    - No.7795 -   [コメント元:7780]     [リストへもどる ]
pre

7794Re^9: int21の未定義API 投稿者:konno   2017/08/30(水) 21:18
  7793 番 10♯ さんへのコメント

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

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

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

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

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

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

よろしくお願いします。

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


    - No.7794 -   [コメント元:7793]     [リストへもどる ]
soft

7793Re^8: int21の未定義API 投稿者:10♯   2017/08/30(水) 04:38
  7791 番 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との互換性をある程度確立する方針で進められてきたようですね。

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


    - No.7793 -   [コメント元:7791]     [リストへもどる ]
soft

7792Re: 新コンテンツ 「BBS 新着情報」 投稿者:konno   2017/08/29(火) 01:36
  7757 番 konno さんへのコメント

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

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

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

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

    - No.7792 -   [コメント元:7757]     [リストへもどる ]
soft

7791Re^7: int21の未定義API 投稿者:konno   2017/08/29(火) 01:29
  7790 番 としき さんへのコメント    コメント数 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が慣用されていましたね。

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

    - No.7791 -   [コメント元:7790]     [リストへもどる ]
soft

7790Re^6: rensave.def バグ&返り値が・・・ 投稿者:としき   2017/08/28(月) 23:35
参照先:http://toshiki.la.coocan.jp/
  7787 番 としき さんへのコメント    コメント数 1

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

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

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

↑より引用。

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

としき的に書き換えると

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

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

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

    - No.7790 -   [コメント元:7787]     [リストへもどる ]
soft

7789MS-DOS Player 2017-08-28 の更新 投稿者:konno   2017/08/28(月) 23:16
  7758 番 konno さんへのコメント

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

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

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

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

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

    - No.7789 -   [コメント元:7758]     [リストへもどる ]
soft

7788Re^5: rensave.def バグ&返り値が・・・ 投稿者:konno   2017/08/28(月) 21:54
  7786 番 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の値は不定という結論が妥当でしょうか。

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


    - No.7788 -   [コメント元:7786]     [リストへもどる ]
pre

7787Re^5: rensave.def バグ&返り値が・・・ 投稿者:としき   2017/08/28(月) 21:31
参照先:http://toshiki.la.coocan.jp/
  7786 番 konno さんへのコメント    コメント数 1

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

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

    - No.7787 -   [コメント元:7786]     [リストへもどる ]
soft

7786Re^4: rensave.def バグ&返り値が・・・ 投稿者:konno   2017/08/27(日) 21:28
  7785 番 としき さんへのコメント    コメント数 2

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

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

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

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

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


    - No.7786 -   [コメント元:7785]     [リストへもどる ]
soft

7785Re^3: rensave.def バグ&返り値が・・・ 投稿者:としき   2017/08/27(日) 18:16
参照先:http://toshiki.la.coocan.jp/
  7783 番 konno さんへのコメント    コメント数 1

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

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

7784Re^3: rensave.def バグ&返り値が・・・ 投稿者:konno   2017/08/27(日) 01:12
  7783 番 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 は書式エラーとか?


    - No.7784 -   [コメント元:7783]     [リストへもどる ]
pre

7783Re^2: rensave.def バグ&返り値が・・・ 投稿者:konno   2017/08/27(日) 00:37
  7782 番 としき さんへのコメント    コメント数 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 を使用した連番セーブ系マクロは、
キチンと連番セーブしているようですね。
キャリーで判断しているんでしょうか。


    - No.7783 -   [コメント元:7782]     [リストへもどる ]
soft

7782Re: rensave.def バグ&返り値が・・・ 投稿者:としき   2017/08/26(土) 13:10
参照先:http://toshiki.la.coocan.jp/
  7781 番 konno さんへのコメント    コメント数 1

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

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

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