mdos.mac

来自「汇编&c语言code」· MAC 代码 · 共 1,638 行 · 第 1/3 页

MAC
1,638
字号
    ErrMsg  macro
        display "Caller must provide FCB address to RandomFCBBlockRead."
        err
    endm

    ifb <FCBSeg>
        ErrMsg
    else
        ifb <FCBOfs>
            ErrMsg
        else
            ifb <Count>
                ErrMsg
            else
                ifidni  <ds>, <FCBSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <FCBSeg>
                endif
                mov     dx, FCBOfs
                mov     cx, Count
                DosCall <DOS_RANDOM_BLOCK_READ>
            endif
        endif
    endif
endm

RandomFCBBlockWrite macro   FCBSeg, FCBOfs, Count
    ErrMsg  macro
        display "Caller must provide FCB address to RandomFCBBlockWrite."
        err
    endm

    ifb <FCBSeg>
        ErrMsg
    else
        ifb <FCBOfs>
            ErrMsg
        else
            ifb <Count>
                ErrMsg
            else
                ifidni  <ds>, <FCBSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <FCBSeg>
                endif
                mov     dx, FCBOfs
                mov     cx, Count
                DosCall <DOS_RANDOM_BLOCK_WRITE>
            endif
        endif
    endif
endm

ParseFCBFilename    macro   Flags, FilenameSeg, FilenameOfs, FCBSeg, FCBOfs
    ErrMsg  macro
        display "Caller must provide the Flags and address parameters to ParseFCBFilename."
        err
    endm

    ifb <Flags>
        ErrMsg
    else
        ifb <FilenameSeg>
            ErrMsg
        else
            ifb <FilenameOfs>
                ErrMsg
            else
                ifb <FCBSeg>
                    ErrMsg
                else
                    ifb <FCBOfs>
                        ErrMsg
                    else
                        LoadSegment <es>, <FCBSeg>
                        mov     di, FCBOfs
                        LoadSegment <ds>, <FilenameSeg>
                        mov     si, FilenameOfs
                        mov     al, Flags
                        DosCall <DOS_PARSE_FILENAME>
                    endif
                endif
            endif
        endif
    endif
endm

GetDate macro
    DosCall <DOS_GET_DATE>
endm

SetDate macro   Year, Month, Day
    ErrMsg  macro
        display "Caller must provide Year, Month and Day parameters to SetDate."
        err
    endm

    ifb <Year>
        ErrMsg
    else
        ifb <Month>
            ErrMsg
        else
            ifb <Day>
                ErrMsg
            else
                mov     cx, Year
                mov     dh, Month
                mov     dl, Day
                DosCall <DOS_SET_DATE>
            endif
        endif
    endif
endm

GetTime macro
    DosCall <DOS_GET_TIME>
endm

SetTime macro   Hour, Minute, Second, Hundredth
    ErrMsg  macro
        display "Caller must provide Hour, Minute, Second and Hundredth parameters to SetTime."
        err
    endm

    ifb <Hour>
        ErrMsg
    else
        ifb <Minute>
            ErrMsg
        else
            ifb <Second>
                ErrMsg
            else
                ifb <Hundredth>
                    ErrMsg
                else
                    mov     ch, Hour
                    mov     cl, Minute
                    mov     dh, Second
                    mov     dl, Hundredth
                    DosCall <DOS_SET_TIME>
                endif
            endif
        endif
    endif
endm

SetVerifyFlag   macro   Flag
    ifb <Flag>
        display "Caller must provide Flag parameter to SetVerifyFlag."
        err
    else
        xor     dl, dl
        mov     al, Flag
        DosCall <DOS_SET_VERIFY_FLAG>
    endif
endm

GetDTA  macro
    DosCall DOS_GET_DTA
endm

GetDOSVersion   macro
    DosCall DOS_GET_DOS_VERSION
endm

TSR macro   Result, Paragraphs
    ErrMsg  macro
        display "Caller must provide Result and Paragraphs parameters to TSR."
        err
    endm

    ifb <Result>
        ErrMsg
    else
        ifb <Paragraphs>
            ErrMsg
        else
            mov     al, Result
            mov     dx, Paragraphs
            DosCall <DOS_KEEP>
        endif
    endif
endm

GetSetBREAK macro   Mode, Value
    ifb <Mode>
        display "Caller must provide Mode and optionally Value parameters to GetSetBREAK."
        err
    else
        ifnb    <Value>
            mov     dl, Value
        endif
        mov     al, Mode
        DosCall <DOS_GET_SET_CTRL_BREAK>
    endif
endm

GetVector   macro   Interrupt
    ifb <Interrupt>
        display "Caller must provide Interrupt parameter to GetVector."
        err
    else
        mov     al, Interrupt
        DosCall <DOS_GET_VECTOR>
    endif
endm

GetDiskSpace    macro   Disk
    ifb <Disk>
        display "Caller must provide Disk parameter to GetDiskSpace."
        err
    else
        mov     dl, Disk
        DosCall <DOS_GET_DISK_SPACE>
    endif
endm

GetSetCountryInfo   macro   BufferSeg, BufferOfs, ShortCode, LongCode
    ErrMsg  macro
        display "Caller must provide the buffer address and country code parameters"
        display "to GetSetCountryInfo."
        err
    endm

    ifb <BufferSeg>
        ErrMsg
    else
        ifb <BufferOfs>
            ErrMsg
        else
            ifb <ShortCode>
                ErrMsg
            else
                ifnb    <LongCode>
                    mov     bx, LongCode
                endif
                mov     al, ShortCode
                LoadSegment <ds>, <BufferSeg>
                mov     dx, BufferOfs
                DosCall <DOS_GET_SET_COUNTRY>
            endif
        endif
    endif
endm

CreateDir   macro   StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide address parameters to CreateDir."
        err
    endm

    ifb <StringSeg>
        ErrMsg
    else
        ifb <StringOfs>
            ErrMsg
        else
            ifidni  <ds>, <StringSeg>
                ; Do nothing
            else
                LoadSegment <ds>, <StringSeg>
            endif
            mov     dx, StringOfs
            DosCall DOS_MAKE_DIRECTORY
        endif
    endif
endm

RemoveDir   macro   StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide address parameters to RemoveDir."
        err
    endm

    ifb <StringSeg>
        ErrMsg
    else
        ifb <StringOfs>
            ErrMsg
        else
            ifidni  <ds>, <StringSeg>
                ; Do nothing
            else
                LoadSegment <ds>, <StringSeg>
            endif
            mov     dx, StringOfs
            DosCall DOS_DELETE_DIRECTORY
        endif
    endif
endm

ChangeDirectory macro   StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide the segment and offset of the new path to ChangeDirectory."
        err
    endm

    ifb <StringSeg>
        ErrMsg
    else
        ifb <StringOfs>
            ErrMsg
        else
            ifidni  <ds>, <StringSeg>
                ; Do nothing
            else
                LoadSegment <ds>, <StringSeg>
            endif
            mov     dx, StringOfs           ; Store the offset of the
            DosCall DOS_SET_CURRENT_DIR     ; new path
        endif
    endif
endm


CreateFile  macro   Attributes, StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide Attributes and address parameters to CreateFile."
        err
    endm

    ifb <Attributes>
        ErrMsg
    else
        ifb <StringSeg>
            ErrMsg
        else
            ifb <StringOfs>
                ErrMsg
            else
                ifidni  <ds>, <StringSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <StringSeg>
                endif
                mov     dx, StringOfs
                mov     cx, Attributes
                DosCall DOS_CREATE_FILE
            endif
        endif
    endif
endm

OpenFile    macro   AccessMode, StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide AccessMode and address parameters to OpenFile."
        err
    endm

    ifb <AccessMode>
        ErrMsg
    else
        ifb <StringSeg>
            ErrMsg
        else
            ifb <StringOfs>
                ErrMsg
            else
                ifidni  <ds>, <StringSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <StringSeg>
                endif
                mov     dx, StringOfs
                mov     al, AccessMode
                DosCall DOS_OPEN_FILE
            endif
        endif
    endif
endm

CloseFile   macro   Handle
    ifb <Handle>
        display "You must provide a file handle to CloseFile."
        err
    else
        mov     bx, Handle
        DosCall DOS_CLOSE_FILE
    endif
endm

ReadFile    macro   Handle, Count, StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide Handle, Count and address parameters to ReadFile."
        err
    endm

    ifb <Handle>
        ErrMsg
    else
        ifb <Count>
            ErrMsg
        else
            ifb <StringSeg>
                ErrMsg
            else
                ifb <StringOfs>
                    ErrMsg
                else
                    ifidni  <ds>, <StringSeg>
                        ; Do nothing
                    else
                        LoadSegment <ds>, <StringSeg>
                    endif
                    mov     dx, StringOfs
                    mov     cx, Count
                    mov     bx, Handle
                    DosCall DOS_READ_FROM_HANDLE
                endif
            endif
        endif
    endif
endm

WriteFile   macro   Handle, Count, StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide Handle, Count and address parameters to WriteFile."
        err
    endm

    ifb <Handle>
        ErrMsg
    else
        ifb <Count>
            ErrMsg
        else
            ifb <StringSeg>
                ErrMsg
            else
                ifb <StringOfs>
                    ErrMsg
                else
                    ifidni  <ds>, <StringSeg>
                        ; Do nothing
                    else
                        LoadSegment <ds>, <StringSeg>
                    endif
                    mov     dx, StringOfs
                    mov     cx, Count
                    mov     bx, Handle
                    DosCall DOS_WRITE_TO_HANDLE
                endif
            endif
        endif
    endif
endm

DeleteFile  macro   StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide address parameters to OpenFile."
        err
    endm

    ifb <StringSeg>
        ErrMsg
    else
        ifb <StringOfs>
            ErrMsg
        else
            ifidni  <ds>, <StringSeg>
                ; Do nothing
            else
                LoadSegment <ds>, <StringSeg>
            endif
            mov     dx, StringOfs
            DosCall DOS_DELETE_FILE
        endif
    endif
endm

MoveFilePtr macro   Mode, Handle, OffsetHigh, OffsetLow
    ErrMsg  macro
        display "You must provide Mode, Handle and offset parameters to MoveFilePtr."
        err
    endm

    ifb <Mode>
        ErrMsg
    else
        ifb <Handle>
            ErrMsg
        else
            ifb <OffsetHigh>
                ErrMsg
            else
                ifb <OffsetLow>
                    ErrMsg
                else
                    mov     al, Mode
                    mov     bx, Handle
                    mov     cx, OffsetHigh
                    mov     dx, OffsetLow
                    DosCall DOS_MOVE_FILE_POINTER
                endif
            endif
        endif
    endif
endm

GetSetAttributes    macro   Mode, Attributes, StringSeg, StringOfs
    ErrMsg  macro
        display "You must provide Mode, Attribute and address parameters to GetSetAttributes."
        err
    endm

    ifb <Mode>
        ErrMsg
    else
        ifb <Attributes>
            ErrMsg
        else
            ifb <StringSeg>
                ErrMsg
            else
                ifb <StringOfs>
                    ErrMsg
                else
                    ifidni  <ds>, <StringSeg>
                        ; Do nothing
                    else
                        LoadSegment <ds>, <StringSeg>
                    endif
                    mov     dx, StringOfs
                    mov     al, Mode
                    cmp     al, 1
                    mov     cx, Attributes
                    DosCall DOS_GET_SET_ATTRIBUTES
                endif
            endif
        endif
    endif
endm

IOCTL   macro   Function, HandleDrive, Count, BufSegDevInfo, BufferOfs
    ErrMsg  macro
        display "Caller must provide Function, HandleDrive, Count, BufferSeg,"
        display "BufferOfs and DeviceInfo parameters to IOCTL."
        err
    endm

    ifb <Function>
        ErrMsg

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?