PC-DOS 2000 で遊ぶ -- その3 DOSCALLSライブラリーのバージョンアップ2020年08月03日 14:56

PC-DOSのDOS機能呼び出しを楽に使うためのライブラリー製作の続きです。 まずは、申し訳ございません。配慮が足らず多くのバグを作り込んでしましました。 実際に使って見て、DOSCALLSライブラリーでは、レジスタを保存することにしました。 また、DOSが検出したエラーを容易に判断できるように、DOSが返してきた、キャリー フラグとAXレジスタの値を確実に返すこととしました。

コマンドラインの引数を走査する、getAegv,getArgcは、スパゲッティーボールなところがあり、 気に入らなかったので、引数を分解するロジックを作り直しました。見通しが良くなったと 思います。

更に、ファイル操作があまりにも貧弱なので、ファイルの基本操作を容易にする FILELIBを追加しました。FILELIBは、少し高級言語風のファイルの操作ができます。

	INCLUDE	CONSTANT.INC
	INCL_FILELIB EQU	0
	INCLUDE	DSOCALLS.MAC
	INCLUDE	DSOCALLS.DEF

	BUFSIZ	EQU	80

	AFileName DB	"FileName.DAT", EOS
	Handle	DW	0
	AccessMode DW	FL_READ ; 読み出しでオープン。このほかに、
			; FL_WRITE     書き込みでオープン
			; FL_APPEND    追加書き込みでオープン
			; FL_READWRITE 読み書き用にオープンで、オープンできる。
	Buffer	DB	BUFSUZ DUP(BLANK)
	BSize	DW	BUFSIZ
	
	
		@Open	Handle, AFileName, AccessMode	; ファイルをオープン
		JC		DOSErr	; DOSのエラー検出
		CMP		AX, FL_NOERROR
		JNE		FILELIBErr	; FILELIBのエラー検出

		@get	Handle, Buffer, Bsize	; BufferへBSizeバイト読み取り
					; BSizeには、実際に読み取ったバイト数が返る
		JC		DOSErr	; DOSのエラー検出
		CMP		AX, FL_NOERROR
		JNE		FILELIBErr	; FILELIBのエラー検出

		@Close	Handle		; ファイルをクローズ
		JC		DOSErr	; DOSのエラー検出
		CMP		AX, FL_NOERROR
		JNE		FILELIBErr	; FILELIBのエラー検出

	DOSErr:
		; AXを見て、エラーを判断しリカバリー処理

	FILELIBErr:
		; AXを見て、エラーを判断しリカバリー処理

この様な感じです。

ファイルの読み書きは、ブロック読み出し/書き込み、バイト単位の読み出し/書き込み、 行単位の読み出し/書き込みが有ります。

		@get	Handle, Buffer, Size
		@getchar handle, char
		@getline handle, line, length

		@put	handle, Buffer, Size
		@putchar handle, char
		@putline handle, line

@get,@getchar,@getlineは、ファイルの終わりを検出します。@getlineは、現在のファイル 位置から行末までを読み取り、最後にEOSを追加します。行末は捨てられます。 バッファーに入りきらない場合、切り捨てます。

@put,@putchar,@putlineは、DISKFULLを検出します。@putはサイズ分書き込めなかった場合は、 書き込めたバイト数をsizeに返します。@putlineは、EOSで終端されている文字列を書き出し、 行末を追加します。

備忘録をかねて、必要そうな情報をDOSCALLS.TXTにまとめました。製作したライブラリーの インターフェイスの使い方をまとめてあります。

DOSCALLSライブラリーは、これ DOSCALLS.ZIPです。このパッケージには、DOSCALLSライブラリーのテストプログラムと サンプルもまとめてあります。ご参照ください。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://kida.asablo.jp/blog/2020/08/03/9274976/tb