123 lines
1.5 KiB
NASM
123 lines
1.5 KiB
NASM
; _wild.asm
|
|
;
|
|
; helper routines for wildcard expansion
|
|
; contains __find, __setdta
|
|
;
|
|
|
|
title _wild
|
|
|
|
include version.inc
|
|
.xlist
|
|
include cmacros.inc
|
|
include msdos.inc
|
|
.list
|
|
|
|
sBegin data
|
|
|
|
assumes ds,data
|
|
|
|
res db 21 dup (0)
|
|
attr db 0
|
|
time dw 0
|
|
date dw 0
|
|
sizel dw 0
|
|
sizeh dw 0
|
|
_name db 13 dup (0)
|
|
|
|
sEnd
|
|
|
|
|
|
sBegin code
|
|
assumes cs,code
|
|
assumes ds,data
|
|
|
|
;*************
|
|
; __find (dir)
|
|
; char *dir;
|
|
;
|
|
; get an entry from the directory. if dir is NULL, we've already been called
|
|
; before, so get the next entry from the directory. return NULL if there aren't
|
|
; any more
|
|
|
|
cProc _hfind,<PUBLIC>,<ds>
|
|
|
|
parmD dirfar
|
|
|
|
cBegin
|
|
mov ds,SEG_dirfar;
|
|
mov dx,OFF_dirfar;
|
|
jmp short entrypoint
|
|
cEnd nogen
|
|
|
|
cProc _find,<PUBLIC>,<ds>
|
|
|
|
parmdp dir
|
|
|
|
cBegin
|
|
|
|
if sizeD
|
|
lds dx,dir
|
|
mov cx,ds
|
|
or cx,cx
|
|
jnz first
|
|
else
|
|
mov dx,dir
|
|
endif
|
|
|
|
entrypoint:
|
|
or dx,dx
|
|
jz notfirst
|
|
|
|
first:
|
|
mov cx,11h ; get directories and read-only files too
|
|
mov ah,DOS_findfirst
|
|
jmp short doint
|
|
|
|
notfirst:
|
|
mov ah,DOS_findnext
|
|
|
|
doint:
|
|
callos
|
|
jnc retname
|
|
|
|
xor ax,ax
|
|
|
|
if sizeD
|
|
mov dx,ax
|
|
endif
|
|
|
|
jmp short toend
|
|
|
|
retname:
|
|
mov ax,dataOFFSET _name
|
|
|
|
if sizeD
|
|
mov dx,ss
|
|
endif
|
|
|
|
toend:
|
|
|
|
cEnd <>,<>,<ds>
|
|
|
|
|
|
;************
|
|
; __setdta ()
|
|
;
|
|
; set the disk transfer address to our template
|
|
|
|
cProc _setdta,<PUBLIC>,<>
|
|
|
|
cBegin
|
|
push ds
|
|
mov ax,ss
|
|
mov ds,ax
|
|
mov dx,dataOFFSET res
|
|
callos setdma
|
|
pop ds
|
|
pop bp
|
|
ret
|
|
cEnd nogen
|
|
|
|
sEnd
|
|
end
|