Файл, предназначенный для распространения программ платформы MRP. Также может использоваться как контейнер для хранения файлов. Файлы, содержащиеся внутри, обычно сжаты (формат gzip).
Расширение - mrp.
(см. Программы для работы с файлами MRP)
Структура файла представлена в таблице 1.
| Смещение | Тип |
|---|---|
| 0x00 | MAGIC константа |
| 0x04 | Заголовок |
| 0xF0 | Дополнительные данные в заголовке |
| ... | Индексная таблица |
| ... | Файловая таблица |
Константа для идентификации типа файла. Имеет значение 0х4D525047 (“MRPG”).
Структура заголовка приведена в таблице 2.
Все строки фиксированной длины должны быть дополнены нулями до нужного размера. Кодировка символов “Китайский упрощённый GB-2312” (кроме поля file_name), определение кодировки выполняется непосредственно программой читающей эти строки, например, приложением отображающем список установленных программ (dsm_gm.mrp, mopo.mrp).
Все цифровые поля в Little Endian (LE), за исключением указанных.
| Смещение | Длина | Значение | Описание |
|---|---|---|---|
| 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 | ... | Дополнительные данные |
Поле определяет длину заголовка и, соответственно, начало файловой таблицы. Если значение не более 232 байт - то файл использует старый формат.
Старый формат отличается тем, что не имеет индексной таблицы. Из-за этого для поиска файла с конкретным именем необходимо просматривать файловую таблицу полностью.
Кроме того после окончания полей заголовка могут размещены дополнительные данные, в этом случае начало индексной таблицы сдвигается (поле index_ref).
Так как размер указан без учёта константы MAGIC то начало файловой таблицы будет определяться как headlen + 4.
Authorization code, no-brain task.
Биты:
0 - visible (видимость в списке программ)
1 .. 2 - cpu (тип процессора)
3 .. - shell
Format version: 0x2710 (10000) или 0x2712 (10002)
Другие значения пока не встречались.
0 - не указано
1 - MTK или MSTAR
2 - SPREADTRUM
Тип аппаратной платформы (см. Аппаратные платформы) указывается для справки, при запуске программы соответствие не всегда проверяется. Бинарные компоненты (.ext) должны быть скомпилированы для конкретной аппаратной платформы.
Некоторые программы используют данные размещённые после последнего поля в заголовке и до начала индексной таблицы. В этом случае начало индексной таблицы также сдвигается (см. поле index).
Индексная таблица содержит записи обо всех файлах с указанием их расположения в файле.
Структура записи указана в таблице 3.
| Поле | Размер | Описание |
|---|---|---|
| nlen | 4 | Длина имени файла в байтах, с учётом нулевого байта |
| name | nlen | Имя файла в архиве |
| start | 4 | Позиция данных в файле |
| len | 4 | Длина файла, байт |
| pad | 4 | Дополнение (padding) |
Записи повторяются до начала файловой таблицы.
Файловая таблица содержит непосредственно данные файлов.
| Поле | Размер | Описание |
| nlen | 4 | Длина имени файла в байтах, с учётом нулевого байта |
| name | nlen | Имя файла в архиве |
| len | 4 | Длина файла, байт |
| data | len | Данные. На эту позицию указывают записи в индексной таблице |
Записи повторяются до конца файла. Количество записей должно совпадать с количеством записей в индексной таблице.
Так как поля с именем файла и длиной из индексной таблицы повторяются в файловой они могут быть повреждены или даже отсутствовать. Корректность работы в этом случае зависит только от конкретной реализации платформы.