📄 idos.mac
字号:
else
ifb <HandlDrive>
ErrMsg
else
ifb <Count>
ErrMsg
else
ifnb <BufferOfs> ; Assume that the buffer
LoadSegment <ds>, <BufSegDevInfo> ; address parameters are
mov dx, BufferOfs ; are defined
else ; Assume that the Device
mov dx, BufSegDevinfo ; information parameter
endif ; is defined
mov al, Function
mov bx, HandleDrive
mov cx, Count
DosCall <DOS_IOCTL>
endif
endif
endif
endm
macro DuplicateHandle Handle
ifb <Handle>
display "Caller must provide Handle parameter to DuplicateHandle."
err
else
mov bx, Handle
DosCall <DOS_DUPLICATE_HANDLE>
endif
endm
macro ForceDupHandle OriginalHandle, HandleCopy
macro ErrMsg
display "Caller must provide handle parameters to ForceDupHandle."
err
endm
ifb <Original>
ErrMsg
else
ifb <Copy>
ErrMsg
else
mov bx, OriginalHandle
mov cx, HandleCopy
DosCall <DOS_FORCE_DUP_HANDLE>
endif
endif
endm
macro GetCurrentDir Drive, StringSeg, StringOfs
macro ErrMsg
display "You must provide Drive and address parameters to GetCurrentDir."
err
endm
ifb <Drive>
ErrMsg
else
ifb <StringSeg>
ErrMsg
else
ifb <StringOfs>
ErrMsg
else
ifidni <ds>, <StringSeg>
; Do nothing
else
LoadSegment <ds>, <StringSeg>
endif
mov si, StringOfs
mov dl, Drive
DosCall DOS_GET_DIRECTORY
endif
endif
endif
endm
macro AllocateMemory Paragraphs
ifb <Paragraphs>
display "You must provide the number of paragraphs to AllocateMemory."
err
else
mov bx, Paragraphs
DosCall DOS_ALLOCATE_MEMORY
endif
endm
macro FreeMemory BlockAddress
ifb <BlockAddress>
display "You must provide the BlockAddress parameter to FreeMemory."
err
else
LoadSegment <es>, <BlockAddress>
DosCall DOS_FREE_MEMORY
endif
endm
macro ModifyMemory Size, MemoryBlock
macro ErrMsg
display "You must provide the Size and MemoryBlock parameters to ModifyMemory."
err
endm
ifb <Size>
ErrMsg
else
ifb <MemoryBlock>
ErrMsg
else
ifidni <es>, <MemoryBlock>
; Do nothing
else
LoadSegment <es>, <MemoryBlock>
endif
mov bx, Size
DosCall DOS_MODIFY_MEMORY
endif
endif
endm
macro Exec Type, ParmSeg, ParmOfs, ProgramSeg, ProgramOfs
macro ErrMsg
display "Caller must provide Type and address parameters to Exec."
err
endm
ifb <Type>
ErrMsg
else
ifb <ParmSeg>
ErrMsg
else
ifb <ParmOfs>
ErrMsg
else
ifb <ProgramSeg>
ErrMsg
else
ifb <ProgramOfs>
ErrMsg
else
mov al, Type
LoadSegment <es>, <ParmSeg>
mov bx, ParmOfs
LoadSegment <ds>, <ProgramSeg>
mov dx, ProgramOfs
DosCall <DOS_EXEC>
endif
endif
endif
endif
endif
endm
macro TerminateProgram ErrorLevel
ifnb <ErrorLevel>
mov al, ErrorLevel ; Return optional errorlevel to DOS
endif
DosCall DOS_TERMINATE_EXE
endm
macro GetReturnCode
DosCall <DOS_GET_RETURN_CODE>
endm
macro FindFirst Attributes, StringSeg, StringOfs
macro ErrMsg
display "You must provide Attributes and address parameters to FindFirst."
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_FIND_FIRST
endif
endif
endif
endm
macro FindNext
DosCall DOS_FIND_NEXT
endm
macro GetVerifyFlag
DosCall <DOS_GET_VERIFY_FLAG>
endm
macro RenameFile OrigSeg, OrigOfs, NewSeg, NewOfs
macro ErrMsg
display "Caller must provide address parameters to RenameFile."
err
endm
ifb <OrigSeg>
ErrMsg
else
ifb <OrigOfs>
ErrMsg
else
ifb <NewSeg>
ErrMsg
else
ifb <NewOfs>
ErrMsg
else
LoadSegment <es>, <NewSeg>
LoadSegment <ds>, <OrigSeg>
mov dx, OrigOfs
mov di, NewOfs
DosCall <DOS_RENAME_FILE>
endif
endif
endif
endif
endm
macro GetSetFileDateTime GetSet, Handle, Time, Date
macro ErrMsg
display "Caller must provide GetSet and Handle parameters to GetSetFileDateTime."
err
endm
ifb <GetSet>
ErrMsg
else
ifb <Handle>
ErrMsg
else
ifnb <Time>
mov cx, Time
ifb <Date>
display "You must provide the Date parameter to GetSetFileDateTime."
err
else
mov dx, Date
endif
mov bx, Handle
mov al, GetSet
DosCall <DOS_GET_SET_DATE_TIME>
endif
endif
endif
endm
macro GetSetAllocationStrategy
DosCall <DOS_GET_SET_ALLOCATION>
endm
macro GetExtendedErrors
xor bx, bx
DosCall <DOS_GET_EXTENDED_ERRORS>
endm
macro CreateTemporaryFile Attribute, FilenameSeg, FilenameOfs
macro ErrMsg
display "Caller must provide Attribute and address parameters to CreateTemporaryFile."
err
endm
ifb <Attribute>
ErrMsg
else
ifb <FilenameSeg>
ErrMsg
else
ifb <FilenameOfs>
ErrMsg
else
LoadSegment <ds>, <FilenameSeg>
mov dx, FilenameOfs
mov cx, Attribute
DosCall <DOS_CREATE_TEMP_FILE>
endif
endif
endif
endm
macro CreateNewFile Attribute, FilenameSeg, FilenameOfs
macro ErrMsg
display "Caller must provide Attribute and address parameters to CreateNewFile."
err
endm
ifb <Attribute>
ErrMsg
else
ifb <FilenameSeg>
ErrMsg
else
ifb <FilenameOfs>
ErrMsg
else
LoadSegment <ds>, <FilenameSeg>
mov dx, FilenameOfs
mov cx, Attribute
DosCall <DOS_CREATE_NEW_FILE>
endif
endif
endif
endm
macro ControlFileAccess LockUnlock, Handle, OffsetHigh, OffsetLow, LengthHigh, LengthLow
macro ErrMsg
display "Caller must provide the function, file handle, record position and size"
display "parameters to ControlFileAccess."
err
endm
ifb <LockUnlock>
ErrMsg
else
ifb <Handle>
ErrMsg
else
ifb <OffsetHigh>
ErrMsg
else
ifb <OffsetLow>
ErrMsg
else
ifb <LengthHigh>
ErrMsg
else
ifb <LengthLow>
ErrMsg
else
mov al, LockUnlock
mov bx, Handle
mov cx, OffsetHigh
mov dx, OffsetLow
mov si, LengthHigh
mov di, LengthLow
DosCall <DOS_CONTROL_ACCESS>
endif
endif
endif
endif
endif
endif
endm
macro GetMachineName BufferSeg, BufferOfs
macro ErrMsg
display "Caller must provide buffer address parameters to GetMachineName."
err
endm
ifb <BufferSeg>
ErrMsg
else
ifb <BufferOfs>
ErrMsg
else
LoadSegment <ds>, <BufferSeg>
mov dx, BufferOfs
xor al, al
DosCall <NET_GET_MACHINE_NAME>
endif
endif
endm
macro SetupPrinter BufferSeg, BufferOfs, ListIndex, StrLength
macro ErrMsg
display "Caller must provide buffer address, Index and length parameters"
display "to SetupPrinter."
err
endm
ifb <BufferSeg>
ErrMsg
else
ifb <BufferOfs>
ErrMsg
else
ifb <ListIndex>
ErrMsg
else
ifb <StrLength>
ErrMsg
else
mov al, 2
mov bx, ListIndex
mov cx, StrLength
LoadSegment <ds>, <BufferSeg>
mov si, BufferOfs
DosCall <NET_SET_PRINTER_SETUP>
endif
endif
endif
endif
endm
macro GetPrinterSetup BufferSeg, BufferOfs, ListIndex
macro ErrMsg
display "Caller must provide buffer address and Index parameters GetPrinterSetup."
err
endm
ifb <BufferSeg>
ErrMsg
else
ifb <BufferOfs>
ErrMsg
else
ifb <ListIndex>
ErrMsg
else
mov al, 3
mov bx, ListIndex
LoadSegment <es>, <BufferSeg>
mov di, BufferOfs
DosCall <NET_GET_PRINTER_SETUP>
endif
endif
endif
endm
macro GetListEntry ListIndex, DeviceSeg, DeviceOfs, NetworkSeg, NetworkOfs
macro ErrMsg
display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
err
endm
ifb <ListIndex>
ErrMsg
else
ifb <DeviceSeg>
ErrMsg
else
ifb <DeviceOfs>
ErrMsg
else
ifb <NetworkSeg>
ErrMsg
else
ifb <NetworkOfs>
ErrMsg
else
mov al, 2
mov bx, ListIndex
LoadSegment <ds>, <DeviceSeg>
LoadSegment <es>, <NetworkSeg>
mov si, DeviceOfs
mov di, NetworkOfs
DosCall <NET_GET_REDIRECTION_LIST>
endif
endif
endif
endif
endif
endm
macro GetListEntry Type, Save, DeviceSeg, DeviceOfs, NetworkSeg, NetworkOfs
macro ErrMsg
display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
err
endm
ifb <Type>
ErrMsg
else
ifb <Save>
ErrMsg
ifb <DeviceSeg>
ErrMsg
else
ifb <DeviceOfs>
ErrMsg
else
ifb <NetworkSeg>
ErrMsg
else
ifb <NetworkOfs>
ErrMsg
else
mov al, 3
mov bl, Type
mov cx, Save
LoadSegment <ds>, <DeviceSeg>
LoadSegment <es>, <NetworkSeg>
mov si, DeviceOfs
mov di, NetworkOfs
DosCall <NET_REDIRECT_DEVICE>
endif
endif
endif
endif
endif
endif
endm
macro GetListEntry DeviceSeg, DeviceOfs
macro ErrMsg
display "Caller must provide ListIndex and buffer address parameters to GetListEntry."
err
endm
ifb <DeviceSeg>
ErrMsg
else
ifb <DeviceOfs>
ErrMsg
else
mov al, 4
mov cx, Save
LoadSegment <ds>, <DeviceSeg>
mov si, DeviceOfs
DosCall <NET_CANCEL_REDIRECT>
endif
endif
endm
macro GetPSPAddress
DosCall <DOS_GET_PSP>
endm
macro LeadByteTable Function, Console
ifb <Function>
display "Caller must provide Function parameter to LeadByteTable."
err
else
ifnb <Console>
mov dl, Console
else
mov al, Function
DosCall <DOS_GET_LEAD_BYTE_TABLE>
endif
endif
endm
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -