Доброго времени суток, думаю все помнят о существовании VLF Library - фреймворка созданного в относительно далеком прошлом самим Dark_AleX (
ссылка). Данный фреймворка позволяет минимум использовать оформление в стиле Sony UPDATER, а также таит в себе немало интересных возможностей, связанных с использованием объектов из *.rco.
Все началось с того момента, как Frostegater стал писать прогу
Everest, когда еще она тестировалась, я его начал допекать: "почему ты не сделаешь прогу с поддержкой русского языка?" Однако, когда уговоры начали потихоньку помогать и мы стали терзать VLF возникли интересные проблемы.
В документации к VLF существует как раз нужная функция:
/**
* Adds a new text item from an unicode string.
*
* @param x - x position
* @param y - y position
* @param string - unicode string with the desired text
*
* @returns a VlfText item on success, NULL on error.
*/
VlfText vlfGuiAddTextW(int x, int y, u16 *string);
А именно она выводит UNICODE текст на божий свет в программе. Однако при попытке ее использовать - никаких успехов выявлено не было, разве что на экранчике появлялось что-то странное...
Далее пошло время разных попыток и бредовых идей), в том числе даже о переписке библиотеки intraFont оговаривалось... (Хорошо, что дальше этого "оговаривания" дело не пошло
)
Через некоторое время я, подумав, решил попробовать пойти путем, как бы это сказать правильно - несколько нестандартным...
/**
* Adds a new text item from a resource label
*
* @param rco - The resource file to load the label from.
* @param name - The name of the resource.
* @param x - x position
* @param y - y position
*
* @returns a VlfText item on success, NULL on error.
*/
VlfText vlfGuiAddTextResource(char *rco, char *name, int x, int y);
А именно загрузить текст из *.rco файла. Как это ни странно, однако функция вида
vlfGuiAddTextResource("ms0:/lang.rco", "my_resource_value", 10, 180);
Действительно отобразила русский текст, и даже больше, при добавленной опции:
Приложение автоматически использовало все доступные языки на PSP (загружалось все естественно с языком по умолчанию).
Однако у такого метода есть недостатки, о которых мне тут же "напомнил" Frost:
- К RCO требуется писать полный путь, что повлечет проблемы с ms0:/ и ef0:/, а также названием каталога самой хомки
- Такой RCO файл, несмотря даже на возможные функции кэширования является лишней нагрузкой на файловую систему
Но когда загрузка русского текста из RCO удалась, Frost выдал интересную идею: в каком же формате хранится текст в rco что он нормально воспроизводится через VLF?
Данная идея оказалась ключевой.... Через некоторое время из RCO удалось вытащить русский алфавит, вот он кстати:
(Вначале идёт буква, затем следует два хекс значения)
А 1004
Б 1104
В 1204
Г 1304
Д 1404
Е 1504
Ё 0104
Ж 1604
З 1704
И 1804
Й 1904
К 1A04
Л 1B04
М 1C04
Н 1D04
О 1E04
П 1F04
Р 2004
С 2104
Т 2204
У 2304
Ф 2404
Х 2504
Ц 2604
Ч 2704
Ш 2804
Щ 2904
Ъ 2A04
Ы 2B04
Ь 2C04
Э 2D04
Ю 2E04
Я 2F04
а 3004
б 3104
в 3204
г 3304
д 3404
е 3504
ё 5104
ж 3604
з 3704
и 3804
й 3904
к 3A04
л 3B04
м 3C04
н 3D04
о 3E04
п 3F04
р 4004
с 4104
т 4204
у 4304
ф 4404
х 4504
ц 4604
ч 4704
ш 4804
щ 4904
ъ 4A04
ы 4B04
ь 4C04
э 4D04
ю 4E04
я 4F04
Данная кодировка отлично подошла к функции VlfText vlfGuiAddTextW и, о чудо, родной русский язык появился без всяких извращений.
Далее интересный факт:
чтобы понять что это за кодировка такая (4D04, 3904 и т.д.) понадобился не один час
, забавно да? (для тех кто не понял - вопрос на засыпку в каком порядке пишутся символы в prx? (Пример
"Загадочной кодировки")
Надеюсь, что помогли кому-то (с) Frostegater & vit9696 2011.