Удаление файлов
По мере работы с программами и данными файлы устаревают, в
некоторых из них отпадает надобность. Такие файлы необходимо удалить,
уничтожить, «стереть». Для удаления файлов в TR-DOS предназначена
команда ERASE.
Удалить файл boot:
ERASE "boot"
Удалить файл массива данных MyData:
ERASE "MyData" DATA
Заметим, что физического уничтожения файлов в большинстве слу-
чаев не происходит. Команда ERASE удаляет только имя файла (точнее,
изменяет первую букву) из каталога. Поэтому удаленные файлы можно
попробовать восстановить, для чего можно воспользоваться служебной про-
граммой DISK DOCTOR (см. раздел «Сервисные программы»). Физическое
уничтожение удаленных командой ERASE файлов произойдет после выпол-
нения команды MOVE (см, раздел «Сборка мусора»).
Копирование файлов
Команды копирования являются наиболее часто используемыми ко-
мандами ОС. В основном они служат для создания архивных копий на случай
порчи рабочих вариантов программ. В TR-DOS для копирования файлов
служит команда COPY. Непосредственно за командой могут следовать ключе-
вые символы s или Ь, используемые в системах, имеющих только один
дисковод.
Синтаксис команды COPY без ключевых символов аналогичен синтак-
сису команды NEW. Разница заключается в том, что новое имя файла (первое
в командной строке) может отсутствовать, тогда файл скопируется со сгарым
именем. Другое отличие — возможность задания разных имен дисководов
для нового и старого файлов. Как всегда, если имя дисковода не указано, то
предполагается текущий диск. Ну, и наконец, главное отличие от команды
NEW заключается в том, что команда COPY физически создает новый файл.
Копирование файла OlcLProg, содержащего бейсик-программу, б файл
New„Prog на том же диске:
COPY "New_Prog","OlcLProg"
Копирование файла OlcLCode, находящегося на диске в дисководе В и
содержащего кодовый фрагмент, в файл New_Code на диск в текущем
дисководе:
COPY "New_Prog","b:OfcLProg"CODE
Копирование файла массива данных DataBase с диска в дисководе С
на диск в дисководе А под тем же именем:
COPY "а:", "с: DataBase" DATA
В предыдущих примерах: при копировании программ на другие диски
использовались разные дисководы, однако как быть, если у Вас всего один
дисковод? Для этого нужно воспользоваться командой COPY с ключевым
символом s. Вслед за ключевым символом указывается только одно имя (и,
если необходимо, тип) файла, который и будет скопирован.
По ходу выполнения команды компьютер попросит один (а может быть
несколько) раз сменить дискеты в дисководе. На запрос
Insert Sourse disk then press Y
необходимо вставить исходную дискету, то есть ту, с которой осуществляется
копирование, а затем нажать клавишу Y. На следующий (или очередной)
запрос системы
Insert Destination disk then press Y
необходимо вставить в дисковод выходную дискету, то есть ту, на которую
осуществляется копирование и вновь нажать Y.
Очень важно не перепутать исходную и выходную дискеты, в против-
ном случае информация, содержащаяся на них, может быть безвозвратно
утеряна.
Команду COPY с ключевым символом s можно в принципе использо-
вать и при большем числе дисководов. В этом случае копирование будет
происходить либо на текущем дисководе, либо на дисководе, явно указанном
в команде.
Копирование файла Prog, содержащего бейсик-нрограмму, в файл с
тем же именем на том же дисководе (но, конечно, на другой диск):
COPY s"Prog"
Копирование файла Code, находящегося на диске в дисководе D и
содержащего кодовый фрагмент, в файл с тем же именем на тот же дисковод:
COPY s"d: Code"CODE
Для дублирования целых дискет можно воспользоваться командой
COPY с ключевым символом Ь, Команда не имеет аргументов. Действие
команды заключается в переносе всех файлов с исходной на выходную
дискету. В процессе ее выполнения выдаются те же запросы и сообщения,
что и для команды COPY s.
Загрузка данных и выполнение программ
Цель всех внешних запоминающих устройств заключается в том,
чтобы однажды сохраненные данные можно было впоследствии использо-
вать, загрузив их в память компьютера. Операционная система должна
обеспечивать как те, так и другие операции. Способы сохранения данных
мы уже рассмотрели, а для загрузки информации в память компьютера в
системе TR-DOS предусмотрены команды LOAD, RUN и MERGE*. Здесь же мы
рассмотрим и еще одну команду — VERIFY, предназначенную для проверки
данных.
Загрузку бейсик-программ, так же, как и при работе с магнитофоном,
можно осуществить командой LOAD. При этом, если при сохранении про-
граммы был задан номер строки автозапуска (аргумент после ключевого
слова LINE в команде SAVE), то сразу же после загрузки программа начнет
выполняться. Отличие команды RUN от LOAD заключается в том, что выпол-
нение программы в любом случае начнется сразу же после загрузки ее в
память, и если не указан номер строки автозапуска — с начала.
Если команды LOAD и RUN выполнены без аргумента, то TR-DOS
попытается загрузить в память (а в случае RUN — и выполнить) программу
с именем boot.
Выполнение обеих команд уничтожит программу, которая до этого
находилась в памяти компьютера. Этого не происходит при выполнении
команды MERGE, которая позволяет подгрузить одну программу к другой.
Строки новой программы, номера которых совпадают с номерами строк
старой, заменят их. Кроме этого команда MERGE «не понимает» автозапуска.
Следует заметить, что не всякая программа может быть загружена.
Сообщение Out of memory (или Out of RAM при загрузке из TR-DOS) указыва-
ет на недостаток памяти для загрузки. В этом случае следует увеличить
рабочий объем памяти командой Бейсика CLEAR.
Загрузка бейсик-программы из файла My „Prog:
LOAD "My_Prog"
*) Команда GO TO, также предназначенная для загрузки данных в память,
будет рассмотрена в разделе « Волшебная кнопка MAGIC».
Загрузка и выполнение программы из файла с именем boot:
RUN
Слияние программы из файла concat с диска В с программой, находя-
щейся в памяти:
MERGE "b:concat"
Загрузка кодового фрагмента из файла в память выполняется коман-
дой LOAD. Файл загружается по тому же самому адресу, с которого он был
сохранен, однако, указав параметры, это можно изменить. Первый параметр
(Start) задает адрес загрузки кодового фрагмента, второй (Length) — количе-
ство считываемых байт.
Командой RUN можно не только загрузить, но и выполнить кодовый
фрагмент — после загрузки фрагмента в память управление будет передано
на его первую ячейку. Заметим, что TR-DOS передает управление не вполне
корректно, в частности адрес запуска не дублируется в регистровой паре
микропроцессора ВС. Из-за этого неправильно работают программы с «ав-
тонастройкой», например, такие как GENS4 и MONS4.
Загрузка фрагмента кодов из файла Сак на то же место, из которого
он был записан:
LOAD "Calc"CODE
Загрузка кодов программы копировщика из файла copier я экранную
область и передача управления на адрес загрузки (16384):
RUN "copier"CODE 16384,6912
Для загрузки массива из файла вслед за ключевым словом DATA
необходимо указать имя массива. Массив возвращается с теми же величи-
нами размерностей и значений, с которыми был записан.
Загрузка числового массива из файла numeric в переменную с име-
нем 2:
LOAD "numeric" DATA Z()
Загрузка символьного массива из файла Money на дисководе В в
переменную с именем D:
LOAD "b: Money" DATA D()
В некоторых случаях может возникнуть вопрос, а правильно ли
записалась информация на дискету или происходили ли изменения в памяти
с момента сохранения фрагмента кодов? Ответ на эти вопросы может дать
команда VERIFY. Она позволяет сравнить содержимое файла с содержимым
памяти компьютера. При найденных различиях команда завершится с сооб-
щением об ошибке, если же все сходится, то ошибки не будет.
Сравнение файла PROGRAM, содержащем бейсик-программу, с про-
граммой в памяти:
VERIFY "PROGRAM"
Сравнение 324 начальных байт из файла с именем Holey, находящем-
ся на дискете, расположенной в дисководе В, с фрагментом памяти, начиная
с адреса 50000:
VERIFY "b: Holey "CODE 50000,324
Сравнение содержимого числового массива G и массива из файла
darn;
VERIFY "darn" DATA G()
«Сборка мусора»
Описывая команду ERASE, мы упоминали о том, что в большинстве
случаев при удалении файла с дискеты физически он не уничтожается.
Следовательно, такой файл по-прежнему продолжает занимать место на
диске, и если удаленных файлов много, то много и «потерянного» неисполь-
зуемого дискового пространства. В конечном итоге вся дискета может ока-
заться неиспользуемой.
Происходит это из-за того, что TR-DOS записывает создаваемые фай-
лы на свободное место диска один за другим непосредственно за последним
существующим файлом. Удаление не меняет расположения файлов, таким
образом запись будет продолжаться за последним существующим файлом, и
свободного места на дискете не прибавится (если только удаленный файл не
был последним).
Конечно, если файлы, расположенные за удаленными, переместить
на место последних, то дисковое пространство, занимаемое «стертыми»
файлами, окажется свободным. Такое перемещение и делает команда TR-
DOS MOVE. Эту операцию называют иногда «сборкой мусора», или упаков-
кой дискового пространства.
Команда MOVE без аргумента упаковывает информацию на текущем
дисководе, однако можно указать другой дисковод — как всегда в кавычках:
MOVE "b:" — «сборка мусора» на дисководе В.
Выполняется команда MOVE довольно-таки медленно, особенно если
на диске много удаленных файлов. Существенное влияние на скорость
работы оказывает количество свободной памяти — чем больше памяти, тем
меньше операций копирования (а именно так перемещаются файлы) нужно
будет выполнить, и тем быстрее команда MOVE закончит свое выполнение.
Таким образом, перед выполнением этой команды желательно очистить
память компьютера от программ и установить максимальный размер свобод-
ной памяти, выполнив из Бейсика оператор CLEAR 65535. Минимальный
размер свободной памяти, при котором TR-DOS может упаковать дискету
примерно 4К.*
Очень часто, особенно у начинающих пользователей, выполнение
команды MOVE приводит к порче дискет. Для того, чтобы этого не происхо-
дило, мы дадим несколько рекомендаций.
1. Не останавливайте выполнение команды MOVE клавишей Break, дайте
ей закончиться.
2. Выделяйте как можно болыпе памяти при упаковке дискеты, это
сократит время операции, а также количество обращений к диску.
3. Как можно чаще сохраняйте программы на «архивных» дисках.
4. Используйте отъюстированные дисководы и хорошие дискеты, не
экономьте — восстановление подчас может обойтись гораздо дороже.
*) Мало кто знает, что оператор Бейсика PRINT 65536-USR 7962 выдает объем
свободной памяти в байтах.
Останов по клавише Break (п.1), а также ошибки чтения/записи (п.4)
при выполнении команды MOVE могут привести к разрушению информации
в каталоге, восстановить которую — чрезвычайно трудоемкое занятие.
ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ КОДОВЫХ ФАЙЛОВ
Помимо «обычных» методов работы с файлами с помощью таких
комапд, как SAVE, LOAD TR-DOS предоставляет и другие возможности. При
описании команды LOAD было показано, что можно работать с частью файла,
содержащего фрагмент кодов, правда с существенными ограничениями —
только с начала файла и только для чтения.
Используя команды РЕЕК и РОКЕ, можно осуществлять доступ к любой
части кодового файла как для записи в него новой информации (РОКЕ), так
и для чтения старой (РЕЕК). Доступ происходит по сектор но, то есть по
256-байтным записям.
Каждый файл в системе TR-DOS состоит из последовательно распо-
ложенных секторов. Размер сектора 256 байт. Если длина файла не кратна
256, то последний сектор в файле заполнен не до конца. Таким образом,
можно рассчитать местоположение любого байта в файле: целая часть от
деления адреса байта на 256 укажет номер требуемого сектора*, а остаток —
смещение в нем.
Команды имеют одинаковый формат:
Command "[Drive:]Fi!e_name"Address_buff,Sector
где [Drive:]Fiie_name — спецификация файла; Address_buff — адрес начала
256-байтной области памяти, с которой производится обмен данными;
Sector — номер сектора в файле.
Рассмотрим пример, в котором изменим 344 байта в файле экрана
"cobalt". Создадим файл командой TR-DOS
SAVE "cobalf'CODE 16384,6912
Для начала вычислим местоположение байта в файле.
LET int=INT(344/256)
LET mod=344—(int*256): REM mod=88
LET int=int+1: PRINT mod.int: REM int=2
88 2
Считаем сектор файла в память. В качестве буфера используем 256
байт с адреса 50000.
PEEK "cobalf'CODE 50000,2
Используя команды Бейсика РЕЕК и РОКЕ (не путайте с командами ОС
TR-DOS), посмотрим и изменим содержимое 88-го байта в секторе (точнее,
не в самом секторе, а в его копии в памяти).
PRINT РЕЕК (50000+88): РОКЕ 50000+88,255
Запишем измененную копию сектора на диск.
POKE "cobalt"CODE 50000,2
*) Необходимо увеличить это число на единицу, так как нумерация секторов
начинается с 1.
И наконец, загрузим файл экрана в память:
LOAD "cobalt"CODE 16384
Команды ОС TR-DOS РЕЕК и РОКЕ несколько расширяют возможности
системы, однако не являются универсальным средством. К сожалению, с
помощью этих команд нельзя работать с файлами, отличными от кодовых, а
также с областью каталога дискеты.