Работа с файлами из программы пользователя


Главная / ЭКВМ / Техническая информация / Функции

12. Работа с файлами из программы пользователя

 

12.1. Описание

В ЭВМ организован доступ к командам дисковой операционной системы (ДОС), с помощью которых можно производить операции с файлами и каталогами на встроенном электронном диске (диск A) и на внешнем диске (диск B). Доступ возможен как из программы пользователя, так и из автоматического режима.

Все файлы на дисках ЭВМ сгруппированы в каталоги, которые кроме файлов могут содержать подкаталоги (каталоги следующего уровня), которые могут содержать свои подкаталоги и т.д. Таким образом, файловая структура представляет собой дерево, имеющее один вход (головной каталог) с неограниченным числом вложений и любым количеством ветвей (в пределах ёмкости диска и ограничений на размер каталога). Передвижение по файловой структуре возможно только в двух направлениях - вперед в подкаталог и назад в материнский каталог.

Доступ к файлам и подкаталогам осуществляется через активный каталог, который загружается в специальную область ОЗУ, длиной 2048 байт и представляет собой список, содержащий 64 строки с номерами от 0 до 63 по 32 байта. Каждому файлу/подкаталогу соответствует одна строка каталога, которая содержит имя, определяет тип файла, дату и время его создания, длину (для файла программы) и местонахождение на диске. В строке с номером 0 всегда содержится ссылка на материнский каталог и имя материнского каталога.

Список заполняется без промежутков сверху вниз, в сторону увеличения номера строки, все байты незанятых строк заполняются кодами 0FFh. При создании новых файлов, соответствующая строка пристыковывается снизу списка, при создании подкаталога новая строка ставится в голову списка (в строку с номера 1), остальные строки сдвигаются вниз. При удалении файлов и подкаталогов список сжимается.

 

12.2. Регистры дисковых операций

 

12.2.1. Общее разрешение дисковых операций (R9120)

Доступ к регистру по записи и чтению обеспечивается при обращении к регистру памяти данных с адресом 9120. При записи числа 0, дисковые операции запрещены, при записи числа 1 - дисковые операции разрешены.

 

12.2.2. Разрешение операции (R9128)

Регистр доступен по записи и чтению и предназначен для защиты от случайного исполнения дисковых операций. Механизм защиты следующий.

При выполнении любой дисковой операции требуется, чтобы в регистр X стека было загружено определенное число (см. 12.3.2). Чтобы дисковая операция выполнилась успешно, необходимо, чтобы это же число содержалось в регистре разрешения операции. Для этого сначала содержимое регистра X стека записывают в регистр разрешения операции путем выполнения команды записи в регистр данных с адресом 9128, затем выполняют дисковую операцию. Если при выполнении дисковой операции число в регистре разрешения операции не совпадает с содержимым регистра X стека - операция не выполняется и устанавливается соответствующая ошибка. После выполнения дисковой операции, независимо от ее результата, в регистр разрешения операции автоматически заносится число 255 (0FFh).

 

12.2.3. Ошибки дисковых операций (R9129)

Регистр ошибок при выполнении дисковых операций доступен только по чтению при обращении к регистру памяти данных с адресом 9129. В регистре сохраняется код ошибки последней выполненной дисковой операции. Код ошибки может принимать следующие значения:

  • 0 - нет ошибок, операция выполнена успешно;
  • 1 - нет диска;
  • 2 - диск не форматирован;
  • 3 - нет места на диске;
  • 4 - нет места в каталоге;
  • 5 - ошибка имени файла/каталога;
  • 6 - невозможно удалить/создать/загрузить файл/каталог;
  • 7 - файл/каталог не выбран;
  • 8 - нет разрешения операции.
 

12.3. Дисковые операции

 

12.3.1. Выбор диска (R9121)

Выбор диска производится при выполнении команды записи в регистр памяти с адресом 9121, при этом в регистр X стека должно быть введено число 0, если выбирается диск A, или число 1, если выбирается диск B. При выборе диска в ОЗУ автоматически загружается головной каталог загружаемого диска. Если указанный диск недоступен (отсутствует или неформатирован), устанавливается соответствующая ошибка, предыдущее содержимое ОЗУ каталога не изменяется.

Операция выполняется автоматически при установке общего разрешения дисковых операций, при этом выбирается диск A и загружается его головной каталог.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.

 

12.3.2. Чтение строки каталога (R9122)

В отличие от других дисковых операций данная операция не требует разрешения и предназначена для просмотра активного каталога. Каталог просматривается построчно, для чего в регистр X стека заносится номер строки (от 0 до 63) и выполняется команда записи в регистр памяти с адресом 9122. При этом строка каталога (32 байта) с указанным номером считывается из ОЗУ каталога в байтовый буфер, начиная с ячейки, смещенной относительно начала на число, запрограммированное в индексный регистр 0 байтового буфера. Просмотр загруженной строки производится с использованием функций универсального байтового буфера, описанных в разделе 5.

Все строки каталога разбиты на фиксированные поля. Поля следуют от начала строки и имеют следующее содержание.

Поле 1, смещение от начала строки 0 - идентификатор, длина 1 байт.

Определяет тип записи:

  • 0 - заголовок каталога;
  • 1 - не используется;
  • 2 - подкаталог;
  • 3 - файл программы;
  • 4 - файл десятичных данных;
  • 5 - текстовый файл;
  • 6 - файл двоичных данных.

Строка с идентификатором 0 всегда стоит в нулевой строке. Если в начале нулевой строки другое значение байта - каталог не загружен.

Поле 2, смещение от начала строки 1 - номер кластера (адрес) начала файла/каталога на диске, длина 2 байта.

Определяет местоположение файла/каталога на диске. Для заголовка каталога определяет начало материнского каталога. Если адрес материнского каталога равен 0000h, то загружен головной каталог диска.

Поле 3, смещение от начала строки 3 - имя файла/каталога, длина 20 байт.

Состоит из разрешённых символов, не может начинаться с пробела. В заголовке каталога содержится имя активного каталога.

Поле 4, смещение от начала строки 23 - время и дата создания файла/каталога, длина 8 байт.

Время и дата записаны в BCD формате в последовательности - секунды, минуты, часы, день, месяц, день недели, год. Последним байтом записано случайное число от 0 до 255.

Поле 5, смещение от начала строки 31 - длина файла, 1 байт.

Параметр определен только для файлов программ в страницах от 1 до 100.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.

 

12.3.3. Загрузка файла/каталога (R9123)

Функция загружает файл или каталог по заданному номеру строки активного каталога. Номер строки задается в регистре X стека, операция производится при выполнении команды записи в регистр памяти с адресом 9123. При выполнении операции из ОЗУ каталога считывается идентификатор строки и, в зависимости от его типа, производится переход в подкаталог, загрузка файла из диска в соответствующую область памяти ЭВМ или переход в материнский каталог. Если заданная строка не содержит идентификатора, операция не выполняется, формируется код ошибки 7.

При загрузке файла программы в регистр Y стека должен быть дополнительно загружен номер начальной страницы памяти программ. Если длина загружаемой программы превышает выделенную область, то операция не выполняется и формируется код ошибки 6.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.

 

12.3.4. Удаление файла/каталога (R9124)

Функция предназначена для удаления файлов данных и подкаталогов по заданному номеру строки активного каталога. Номер строки задается в регистре X стека, операция выполняется при выполнении команды записи в регистр памяти с адресом 9124.

Функция не удаляет файлы программы и не удаляет подкаталоги, содержащие файлы и подкаталоги. В этом случае формируется код ошибки 6.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.

 

12.3.5. Создание файла/каталога (R9125)

Функция создает новый файл данных или подкаталог. Идентификатор создаваемого файла задается в регистре X стека (2 - для подкаталога; 4, 5 или 6 - для файлов данных), операция производится при выполнении команды записи в регистр памяти с адресом 9125. Имя создаваемого файла/каталога должно быть предварительно загружено в байтовый буфер в поле имени (см. п. 12.3.2), остальные поля не используются. Если имя создаваемого файла (каталога) совпадает с именем уже существующего файла (каталога), операция не производится и вырабатывается код ошибки 5.

Функция не создает файлы программы.

При создании файлов используются предварительно сохранённые в энергонезависимой памяти значения (см. п. 6.2.3), прочие могут быть изменены в результате выполнения операции.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.

 

12.3.6. Перезапись файла (R9126)

Функция перезаписывает файл данных по заданному номеру строки активного каталога. Номер строки задается в регистре X стека, операция производится при выполнении команды записи в регистр памяти с адресом 9126. При выполнении операции из ОЗУ каталога считывается идентификатор строки и имя файла. После этого создается новый файл того же типа с тем же именем, старый файл удаляется.

Функция не перезаписывает файлы программы.

При перезаписи файлов используются предварительно сохранённые в энергонезависимой памяти значения (см. п. 6.2.3), прочие могут быть изменены в результате выполнения операции.

Значение регистров стека после выполнения функции не изменяется. Операция чтения из регистра памяти данных по указанному адресу не изменяет стек ЭВМ.



НПП "СЕМИКО" (383) 271-01-25 (многоканальный)