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