Metropoli BBS
VIEWER: dos.mac MODE: TEXT (ASCII)
;
;				DOS Macros
;
;	These macros define the interfaces to DOS.  This aids in making calls
; to DOS from other assembly language routines.  These macros provide the
; complete interface to the particular DOS function.
;
;
;			LOADREG
;
;	This macro is an "inner" macro for use by the DOS interface macros. It
; allows the caller of a macro to specify a register or a literal value as the
; parameter to the macro.  This macro loads the correct register specified by
; the macro with the literal value or from the register specified.  It will
; also not generate any code if the register that was passed to the calling
; macro was where that macro wanted the value.
;
loadreg 	macro		destreg,source
		ifdif		<destreg>,<source>
		mov		destreg,source
		endif
		endm
;
;			LDROFF
;
;	This macro is an "inner" macro for use by the DOS interface macros.  It
; allows the caller of a macro to specify a register or a literal value as the
; parameter to the macro.  This macro loads the correct register specified by
; the macro with the offset of a particular memory location.  Or it will load
; the correct register from another register, depending on what the user had
; coded on the original macro.	This macro will not generate any code if the
; register that was passed to the calling macro was where that macro wanted the
; value.
;
ldroff		macro		destreg,source,src2
		ifdif		<destreg>,<source>
		ifidn		<source>,<offset>
		lea		destreg,src2
		else
		loadreg 	destreg,source
		endif
		endif
		endm
;
dosfn		macro		fncnum
		mov		ah,fncnum
		int		21h
		endm
;
;			TERMINATE
;
;	This macro issues a 'program terminate' interrupt to DOS.  It will
; cause the currently executing program to return to DOS.  This is the normal
; way to exit from DOS.
;
terminate	macro
		int		20h
		endm
;
;			ABSDSKRD
;
;	This macro performs an 'absolute disk read' interrupt to DOS.  It will
; read the specified number of sectors from diskette.  The data will be read
; into the data area that the user specifies.
;
absdskrd	macro		drive,numsectrs,lrecnum,transoff
		loadreg 	al,drive
		loadreg 	cx,numsectrs
		loadreg 	dx,lrecnum
		ldroff		bx,transoff
		int		25h
		pop		bx
		endm
;
;			ABSDSKWR
;
;	This macro performs an 'absolute disk write' interrupt to DOS.  It will
; write the specified number of sectors to diskette.  The data will be written
; from the data area that the user specifies.
;
absdskwr	macro		drive,numsectrs,lrecnum,transoff
		loadreg 	al,drive
		loadreg 	cx,numsectrs
		loadreg 	dx,lrecnum
		ldroff		bx,transoff
		int		26h
		pop		bx
		endm
;
;			STAYRES
;
;	This macro performs a 'terminate but stay resident' interrupt to DOS.
; It will cause the caller to return to DOS but the space for the program will
; remain allocated.
;
stayres 	macro		endaddr
		ldroff		dx,endaddr
		int		27h
		endm
;
;			KBDIN
;
;	This macro requests a character from the keyboard.  The character is
; echoed on the CRT.
;
kbdin		macro
		dosfn		1
		endm
;
;			DSPOUT
;
;	This macro outputs a character to the CRT.
;
dspout		macro		outchr
		loadreg 	dl,outchr
		dosfn		2
		endm
;
;			AUXIN
;
;	This macro inputs a character from the auxilary input device.
;
auxin		macro
		dosfn		3
		endm
;
;			AUXOUT
;
;	This macro outputs a character to the auxilary output device.
;
auxout		macro		outchr
		loadreg 	dl,outchr
		dosfn		4
		endm
;
;			PRNOUT
;
;	This macro outputs a character to the first printer.
;
prnout		macro		outchr
		loadreg 	dl,outchr
		dosfn		5
		endm
;
;			CONSIO
;
;
;	This macro issues a 'direct console I/O' interrupt to DOS.  If no
; argument is supplied to this macro, console input will be performed.
; otherwise console output will be performed.
;
consio		macro		outchr
		ifb		<outchr>
		mov		dl,0ffh
		else
		loadreg 	dl,outchr
		endif
		dosfn		6
		endm
;
;			CONIONE
;
;	This macro issues a 'direct console I/O with no echo' interrupt to DOS.
; If no argument is supplied to this macro, console input will be performed, the
; character input from the keyboard will not be echoed.  Otherwise console
; output will be performed.
;
conione 	macro		outchr
		ifb		<outchr>
		mov		dl,0ffh
		else
		loadreg 	dl,outchr
		endif
		dosfn		7
		endm
;
;			KBDINE
;
;	This macro gets a character from the keyboard and returns it.  The
; character is not echoed on the screen.
;
kbdine		macro
		dosfn		8
		endm
;
;			PRNSTR
;
;	This macro will issue a 'print string' interrupt to DOS.  It will print
; the string whose offset is passed to the macro.  It is assumed that DS
; contains the segment value for the string.  The string must terminate with
; a '$' character.
;
prnstr		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		9
		endm
;
;			BKBDIN
;
;	This macro will issue a 'buffered keyboard input' interrupt to DOS.
; The offset of where the buffer is located is passed to the macro.  It is
; assumed that DS constains the segment which contains the buffer.  The first
; byte of the buffer must be the length of the buffer - 2.  The second byte is
; filled in and contains the number of characters read in.  The characters read
; in are placed starting at the third byte of the buffer.
;
bkbdin		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		0ah
		endm
;
;			CHKBDST
;
;	This macro will issue a 'check keyboard status' interrupt to DOS.  The
; result is that upon return AL will contain 0FFH if there is a character
; available at the keyboard, otherwise it will contain 00H.
;
chkbdst 	macro
		dosfn		0bh
		endm
;
;			CKBIKF
;
;	This macro will issue a 'clear keyboard buffer and invoke keyboard
; function' interrupt to DOS.  Forces system to wait until a character is
; actually typed.
;
ckbikf		macro
		dosfn		0ch
		endm
;
;			DSKRSET
;
;	This macro will issue a disk reset interrupt to DOS.
;
dskrset 	macro
		dosfn		0dh
		endm
;
;			SELDSK
;
;	This macro will issue a select disk interrupt to DOS.  The drive
; specified will become the defualt drive.
;
seldsk		macro		drive
		ldreg		al,drive
		dosfn		0eh
		endm
;
;			FCBOPEN
;
;	This macro will issue an open file interrupt to DOS.
;
fcbopen 	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		0fh
		endm
;
;			FCBCLOSE
;
;	This macro will issue a close file interrupt to DOS.
;
fcbclose	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		10h
		endm
;
;			FCBSRCH1
;
;	This macro will issue a search for first entry interrupt to DOS.
;
fcbsrch1	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		11h
		endm
;
;			FCBSRCHN
;
;	This macro will issue a search for next entry interrupt to DOS.
;
fcbsrchn	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		12h
		endm
;
;			FCBDEL
;
;	This macro will issue a delete file interrupt to DOS.
;
fcbdel		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		13h
		endm
;
;			FCBSEQRD
;
;	This macro will issue a sequential read interrupt to DOS.
;
fcbseqrd	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		14h
		endm
;
;			FCBSEQWR
;
;	This macro will issue a sequential write interrupt to DOS.
;
fcbseqwr	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		15h
		endm
;
;			FCBCRE
;
;	This macro will issue a file create interrupt to DOS.
;
fcbcre		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		16h
		endm
;
;			FCBRENAME
;
;	This macro will issue a file rename interrupt to DOS.
;
fcbrename	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		17h
		endm
;
curdsk		macro
		dosfn		19h
		endm
;
setdta		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		1ah
		endm
;
getfat		macro
		dosfn		1bh
		endm
;
getsfat 	macro		drive
		loadreg 	dl,drive
		dosfn		1ch
		endm
;
rndrd		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		21h
		endm
;
rndwr		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		22h
		endm
;
fcbsize 	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		23h
		endm
;
setrrfld	macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		24h
		endm
;
setivec 	macro		ivec,p1,p2
		loadreg 	al,ivec
		ldroff		dx,p1,p2
		dosfn		25h
		endm
;
crepsp		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		26h
		endm
;
rblkrd		macro		cnt,p1,p2
		loadreg 	cx,cnt
		ldroff		dx,p1,p2
		dosfn		27h
		endm
;
rblkwr		macro		cnt,p1,p2
		loadreg 	cx,cnt
		ldroff		dx,p1,p2
		dosfn		28h
		endm
;
prsfn		macro		p1,p2,p3,p4
		ldroff		si,p1,p2
		ifidn		<p1>,<offset>
		ldroff		di,p3,p4
		else
		ldroff		di,p2,p3
		endif
		dosfn		29h
		endm
;
getdate 	macro
		dosfn		2ah
		endm
;
setdate 	macro
		dosfn		2bh
		endm
;
gettime 	macro
		dosfn		2ch
		endm
;
settime 	macro
		dosfn		2dh
		endm
;
srverify	macro		verify
		loadreg 	al,verify
		sub		dl,dl
		dosfn		2eh
		endm
;
setverify	macro
		srverify	1
		endm
;
resetverify	macro
		srverify	0
		endm
;
getdta		macro
		dosfn		2fh
		endm
;
getvernm	macro
		dosfn		30h
		endm
;
keep		macro		rc,size
		loadreg 	al,rc
		loadreg 	dx,size
		dosfn		31h
		endm
;
cbchk		macro		setflg,stateflg
		loadreg 	al,setflg
		loadreg 	dl,stateflg
		dosfn		33h
		endm
;
getivec 	macro		vecnum
		loadreg 	al,vecnum
		dosfn		35h
		endm
;
gdfreesp	macro		drive
		loadreg 	dl,drive
		dosfn		36h
		endm
;
cntrydep	macro		p1,p2
		ldroff		dx,p1,p2
		sub		al,al
		dosfn		38h
		endm
;
mkdir		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		39h
		endm
;
rmdir		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		3ah
		endm
;
chdir		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		3bh
		endm
;
creat		macro		acc,p1,p2
		loadreg 	cx,acc
		ldroff		dx,p1,p2
		dosfn		3ch
		endm
;
openfile	macro		access,p1,p2
		loadreg 	al,access
		ldroff		dx,p1,p2
		dosfn		3dh
		endm
;
open		macro		access,p1,p2
		ifidn		<access>,<r>
		openfile	0,p1,p2
		else
		ifidn		<access>,<w>
		openfile	1,p1,p2
		else
		ifidn		<access>,<u>
		openfile	2,p1,p2
		endif
		endif
		endif
		endm
;
close		macro		file
		loadreg 	bx,file
		dosfn		3eh
		endm
;
read		macro		file,numbytes,p1,p2
		loadreg 	bx,file
		loadreg 	cx,numbytes
		ldroff		dx,p1,p2
		dosfn		3fh
		endm
;
write		macro		file,numbytes,p1,p2
		loadreg 	bx,file
		loadreg 	cx,numbytes
		ldroff		dx,p1,p2
		dosfn		40h
		endm
;
unlink		macro		p1,p2
		ldroff		dx,p1,p2
		dosfn		41h
		endm
;
lseek		macro		file,mode,hipos,lopos
		loadreg 	bx,file
		loadreg 	al,mode
		loadreg 	cx,hipos
		loadreg 	dx,lopos
		dosfn		42h
		endm
;
chmod		macro		mode,attr,p1,p2
		loadreg 	al,mode
		loadreg 	cx,attr
		ldroff		dx,p1,p2
		dosfn		43h
		endm
;
ioctl		macro		fc,file
		loadreg 	al,fc
		loadreg 	bx,file
		dosfn		44h
		endm
;
dup		macro		file
		loadreg 	bx,file
		dosfn		45h
		endm
;
fdup		macro		file1,file2
		loadreg 	bx,file1
		loadreg 	cx,file2
		dosfn		46h
		endm
;
gcurdir 	macro		drive,p1,p2
		loadreg 	dl,drive
		ldroff		si,p1,p2
		dosfn		47h
		endm
;
alloc		macro		size
		loadreg 	bx,size
		dosfn		48h
		endm
;
free		macro		ptr
		loadreg 	es,ptr
		dosfn		49h
		endm
;
setblock	macro		ptr,size
		loadreg 	es,ptr
		loadreg 	bx,size
		dosfn		4ah
		endm
;
exec		macro		fc,p1,p2,p3,p4
		ldroff		dx,p1,p2
		ifidn		<p1>,<offset>
		ldroff		bx,p3,p4
		else
		ldroff		bx,p2,p3
		endif
		loadreg 	al,fc
		dosfn		4bh
		endm
;
exit		macro		rc
		loadreg 	al,rc
		dosfn		4ch
		endm
;
wait		macro
		dosfn		4dh
		endm
;
fndfile1	macro		attr,p1,p2
		loadreg 	cx,attr
		ldroff		dx,p1,p2
		dosfn		4eh
		endm
;
fndfilen	macro
		dosfn		4fh
		endm
;
rename		macro		p1,p2,p3,p4
		ldroff		dx,p1,p2
		ifidn		<p1>,<offset>
		ldroff		di,p3,p4
		else
		ldroff		di,p2,p3
		endif
		dosfn		56h
		endm
;
getftime	macro		file
		loadreg 	bx,file
		sub		al,al
		dosfn		57h
		endm
;
setftime	macro		file,date,time
		loadreg 	bx,file
		loadreg 	dx,date
		loadreg 	cx,time
		mov		al,1
		dosfn		57h
		endm

[ RETURN TO DIRECTORY ]