Вход: АН = 4Eh; СХ = атрибуты файла (биты 0 и 5 игнорируются); DS:DX
— ASCIZ-имя файла (возможно, с путем к нему и символами шаблона * и ?).
Выход: если CF - 0, то в DTA возвращается блок данных для первого
найденно го файла (см. ниже). Если CF - 0, то в АХ - код ошибки: 2 —
файл не най" ден; 3 — несуществующий путь; 12h — больше файлов в
каталоге нет Область DTA (Data Transfer Area) располагается в префиксе
программист
сегмента со смещением 80h от его начала и занимает 128 байт. При успешном
окончании поиска функция 4Eh (и 4Fh тоже) помещает блок данных, имеющий
приведенный ниже формат.
Смещение
|
Размер в байтах
|
Описание
|
00h
|
1
|
Буква логического диска, если бит 7 = 0, то удаленный диск
|
01h
|
И
|
Поисковый шаблон
|
0Сh
|
1
|
Атрибуты поиска
|
0Dh
|
2
|
Порядковый номер файла в каталоге
|
0Fh
|
2
|
Номер кластера начала каталога предыдущего уровня
|
11h
|
4
|
Резерв
|
15h
|
1
|
Атрибуты найденного файла
|
16h
|
2
|
Время создания (модификации) файла
|
18h
|
2
|
Дата создания файла
|
1Ah
|
4
|
Размер файла
|
1Eh
|
13
|
ASCIZ-имя файла с расширением
|
После анализа данной области в программе принимается решение об окончании или продолжении поиска.
В качестве шаблона можно задать символы *.*, тогда мы сможем
получить имена и проанализировать все файлы в текущем каталоге. Это
может понадобиться при программировании операции перемещения или
копирования каталога.
Найти следующий соответствующий шаблону файл
Вход: АН = 4Fh; в области DTA должен содержаться блок данных, заполненный единственным вызовом 4eh в начале поиска.
Выход: если CF = 0 — успех; если CF = 1 — в АХ = код ошибки: 12h — больше файлов в каталоге нет.
Для работы с DTA в системе MS DOS существуют две функции lah и
2fh. После старта программы текущей DTA является область по адресу
PSP:OO8Oh. Мы уже имели с ней дело, когда рассматривали проблему
обработки содержимого командной строки.
Получить адрес области DTA
Для выполнения работы, связанной с файлами, MS DOS предоставляет возможность установить свою область DTA.
Вход: АН = 2Fh.
Выход: ES:BX — адрес области, которую впоследствии функцией lah
можно сделать текущей областью DTA для последующих операций
ввода-вывода.
установить текущую область DTA
Вход: АН - 1Ah; DS:DX — адрес области, которая будет областью DTA для последующих файловых операций.
Понятно, что даже если мы устанавливаем свою область DTA, все
смещения и данные, формируемые функциями 4Eh 4Fh, остаются актуальными.