mdos.mac
来自「汇编&c语言code」· MAC 代码 · 共 1,638 行 · 第 1/3 页
MAC
1,638 行
; FILENAME: MDOS.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 Masm 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:
; MMACROS.MAC, KBD.INC, and DOS.INC in your module.
Terminate10Program macro
DosCall <DOS_PROGRAM_TERMINATE>
endm
ReadKBDEcho macro
DosCall <DOS_READ_KBD_ECHO>
endm
CharacterOutput macro Character
ifb <Character>
display "Caller must provide Character parameter to CharacterOutput."
err
else
mov dl, Character
DosCall <DOS_WRITE_CHARACTER>
endif
endm
AuxiliaryInput macro
DosCall <DOS_AUXILIARY_INPUT>
endm
AuxiliaryOutput macro Character
ifb <Character>
display "Caller must provide Character parameter to AuxiliaryOutput."
err
else
mov dl, <Character>
DosCall <DOS_AUXILIARY_OUTPUT>
endif
endm
PrinterOutput macro Character
ifb <Character>
display "Caller must provide Character parameter to PrinterOutput."
err
else
mov dl, <Character>
DosCall <DOS_PRINTER_OUTPUT>
endif
endm
ConsoleIO macro Value
ifb <Value>
display "Caller must provide the Value parameter to ConsoleIO."
err
else
mov dl, Value
DosCall <DOS_CONSOLE_IO>
endif
endm
UnfilteredCharInput macro
DosCall <DOS_UNFILTERED_INPUT>
endm
CharInputNoEcho macro
DosCall <DOS_CHARACTER_INPUT>
endm
WriteString macro StringSeg, StringOfs
ErrMsg macro
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
BufferedInput macro StringSeg, StringOfs
ErrMsg macro
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
GetInputStatus macro
DosCall <DOS_GET_INPUT_STATUS>
endm
ResetInputBuffer macro 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
ResetDisk macro
DosCall <DOS_DISK_RESET>
endm
ChangeDrive macro Drive
ifb <Drive>
display "You must provide the Drive parameter to ChangeDrive."
err
else
mov dl, Drive
DosCall DOS_CHANGE_DISK_DRIVE
endif
endm
OpenFCBFile macro FCBSeg, FCBOfs
ErrMsg macro
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
CloseFCBFile macro FCBSeg, FCBOfs
ErrMsg macro
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
FindFirstFCB macro FCBSeg, FCBOfs
ErrMsg macro
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
FindNextFCB macro FCBSeg, FCBOfs
ErrMsg macro
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
DeleteFCBFile macro FCBSeg, FCBOfs
ErrMsg macro
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
SequentialFCBRead macro FCBSeg, FCBOfs
ErrMsg macro
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
SequentialFCBWrite macro FCBSeg, FCBOfs
ErrMsg macro
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
CreateFCBFile macro FCBSeg, FCBOfs
ErrMsg macro
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
RenameFCBFile macro FCBSeg, FCBOfs
ErrMsg macro
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
GetDrive macro
DosCall <DOS_GET_DISK_DRIVE>
endm
SetDTA macro DTASeg, DTAOfs
ErrMsg macro
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
DefaultDiskAllocation macro
DosCall <DOS_DEFAULT_DRIVE_INFO>
endm
DiskAllocation macro Drive
ifb <Drive>
display "Caller must provide Drive parameter to DiskAllocation."
err
else
mov dl, Drive
DosCall <DOS_DRIVE_INFO>
endif
endm
RandomFCBRead macro FCBSeg, FCBOfs
ErrMsg macro
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
RandomFCBWrite macro FCBSeg, FCBOfs
ErrMsg macro
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
GetFCBFileSize macro FCBSeg, FCBOfs
ErrMsg macro
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
SetFCBFileRecord macro FCBSeg, FCBOfs
ErrMsg macro
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
SetVector macro Vector, VectorSeg, VectorOfs
ErrMsg macro
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
CreatePSP macro PSPSeg
ifb <PSPSeg>
display "Caller must provide PSPSeg parameter to CreatePSP."
err
else
mov dx, <PSPSeg>
DosCall <DOS_CREATE_PSP>
endif
endm
RandomFCBBlockRead macro FCBSeg, FCBOfs, Count
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?