[an error occurred while processing this directive]
.шп136
.цв
III.5.2 Вызов Мененджера Файлов.
.ов
.шп0
Для вызова менеджера файлов надо вызвать две подпрограммы:
- JSR ¤03DC - в регистры Y и A загружается адрес Списка параметров мененджера файлов (в ДОС 3.3 размещается по адресу ¤B823 при подключении банка D на 5-й логический сегмент). В Y - мл., в A - ст. байт адреса. Результаты ее работы можно сохранить в двух ячейках нулевой страницы, чтобы иметь возможность модифицировать список и получать результаты работы мененджера.
- JSR ¤03D6 - это главный вход мененджера файлов. Предварительно необходимо заполнить список параметров, в регистрах A и Y - адрес этого списка,
______ в регистре X - =0 если файл не найден, создать его;
_____________________<>0 если файл не найден, не создавать его.
Обычно X=0 только при выполнении команды OPEN.
Программист должен предоставить мененджеру для каждого открытого файла по три буфера, разместив их в доступной области памяти. Вместе взятые эти 3 буфера (буфер под рабочую область менеджера - 45 байт, буфер под текущий трек/секторный список файла - 256 байт, и буфер под текущий сектор данных файла - 256 байт) занимают 557 байтов ОЗУ и должны передаваться мененджеру каждый раз, когда используется ассоциированный с ними файл.
.лв
.шп
_________________Список_параметров_Мененджера файлов. (общий формат). БАЙТ О П И С А Н И Е 00 Тип вызова: 01=OPEN 05=DELETE 09=RENAME 02=CLOSE 06=CATALOG 0A=POSITION 03=READ 07=LOCK 0B=INIT 04=WRITE 08=UNLOCK 0C=VERIFY 01 Подтип вызова для READ и WRITE: 00=Нет операции(вызов игнорируется), 01=READ или WRITE одного байта, 02=READ или WRITE ряда байтов, 03=POSITION+(READ или WRITE) одного байта 04=POSITION+(READ или WRITE) ряда байт 02-09 Специфические параметры. 0A Код возврата: 00 - C=0 - норма; C=1 01 - Не использован (язык не доступен); 02 - Неверный тип вызова; 03 - Неверный подтип вызова (>4-х); 04 - Защита от записи; 05 - Конец данных; 06 - Файл не найден (создан, если X=0); 07 - Не тот том; 08 - Ошибка в/в; 09 - Диск полон; 0A - Файл защищен; 0B Не использован. 0C-0D Адрес рабочей области мененджера (45 байт для сохранения состояния мененджера между вызовами; (в ДОС 3.3 лежит по адресу ¤BA71 при ¤C15D) Место для нее должно быть отведено, адрес должен быть инициализирован. 0E-0F Адрес 256-байтного буфера текущего трек/секторного спис ка (в ДОС 3.3 - ¤B971 при ¤C15D). 10-11 Адрес 256-байтного буфера текущего сектора данных (в ДОС 3.3 ¤B003,¤B103,¤B203 в зависимости от кол-ва открытых файлов в банке D при подключении по ¤C15D
Типы списка параметров при вызове. ---------------------------------- OPEN - определяет местонахождение файла или создает файл. За каждым OPEN должен следовать вызов POSITION. БАЙТ О П И С А Н И Е На входе: 02-03 Длина записи или 0000, если длина переменная; 04 Номер тома или 00, если он безразличен; 05 Номер НГМД; 06 Номер разъема; 07 Тип файла: 00=T 01=I 02=A 04=B 08=R 10=S 20=A 40=B; 08-09 Адрес имени файла. На выходе: 07 Тип открытого файла; 0A Код возврата. CLOSE - Записывает последние сектора, модифицирует каталог. Требуется для каждого OPEN. БАЙТ О П И С А Н И Е На входе общий формат. На выходе: 0A Код возврата. READ - Считывает байт или ряд байтов в буфер данных. WRITE - Записывает байт или ряд байтов из буфера данных. БАЙТ О П И С А Н И Е На входе: 02-03 (Подтип 03/04) Номер записи; 04-05 (Подтип 03/04) Смещение байта; 06-07 (Подтип 02/04) Кол-во байтов в ряду (для WRITE эта длина должна быть на 1 меньше действительной длины); 08-09 (Подтип 02/04) Адрес буфера для считывания ряда байт; На выходе: 02-03 Номер записи текущей позиции в файле; * 04-05 Смещение (в байтах) текущей позиции в файле; 08 (READ, подтипы 01/03), Прочитанный байт; 0A Код возврата. * Текущая позиция в файле модифицируется таким образом, чтобы указать на байт, следующий за прочитанными или записанными данными. DELETE - определяет местонахождение и удаляет файл, освобождая его сектора. БАЙТ О П И С А Н И Е На входе общий формат. На выходе: 0A Код возврата. CATALOG - выводит листинг каталога на выходное устройство БАЙТ О П И С А Н И Е На входе общий формат. 05 Номер нгмд; 06 Разъем; На выходе: 0A Код возврата. LOCK - Защищает файл от записи. БАЙТ О П И С А Н И Е На входе общий формат. На выходе: 0A Код возврата. UNLOCK - Снимает защиту с файла. БАЙТ О П И С А Н И Е На входе общий формат. На выходе: 0A Код возврата. RENAME - Переименовывает файл. БАЙТ О П И С А Н И Е На входе: 02-03 Адрес нового имени файла. На выходе: 0A Код возврата. POSITION - Вычисляет положение записи и/или смещение байта в файле. Выполняет позиционирование таким образом, что следующие чтение/запись начинаются с этой точки. Вызов POSITION (выполненный явно или неявно с помощью подтипов команд READ/WRITE) требуется перед первым вызовом READ/WRITE. Для нормального позиционирования на начало файла следует установить байты 02-05 в 00. БАЙТ О П И С А Н И Е На входе: 02-03 Относительный номер записи для файлов с фиксированной длиной записи или 00. Первая запись файла имеет N'0000. 04-05 Относительное смещение байта в записи или в самом файле, если номер записи нулевой. На выходе: 0A Код возврата. INIT - Инициализирует дублирующую дискету: размечает треки, записывает копию DOS, создает Оглавление тома и каталог. Программа HELLO однако не записывается. БАЙТ О П И С А Н И Е На входе: 01 Первая страница копии DOS. Обычно ¤9D для 48-Кбатной машины. 04 Номер тома новой дискеты. 05 Номер НГМД. 06 Номер разъема ¤4E6 Тип записи ДОС 3.3 = ¤04 при записи ДОС без интерпретатора Бейсик и Монитора = ¤08 при записи ДОС с интерпретатором На выходе: 0A Код возврата. VERIFY - Проверяет, нет ли в файле "плохих" секторов. БАЙТ О П И С А Н И Е На входе общий формат. На выходе: 0A Код возврата. .шп8 .цв Формат рабочей области мененджера файлов. .шп0 .ов (для вызова менеджера ДОСом 3.3 храниться по адресу ¤BA71 при том же подключении памяти (см. выше). БАЙТ О П И С А Н И Е 00-01 Трек/сектор первого Т/С списка файла; 02-03 Трек/сектор текущего Т/С списка файла; 04 Флажки: ¤80=Буфер Т/С списка изменен и нуждается в записи; ¤40=Буфер данных изменен и нуждается в записи; ¤02=Карта тома изменена и нуждается в записи; 05-06 Трек/сектор текущего сектора данных; 07 Смещение(в секторах) поля описания данного файла в каталоге; 08 Смещение(в байтах) поля описания данного файла в секторе каталога; 09-0A Макс. кол-во секторов данных в одном секторе Т/С списка; 0B-0C Смещение первого сектора в текущем Т/С списке; 0D-0E Смещение последнего сектора в текущем Т/С списке; 0F-10 Относительный номер сектора, прочитанного последним; 11-12 Размер сектора в байтах(256); 13-14 Текущая позиция, выраженная в секторах(относительная); 15 Текущее смещение байта в данном секторе; 16 Не использован; 17-18 Фксированная длина записи; 19-1A Текущий номер записи; 1B-1C Смещение байта в текущей записи; 1D-1E Длина файла в секторах; 1F Следующий сектор данного трека, подлежащий обработке; 20 Текущий обрабатываемый трек; 21-24 Битовая карта текущего трека(циклически сдвигаемая); 25 Тип файла; 26 Номер разъема * 16; 27 Номер НГМД; 28 Номер тома(в обратном коде); 29 Номер трека; 2A-2C Не использованы.
Каждый раз, когда мененджер заканчивает обслуживание вызова, он копирует все свои переменные в свою рабочую область в буфере, предоставленном вызывающей программой. При каждом последующем вызове первое, что он делает,-восстанавливает свои переменные из рабочей области.
.ст Раздел III:6
[an error occurred while processing this directive]