Программирование на Ассемблере
Среди них
есть специальный параметр, задающий режим открытия файла (D2). Если
требуется открыть уже существующий файл, то этот параметр должен содержать
число 1005 (mode_old).
Если же Вы хотите создать новый файл, используйте режим mode_new (1006).
Однако следует помнить, что если при открытии в режиме mode_new файл с
таким именем уже существует, то его старое содержимое будет уничтожено!
Чтобы избежать подобных случаев, Ваша программа должна проверять отсутствие
одноименного файла на диске перед его созданием (проверить существование
файла с данным именем можно, например, с помощью системной функции Lock,
о которой речь пойдет в пункте 6.5.6).
Итак, начнем с написания подпрограммы, открывающей требуемый файл. Пусть
ASCII-строка, задающая имя файла, помечена как filename (будем считать, что
эта строка заканчивается нулевым байтом). Для передачи режима открытия
файла нашей подпрограмме будем использовать регистр D2.
После вызова Open мы должны сохранить возвращенный идентификатор открытого
канала в специальной переменной, подобно тому, как мы сохраняли
идентификатор окна (консоли) в переменной conhandle. Если после этого сразу
написать rts, то вызывающая программа сможет обнаружить ошибку открытия
файла по состоянию флага Z (с помощью ветвлений BEQ/BNE). Подпрограммы открытия и закрытия файлов выглядят так: Open = -30 ;(6.5.1A)
Close = -36
mode_old = 1005
mode_new = 1006 ...
openfile: move.l dosbase(PC),A6 ;базовый адрес dos.library
move.l #filename,D1 ;указатель на имя файла
jsr Open(A6) ;открываем файл
move.l D0,filehd ;сохраняем идентификатор
;(в случае ошибки флаг Z = 1)
rts
closefile:
move.l dosbase(PC),A6
move.l filehd(PC),D1 ;идентификатор закрываемого
;файла
jsr Close(A6) ;закрываем файл
rts filehd: dc.l 0 ;переменная для хранения
;идентификатора файла
filename: dc.b \"Filename\",0 ;имя открываемого файла
align ;или even
Операция закрытия файла используется для освобождения ресурсов системы,
выделенных функцией Open.
|