Хабрахабр

[Из песочницы] Разработка приложения для старого КПК (Cybiko Xtreme) в 2019 году

Введение

Привет Хабр! Я хотел бы поделиться своим опытом написания приложения для очень старого карманного компьютера, который серьезно опередил свое время, а именно Cybiko Xtreme 2001 года выпуска. Тем, кому интересно как жилось мобильному разработчику в начале 2000-х, добро пожаловать под кат.

О Cybiko Xtreme

Итак, данный девайс попал ко мне в далеком 2002 году и вызвал полный восторг. Оценить по достоинству коммуникационные возможности я не мог, поскольку в моем городе людей с такими КПК я больше не встречал, однако в целом возможность поиграть во множество игр без необходимости сидеть за компьютером, была просто фантастикой. Во многом же создатели устройства делали упор именно на сетевые возможности КПК. В качестве соединения устройств между собой разработчики выбрали радио меш сеть. Напрямую устройства соединялись между собой на расстоянии до 100 метров, однако можно было соединяться друг с другом через другое устройство, и в теории, при плотном покрытии сети, расстояние было неограниченно. В устройстве была возможность заполнить свой профиль (кажется даже прикрепить фотографию, хотя на дисплее в градациях серого толку от нее было бы немного), общаться с другими пользователями со схожими интересами, искать новые знакомства и т.д. Напоминает все это социальную сеть, хотя тогда такого термина, насколько я знаю, еще не существовало. Если бы устройств было достаточно много, думаю проект бы взлетел, однако, к сожалению, у создателей что-то пошло не так.

Играть в старые игры было не очень интересно (все-таки по сравнению с новыми они смотрятся не особо), а вот попробовать разработать приложение и почувствовать как жилось первым мобильным разработчикам, было куда интереснее. Найдя этот КПК в своих старых вещах, мне захотелось поностальгировать.

Идея приложения

Поскольку я, по роду своей деятельности, связан с информационной безопасностью и эта тема мне крайне интересна, приложение я решил создавать в той же области. Наиболее простым (и хоть чем-то полезным?) мне показалось приложение «менеджер паролей». Данное приложение позволяет посмотреть как разработку графического пользовательского интерфейса, так и работу с файловой системой (хранение зашифрованного контейнера с паролями).

В роли ключа выступает мастер-пароль. В качестве криптографии для защиты контейнера я решил использовать так называемое XOR-шифрование. Поскольку приложение создавалось исключительно в целях развлечения, такое шифрование подходит идеально. Криптостойкость данного шифрования сильно зависит от длины ключа, и использовать его в серьезных системах не рекомендуется, однако у данного шифрования есть один серьезный плюс – оно очень легко реализуется.

Эмулятор

Подключение Cybiko Xtreme к современному компьютеру довольно сложный процесс, поэтому работу по тестовым запускам приложения я решил вести на эмуляторе (к счастью он есть).
Внешний вид представлен на рисунке ниже

По инструкции найденной здесь приложение можно отправить, используя кнопку «Send» в окне «Console», однако, как я ни пытался, сделать это у меня не получилось. Есть некоторые особенности по закачке приложений в эмулятор. Поэтому достаточно создать ram-диск со скомпилированным приложением и перезапустить эмулятор с ним. На форуме Planet Cybiko (к сожалению, на данный момент форум закрыт) есть ссылка на инструмент, позволяющий делать собственные Cybiko ram-диски.

SDK

Найти SDK на просторах интернета оказалось не очень сложно. Распаковав и проанализировав структуру каталогов, я в первую очередь обратил внимание на директорию doc, в которой оказался вполне годный help, объясняющий, как в принципе компилировать приложение, и какую структуру должен иметь проект.

Особенно интересными были приложения из директории tutorial, которые шаг за шагом объясняли принципы разработки для Cybiko Xtreme. В директории demos я нашел множество примеров приложений. Все просто, доступно и понятно.

Написание кода

Структура минимального по своему содержимому проекта представлена ниже:

Структура проекта

project
res root.inf
src source1.c …
make.bat

Файл root.inf содержит мета-данные приложения, а именно информацию о его типе (приложение, игра или библиотека), версии, минимальной версии операционной системы (прямо как в Android), уникальном имени и т.д.

Фактически вся сборка осуществляется командой вызова Cybiko C Compiller: Файл make.bat содержит в себе команды для сборки приложения при помощи sdk.

"C:\Program Files (x86)\Cybiko\Cybiko_SDK\bin\vcc" -R0 src/*.c res/*.help res/*.inf -o passwords_master.app

Важное замечание: при сборке на Windows 7 для vcc.exe нужно поставить режим совместимости с Windows XP (Service Pack 2), в противном случае возникают проблемы с запуском компилятора.

Результатом компиляции является файл *.app. В директории src лежат исходные коды программы.

Если у кого-то возникнут вопросы спрашивайте в комментариях или в личке. Для описания разработки всего приложения одной статьи точно не хватит, поэтому опишу лишь самое начало.

Все начинается с инициализации контекста приложения в функции main, вызовом:

Инициализация

long init_module(struct module_t * main_module);

После инициализации в структуре main_module содержатся указатели на графический контекст и текущий процесс приложения.

Делается это следующим образом: Далее необходимо создать главную форму.

Создание главной формы

struct cFrameForm * ptr_main_form = malloc(sizeof(struct cFrameForm));
cFrameForm_ctor(ptr_main_form, "Passwords Master", main_module.m_process);

Проверим есть ли на файловой системе контейнер паролей:

Проверка наличия контейнера

int check_database() FileInput_dtor(ptr_file_input, FREE_MEMORY); return -1;
}

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

Ввод мастер-пароля

void get_master_password(struct cFrameForm * ptr_form, char * master_password) { // Show dialog enter master password struct cDialog * ptr_pass_dialog; ptr_pass_dialog = (struct cDialog *) malloc(sizeof(struct cDialog)); cDialog_ctor(ptr_pass_dialog, 0, "Enter master password", mbEdit | mbOk | mbCancel | mbs1, 15, ptr_form->CurrApplication); cDialog_SetEditText(ptr_pass_dialog, ""); do { // If pressed cancel - close application if (cDialog_ShowModal(ptr_pass_dialog) == mbOk) cDialog_GetEditText(ptr_pass_dialog, master_password); else { ptr_form->ModalResult = mrQuit; break; } } while (strlen(master_password) == 0); // Releases the dialog cDialog_dtor(ptr_pass_dialog, FREE_MEMORY);
}

Вся дальнейшая работа приложения строится вокруг цикла обработки сообщений от операционной системы до тех пор, пока не будет закрыта главная форма.

Обработка сообщений

while (ptr_form->ModalResult != mrQuit) { struct Message * ptr_message = cWinApp_get_message(ptr_form->CurrApplication, 0, 1, MSG_USER); switch(ptr_message->msgid) { case MSG_SHUTUP: // Processes the system exit signal. case MSG_QUIT: ptr_form->ModalResult = mrQuit; break; case MSG_KEYDOWN: // Processes keyboard input ptr_key_param = Message_get_key_param(ptr_message); switch(ptr_key_param->scancode) { case KEY_ESC: ... break; case KEY_ENTER: ... break; case KEY_DEL: ... break; default: cFrameForm_proc(ptr_form, ptr_message); } break; default: cWinApp_defproc(module.m_process, ptr_message); } Message_delete(ptr_message);
}

Результат работы при запуске в эмуляторе представлен ниже:

С полным текстом исходников при желании
можно ознакомиться на github по ссылке.

Запуск на реальном устройстве

Как я уже говорил, запуск на реальном устройстве затруднен, поскольку софт для синхронизации Cybiko с компьютером не поддерживает современные операционные системы. По инструкции, найденной здесь, мне удалось синхронизировать Cybiko с Windows 2000, запущенным в Virtual Box. Из нюансов могу отметить то, что программа видела Cybiko только в случае, когда он подключался по USB и автоматически пробрасывался в виртуальную машину. Вероятно поэтому автор инструкции и пишет, что его нужно добавить как постоянное устройство для данной машины в настройках USB Virtual Box.

Результат синхронизации на картинке ниже:

Результат работы моего приложения представлен на следующем видео:

Заключение

С Cybiko Xtreme у меня связано множество прекрасных воспоминаний, и еще раз прикоснуться к этому замечательному устройству было для меня чертовски приятно. Хочется сказать его создателям огромное спасибо за проделанную работу. Также хочется поблагодарить создателей эмулятора, форумов и сайтов по Cybiko, а также мою жену за помощь в съемках видео и редактировании этой статьи.

Всем спасибо за внимание!

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»