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


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

[コンピューター]
[PC-DOS]

コメント(全0件)
コメントをする


記事を書く
powered by ASAHIネット