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

📄 idos.mac

📁 还是一个词法分析程序
💻 MAC
📖 第 1 页 / 共 3 页
字号:

;   FILENAME: IDOS.MAC
;
;   Copyright (c) 1988, 1990 by Borland International, Inc.
;
;   DESCRIPTION: This include file contains various macros that may
;   be used to communicate with DOS. This include file uses Ideal mode
;   syntax. For documentation on each of the macros in this file see the
;   file DOSMAC.DOC.
;
;   NOTE: In order to use this macro file you must also include the files:
;   IMACROS.MAC, KBD.INC, and DOS.INC in your module.
;

macro   Terminate10Program
    DosCall <DOS_PROGRAM_TERMINATE>
endm

macro   ReadKBDEcho
    DosCall <DOS_READ_KBD_ECHO>
endm

macro   CharacterOutput Character
    ifb <Character>
        display "Caller must provide Character parameter to CharacterOutput."
        err
    else
        mov     dl, Character
        DosCall <DOS_WRITE_CHARACTER>
    endif
endm

macro   AuxiliaryInput
    DosCall <DOS_AUXILIARY_INPUT>
endm

macro   AuxiliaryOutput Character
    ifb <Character>
        display "Caller must provide Character parameter to AuxiliaryOutput."
        err
    else
        mov     dl, <Character>
        DosCall <DOS_AUXILIARY_OUTPUT>
    endif
endm

macro   PrinterOutput   Character
    ifb <Character>
        display "Caller must provide Character parameter to PrinterOutput."
        err
    else
        mov     dl, <Character>
        DosCall <DOS_PRINTER_OUTPUT>
    endif
endm

macro   ConsoleIO   Value
    ifb <Value>
        display "Caller must provide the Value parameter to ConsoleIO."
        err
    else
        mov     dl, Value
        DosCall <DOS_CONSOLE_IO>
    endif
endm

macro   UnfilteredCharInput
    DosCall <DOS_UNFILTERED_INPUT>
endm

macro   CharInputNoEcho
    DosCall <DOS_CHARACTER_INPUT>
endm

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

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

macro   BufferedInput   StringSeg, StringOfs
    macro   ErrMsg
        display "Caller must provide the address parameters to BufferedInput."
        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_BUFFERED_INPUT>
        endif
    endif
endm

macro   GetInputStatus
    DosCall <DOS_GET_INPUT_STATUS>
endm

macro   ResetInputBuffer    Function, StringSeg, StringOfs
    ifb <Function>
        display "Caller must provide the Function parameter to ResetInputBuffer."
        err
    else
        ifb <StringSeg>
            mov     al, Function
        else
            ifb <StringOfs>
                display "Caller must provide the StringOfs parameter to ResetInputBuffer."
                err
            else
                ifidni  <ds>, <StringSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <StringSeg>
                endif
                mov     dx, StringOfs
            endif
        endif
        DosCall <DOS_RESET_INPUT>
    endif
endm

macro   ResetDisk
    DosCall <DOS_DISK_RESET>
endm

macro   ChangeDrive Drive
    ifb <Drive>
        display "You must provide the Drive parameter to ChangeDrive."
        err
    else
        mov     dl, Drive
        DosCall DOS_CHANGE_DISK_DRIVE
    endif
endm

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

macro   GetDrive
    DosCall <DOS_GET_DISK_DRIVE>
endm

macro   SetDTA  DTASeg, DTAOfs
    macro   ErrMsg
        display "You must provide the DTASeg:DTAOfs parameters to SetDTA."
        err
    endm

    ifb <DTASeg>
        ErrMsg
    else
        ifb <DTAOfs>
            ErrMsg
        else

            ; First check if the parameter is a register. If it is then
            ; push it and pop the value into ds. If not check if it's a
            ; constant or variable and act accordingly.

            ifidni  <ds>, <DTASeg>
                ; Do nothing
            else
                LoadSegment <ds>, <DTASeg>
            endif
            mov     dx, DTAOfs              ; Get offset of DTA
            DosCall DOS_SET_DTA             ; Set new DTA address
        endif
    endif
endm

macro   DefaultDiskAllocation
    DosCall <DOS_DEFAULT_DRIVE_INFO>
endm

macro   DiskAllocation  Drive
    ifb <Drive>
        display "Caller must provide Drive parameter to DiskAllocation."
        err
    else
        mov     dl, Drive
        DosCall <DOS_DRIVE_INFO>
    endif
endm

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

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

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

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

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

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

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

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

macro   SetVector   Vector, VectorSeg, VectorOfs
    macro   ErrMsg
        display "You must provide the Vector, VectorSeg and VectorOfs parameters to SetVector."
        err
    endm

    ifb <Vector>
        ErrMsg
    else
        ifb <VectorSeg>
            ErrMsg
        else
            ifb <VectorOfs>
                ErrMsg
            else
                ifidni  <ds>, <VectorSeg>
                    ; Do nothing
                else
                    LoadSegment <ds>, <VectorSeg>
                endif
                mov     dx, VectorOfs
                mov     al,Vector        ; Load the number of the vector
                DosCall DOS_SET_VECTOR
            endif
        endif
    endif
endm

macro   CreatePSP   PSPSeg
    ifb <PSPSeg>
        display "Caller must provide PSPSeg parameter to CreatePSP."
        err
    else
        mov     dx, <PSPSeg>
        DosCall <DOS_CREATE_PSP>
    endif
endm

macro   RandomFCBBlockRead  FCBSeg, FCBOfs, Count

⌨️ 快捷键说明

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