; DOS Interface Macros - Version 1.0 - for Microsoft Macro Assembler 5.0 ; (C) Copyright Microsoft Corporation, 1987, 1988. .XCREF .XLIST IF1 ; Internal __LdAdr MACRO reg, adr IF (.TYPE (adr)) AND 00010000b ;; Register mov reg, adr ELSEIF (.TYPE (adr)) AND 00000100b ;; Constant mov reg, adr ELSEIF TYPE (adr) EQ 1 ;; Bytes mov reg, OFFSET adr ELSEIF TYPE (adr) EQ 2 ;; Near pointer mov reg, adr ELSEIF TYPE (adr) EQ 4 ;; Far pointer lds reg, adr ELSE .ERR %OUT Illegal argument ENDIF ENDM ; Internal __LdSeg MACRO dest, src IFIDNI , ;; Segment register mov ax, src mov dest, ax ELSEIFIDNI , mov ax, src mov dest, ax ELSEIFIDNI , mov ax, src mov dest, ax ELSEIFIDNI , mov ax, src mov dest, ax ELSEIF (.TYPE (src)) AND 00000100b ;; Constant mov ax, src mov dest, ax ELSE ;; Memory or general register mov dest, src ENDIF ENDM ; 01h, 07h, 08h, 0Ch @GetKey MACRO echo, cc, clear LOCAL funct, disp IFDIF , <0> IFDIF , <0> funct = 01h ELSE funct = 07h disp = 02h ENDIF ELSE IFDIF , <0> funct = 08h ELSE funct = 07h ENDIF ENDIF IFB mov ah, funct ELSE IFIDN , <0> mov ah, funct ELSE mov ah, 0Ch mov al, funct ENDIF ENDIF int 21h IFDEF disp mov dl, al mov ah, disp int 21h ENDIF ENDM ; 0Ah @GetStr MACRO ofset, terminator, limit, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 0Ah mov si, dx IFNB mov BYTE PTR [si], limit ENDIF int 21h inc si mov bl, [si] sub bh, bh inc si IFNB mov BYTE PTR [bx+si], terminator ENDIF ENDM ; 02h @DispCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10 mov ah, 02h IRP char, IFB EXITM ENDIF mov dl, char int 21h ENDM ENDM ; 05h @PrtCh MACRO ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10 mov ah, 05h IRP char, IFB EXITM ENDIF mov dl, char int 21h ENDM ENDM ; 09h @DispStr MACRO ofset, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 9 int 21h ENDM ; 3Fh @Read MACRO ofset, bytes, handle, segmnt IFNB mov bx, handle ELSE sub bx, bx ENDIF mov cx, bytes __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 3Fh int 21h ENDM ; 40h @Write MACRO ofset, bytes, handle, segmnt IFNB mov bx, handle ELSE mov bx, 1 ENDIF mov cx, bytes __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 40h int 21h ENDM ; 3Ch @MakFil MACRO path, atrib, segmnt, kind IFB sub cx, cx ELSE mov cx, atrib ENDIF __LdAdr dx, IFNB __LdSeg ds, ENDIF IFIDNI , mov ah, 5Ah ELSEIFIDNI , mov ah, 5Bh ELSE mov ah, 3Ch ENDIF int 21h ENDM ; 3Dh @OpenFil MACRO path, access, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ax, 3D00h + (access AND 0FFh) int 21h ENDM ; 3Eh @ClosFil MACRO handle mov bx, handle mov ah, 3Eh int 21h ENDM ; 41h @DelFil MACRO path, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 41h int 21h ENDM ; 56h @MoveFil MACRO old, new, segold, segnew __LdAdr dx, __LdAdr di, IFNB __LdSeg ds, ENDIF IFNB __LdSeg es, ENDIF mov ah, 56h int 21h ENDM ; 4Eh @GetFirst MACRO path, atrib, segmnt IFNB mov cx, atrib ELSE sub cx, cx ENDIF __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 4Eh int 21h ENDM ; 4Fh @GetNext MACRO mov ah, 4Fh int 21h ENDM ; 2Fh @GetDTA MACRO mov ah, 2Fh int 21h ENDM ; 1Ah @SetDTA MACRO buffer, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 1Ah int 21h ENDM ; Internal __LdDub MACRO dub IF TYPE (dub) EQ 2 sub cx, cx mov dx, dub ELSEIF TYPE (dub) EQ 4 mov cx, dub[2] mov dx, dub[0] ELSEIF TYPE (dub) EQ 0 sub cx, cx mov dx, dub ELSE .ERR %OUT Illegal argument ENDIF ENDM ; 42h @GetFilSz MACRO handle mov bx, handle sub cx, cx sub dx, dx mov ax, 4202h int 21h push dx push ax sub dx, dx mov ax, 4200h int 21h pop ax pop dx ENDM ; 42h @MovePtrAbs MACRO handle, distance IFNB __LdDub ENDIF mov bx, handle mov ax, 4200h int 21h ENDM ; 42h @MovePtrRel MACRO handle, distance IFNB __LdDub ENDIF mov bx, handle mov ax, 4201h int 21h ENDM ; 39h @MkDir MACRO path, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 39h int 21h ENDM ; 3Ah @RmDir MACRO path, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 3Ah int 21h ENDM ; 3Bh @ChDir MACRO path, segmnt __LdAdr dx, IFNB __LdSeg ds, ENDIF mov ah, 3Bh int 21h ENDM ; 47h @GetDir MACRO buffer, drive, segmnt IFNB mov dl, drive ELSE sub dl, dl ENDIF __LdAdr si, IFNB __LdSeg ds, ENDIF mov ah, 47h int 21h ENDM ; 19h @GetDrv MACRO mov ah, 19h int 21h ENDM ; 0Eh @SetDrv MACRO drive mov dl, drive mov ah, 0Eh int 21h ENDM ; 36h @ChkDrv MACRO drive IFNB mov dl, drive ELSE sub dl, dl ENDIF mov ah, 36h int 21h ENDM ; 4Ch @Exit MACRO return IFB mov ah, 4Ch ELSE mov ax, 4C00h + (return AND 0FFh) ENDIF int 21h ENDM ; 4Bh @Exec MACRO path, parms, segpath, segparms, overlay __LdAdr dx, __LdAdr bx, IFNB __LdSeg ds, ENDIF IFNB __LdSeg es, ENDIF IFB mov ax, 4B00h ELSE mov ax, 4B03h ENDIF int 21h ENDM ; 4Dh @GetRet MACRO mov ah, 4Dh int 21h ENDM ; 31h @TSR MACRO paragraphs, return mov dx, paragraphs IFB mov ah, 31h ELSE mov ax, 3100h + (return AND 0FFh) ENDIF int 21h ENDM ; 49h @FreeBlok MACRO segmnt IFNB __LdSeg es, ENDIF mov ah, 49h int 21h ENDM ; 48h @GetBlok MACRO graphs LOCAL tryit mov bx, graphs tryit: mov ah, 48h int 21h jc tryit ENDM ; 4Ah @ModBlok MACRO graphs, segmnt IFNB __LdSeg es, ENDIF mov bx, graphs mov ah, 4Ah int 21h ENDM ; 2Ah @GetDate MACRO mov ah, 2Ah int 21h ENDM ; 2Bh @SetDate MACRO month, day, year mov cx, year mov dh, month mov dl, day mov ah, 2Bh int 21h ENDM ; 2Ch @GetTime MACRO mov ah, 2Ch int 21h ENDM ; 2Dh @SetTime MACRO hour, minutes, seconds, hundredths mov ch, hour mov cl, minutes mov dh, seconds mov dl, hundredths mov ah, 2Dh int 21h ENDM ; 30h @GetVer MACRO mov ah, 30h int 21h ENDM ; 35h @GetInt MACRO interrupt mov ax, 3500h + (interrupt AND 0FFh) int 21h ENDM ; 25h @SetInt MACRO interrupt, vector, segmnt IF TYPE (vector) GE 0FFFEh mov dx, OFFSET vector mov ax, SEG vector mov ds, ax ELSE __LdAdr dx, IFNB __LdSeg ds, ENDIF ENDIF mov ax, 2500h + (interrupt AND 0FFh) int 21h ENDM ENDIF ; Pass 1 .CREF .LIST