Формат MRP

Файл, предназначенный для распространения программ платформы MRP. Также может использоваться как контейнер для хранения файлов. Файлы, содержащиеся внутри, обычно сжаты (формат gzip).

Расширение - mrp.

(см. Программы для работы с файлами MRP)

Структура файла

Структура файла представлена в таблице 1.

Таблица 1

Смещение Тип
0x00 MAGIC константа
0x04 Заголовок
0xF0 Дополнительные данные в заголовке
... Индексная таблица
... Файловая таблица

MAGIC

Константа для идентификации типа файла. Имеет значение 0х4D525047 (“MRPG”).

Заголовок

Структура заголовка приведена в таблице 2.

Все строки фиксированной длины должны быть дополнены нулями до нужного размера. Кодировка символов “Китайский упрощённый GB-2312” (кроме поля file_name), определение кодировки выполняется непосредственно программой читающей эти строки, например, приложением отображающем список установленных программ (dsm_gm.mrp, mopo.mrp).

Все цифровые поля в Little Endian (LE), за исключением указанных.

Таблица 2

Смещение Длина Значение Описание
0x04 4 headlen Начало файловой таблицы
0x08 4 filelen Длина файла
0x0С 4 index Начало индексной таблицы
0x10 12 filename Имя файла при компиляции (может не совпадать текущим именем файла), кодировка ascii
0x1С 24 appame Строка имя программы
0x34 16 authcode Код авторизации компилятора
0x44 4 appid ID приложения
0x48 4 appver Версия приложения
0x4C 4 flags Флаги
0x50 4 formatver Версия формата
0x54 4 crc32 Контрольная сумма CRC32. Вычисляется от всего файла, за исключением самого поля, вместо него 4 нулевых байта.
0x58 40 vendor Строка имя производителя (или автора)
0x80 64 description Строка описание
0xС0 4 appid ID приложения (в BE)
0xС4 4 appver Версия приложения (в BE)
0xС8 4 UNKNOWN ..here dragons...
0xСC 2 scr_width Ширина экрана (или 0)
0xСE 2 scr_height Высота экрана (или 0)
0xD0 1 platform Тип аппаратной платформы
0xD1 31 padding 31 нулевой байт (выравнивание для совместимости)
0xF0 ...   Дополнительные данные

Поле headlen

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

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

Кроме того после окончания полей заголовка могут размещены дополнительные данные, в этом случае начало индексной таблицы сдвигается (поле index_ref).

Так как размер указан без учёта константы MAGIC то начало файловой таблицы будет определяться как headlen + 4.

Поле authcode

Authorization code, no-brain task.

Поле flags

Биты:

0 - visible (видимость в списке программ)
1 .. 2 - cpu (тип процессора)
3 .. - shell

Поле formatver

Format version: 0x2710 (10000) или 0x2712 (10002)

Другие значения пока не встречались.

Поле platform

0 - не указано
1 - MTK или MSTAR
2 - SPREADTRUM

Тип аппаратной платформы (см. Аппаратные платформы) указывается для справки, при запуске программы соответствие не всегда проверяется. Бинарные компоненты (.ext) должны быть скомпилированы для конкретной аппаратной платформы.

Дополнительные данные в заголовке

Некоторые программы используют данные размещённые после последнего поля в заголовке и до начала индексной таблицы. В этом случае начало индексной таблицы также сдвигается (см. поле index).

Индексная таблица

Индексная таблица содержит записи обо всех файлах с указанием их расположения в файле.

Структура записи указана в таблице 3.

Таблица 3

Поле Размер Описание
nlen 4 Длина имени файла в байтах, с учётом нулевого байта
name nlen Имя файла в архиве
start 4 Позиция данных в файле
len 4 Длина файла, байт
pad 4 Дополнение (padding)

Записи повторяются до начала файловой таблицы.

Файловая таблица

Файловая таблица содержит непосредственно данные файлов.

Поле Размер Описание
nlen 4 Длина имени файла в байтах, с учётом нулевого байта
name nlen Имя файла в архиве
len 4 Длина файла, байт
data len Данные. На эту позицию указывают записи в индексной таблице

Записи повторяются до конца файла. Количество записей должно совпадать с количеством записей в индексной таблице.

Так как поля с именем файла и длиной из индексной таблицы повторяются в файловой они могут быть повреждены или даже отсутствовать. Корректность работы в этом случае зависит только от конкретной реализации платформы.