Люди добрые помогите!!! У меня проблемка.

Есть программка которая выводит содержимое диска (только папки). Помогите добавить туда и файлы. Зарание спасибо.
Код:
; tasm /m scantree.asm
; tlink /t /x scantree.obj
.MODEL Tiny
.286
.CODE
ORG 100h
LOCALS
PathLen = 100 ; Максимальный путь к файлу/каталогу
; (уменьшать это значение нежелательно)
Start:
push offset MyFunc
call ScanTree
int 20h
MyFunc proc
lea di,ScanPath ; DI = адрес строки ScanPath
push di
mov cx,PathLen
xor al,al
repne scasb ; Ищем конец строки
dec di
mov word ptr [di],0A0Dh ; Записываем туда CR,LF...
mov byte ptr [di+2],'$' ; ...и символ доллара (для ф-ии 9)
mov ah,9
pop dx
int 21h ; Выводим строку на экран
mov byte ptr [di],0; Восстанавливаем строку ScanPath
; (т.к. изменять ее нельзя)
ret
MyFunc endp
; Маски атрибутов файлов/каталогов
faReadOnly = 1
faHidden = 2
faSystem = 4
faVolume = 8
faDirectory = 10h
faArchive = 20h
faAnyFile = faReadOnly+faHidden+faSystem+faArchive
faAnyDir = faAnyFile+faDirectory
faAnithing = faAnyDir+faVolume
; Описание буфера DTA
DTAFileInfo struc
dtaReserved db 21 dup (?)
dtaAttr db ?
dtaTime dw ?
dtaDate dw ?
dtaSize dd ?
dtaName db 13 dup (?)
ends
ScanTree proc pascal
arg Func:word
local OldDTA:dword, NewDTA:DTAFileInfo
; ES всегда равно первоначальному DS !!!
push ds ; Сохраняем DS
mov ah,2Fh
int 21h ; Получаем адрес DTA
mov word ptr OldDTA[0],bx ; Сохраняем его...
mov word ptr OldDTA[2],es ; ...в переменной OldDTA
pop es ; Восстанавливаем DS в регистр ES (ES=DS)
lea di,ScanPath
mov cx,PathLen
xor al,al
cld ; Прямой порядок поиска scasb
repne scasb ; Ищем в имени каталога нулевой байт (конец строки)
dec di
push di ; Сохраняем указатель на ноль
push ds es ; Сохраняем DS и ES
call Func ; Вызываем функцию для стартового каталога
mov ah,1Ah
push ss
pop ds ; DS = SS (сегмент NewDTA)
lea dx,NewDTA
int 21h ; Устанавливаем свой DTA
pop es ds ; Восстанавливаем DS и ES (ES=DS)
mov ah,4Eh ; Готовимся в началу поиска
mov cx,0110111b ; Атрибуты (все, кроме Volume label)
lea dx,ScanPath
lea si,ScanMask ; SI = адрес макси поиска
pop di ; Восстанавливаем DI (указатель на конец строки)...
push di ; ...и тут же сохраняем его
cld ; Прямой порядок работы lodsb/stosb
@@CopyMask: lodsb ; Читаем в AL символ из строки [SI]
stosb ; И записываем его в конец ScanPath
or al,al ; Конец строки [SI] (AL=0) ?
jnz @@CopyMask ; Нет, копируем следующий символ
@@FindNext:
int 21h ; Начинаем/продолжаем поиск
jc @@NotFound ; Выходим, если ничего не найдено (CF=1)
push ss
pop ds ; DS = SS (сегмент NewDTA)
test NewDTA.dtaAttr,faDirectory ; Проверяем - каталог ли был найден
jz @@PrepareNext ; Если нет, готовимся продолжать поиск
lea si,NewDTA.dtaName ; Адрес имени найденного файла/каталога
lodsb ; Читаем первый символ
cmp al,'.' ; Это каталоги '.' и '..'? (нам такие не нужны)
je @@PrepareNext ; Если это они, готовимся продолжать поиск
pop di ; Восстанавливаем DI (указатель на конец строки)...
push di ; ...и тут же сохраняем его
@@CopyPath:
stosb ; Записываем символ строки [SI] в конец ScanPath
lodsb ; Читаем в AL символ из строки [SI]
or al,al ; Конец строки [SI] (AL=0) ?
jnz @@CopyPath ; Нет, копируем следующий символ
mov ax,'\' ; AH = 0, AL = '\'
stosw ; Записываем слэш и ноль в конец строки
push es
pop ds ; DS = ES
push Func
call ScanTree ; Вызываем себя рекурсивно
push ss
pop ds ; DS = SS (сегмент NewDTA)
@@PrepareNext:
mov ah,4Fh ; Готовимся к функции 4Fh
lea dx,NewDTA
jmp @@FindNext ; Продолжаем поиск
@@NotFound:
pop di ; Убираем из стека DI
mov ah,1Ah
lds dx,OldDTA
int 21h ; Восстанавливаем DTA
push es
pop ds ; Восстанавливаем первоначальный DS
ret ; Выходим из процедуры
ScanTree endp
.DATA
ScanMask db '*.*',0 ; Маска каталогов для поиска
StartPath db 'D:\',0 ; Стартовый каталог
ORG StartPath ; Совмещаем StartPath и ScanPath
ScanPath db PathLen dup (?) ; ASCIIZ-имя найденного каталога
searchPath db "*.*",0
dta db 2ch dup (?)
crlf db 0Dh,0Ah,'$' ;аналогично, новая строка
END Start