Программирование на Ассемблере
Мы будем
использовать режим \"Read\" (-2). После вызова функции Lock регистр D0 будет содержать либо указатель на
специальную служебную структуру - ключ, либо нулевое значение (ошибка -
файл не найден). Возвращенный указатель нужно сохранить для дальнейшего
использования.
Следующая функция, которую мы будем использовать - Examine (исследовать).
Эта функция возвращает дополнительную информацию об исследуемом каталоге в
специальном блоке FileInfoBlock. Перед вызовом Examine регистр D2 должен
содержать адрес области памяти для размещения блока FileInfoBlock, а D1 -
ключ каталога, возвращенный функцией Lock.
Область FileInfoBlock занимает 260 байт и содержит всю информацию об
исследуемом файле (например, имя файла располагается с 9-го байта). В конце
этого пункта мы приведем более подробное описание структуры блока
FileInfoBlock.
Полученную информацию мы можем теперь использовать для чтения содержимого
каталога с помощью функции ExNext (Examine Next, исследовать очередную
запись). Эта функция возвращает информацию о текущей записи в каталоге и
вызывается с такими же параметрами, что и Examine (D1 - ключ каталога, D2 -
адрес блока FileInfoBlock, который к моменту вызова ExNext должен содержать
информацию о предыдущей записи). Каждый последующий вызов ExNext выбирает
очередную запись каталога и возвращает в D0 статус операции (если ноль, то
все записи выбраны). Таким образом, мы должны вызывать ExNext и печатать
полученную информацию о файлах до тех пор, пока ExNext не возвратит ноль.
При завершении работы с каталогом необходимо снять с него \"захват\". Для
этого используется функция Unlock (смещение -90).
Вот пример программы, которая открывает окно и печатает в нем список файлов
диска (DF0:): ;6.5.5B.ASM
;***** DOS-Sample function 3/87 S.D. ***** OpenLib = -552
CloseLib = -414
ExBase = 4 * Вызовы AmigaDOS Open = -30
Close = -36
Read = -42
Write
|