←предыдущая следующая→
1 2 3 4 5 6 7
одного каталога нет, ищем файлы
call WrtDir ; Выводим имя первого найденного каталога
FindNextDir:
mov ah,4fh ; Функция продолжает поиск, начатый ф-цией 4eh
int 21h
jc NowFiles ; Если больше каталогов нет, ищем файлы
call WrtDir ; Выводим найденный каталог
jmp FindNextDir ; Переходим на поиск следующего
NowFiles:
mov ah,4eh ; Функция находит первый файл с маской *.*
mov cx,27h ; В CX - атрибут файла - 27h (RO+Hid+Sys+Arc)
lea dx,path ; В DX - путь для поиска файлов
int 21h
jc halt ; Если файлов нет, то на выход
call WrtFile ; Если файл найден, выводим его имя
FindNextFile:
mov ah,4fh ; Функция продолжает поиск файлов
int 21h
jc halt ; Если больше файлов нет, то на выход
call WrtFile ; Выводим имя файла на экран
jmp FindNextFile ; Переход на поиск следующего файла
halt: call crlf ; Перевод строки, возврат каретки
call totsize ; Вывод объема диска
call fresize ; Вывод оставшегося места
ret ; Выход в DOS
;------------- создание подкаталога ---------------------------------
MakeE: pop ax ; восстанавливаем ax
mov al,0 ; Добавляем символ NUL к строке параметров
mov [di],al
mov ah,40h ; Выводим маску поиска
mov bx,01
mov cx,50
lea dx,path
int 21h
mov ah,39h ; функция создания подкаталога
lea dx,path
int 21h ; выполнить
cmp ax,01h ; проверка на ошибку #1
je p_err1
cmp ax,02h ; проверка на ошибку #2
je p_err2
cmp ax,03h ; проверка на ошибку #3
je p_err3
cmp ax,04h ; проверка на ошибку #4
je p_err4
mov ah,9h ; Ошибки нет!
lea dx,ok_make ; Вывод строки - Подкаталог создан
int 21h
int 20h ; Выход в DOS
;-------- Обработка ошибок --------------------------------
p_err1: mov ah,9h
lea dx,err_m1
int 21h
int 20h
p_err2: mov ah,9h
lea dx,err_m2
int 21h
int 20h
p_err3: mov ah,9h
lea dx,err_m3
int 21h
int 20h
p_err4: mov ah,9h
lea dx,err_m4
int 21h
int 20h ; Выход в DOS
;------------------------------------------------------------------------
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;:: Процедура высчитывает и выводит время создания файла/каталога :::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
WrtTime proc near
mov ah,9
lea dx,space
int 21h
mov ax,TimeF
shr ax,11
call DecWrt
mov ax,0e3ah
int 10h
mov ax,TimeF
shl ax,5
shr ax,10
call DecWrt
mov ax,0e3ah
int 10h
mov ax,TimeF
shl ax,11
shr ax,10
call DecWrt
ret
WrtTime endp
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
;::: Процедура высчитывает и выводит дату создания файла/каталога :::
;::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
WrtDate proc near
mov ah,9
lea dx,space
int 21h
mov ax,DateF
shl ax,11
shr ax,11
call DecWrt
mov ax,0e2fh
int 10h
mov ax,DateF
shl ax,7
shr ax,12
call DecWrt
mov ax,0e2fh
int 10h
mov ax,DateF
shr ax,9
add ax,80
call DecWrt
ret
WrtDate endp
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
; Забивает пробелами поле, в которое записывается имя файла (NameF) ::
; Это необходимо для того, чтобы не было наложений имен файлов при выводе ::
;:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
ClrName proc near
lea si,NameF ; Получаем адрес имени файла
mov cx,1
rp: cmp cx,13 ; Если CX=13, то имя обработано полностью
je vihod ; поэтому выходим
mov al,0 ; Заносим код символа 0 (пустой символ)
mov [si],al ; Записываем пустой символ в строку NameF
inc si ; Увеличиваем адрес строки
inc cx ; Увеличиваем счетчик записаных символов
jmp rp ; Повторяем цикл
vihod: ret
ClrName endp
;::::::::::::::::::::::::::::::::::::::
;::: Выводит имя каталога на экран ::::
;::::::::::::::::::::::::::::::::::::::
WrtDir proc near
cmp AttrF,10h ; Проверяем атрибут: если 10h, то каталог
jne exit1 ; Иначе на выход
mov ah,40h ; Функция вывода строки
mov bx,01
mov cx,12 ; Выводим 13 символов
lea dx,NameF ; В DX - адрес строки вывода
int 21h
mov ah,9
lea dx,dirstr
int 21h
call WrtDate
call WrtTime
call crlf ; Перевод строки, возврат каретки
exit1: call ClrName ; Чистим поле вывода
ret
dirstr db '<КАТАЛОГ>$'
WrtDir endp
;:::::::::::::::::::::::::::::::::::::::
;::: Выводит имя файла на экран ::::::::
;:::::::::::::::::::::::::::::::::::::::
WrtFile proc near
cmp AttrF,10h ; Проверяем атрибут: если не файл, то выходим
je exit2
lea si,NameF ; Загружанм адрес строки в SI
mov cx,1
loop1:
cmp cx,13 ; Проверяем, если CX=13, то вывод закончен
je exit2 ; выходим
mov al,[si] ; Заносим в AL выводимый символ
cmp al,65 ; Сравниваем его с 'A'
jl skip1 ; Если меньше, то не переводим в нижний регистр
cmp al,90 ; Сравниваем AL с 'Z'
jg skip1 ; Если больше, то не переводим в нижний регистр
add al,32 ; Переводим
←предыдущая следующая→
1 2 3 4 5 6 7
|
|