┬I.2.3. Справочник дискеты ... старейшим из дошедших до нас каталогов признается список литературных произведений на шумерской глиняной плитке, относящийся к 2ООО г. до н.э. Михайлов А.Н.,Черный А.Ч.,Гиляревский Р.С. ┼Справочник─ (каталог, директория, оглавление) дискеты содержит список всех файлов, находящихся на дискете. Элементы справочника содержат всю необходимую информацию о файле, за исключением информации о размещении файла (которая хранится в Таблице Размещения Файлов). ┼Справочник располагается \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ ═) в секторах 07h ╤ 0Dh, если диск ┌двухсторонний,─ ┴ ┴ ║) в секторах 05h ╤ 0Bh, если диск ┌односторонний.─ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- или более подробно для ┌односторонней─ дискеты: \/T0/1 ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴5 сектор┴6 сектор┴7 сектор┴8 сектор┴9 сектор┴A сектор┴B сектор┴ ┌┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Справочник ("Directory") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ \/T1/1- и для ┌двухсторонней─ дискеты: \/T0/1 ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴7 сектор┴8 сектор┴9 сектор┴A сектор┴B сектор┴C сектор┴D сектор┴ ┌┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Справочник ("Directory") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ \/T1/1- Каждый элемент Справочника имеет длину 32 байта. Следовательно, в 512-байтном секторе помещается ровно 16 элементов Справочника. На дис╨ кете выделено 7 секторов для Справочника, что позволяет хранить 112 элементов (7╧512/32 = 112). ┼Каждый элемент Справочника состоит из восьми полей следующего назна╨ ┼чения: \/T0/1 ┼Первое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 0-й байт┴ ▄▄▄▄▄▄▄▄▄▄ ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 1-й байт┴ ▄▄▄▄▄▄▄▄▄▄ ┴ ┴ Имя файла (8 символов) └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ ░┬┬ (если некоторый символ отсутствует,то он ... ┴ ... ┴ ┴ заменяется кодом 20h) └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 7-й байт┴ ▄▄▄▄▄▄▄▄▄▄ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ ┼Второе поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 8-й байт┴ ▀▀▀▀▀▀▀▀▀▀ ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ Расширение имени файла 9-й байт┴ ▀▀▀▀▀▀▀▀▀▀ ┴ └ ░┬┬ (если некоторый символ отсутствует,то он └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ заменяется кодом 20h) 10-й байт┴ ▀▀▀▀▀▀▀▀▀▀ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ ┼Третье поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ 11-й байт┴ ┼┼┼┼┼┼┼┼┼┼ ┴ ░┬┬ Байт атрибутов файла ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┼Четвертое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 12-й байт┴ :::::::::: ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 13-й байт┴ :::::::::: ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ └ ░┬┬ Зарезервированное поле ... ┴ ... ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 21-й байт┴ :::::::::: ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ ┼Пятое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 22-й байт┴ ≈≈≈≈≈≈≈≈≈≈ ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ └ ░┬┬ Время создания файла 23-й байт┴ ≈≈≈≈≈≈≈≈≈≈ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ ┼Шестое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 24-й байт┴ ▄▄▄▄▄▄▄▄▄▄ ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ └ ░┬┬ Дата создания файла 25-й байт┴ ▄▄▄▄▄▄▄▄▄▄ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ ┼Седьмое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 26-й байт┴ ▀▀▀▀▀▀▀▀▀▀ ┴ ┴ Ссылка на первый кластер, в котором на╨ └┬┬┬┬┬┬┬┬┬┬┬┬┘ └ ░┬┬ ходится файл (в 26-ом байте - младший 27-й байт┴ ▀▀▀▀▀▀▀▀▀▀ ┴ ┴ байт адреса, в 27-ом байте - старший ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ байт) ┼Восьмое поле ─┬┬┬┬┬┬┬┬┬┬┬┬│ │ 28-й байт┴ ********** ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 29-й байт┴ ********** ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ └░┬┬┬ Размер файла (в байтах) 30-й байт┴ ********** ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ 31-й байт┴ ********** ┴ ┴ ░┬┬ Старший байт размера файла ┌┬┬┬┬┬┬┬┬┬┬┬┬┐ ┐ \/T1/1- Помните, что для человека звук его имени самый сладкий и самый важный звук в че╨ ловеческой речи. Д.Карнеги ┼Имя файла─. Это поле имеет длину 8 байт и содержит имя файла. Если длина имени меньше восьми символов, то недостающие символы заменяются символом "Пробел" (код 20h). Если ┌первый байт имени файла─ содержит число E5h, то это означает, что файл, которому соответствует этот элемент Справочника, уже уничто╨ жен, т.е. после уничтожения файла первый символ имени файла заменяется шестнадцатеричным кодом E5. ┌Вся информация в элементе каталога, за ис─╨ ┌ключением первого символа имени, сохраняется. ┼Расширение─. Это поле имеет длину три байта. Оно содержит расширение имени файла. Как и в случае с самим именем, короткое расширение допол╨ няется символами "Пробел". Если файл не имеет расширения, то это поле содержит три символа "Пробел". ┼Атрибут─. Это поле состоит из ┌одного─ байта. Поле атрибута в основном используется для установления признака "скрытого" файла, т.е. такого файла, имя которого не обнаруживается обычными программами работы со Справочниками. В операционной системе MSX-DOS биты байта атрибутов несут следующую нагрузку: \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ ┴ ┴ 7 6 5 4 3 2 1 0 ┴ ┴ ┴ ┴ Старший бит ┬┬▐ O O O O O O O O ░┬┬ Младший бит ┴ ┴ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ▌ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ ┴ Бит защиты от чтения ┐ ┴ ┴ ┴ ┴ ┴ ┴ ┌ Резервированный бит ┴ ┴ Резервированный бит ┬┬┐ ┴ ┴ ┴ ┴ ┌┬ "Скрытый" файл, защищен от ко╨ ┴ ┴ ┴ ┴ ┴ ┴ манды просмотра каталога ┴ ┴ Архивный файл ┬┬┐ ┴ ┴ ┌┬┬ Системный файл с особым доступом ┴ ┴ Подкаталог ┬┬┬┐ ┌┬┬┬ Метка тома ┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- └Бит 0─ в системе MSX-DOS зарезервирован. └Биты 1-й и 2-й─ служат для индикации атрибутов "скрытого" и "систем╨ ного" файла. ┌Первый─ бит байта атрибутов, установленный в 1, определяет "скрытый" файл, а ┌второй─ бит, установленный в 1, ┬ системный файл. Таким образом, "видимый" файл будет иметь нулевой байт атрибута (00000000), для "скрытого" файла байт атрибута содержит значение 2 (00000010), для системного файла байт атрибута содержит значение 4 (00000100), а для "скрытого" системного файла байт атрибута содержит значение 6 (00000110). Хотя обработка системного атрибута осуществляется независимо от скрытого, оба этих атрибута практически совпадают по своему функци╨ ональному назначению. При использовании любого из них файл становится "невидимым". Если └бит 1─ или └бит 2─ равен 1, то файл исчезает из каталога. Его нельзя ни стереть, ни прочитать, т.к. при всяком обращении к нему опе╨ рационная система сообщает: "File not found" . └Бит 3─ (содержимое байта атрибутов: 00001000) указывает, что элемент Справочника содержит метку тома. Сама метка хранится в полях имени фай╨ ла и расширения, которые воспринимаются в этом случае как одно целое. Если бит 3 равен 1, то файл исчезает из каталога. Его нельзя ни стереть, ни прочитать, т.к. при всяком обращении к нему говорится: "File not found" В операционной системе MS-DOS └бит 4─ (содержимое байта атрибутов: 00010000) используется для указания элементов Справочника, соответству╨ ющих Справочникам нижнего уровня. Поскольку Справочники нижнего уровня хранятся на диске подобно обычным файлам данных, им необходим собствен╨ ный элемент в корневом Справочнике. В этом элементе используются все поля,кроме размера файла, в данном случае равного нулю. Действительный размер файла Справочника нижнего уровня легко определяется из соот╨ ветствующей последовательности в Таблице Размещения Файлов. В операционной системе MSX-DOS равенство бита 4 единице приводит к тому, что при просмотре каталога командой DIR, Вы увидите на экране слово в том месте каталога, где должна находиться информация об объеме файла. Это означает, что этот файл - теперь не файл вовсе, а имя некоторого ┌подкаталога─. └Бит 5─ (содержимое байта атрибутов: 00100000) предусмотрен для облег╨ чения создания резервных копий файлов на ┌жестких─ дисках. ┌Для файлов на ┌гибких дисках этот атрибут бесполезен─. └Бит 6─ зарезервирован в системе MSX-DOS. Если └бит 7─ равен 1, то файл становится нечитаемым (например, Вы не сможете загрузить его в текстовый редактор и т.д.). ┼Зарезервированное поле─. Это поле зарезервировано для возможного ис╨ пользования в будущем. Любые ┌новые─ операции над Справочником файлов мо╨ гут использовать это поле. Эти байты имеют значение 00. Любые другие значения этого поля указывают на какой-либо вариант его использования. Счастливые часов не наблюдают. А.С.Грибоедов. Горе от ума ┼Время─. Это поле имеет длину два байта в формате шестнадцатиразрядно╨ го целого числа без знака. В этом поле хранится время создания или мо╨ дификации файла. Большинство операций, использующих это поле, таких как операция рас╨ печатки содержимого Справочника (DIR), выдают время с точностью до ми╨ нут, хотя число, хранящееся в поле времени, позволяет определить время с точностью до двух секунд. Код времени, хранящийся как шестнадцатиразрядное целое число без знака, вычисляется по следующей формуле: \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ Время = Часы╧2048+Минуты╧32+Секунды/2 ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ 23-й байт 22-й байт ─┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬│ ─┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬│ ┴ h4┴ h3┴ h2┴ h1┴ h0┴ m5┴ m4┴ m3┴ ┴ m2┴ m1┴ m0┴ s4┴ s3┴ s2┴ s1┴ s0┴ ┌┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┐ ┌┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┐ \/T1/1- ┌┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┐ Часы (0╤23) Минуты (0╤59) Секунды/2 (0╤29) Все врут календари. А.С.Грибоедов. Горе от ума ┼Дата─. Это поле состоит из двух байтов. Как и время, даты хранятся в виде целого шестнадцатиразрядного числа без знака, которое вычисляется \/T0/1 по формуле: ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ Дата = (Год-1980)╧512+Месяц╧32+День ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- Диапазон значений лет составляет от 1980 до 2079, причем хранятся они в виде относительных величин от 0 до 99. Хотя формат позволяет за╨ давать относительный номер года 127 (что соответствует 2107 году), опе╨ рационная система MSX-DOS позволяет работать с годами только до 2079. Никто, правда, не ожидает, что MSX-DOS будет использоваться так долго! 25-й байт 24-й байт \/T0/1 ─┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬│ ─┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬├┬┬┬│ ┴ y6┴ y5┴ y4┴ y3┴ y2┴ y1┴ y0┴ m3┴ ┴ m2┴ m1┴ m0┴ d4┴ d3┴ d2┴ d1┴ d0┴ ┌┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┐ ┌┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┤┬┬┬┐ \/T1/1- ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┐ Годы (0╤99) Месяцы (1╤12) Дни (1╤31) Как формат, так и размещение полей даты и времени подобраны таким образом, чтобы вместе они образовывали единое четырехбайтовое поле, ко╨ торое можно использовать в операциях сравнения. Достаточно просто из╨ влекать компоненты даты и времени из соответствующих полей и вычислять их разность. Например, для разделения даты на составные части можно использовать следующие формулы, записанные на языке программирования Pascal: \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ Год:=1980+поле_даты div 512 ┴ ┴ Месяц:=(поле_даты mod 512) div 32 ┴ ┴ День := поле_даты mod 32 ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- ┼Номер начального кластера─. Это двухбайтовое поле содержит шестнадца╨ тиразрядное число, являющееся смещением до начальной точки файла в Таб╨ лице Размещения Файлов. ┼Размер файла─. Это поле состоит из четырех байтов. Размер файла зада╨ ется в байтах и хранится в формате четырехбайтового целого числа без знака. Размер файла не всегда указывает точное число байтов. Для всех файлов это поле должно соответствовать размеру файла в секторах. Для программных файлов, представленных в виде "COM"-файла и для фай╨ лов, созданных из данных фиксированной длины, только поле размера файла позволяет точно определить, где находится конец данных. Для этих файлов значение в поле размера файла хранится с точностью до байта. Для файлов некоторых других форматов такая точность не обязательна и размер файла, указанный в соответствующем поле, может отличаться от действительного. Наиболее часто это случается с текстовыми файлами. Текстовые файлы в кодах ASCII имеют маркер (признак) конца файла, хра╨ нящийся в самом файле, который фиксирует точный конец данных.