ПЭВМ Агат » Софт для PC » AgatCommander

AgatCommander

Изначально было желание написать подробную инструкцию по программе, но так как она достаточно интуитивна, ограничимся обзором базовых операций с примерами (будут потихоньку дополнятся).

Экран программы имеет две панели, подобно классическим коммандерам, но предназначен для работы с образами дисков Aгат и FIL-файлами (контейнеры для отдельных АГАТовских файлов).

Программа работает с образами дисков 140 и 840 кб (DSK, NIB, AIM). Понимает только ФС ведущие свою родословную от DOS 3.3. С форматами ProDOS, Nippel ОС, ОС Onix и Спрайт ОС пока не работает.

* * *

Основные клавиши (работают и другие, будут рассмотрены дальше по тексту):

F1 - различные подсказки по клавишам в зависимости от режима работы (просмотр файла, просмотр карты образа и т.д.).

F2 - сохранение в текстовый файл объекта просмотра (бейсик программа, текст, картинка, свойства файла и т.д.). Эта функция не аналогична Экспорту. Export - это отдельные процедуры, каждая для своих форматов. А тут просмотрщику передаётся некоторый текст, в нём кроме знаков только номера цветов. И он может сохранить только то, что ему передано из других слоёв.

F9 - вызов главного меню.

Главное меню:

* * *

Просмотр файла

* Автоопределение формата - в связи с тем что файлы Агат\Apple это просто поток данных без специальных сигнатур, автоопределение формата в некоторых случаях невозможно. Однозначно будут распознаны только файлы типа Т, А и картинки стандартного размера, с остальными могут быть варианты. Поэтому надежней принудительно задать формат.

* Как есть HEX - будет показано содержимое ВСЕХ секторов составляющих файл. Ведь файл только в ОЗУ может читаться с точностью до байта, а на диске хранится кратно сектору. Будут видны лишние (неиспользуемые) байты в конце последнего сектора и смещение будет неправильное (нулевое).
Используется в том случае, если не получилось просмотреть файл другими средствами, либо он повреждён, или указан неверный тип. Например, нашелся какой-то брошенный файл на диске без имени, чтобы узнать что там на самом деле внутри, вот и смотрим его "как есть hex", если угадали что там, и это не мусор, переименовываем (меняя тип) и тогда, может быть, он станет нормально смотрется по F3 (автомат определения формата dos33c2 сперва смотрит тип файла, только после этого проверяет всё остальное. Поэтому если тип файла неправильно задан, то F3 не будет правильно работать).

* B-формат как HEX - покажет содержимое файла так, как оно будет размещено в реальной памяти Агата. В т.ч. можно увидеть файл с видеоозу в формате HEX. При просомтре можно нажать enter для дизассемблирования и сохранить это в текстовый файл по F2.

Например, создаём некий файл: bsave xxx , A$1802,L22

В этом случае "как есть hex" нам будет в просмотрщике показан один сектор (256 байт), со смещения 0. И там буду первыми 4 байта - размер и длина ($02 18 16 00 ) и дальше какое-то содержимое, которое мы сохраняли + ещё куча байт, потому что сохраняли 22 байта, а в секторе 256 байт.

А если "B как hex" - увидим именно 22 байта, причем по смещению $1802, как и указано в файле.

* K-формат как HEX - у файлов типа К размер и длинна сидят в TSList (4 байт в начале у таких нет), а смысл действий тот же что и с В файлом.

* Integer Basic - формат I раннего бейсика у семейства Apple][.

* Basic - формат A всех бейсиков: AppleSoft Basic, Агат-Бейсик, Сириус-Бейсик, Мастер-Бейсик, Bio-Бейсик. Дополнительно показывает таблицы длинных переменных, служебные комментарии. Делает переводы строк после ":", форматированные отступы (чтобы номер строки был отдельной колонкой, в весь текст справа), рядом с номером строки выводится смещение строки в файле (это удобно, когда нужно отличия или испорченные участки искать). При сохранении по F2 все это окажется в текстовом файле, поэтому для получения чистого текста программы лучше пользоваться функцией ЭКСПОРТ.

* Обычный текст - просмотр файлов типа Т, это большинство текстов, программы на Рапире и прочее.

* Текст Apple][ - формат текстовых файлов (тип Т) семейства Apple][ (кодировка отличается от подобной у Агат).

* Д-формат "ТОР" - поздние версии текстового редактора ТОР могли сохранять текст в таком формате.

* B-форматы текстовых редакторов - различных: Агат-Автор, Документ, Word Master, TED, Автограф. Для некоторых вьювер разные шрифты показывает разным цветом.

* B-графика - просмотр картинок в формате видеопамяти Агат и Apple.

* К-графика - тоже но для файлов типа К.

* Д-картинка Alv Graf - просмотр картинок созданных редактором Alv Graf.

* Сжатый и несжатый ZX-picler - картинки в формате программы Picler.

* ФРГ MouseGraf - формат фрагментов редактора MouseGraf (формат РИС этого редактора пока не поддерживается).

При просмотре любых изображений открывается специальное окно.

В нижнем левом углу - текущий режим просмотра. 4 таблички (верхние и нижняя в центре) подсказывают следующий режим при нажатии соответствующей стрелки. В режиме Т32 и Т64 возможна смена знакогенератора клавишами 4,7,8.

* * *

Сравнение объектов

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

* Сравнение двух файлов (побайтно) - программа может сравнивать только два явно указанных файла. Ставим курсор на два файла - справа и слева, потом Shift-F7 (когда курсор уходит с активной панели, чтобы было видно, что выделено, перед именем файла остаётся '+'). В результате сравнения, показываются смещения от 0 в которых есть различия. Адреса для конкретного случая найти не сложно, для B-программы, например, это: адрес = базовый оффсет + смещение - 4 Базовый офсет можно узнать из информации по файлу, в графе "Точка загрузки".

* Сравнение двух файлов (построчно) - используется для сравнения текстовых файлов (тип Т). Выводит только те строки, которые отличаются в файлах т.е. пытается найти отдельные строки и сравнивать их между собой + синхронизация, когда , например, в одном файле одна строка добавлена или удалена - он тоже сможет найти это и показать, что нет именно одной строки а не то, что всё внутри файла съехало.

* Посекторное сравнение двух образов - как это работает на примере игры DROL (диск без файловой системы). В одном окне открываем диск с оригинальной версией игры, в другом cheat-версию игры. При сравнении выдается результат где можно видеть в чем различия обессмерченной и стандартной игры. Например первая строка на изображении: дорожка 6, сектор 0 и смещения в нём, в которых есть различия (0E и 0F).

Таким способом удобно выяснять например в какое место софт делает отгрузки, если это происходит по абсолютным адресам диска.

* Пофайловое сравнение двух сред - ищет лишние или отличающийся по имени/содержимому файлы между панелями. Сравнивать можно и образы и любые папки компьютера, в любых комбинациях. Программа берет первый файл с левой панели и ищет такой же файл в правой панели. Если находит - то смотрит следующий файл в левой панели. Если не находит, то сперва отмечает, что ему нет пары. Потом так же проходится по файлам правой панели.
На скриншоте результат сравнения двух дисков. "Вампир" отличаются по содержимому, "Star Patrol" и "Звездный патруль" отличаются только именем, Pusher существует только на одном диске, а "Игра-35" только на другом.

* * *

Редактирование файла (HEX)

Режим редактирования это простой HEX-редактор.

Белым цветом - смещение первого байта строки;
Зеленым - hex поле: байты в шестнадцатеричной системе счисления;
Желтым - text поле: те же данные в текстовой кодировке.

Используется очень усреднённый знакогенератор Агата, только буквы, спец знаки (запятые, точки...) и цифры. Без псевдографики, стрелок всяких... Только то, что описано в ASCII + русские буквы. Это просто подсказки, бывают полезны, например, имя автозагрузчика надо в ДОСе поправить. Кстати это касается не только редактора HEX, такой же усредненный знакогенератор используется для визуализации бейсик программ и для вывода каталога. Скажем если в имени файла зачем-то поместили символы управления (например при выводе каталога из строчек рисовалась какая-то картинка из псевдографики, в СЧМ семёрочной такое было и в ALV Super DOS), то dos33c2 покажет только вопросики.

Переключение между полями клавиша Tab, дизассемблирование клавиша Enter. Эти и другие клавиши как всегда описаны в подсказке по F1.

* Как HEX без оценки формата - аналогично функции "Просмотр/Как есть HEX" но с возможностью редактирования. Т.е. будет доступно содержимое всех секторов составляющих файл с нулевым смещением.

* Как B - аналогично функции "Просмотр/B-формат как HEX" но с возможностью редактирования. Т.е. будут фигурировать только пользовательские данные файла с правильным смещением (как в памяти Агата).

* Как K - у файлов типа К размер и длинна сидят в TSList (4 байт в начале у таких нет), а смысл действий тот же что и с В файлом.

* * *

Экспорт файла ( АГАТ -> PC)

* Автоопределение формата (Basic как AGAT; Bin без перекодировки) - универсальный экспорт с попыткой определения формата. В скобках указано как будет происходить конвертирование, в т.ч. если одновременно выделить несколько текстовых и несколько бейсиковских файлов. Но как и в случае с просмотром файла, лучше алгоритм конвертации задавать принудительно (функции начиная с третьей строчки данного меню).

* Автоопределение формата (Basic как GW; Bin с перекодировкой) - альтернативное автоопределение. В отличии от предыдущего пункта будет работать немного нестандартно (для бейсика подставит GW-таблицу, для BIN сделает перекодировку.. Были бы другие неоднозначные форматы - там бы тоже что-то отличалось). Это действие вряд ли понадобится в обычных ситуациях.

* Обычный текст - конвертирование текста из любого Агатовских файла типа Т, в обычный текстовик на PC. В результате получиться файл name.txt. Никакой обработки не выполняется, т.е. если это будет документ редактора ТОР, то все спецкоманды (например по выбору шрифтов) так и останутся в тексте. Такой же результат будет если при просмотре текстового документа нажать F2, хоть и будут использованы другие процедуры.

* Текст Apple ][ - то же самое, но для конвертирования текста из файла типа Т семейства Apple][ (кодировка отличается от подобной у Агат).

* Конвертирование текста из различных форматов текстовых редакторов Агата - подобны режиму "обычный текст" но учитывается исходный формат. Например, агат-автор семёрки в B-файлах использует совсем другую кодировку, чем обычный T, Д-формат ТОР - распаковывается, некоторые форматы (автограф, документ) - удаляются спецсимолвы выбора шрифта. В результате работы получаются файлы формата .txt.
Конвертирование в формат RTF пока не поддерживается, там можно было бы обрабатывать спецсимволы, например сохранять атрибуты шрифтов.

* Apple Integer Basic программа - для экспорта программ типа I раннего бейсика у семейства Apple][ в текстовый файл.

* Basic-программа, ключевые слова как в Агат - для точного экспорта программ (тип А любого бейсика: AppleSoft Basic, Агат-Бейсик, Сириус-Бейсик, Мастер-Бейсик, Bio-Бейсик.) в текстовый файл. Затем его можно комфортно редактировать на PC и вернуть обратно. Сама dos33 умеет только раскодировать A в текст, кодировать обратно не умеет. Но это легко и удобно сделать функцией "Ввод из текстового файла" эмулятора AgatEmulator.

В свое время конвертирование A <-> T делали в пределах Агата. Открывали файл на запись и делали LIST (у Мымрина описано). А потом обратно командой EXEC.
Зачем? причины разные, вот одна из интересных:
В Бейсик-Агат добавлена поддержка длинных переменных (у Apple-Basic этого нет). Таблица длинных переменных размещена в коде программы и незаметна пользователю (но Dos33c2 может визуализировать её, см. просмотр файла/basic).
Иногда в таблицу попадали и неиспользуемые переменные, что немного увеличивает размер файла. Например пользователь вместо "CATALOG" ввёл "CATALG", по сути это ошибка, но бейсик находит слово, которого не знает. Он его обрабатывает как имя переменной, потому что после него может быть "=" и корректное выражение (скажем CATALG=3 - это же обычное присвоение с созданием переменой). А то, что "=" нет - ну это ошибка, но имя-то уже обработано. И выкидывать его сложно, так как тогда нужно дополнительно сделать какой-то механизм маркировки этого имени как временного. И в случае успешной обработки (присвоения) нужно снимать маркировку "временное", а в случае ошибки искать это "временное" и удалять. Дополнительные действия, которые, в общем-то, никак особенно не помогут никому. Так, несколько байт сохранят только...
И вот если хотелось чтобы файл был очищен от лишнего, применяли такой метод. Из А в Т попадает только сам текст программы, чистый интерпретатор бейсика получая текст обратно, составлял новую таблицу с актуальными переменными. Очевидно что сейчас это сделать намного проще чем в Агатовские времена. Просто экспортируем файл и возвращаем его через эмулятор как было описано выше.

* Basic-программа, ключевые слова как в GW-Basic - для экспорта программы (тип А любого бейсика) в текстовый файл с заменой ключевых слов (вместо HOME будет CLEAR, VTAB -> LOCATION....) - это нужно, если программу хочется переделать по PCшные диалекты бейсиков.

* Двоичный В-файл, без перекодировки - файл обрезается по указанной в нем длине (без первых 4 байта - это точка загрузки и размер - они не будут входить в экспорт). т.е. в таком виде можно прям какому-то внешнему дизассемблеру подсунуть (только нужно дизассемблеру указать точку загрузки - её можно посмотреть в информации о файле, в dos33), или, например, если в файле образ ПЗУ, то можно программатору какому нибудь подсунуть.

* Двоичный В-файл, с перекодировкой - B-файл воспринимается как Т, только без ограничивающего нуля, т.е. пытается предположить, что там вроде текст. Ну и перекодирует его в PC. Имеется ввиду текст стандартный Агатовский. Бывает, например, в B-файлы записывают нарезанный текст - например 10 файлов, и если их просто конвертнуть на PC а потом склеить, получается полная книжка какая-нибудь, зачем-то так резали, может для передачи по модему.

У файлов типа К размер и длинна сидят в TSList (4 байт в начале у таких нет), а смысл действий тот же что и с В файлом.

* * *

Импорт файла ( PC -> АГАТ)

* Обычный текст - используется для переноса текстовых файлов (например созданных в блокноте) в Агатовский формат. Исходный текстовик должен лежать в папке с программой. Выбираем из меню данную функцию и указываем полное имя ms-dos-файла с текстом (прямо с клавиатуры набираем). Создается Fil-файл с таким же именем в месте где находится курсор (образ диска или любая папка). Файл будет иметь тип T.

Не забываем что АГАТы не имеют буквы Ё (даже на клавиатуре). В девятке она была добавлена только в знакогенератор, но не по стандарту, поэтому желательно избегать этой буквы в текстах.

* Двоичный В-файл, без перекодировки - служит для импорта данных из .bin в В-формат Агата. Например, залить на Агат скомпилированную на PC программу. Или когда не хватает возможностей hex-редактора, встроенного в dos33c2, тогда можно экспортировать бинарь, потом подправить его в чём-то на PC и потом импортировать обратно.
Это нужно, больше, для отладки/разбора/экспериментов с какими-то нетипичными случаями, или когда нет на то специализированного софта. Например, до появления программы
"конвертор графики", так осуществляли перенос сгенерированной на PC монохромной картинки (предварительно её повернув и обрезав заголовок). Т.е. речь идет о данных, которые уже были подготовлены специально для Агата.
Если какая-то сложная операция нужна часто, то проще в самописную прогу добавить работу с FIL-файлами, и уже тогда ничего не экспортировать/импортировать, а прямо копировать FIL <-> DSK. Так, например, работают всякие внешние редакторы уровней для игрушек (Riseout, Manomania, Pusher).

* Двоичный В-файл, с перекодировкой - служит для импорта текста внутрь B-файла. Например после экспортирования аналогичной функцией и внесения изменений. Другие сюжеты использования данной функции не всегда очевидны, но в реальности бывают нужны.

Например, при разработке проги на агате хочется добавить в прогу хелп. Пишем под бейсик-60. В каком формате хранить хелп? Внутри проги неудобно - как вставить текст (просто текст, не отдельные строки) в код на бейсике. В Т-файле - медленно, стандартная механика чтения Т-файла работает побайтово (один запрос к дос - считывается один байт). Файл объёмом хотя бы 4-8 блоков будет читаться со 140ки секунд 10. Остаётся B-файл. Запихиваем туда импортом набранный на PC текст, указываем именно перекодировку. На PC можно сразу отформатировать текст под text 64x32, прямо даже общее выравнивание сделать с переносом слов (в Лексиконе, например). И потом можем из проги его считывать по команде BLOAD - гораздо быстрее - один вызов - считывается полный файл. Потом только пишем какую нибудь достаточно шуструю процедуру вывода текста (либо асм - несложно и быстро) либо прямо на бейсике вывод посимвольный (медленнее, но тоже сойдет). Пример немного надуманный, потому что тот кто додумается до такого, вряд ли вообще будет писать для бейсика-60. А в ИКП можно командой BLOAD читать T-файлы.

У файлов типа К размер и длинна сидят в TSList (4 байт в начале у таких нет), а смысл действий тот же что и с В файлом.

* * *

Основное - разное

* Информация об объекте - о любом, где курсор стоит, про то и будет рассказывать (файл, образ диска, каталог BTK или папка вашего ХДД). Самое полезное - информация о файле:

* HostOS имя: - полное имя предметного файла на вашем ХДД. Т.е. если файл находится в образе диска будет показывать "not_set".

* Тип объекта: - .

* Агат-имя: - .

* Read Only: - .

* Тип: - показывает тип файла, возможно 8 вариантов. Вообще под тип файла отводится 7 бит - 128 комбинаций. Но в Apple/Агат ДОС применяется странная процедура преобразование кода в букву, в результате получается вот такой ограниченный список "T I A B S П К Д" (Аpple версия T I A B S R A B). О мотивах такого упрощения можно только догадываться. Но если какая-то ОС задумает пользоваться собственной процедурой (например для увеличения кол-ва типов) - в любом случае в FIL- хранится именно 7 бит, так что это не потеряется.

* Скрытый: - в alv super dos есть понятие скрытого файла, она их не показывает в каталоге, но разрешает все остальные операции.

* Размер в каталоге: - это просто цифра, что в образе указано внутри каталога для пользователя, больше ни для чего не нужна.
Но различные ОС по разному рассчитывают каталожный размер. Те системы, которые идут от эпловской DOS 3.3, в каталог пишут количество блоков, занятых файлом (т.е. сколько освободится, если его стереть). А "Школьница" - размер файла (т.е. сколько нужно памяти, чтобы его прочитать).
Например, в "Агат-авторе" записали текстовый файл из пары слов, у него будет каталожный размер 2 блока (1 сектор пользовательских данных и 1 сектор служебных (TSL)). Если затем открыть его и записать обратно из школьницы ("ассемблера") - он станет показывать размер в 1 блок. Хотя ничего не изменилось на диске. Разница - учитываются/не учитываются служебные блоки (TSL), по одному блоку на каждые 122 блока пользовательских данных.
Хотя эта цифра может быть в общем-то произвольной, иногда попадаются диски, где размер в каталоге вообще обнулён или что нибудь ещё с ним необычно.
Значение имеет смысл только при просмотре образа, поскольку при просмотре вытащенного из образа fil-файл, оно тупо вычисляется из размера fil-файла.

* Размер данных (блоки): - это фактический размер данных в блоках, именно чистых данных пользователя, без учета служебного(ых) TSL.

* Размер данных (байты): - это просто размер пользователя * 256, на агате же блоками считают, но для удобства тут ещё вывод в байтах сделан.

* Данные в t/s списке: - выводит зарезервированные байты (03 - 0B) из первого TSL (Track/Sector List), они почти всегда нули, но некоторые программы их используют по своему. Школьница там размер файлов иногда хранит, для К-файлов точка загрузки, ещё mousegraf использует их как размер ФРГ-файлов в пикселях. Немного о особенностях TSL у различных ДОС.

Track/Sector List - служебный сектор в котором находится список секторов составляющих файл. TSL принадлежит конкретному файлу и на карте диска располагается прямо около него. При копировании файла с диска на диск этот список создается заново на диске-копии, в соответствии с картой свободного пространства диска. Если файл большой, таких служебных сектором может быть несколько (на 122 сектора данных - один TSL). В первом (или единственном, если он один) TSL находятся эти резервные байты. При просмотре сектора они по смещению 0003-000B включительно. Некоторые копировщики (ИКП) и программа dos33c2 переносят резервные байты при копировании файла. Кроме того, они специально хранятся внутри fil (храняться только 03-0B), и если fil будет залит обратно на образ, то эти данные будут залиты в первый TSL. Иначе К-файлы точно рассыпятся, а может и какие-то другие, П например, ну и ФРГ тоже.

* Расположение: - .

* Первый t/s список: - адрес на диске, где находится первый TSL список (у FIL лежащего в папке на вашем ХДД этого пункта не будет разумеется). Например 29/6 - это шестой сектор на 29-й дорожке.

* Предполагаемый формат: - это как программа сработает по файлу автоопределением.

* Точка загрузки и Длинна кода: - это то, что хранится у B-файла теле а у К-файла в TSL списке.

* Режим: - только для файлов в формате видеопамяти. Показывает предполагаемый (например отличить файл для режима Т32 от файла для режима Т64 программно невозможно) формат изображения. Этот режим будет первым при входе в просмотрищик картинок.

* Скопировать файл - копирование выделенного файла в соседнюю панель. Копирование возможно как между образами дисков, так и между образом и любой директорией вашего компьютера. Последнее может пригодится для вытаскивания файла из образа в внешний мир, например для обработки в других программах (конвертор графики и т.д) и последующего его возвращение в образ. Иногда при копировании файла меняется (на 1 блок) число обозначающее его размер - это нормально, всё зависит от того, под какой ОС их записывали или копировали последний раз. См. раздел "Информация об объекте/Размер в каталоге".

Копирования между образом и FIL происходит посекторно, без какого либо анализа. Переносятся все сектора составляющие файл. Это и проще и если тип файла был неправильный, то может оказаться, что при обрезке с точностью до байта что нибудь потеряется. Тем более, с точностью до байта нельзя узнать, если какая-то прога на агате будет использовать свой собственный формат. Поэтому у всех FIL в коллекции размер точно соответствует 40+256*n - где n - любое целое число. В свою очередь, если FIL создан сторонней программой или получен импортом, то в момент его копирования на образ последний сектор будет добит нулями или случайным мусором.

* Переместить файл - тоже самое но с удалением оригинала.

* Переименовать объект - любой: папка вашего ХДД, образ диска, директория BTK, Агатовский файл. При переименовании файла возможна замена его типа, варианты: "T I A B S П К Д" (см. раздел "Информация об объекте/Тип").

* Убрать/Изменить/Поставить защиту - это аналог LOCK/UNLOCK Агатовских ОС. Просто запрещает/разрешает менять и стирать файл, устанавливая/снимая звездочку напротив него. Но сама по себе dos33c2 её игнорирует, только показывает и позволяет изменять.

* Создать каталог - подкаталог Best Tool Kit.

* Удалить объект - относиться к файлу, образу диска, подкаталогу BTK (перед этим он пустым должен быть).

* Попытыться восстановить файл - суть в том, что содержимое файла при удалении на самом деле остается на диске, просто место его расположения отмечается как свободное для новых записей. И если туда еще не успело ничего попасть, файл можно восстановить. Удаленные файлы выделены в каталоге красным цветом.

* * *

Образ

* Очистить неиспользуемые области образа - убираем информацию о удаленных файлах. Если перед этим были удалены ВСЕ файлы, то на диске остается только ДОС на первых секторах.
Следует учитывать что сам по себе чистый образ не означает, что файлы в него будут записываться именно с 1 или 17-го или какого- то ещё трека. За это отвечает трек выделения (с какого места начинать записывать и в каком направлении). Трек выделения хранится в секторе 17/0 по смещению $30, направление - по смещению $31. При дальнейшем наполнении диска, ДОС сама будет корректировать это значение.

Если потребовалось удалить файл где-то в середине каталога, а потом произвести очистку, то на месте этого файла будет запись типа Т с кучей знаков вопроса. А если такое действие производится в конце каталога - ничего не останется.

Так и должно быть, ведь программа показывает больше подробностей о каталоге файлов чем обычные команды на реальном Агате. Раз уж образ вычищаем, значит восстановить файлы уже нельзя. Таким образом нет смысла сохранять имена прочие заметки в каталоге, связанные с удалёнными файлами. Запись забивается байтами FF,00,00...00. Первая FF - признак свободной записи (может быть использована при создании нового файла), остальное нули. Они и видны как Т-тип, нулевая длина и группа вопросиков. А последняя запись забивается всеми нулями, поэтому её нет даже среди удалённых. в середине каталога так нельзя сделать, так как иначе каталог вообще дальше читаться не будет.

* Расширить каталог - Расширить каталог - появляющееся меню предлагает несколько значений: 7 имен файлов (1 сектор); 14(2); 21(3); 28(4); 56(8); 112(16); 224(32); 448(64). Если нужны другие значения, например 35(5), можно сделать это в два прихода: 28+7, т.е. каталог может расширяться кратно сектору.

Зачем?
1) Не все Агатовские ОС умеют расширять каталог при записи файлов. И если место на диске для файлов есть, но каталог забит именами полностью - Агат откажется записывать новые файлы.
2) Если создавался аккуратный образ с помощью функции "Создать образ диска", и требуется выделить точное кол-во секторов под каталог имён.
3) Если использовать авторасширение*, то оно чередуется с созданием файлов, т.е. например: один сектор каталога есть, записываем 7й файл, он и предыдущие файлы занял в т.ч. дорожку каталога целиком. В этом случае перед записью 8-го файла будет создан новый сектор каталога. Но создан на свободном месте, возможно где-то далеко от 17й дорожки. Потом записали ешё 7 - следующий сектор будет опять где-то вдали. В этом случае при выводе каталога головка флопика будет ёрзать по всему диску, собирая части каталога. Но если заранее известно, что на диске будет много файлов, то можно расширить каталог до записи файлов, в этом случае его части по любому соберутся где-то в одном месте. Ну хотя бы бОльшая часть секторов каталога будет рядом, причем на одной дорожке. Потом уже наполняем диск файлами. В результате команда catalog будет выполняться быстрее. Ну и поиск файла, который указан где-то в конце каталога, тоже будет находится/читаться быстрее.

*В общем-то логика выделения свободного пространства разная в разных ОС, но d33 придерживается методики Школьницы: выделяется первый свободный сектор в текущем треке выделения (его номер хранится во VTOC), если этот трек полностью занят, то выполняется поиск в следующем треке. При этом будет ли следующий выше по номеру или ниже, записано во VTOC (называется "направление выделения"). Это позволяет постепенно заполнять все треки.
У dos33 и BTK используются другие алгоритмы. dos33 ищет сперва первый свободный 15-й сектор во всех треках, и выделяет его. Если его нет, тогда ищутся другие свободные сектора. В этом случае небольшие файлы оказываются каждый на своей дорожке, что даёт бОльшую скорость чтения отдельного файла.
у BTK логика выделения как у Школьницы, за исключением того, что она не читает трек и направление выделения из VTOC, а сразу предполагает их равными единице, т.е. она просто ищет от начала диска первый свободный сектор. В общем-то, похоже на школьницу, за исключением того, что алгоритм получается более медлительный в случае существенно заполненного диска. ИКП копировщик, скорее всего, придерживается логики BTK, но может быть и Школьницы....

* Изменить имя тома - назначить/сменить имя диску. Кстати, можно задавать цвет в именах томов так же как и в именах файлов, но выводить это будут только ДОС основанные на Школьнице и на BTK (в бейсике это не заработает) - у них есть символы управления цветом. Код цифры боковой клавиатуры = номер цвета, и возможность переключения инверсии/мерцания/нормального конечно.

* Создать образ диска - 840 или 140 кб, dsk или nib. Создание чистого диска без всего, с целью максимума свободного места. Даже каталог создается только в 1 сектор (т.е. для 7 файлов), который конечно потом может быть расширен при копировании файлов (автоматически), или принудительно функцией "Расширить каталог".

Все форматеры агата создают каталог размером во всю 17-ю дорожку (из которой даже на очень забитых дисках редко когда используется хотя бы половина пространства). Для 840кб диска это: 20 секторов * 7 имён = 140 имён (20 а не 21 так как 17/0 - занят VTOC).

* Карта образа - Визуализатор структуры файловой системы. При входе может появиться надпись "не найден ограничитель имени тома", можно не обращать на это внимание. Виталий Цикоза писал, что метка тома, заканчивающаяся на 8d 00, обязательна. Но реально её часто не бывает, в т.ч. init её не пишет.

По клавише пробел переключаются режимы просмотра карты образа. Они, в целом, реализовывались просто потому что не хватило фантазии - как в одной карте отобразить все особенности секторов одновременно. Пришлось сделать переключалку. Вообще тут нет явно заложенного сюжета использования. Иногда можно по этой инфе восстановить что-то на диске или создать. Иногда просто интересно посмотреть общий "износ" файловой системы или какие нибудь заморочки. Основная задача была - вывести всю инфу, которую можно вытянуть из файловой системы и , заодно, сделать некую экспертную оценку, которая бы строилась на сопоставлении вытянутой информации. Это что-то вроде chkdsk , но как бы без исправления, но наглядно.
Для каждого режима есть своя ЛЕГЕНДА КАРТЫ, доступная по клавише "l".

* Режим просмотра ссылок из других секторов на заданный - вся информация об указателях с одних структур на другие. VTOC указывает на начало каталога, элементы каталога - на ТСЛ и на своё продолжение, ТСЛ - на продолжение себя и на сектора данных. В это режиме видны ошибки, например, двойная ссылка на сектор. Это опасно тем, что , например, если удалить файл , то его сектора становятся свободными и если на какой-то сектор была двойная ссылка , то получится что оставшаяся ссылка теперь указывает на свободный сектор. Ну и вообще - не должно быть двойных ссылок. Если есть - это сразу говорит об ошибке в ФС.

* Режим просмотра расширений и содержания заданного сектора - это вся информация о том, что содержит в себе сектор и попытка вычислить возможные ошибки. Например, ТСЛ ссылается на сектор за пределами диска (например, на 250ю дорожку). Обычно так бывает, если как раз какой-то сектор имел двойную ссылку, одну ссылку удалили, сектор свободен, при следующей записи туда заливается что-то другое , но с точки зрения оставшейся ссылки - полный мусор.

* Режим восстановления диска поиском T/S списков - тут самое ценное - dos33c2 оценивает содержимое сектора с точки зрения ссылок и с точки зрения логики: если одно с другим не совпадает - то она отмечает такой сектор. Также здесь указываются свободные сектора, но которые могли быть ТСЛ-списками. Так можно искать удалённые / брошенные файлы.

* Редактирование сектора - это точно такой же HEX-редактор как при редактировании файла (см. соотв раздел), только в качестве объекта - сектор.

* Объявить сектор(а) занятыми - на эти сектора Агатовская ОС не будет производить записи файлов. Именно таким образом, например, отмечены секторы на которых размещены ИКП ДОС и Бейсик. Входим в карту диска (F12), ставим курсор на нужный сектор и нажимаем букву 'u' - этот сектор будет с пометкой "занято".

Реальный случай при составлении сборника игр для сайта: игра "ГНОМИК" пишет таблицу рекордов на сектор 34/0 не проверяя есть ли там что или нет. После, на этот сектор попала другая игра (ROCKER), которая испортила таблицу рекордов, затем при очередной записи рекордов ГНОМИКа - запортился ROCKER. Т.е. если бы после записи ГНОМИКа отметить сектор 34/0 как "занятый" - все было бы в порядке.

Пример когда программист заранее позаботился об этом - Lode Runner. Код самой игры содержится в обычном файле, а уровни расположены по абсолютным адресам диска. Весь участок уровней объявлен занятым. Т.е. если на диск записывать еще файлы - уровни останутся не тронутыми.

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

Но если просто объявить треки занятыми и не создавать никакого файла - нет проблем, игрушке это без разницы. Но чтобы очистить такой диск, его уже придётся форматировать.

* * *

Автор раздела: Garnizon