[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]