Получение информации о файлах
После того как создана файловая структура, с дискетой можно начи-
нать работать. Для получения информации о дискете TR-DOS предоставляет
пользователю две команды: CAT и LIST. Обе команды выдают содержимое
каталога диска, только CAT используется для получения краткой справки, а
LIST выводит полную информацию как о файлах, так и о дискете в целом.
Формат команд одинаков:
CAT ["Х:"][#п]
LIST ["Х:"][#п]
где
X
имя дисковода, в который вставлена дискета;
п
номер потока, в который TR-DOS направит выводимый каталог.
Рис. 17, Выполнение команд CAT и LIST.
Рис. 17, Выполнение команд CAT и LIST.
Если команды CAT и LIST введены без параметров, то будет выдан
каталог с дискеты, вставленной в текущий дисковод, в поток 2, то есть на
основной экран, причем предварительно экран будет очищен. Для получе-
ния каталога с отличного от текущего диска его необходимо явно указать в
команде. Возможность переназначить устройство вывода предоставляется
бейсик-системе и тем самым делает TR-DOS более гибкой. Например, для
распечатки каталога на принтере нужно просто задать вывод в 3 поток*.
Попробуйте вывести каталог обеими командами только что отформа-
тированной дискеты. Конечно, информации о файлах Вы не увидите, но
кое-какое представление о работе команд получите. Для примера разберем
распечатку каталога тестовой дискеты (рис. 17).
Верхние три строки в распечатке каталога дискеты служебные. Ко-
манда CAT выводит сюда имя диска (Title), заданное при форматирование в
команде FORMAT, а также количество файлов (File(s)) и число удаленных
файлов (Del. File). Далее следует информация о записанных на дискете
файлах. Каждая строка предваряется именем дисковода, в который вставлена
дискета. Для файла приводится его имя, тип (символ в угловых скобках) и
объем файла в секторах. Файлы выдаются в каталоге последовательно, в том
порядке, в каком они хранятся на дискете.** Заканчивает каталог число
незанятых секторов (Free).
Имя дисковода (Disk Drive) и количество свободных секторов (Free
Sector) вынесены в команде LIST наверх в служебные строки. Кроме этого,
здесь выдаются еще параметры дискеты: число дорожек (Track) и количество
сторон (Side). Расширена также информация о файлах. Помимо имени, типа
и объема в секторах, приводятся три дополнительных параметра (Start, Length,
Line), назначение которых определяется типом файла и подробно описано в
разделе «Планирование дискового пространства».
Вся выводимая информация берется командами CAT и LIST из области
каталога диска***, детальное описание которой приведено в разделе «Эле-
мент каталога».
*) Более подробная информация о взаимодействии каналов и потоков в
бейсик-системе представлена в главе «Архитектура ZX Spectrum».
**) Если количество файлов велико и информация о них не помещается на
экране, то выдается запрос scroll? Отметим, что прерывание вывода может
повлечь за собой разрушение системы, так как из-за ошибки в TR-DOS
не сохраняется регистровая пара HL
***)А для бейсик-программ — еще и из самих файлов.
РАБОТА С ФАЙЛАМИ
Это, пожалуй, самый необходимый раздел, который нужно знать для
правильной работы в рамках дисковой операционной системы.
Команды, синтаксис, типы файлов
Ниже будут подробно рассмотрены команды ОС TR-DOS, предназна-
ченные для работы с файлами. Все они имеют сходный синтаксис, то есть
формат записи команды для работы, например, с фрагментом кода или
массивом данных аналогичен.
Каждому файлу, хранящемуся на дискете, присваивается уникальная
спецификация, которая включает в себя имя файла и его тип. Имя файла
состоит не более чем из 8 символов, и, в отличие от имен файлов на
магнитной ленте, не может быть «пустым». В командах имя файла заключают
в кавычки.
Имя файла ничего не говорит о том, какая информация хранится в
этом файле. Дополнительную идентификацию в этом случае предоставляет
тип файла. Система TR-DOS поддерживает четыре типа: бейсик-программы,
фрагменты кода, числовые и строковые массивы данных и файлы прямого
и последовательного доступа. Для обозначения типов TR-DOS использует
ключевые слова и символы, которые в командах размещаются непосредст-
венно за именем файлов. Бейсик-программы ключевого слова не имеют,
фрагменты кодов отмечаются словом CODE, числовые и строковые масси-
вы — словом DATA, а файлы прямого и последовательного доступа — симво-
лом #. Как уже говорилось, слова CODE и DATA могут быть набраны и как
токены, и как слова — посимвольно, объяснение этому дается в разделе
«Справочные сведения о TR-DOS».
Для вывода информации о файлах оказывается неудобным использо-
вать ключевые слова, вместо них применяется другая запись — имя файла
и следом за ним тип в угловых скобках. Бейсик-программы обозначаются
<в>, кодовые файлы — <С>, файлы массивов данных — <D> и файлы
прямого и последовательного доступа — <#>. Так, например, выдается
информация в командах CAT и LIST. Мы также будем иногда использовать эту
запись.
Необходимо еще сказать об одной особенности задания имени файла.
Указание только имени и типа файла не достаточно для определения его
местонахождения. Мы уже упоминали о том, что система TR-DOS поддержи-
вает работу с четырьмя дисководами и, естественно, в команде необходимо
как-то указать, в каком дисководе находится дискета с файлом. Как и во
многих других случаях, здесь тоже используется принцип умолчания: если
ничего не сказано, то работаем с текущим дисководом. Если же нужно задать
другой дисковод, то его имя указывается в команде перед именем файла и
отделяется от него символом двоеточия. Заметьте, что имя диска записывается
внутри кавычек.
Итак, полная спецификация файла определяется такой строкой:
"[Drive^File^name" Туре
Теперь рассмотрим синтаксические примеры. Команды для работы с
бейсик-программами будут выглядеть следующим образом:
Command "[Drive:]File__name"
Для команд, работающих с фрагментами кодов, синтаксис будет
следующий:
Command "[Drive:]Fi!e_name"CODE [Start[,Length]]
где Start и Length необязательные параметры, задающие начало кодового
фрагмента (Start) и его длину в байтах (Length)*. Более подробно об этом
будет рассказано при описании команд.
Синтаксис команд, работающих с массивами, такой:
Command "[Drive:]Fiie_„name" DATA Dim_name[$]()
где DIM_NAME — имя переменной массива. В отличие от Бейсика, в TR-DOS
не делается различий при хранении числовых и строчных массивов. Разли-
чаются они по имени переменной массива (напомним, что в Бейсике имя
переменной числового массива состоит из одной буквы, а символьного — из
буквы и символа $).
Синтаксис команд, работающих с файлами прямого и последователь-
ного доступа, следующий:
Command "[Drive:]File_name"#
Создание файлов, сохранение данных
Только после того, как на диске была создана файловая структура,
можно непосредственно приступать к работе с файлами. Для создания
файлов в ОС TR-DOS предназначена команда SAVE**, которая позволяет
сохранить на диске текст программы на Бейсике, фрагмент кодов или
значения массива данных.
Бейсик-программы сохраняются на дискетах так же, как и на магнит-
ной ленте, то есть в файле вместе с текстом программы будет сохранено и
содержимое определенных к моменту сохранения переменных. Можно ука-
зать и номер строки автозапуска — с этой строки начнется исполнение
программы при последующем выполнении команд LOAD или RUN. Для этого
вслед за именем файла необходимо указать ключевое слово LINE с парамет-
ром — номером строки автозапуска. Если параметр опущен, предполагается
строка с номером 1. В отличие от файлов, сохраненных на ленте, в TR-DOS
невозможно автоматически передать управление на строку с нулевым номе-
ром.
Создание файла PROGRAM на текущем диске и запись в него беясик-
программы, находящейся в памяти компьютера, производится командой
SAVE "PROGRAM"
Создание файла MyProg на дисководе А, запись в него бейсик-програм-
мы из памяти компьютера, задание строки автозапуска с номером 10
выполняет команда
SAVE "a:MyProg" LINE 10
*) После ключевого слова CODE может стоять параметр SCREENS, который,
как и в Бейсике, указывает на работу с файлом экрана и эквивалентен
значениям Start=l 6384 и Length=6912. Однако из-за ошибки TR-DOS
лучше всегда указывать числовые параметры.
**) Для создания файлов могут также использоваться команды COPY и
OPEN #, но об этом будет сказано чуть позже.
Как и для бейсик-программ, сохранение кодовых фрагментов на
дисках практически не отличается от сохранения на магнитной ленте. В
команде обязательно задание параметров — адреса начала кодового фраг-
мента в памяти компьютера и его длины в байтах.
Создание файла CODE на дисководе В и сохранение в нем кодового
фрагмента с начальным и конечным адресами 30000и31999 включительно
(длина фрагмента в этом случае составит 31999-30000+1 — 2000 байт):
SAVE "b:CODE"CODE 30000,2000
Сохранение массивов также не представляет трудностей.
Создание файла NUMBER и сохранение в нем числового массива,
содержащегося в переменной D:
SAVE "NUMBER" DATA D()
Создание на диске в дисководе С файла с именем CHARS и сохранение
в нем символьного массива из переменной С$:
SAVE "С:CHARS" DATA с$
Переименование файлов
Изменение имени файла может потребоваться по разным причинам,
например, Вы хотите, чтобы при инициализации системы автоматически
запускалась Ваша программа MyProg. Для этого содержащий ее файл необ-
ходимо переименовать в boot. В TR-DOS это делается с помощью команды
NEW, за которой должны следовать через запятую два имени файла. Пер-
вое — новое имя файла, второе — старое. Тип нового файла будет такой же,
как и тип старого. Учтите, что команда NEW может переименовывать только
файлы, расположенные на одном диске.
Заметим, что после переименования файл остается тем же самым и
занимает то же самое место на диске, изменяется только его имя в каталоге.
Переименование файла MyProg в файл boot:
NEW "boot","MyProg"
Переименование файла Code, содержащего кодовый фрагмент, в
файл filecode:
NEW "filecode","Code"CODE
Переименование файла массива данных Data в файл New.Data:
NEW "New_Data","Data" DATA