...Directory System for TR-DOS..: ...................(c)CityAceE..: ...................Документация на систему..................... Этот документ предназначен для программистов, желающих поддержать систему каталогов для TR-DOS в своих программах. ......................Возможности системы....................... Directory System (DS) представляет из себя надстройку над популярной системой TR-DOS, и снимает ограничение на отсутствие в TR-DOS каталогов. DS позволяет хранить на стандартном диске системы TR-DOS до 128 файлов и одновременно до 128 каталогов, включая корневой каталог. Каталоги могут иметь любую степень вложенности, а так же любое содержимое. В одной директории может располагаться до 127 каталогов и до 128 файлов. DS находится в свободных секторах нулевой дорожки и не использует для своих целей другого дискового пространства. .........................Совместимость.......................... DS полностью совместима с большинством программного обеспечения и самой системой TR-DOS. Это значит, что любая программа, не поддерживающая DS увидит все файлы, находящиеся на диске, в том числе и находящиеся в каталогах, сами же каталоги видны не будут. Это же касается стандартных команд TR-DOS LIST и CAT. Можно копировать, стирать и переименовывать файлы на диске с DS любыми коммандерами, а также стандартными командами TR-DOS COPY, ERASE и NEW. В этом случае при переименовании файла, его расположение в каталоге не изменится, а при создании или копировании файла, новый файл будет помещен в корневой каталог. ..........................Ограничения........................... Ограничения использования другого программного обеспечения совместно с DS связано прежде всего с использованием свободных секторов нулевой дорожки. Поэтому конфликты могут возникнуть лишь с теми программами, которые используют эти сектора. Хотя, например, теневой сервис-монитор компьютера Scorpion может хранить свои настройки на дискете с DS без конфликта с системой до тех пор, пока количество каталогов не будет превышать 115. Запись программ на диск с DS при помощи кнопки MAGIC уничтожит систему, тем не менее, часть информации можно будет восстановить. Еще одно ограничение на систему накладывают стандартная команда TR-DOS MOVE и уплотнение диска обычными коммандерами. В этом случае будет нарушена сортировка файлов по каталогам. Для уплотнения диска необходимо пользоваться программами, поддерживающими DS и учитывающими ее особенности. .............Возможности по восстановлению системы.............. При повреждении системы, но не полном ее уничтожении (должен быть не тронутым как минимум 10 сектор нулевой дорожки), система частично может быть восстановлена. А именно, сохранится сортировка всех файлов по каталогам, а также сортировка первых 117 каталогов. ...................Детальное описание системы................... Система начинается в начале 10-го сектора сразу же за системным сектором (сдвиг указан относительно начала 10 сектора нулевой дорожки): Дескриптор системы. 11 байт: + [#00]...+ [#01] CRC системы, обсчитываются байты с +[#02] до +[N*#0B+#10B] включительно, где N - порядковый номер последнего заданного каталога; + [#02]...+ [#07] сигнатура "DirSys" - идентификатор системы; + [#08] сигнатура "1" - целая часть номера версии системы; + [#09]...+ [#0А] сигнатура "00" - дробная часть номера версии системы; Текущая версия системы 1.00 Таблица размещения файлов и каталогов. 256 байт: + [#0B] порядковый номер каталога, к которому принадлежит 0-ой файл; + [#0С] порядковый номер каталога, к которому принадлежит 1-ый файл; ... + [#89] порядковый номер каталога, к которому принадлежит 126-ой файл; + [#8A] порядковый номер каталога, к которому принадлежит 127-ой файл; + [#8B] порядковый номер каталога, к которому принадлежит 1-ый каталог; + [#8C] порядковый номер каталога, к которому принадлежит 2-ой каталог; ... + [#108] порядковый номер каталога, к которому принадлежит 126-ой каталог; + [#109] порядковый номер каталога, к которому принадлежит 127-ой каталог; + [#10А] #00 - байт зарезервирован; Список имен каталогов. Размер варьирует: + [#10B]...+ [#115] 11 символов - имя 1-го каталога; + [#116]...+ [#120] 11 символов - имя 2-го каталога; ... + [N*#0B+#100]...+ [N*#0B+#10A] 11 символов - имя последнего, заданного каталога с порядковым номером N; + [N*#0B+#10B] #00 - конец системы. Размер списка имен каталогов зависит от количества заданных каталогов. Минимальный размер - 1 байт, при отсутствии каталогов на диске (единственный нулевой байт указывает на конец системы). Максимальный размер - 1398 байт, при 127 заданных каталогах плюс один нулевой байт указатель конца системы. Порядковые номера каталогов и файлов нигде явно не заданы, а определяются простым счетом по порядку: файлы от 0-го до 127-го, каталоги от 1-го до 127-го. Корневой каталог имеет порядковый номер 0. Система инициализируется путем записи в 10 и 11 сектора нулевой дорожки (сразу после системного сектора) последовательности байт: #19, #D0, DirSys100, 257 байт нулей Имена каталогов должны содержать символы с кодами ASCII от #20 до #7F (в соответствующем plag-in'е by HalfElf для FAR Manager'a на PC, в именах каталогов разрешено использование русских символов в DOS-кодировке, это было согласовано с автором DirSys). Если первый символ имени каталога равен коду #01, такой каталог считается удаленным. Незначащие символы имени каталога заполняются кодом ASCII #20 (пробел). Например, имя каталога "My Dir", будет задана в списке имен каталогов как последовательность байт: #4D #79 #20 #44 #69 #72 #20 #20 #20 #20 #20. При уплотнении диска для освобождения диска от удаленных файлов и каталогов необходимо провести уплотнение файлов как обычно, затем произвести уплотнение списка имен каталогов, затем провести пересчет и соответствующую коррекцию таблицы расположения файлов и каталогов. В своем минимуме DS занимает два сектора и при этом может хранить полную информацию о 22 каталогах. Дальнейшее увеличение количества каталогов вызовет увеличение числа секторов, занимаемых системой. Наличие системы на диске определяется по наличию в 10 секторе нулевой дорожки сигнатуры "DirSys" со сдвигом он начала сектора +02. Целостность системы проверяется по совпадению рассчитанной CRC с записанной CRC в самом начале 10 сектора. После каждого изменения, затрагивающего DS (перемещение файла или каталога в другой каталог, создание нового каталога, переименование или удаление каталога, уплотнение системы) необходимо скорректировать и записать CRC. CRC рассчитывается начиная от 2 байта начала системы и до последнего символа последнего заданного каталога включительно. Нулевой байт идентификатор конца системы при подсчете CRC не учитывается. CRC подсчитывается следующей программой: ;Входные параметры: ;HL -начальный адрес блока ;DE -конечный адрес блока ;Выходные данные: ;BC -контрольная сумма блока CRC PUSH HL INC DE LD BC,#0000 CRC1 PUSH DE LD A,C XOR (HL) LD E,A PUSH BC PUSH HL LD BC,#0000 LD D,#08 CRC2 PUSH BC LD A,C RRA LD A,B RRA LD B,A LD A,C RRA LD C,A POP HL LD A,E XOR L AND 1 JR Z,CRC3 LD A,B XOR #A0 LD B,A LD A,C XOR #01 LD C,A CRC3 LD A,E RRCA AND #7F LD E,A DEC D JR NZ,CRC2 POP HL POP DE LD A,D XOR C LD C,A LD A,E XOR B LD B,A INC HL POP DE LD A,H CP D JR NZ,CRC1 LD A,L CP E JR NZ,CRC1 DEC DE POP HL RET .......................Координаты автора........................ По всем вопросам, возникшим по описанной системе, обращайтесь по следующим координатам: 690078 г. Владивосток ул. Союзная 17-35 Юдину Станиславу Анатольевичу Тел. (4232) 42-99-35 разница с Москвой + 7 часов e-mail: speccy@softhome.net FidoNet: 2:5045/78.4 ZXNet: 500:4232/1.1 ................................................................ (С) 2000 Станислав Юдин (С) 2000 Дмитрий Пьянков (С) 2000 SIMM ...end...