\title/FN α__ Работа с файлами на дискете _________________________________▁ ¤¤¤ α__ ▊II. Работа с файлами на дискете Оставьте трудиться напрасно, стараясь из﹣ влечь из одного разума всю мудрость; спраши﹣ вайте природу, она хранит все истины и на во﹣ просы ваши будет отвечать вам непременно и удовлетворительно. Р.Бэкон ▊II.1. Контрольный Буфер Файла Для работы с файлами Вам, безусловно, пригодится информация о Кон﹣ трольном Буфере Файла ("File Control Block", FCB). FCB - это такое место в оперативной памяти компьютера (всего 25h=37 байтов), где хранится вся информация, необходимая MSX-DOS для работы с ▇одним файлом▁, находящимся на диске. В буфере управления файлом (он же - FCB) есть все: от номера дисковода и имени файла до даты и времени его рождения. В некоторых случаях Контрольным Буфером Файла называют и не﹣ полную информацию о файле - несколько первых байтов ... Предположим, что Вы программируете на языке MSX-BASIC. Тогда Вы мо﹣ жете использовать в своих программах \/T0/1 ▁▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ функцию ▕ VARPTR(#n) ▕ , ▇▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ \/T1/1- где: VARPTR ( "VARiable PoinTeR" - "указатель переменной" ) - служебное слово; n - арифметическое выражение, целая часть значения которого опре﹣ деляет номер FCB (от 0 до значения выражения, стоящего в правой части оператора MAXFILES= ). Эта функция возвращает ▇адрес▁ X байта, начиная с которого расположен в памяти FCBn. Взгляните на схему расположения информации в FCBn : \/T0/1 Управляющая информация ▊▊▊▊▚ Данные ▁▊▊▊▏▊▊▊▏▊▼▊▏▊▊▊▏▊▊▊▏▊▊▊▏▊▊▊▚ ▕▧▧▧▕▧▧▧▕∙∙∙▕▧▧▧▕███▕∙∙∙▕███▕ ▇▊▊▊▞▊▊▊▞▊▊▊▞▊▊▊▞▊▊▊▞▊▊▊▞▊▊▊▔ Адреса ▊▊▶ X X+1 X+8 X+9 X+264 ▲ ▕ \/T1/1- Байт, адрес которого возвращает функция VARPTR(#n) При открытии файла на языке ассемблера Вы должны создать FCB, в ко﹣ тором должна быть записана следующая информация: \/T0/1 ▁▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ▕Номер▕ Содержимое байта ▕ ▕байта▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ X ▕ Тип файла: ▕ ▕ ▕ 1 - OPEN FOR INPUT ▕ ▕ ▕ 2 - OPEN FOR OUTPUT ▕ ▕ ▕ или OPEN FOR APPEND (для диска) ▕ ▕ ▕ 4 - файл прямого доступа (для диска) ▕ ▕ ▕ или файл последовательного доступа, ▕ ▕ ▕ открытый и для чтения, и для записи. ▕ ▕ ▕ 8 - OPEN FOR APPEND ▕ ▕ ▕ (для устройства MEM:) ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▁▊▊▊▊▊▊▊▊▊▊▊ X+1 ▕ Ссылка на область памяти, в кото﹣ ▕ ▕ ▕ X+2 ▕ рой хранится ▇спецификация▁ файла ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ ▕ X+3 ▕ ? ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ ▕ X+4 ▕ Номер текущего устройства: ▕ ▕ ▕ ▕ 0 - активное устройство по умолчанию▕ ▕ ▕ ▕ 1 - дисковод A: ▕ ▕ ▕ ▕ 2 - дисковод B: , и т.д. ▕ ▕ ▕ ▕ FCh - устройство GRP: ▕ ▕ ▕ ▕ FDh - устройство CRT: ▕ ▕ ▕ ▕ FEh - устройство LPT: ▕ ▕ ▕ ▕ FFh - устройство CAS: ▕ ▕ ▕ ▕ Дополнительные устройства: ▕ ▕ ▕ ▕ D4h - устройство COM: ▕ ▕ ▕ ▕ (локальная сеть MSX-1) ▕ ▕ ▕ ▕ C0h - устройство MEM: ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ ▕ X+5 ▕ ? ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ ▕ ∙∙∙ ▕ ? ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ ▕ X+9 ▕ Содержимое записи файла (256 байт) ▕ ▕ ▇▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ ▕ ▕ юСпецификация файла ▕ ▁▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ▕ ▕Номер▕ Содержимое байта ▕ ▕ ▕байта▕ ▕ ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▇▊▊▶ +00 ▕ Номер дисковода (0 - по умолчанию, 1 - A:) ▕ ▕ +01 ▕ Имя файла ▕ ▕ +09 ▕ Расширение имени файла ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ +12 ▕ Номер текущего блока (или записи) ▕ ▕ +14 ▕ Текущий размер записи (по умолчанию равен 128) ▕ ▕ +16 ▕ Размер файла в байтах ▕ ▕ +20 ▕ Дата изменения файла ▕ ▕ +22 ▕ Время изменения файла ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ +24 ▕ Идентификатор устройства ("Device ID", см. табл. ниже) ▕ ▕ +25 ▕ Размещение директории ("Directory location") ▕ ▕ +26 ▕ Первый кластер файла ▕ ▕ +28 ▕ Последний кластер файла ▕ ▕ +30 ▕ Последний доступный кластер (относительно начала файла)▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ +32 ▕ Номер текущей записи файла последовательного доступа ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ +33 ▕ Номер случайной записи для файла прямого доступа ▕ ▕ +34 ▕ (байты 33,34,35 - если размер записи больше 63 ▕ ▕ +35 ▕ байты 33,34,35,36 - если размер записи меньше 64) ▕ ▕ +36 ▕ ▕ ▇▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ \/T1/1- Следует отметить, что в системе MSX-BASIC значимыми являются все байты FCB, а в системе MSX-DOS при открытии файла используется только спецификация файла. ▁▊▊▊▊▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ▕Device ID▕ Устройство ▕ ├▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ 040h ▕ Диск ▕ ▕ 0FFh ▕ CON (консоль) ▕ ▕ 0FBh ▕ PRN (принтер) ▕ ▕ 0FCh ▕ LST (принтер) ▕ ▕ 0FEh ▕ AUX (вспомогательное) ▕ ▕ 0FDh ▕ NUL (нулевое) ▕ ▇▊▊▊▊▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔