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ライブラリーのテストプログラムと サンプルもまとめてあります。ご参照ください。
セコメントをする