⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 idos.mac

📁 还是一个词法分析程序
💻 MAC
📖 第 1 页 / 共 3 页
字号:
    macro   ErrMsg
        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

macro   RandomFCBBlockWrite FCBSeg, FCBOfs, Count
    macro   ErrMsg
        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

macro   ParseFCBFilename    Flags, FilenameSeg, FilenameOfs, FCBSeg, FCBOfs
    macro   ErrMsg
        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

macro   GetDate
    DosCall <DOS_GET_DATE>
endm

macro   SetDate Year, Month, Day
    macro   ErrMsg
        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

macro   GetTime
    DosCall <DOS_GET_TIME>
endm

macro   SetTime Hour, Minute, Second, Hundredth
    macro   ErrMsg
        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

macro   SetVerifyFlag   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

macro   GetDTA
    DosCall DOS_GET_DTA
endm

macro   GetDOSVersion
    DosCall DOS_GET_DOS_VERSION
endm

macro   TSR Result, Paragraphs
    macro   ErrMsg
        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

macro   GetSetBREAK 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

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

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

macro   GetSetCountryInfo   BufferSeg, BufferOfs, ShortCode, LongCode
    macro   ErrMsg
        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

macro   CreateDir   StringSeg, StringOfs
    macro   ErrMsg
        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

macro   RemoveDir   StringSeg, StringOfs
    macro   ErrMsg
        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

macro   ChangeDirectory StringSeg, StringOfs
    macro   ErrMsg
        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


macro   CreateFile  Attributes, StringSeg, StringOfs
    macro   ErrMsg
        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

macro   OpenFile  AccessMode, StringSeg, StringOfs
    macro   ErrMsg
        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

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

macro   ReadFile    Handle, Count, StringSeg, StringOfs
    macro   ErrMsg
        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

macro   WriteFile    Handle, Count, StringSeg, StringOfs
    macro   ErrMsg
        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

macro   DeleteFile  StringSeg, StringOfs
    macro   ErrMsg
        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

macro   MoveFilePtr Mode, Handle, OffsetHigh, OffsetLow
    macro   ErrMsg
        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

macro   GetSetAttributes    Mode, Attributes, StringSeg, StringOfs
    macro   ErrMsg
        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

macro   IOCTL   Function, HandleDrive, Count, BufSegDevInfo, BufferOfs
    macro   ErrMsg
        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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -