A.4. Разделы |
Вверх Предыдущий Следующий |
Помимо заголовка раздела, все данные файла PPU разделены на блоки данных, которые позволяют легко добавлять блоки данных без потери обратной совместимости. Они похожи на два куска форматов Electronic Arts IFF и Microsoft RIFF.Каждый «кусок» (tppuentry) имеет следующий формат, и куски могут быть вложенными. Таблица А.4. Формат данных «куска».
Каждый основной раздел куска должен заканчиваться концом куска. Вложенные куски используются для записей, классов или полей объекта. Чтобы прочитать запись, вы можете просто вызвать ppufile.readentry:byte, который возвращает поле tppuentry.nr, которое содержит тип записи. В общем случае это работает так (пример для идентификаторов): repeat Возможные типы записей находятся в ppu.pas, но краткое описание наиболее распространённых из них находится в таблице А.5. Таблица А.5. Возможные типы PPU Entry.
Затем вы можете обработать каждый тип записи по своему усмотрению. О пропуске непрочитанных байтов в записи и правильном чтении следующей записи позаботится ppufile.readentry. Специальная функция skipuntilentry(untilb:byte):boolean; будет читать файл ppufile до тех пор, пока не найдёт вход untilb в основной записи. Разбор записи можно сделать с помощью функций ppufile.getxxx. Доступные функции: procedure ppufile.getdata(var b;len:longint); Чтобы проверить, достигли ли вы конца записи, вы можете использовать функцию:function EndOfEntry:boolean;
Полный список записей и содержимое их полей можно найти в ppudump.pp. |