📄 idos.mac
字号:
; 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 + -