
1. Introdução
Oi Habr! Gostaria de compartilhar minha experiência na criação de um aplicativo para um computador portátil muito antigo, o que está seriamente à frente de seu tempo, a saber, o lançamento do Cybiko Xtreme 2001. Para aqueles que estão interessados em como um desenvolvedor de dispositivos móveis viveu no início dos anos 2000, seja bem-vindo ao gato.
Sobre o Cybiko Xtreme
Então, este dispositivo veio até mim no distante 2002 e causou um prazer completo. Não pude apreciar as capacidades de comunicação, pois na minha cidade nunca conheci pessoas com esses PDAs, no entanto, em geral, a capacidade de jogar muitos jogos sem ter que sentar em um computador era fantástica. De várias maneiras, os criadores do dispositivo se concentraram nos recursos de rede do PDA. Os desenvolvedores escolheram uma rede de malha de rádio para conectar os dispositivos entre si. Diretamente, os dispositivos foram interconectados a uma distância de até 100 metros, no entanto, foi possível conectar-se através de outro dispositivo e, em teoria, com uma densa cobertura de rede, a distância era ilimitada. O dispositivo teve a oportunidade de preencher seu perfil (parece até anexar uma foto, embora exista pouco sentido na exibição em escala de cinza), conversar com outros usuários com interesses semelhantes, procurar novos amigos etc. Assemelha-se a toda essa rede social, embora, até onde eu saiba, esse termo ainda não existisse. Se houvesse muitos dispositivos, acho que o projeto decolaria, no entanto, infelizmente, algo deu errado com os criadores.
Encontrando esse PDA em minhas coisas antigas, eu queria ponostalgizar. Não foi muito interessante jogar jogos antigos (no entanto, eles não parecem especialmente comparados aos novos), mas tentar desenvolver um aplicativo e sentir como os primeiros desenvolvedores de dispositivos móveis viveram foi muito mais interessante.
Ideia de aplicação
Como, pela natureza da minha atividade, estou conectado à segurança da informação e esse tópico é extremamente interessante para mim, decidi criar um aplicativo na mesma área. O mais simples (e pelo menos algo útil?) Pareceu-me o aplicativo "gerenciador de senhas". Este aplicativo permite que você veja como o desenvolvimento de uma interface gráfica do usuário e trabalhe com o sistema de arquivos (armazenamento de um contêiner criptografado com senhas).
Como uma criptografia para proteger o contêiner, decidi usar a chamada
criptografia XOR . A chave é a senha mestra. A força criptográfica dessa criptografia depende fortemente do comprimento da chave, e não é recomendado usá-la em sistemas sérios; no entanto, essa criptografia possui uma vantagem séria - é muito fácil de implementar. Como o aplicativo foi criado apenas para fins de entretenimento, essa criptografia é ideal.
Emulador
Conectar o Cybiko Xtreme a um computador moderno é um processo bastante complicado, por isso decidi realizar trabalhos sobre o lançamento de testes do aplicativo no emulador (felizmente é).
A aparência é mostrada na figura abaixo.

Existem alguns recursos para baixar aplicativos para o emulador. De acordo com as instruções encontradas
aqui, o aplicativo pode ser enviado usando o botão "Enviar" na janela "Console", no entanto, não importa como tentei, não obtive sucesso. O fórum Planet Cybiko (infelizmente o fórum está fechado no momento) possui um link para uma ferramenta que permite criar seus próprios discos ram Cybiko. Portanto, basta criar um disco ram com um aplicativo compilado e reiniciar o emulador com ele.
SDK
Encontrar um SDK na Internet não foi muito difícil. Após descompactar e analisar a estrutura de diretórios, chamei a atenção para o diretório doc, que acabou sendo uma ajuda muito útil para explicar como, em princípio, compilar o aplicativo e qual estrutura o projeto deveria ter.
Encontrei muitos aplicativos de amostra no diretório demos. Particularmente interessantes foram as aplicações do diretório do tutorial, que explicaram passo a passo os princípios de desenvolvimento do Cybiko Xtreme. Tudo é simples, acessível e compreensível.
Escrita de código
A estrutura de um projeto com conteúdo mínimo é apresentada abaixo:
Estrutura do projetoproject res root.inf src source1.c … make.bat
O arquivo root.inf contém os metadados do aplicativo, ou seja, informações sobre seu tipo (aplicativo, jogo ou biblioteca), versão, versão mínima do sistema operacional (como no Android), um nome exclusivo etc.
O arquivo make.bat contém comandos para criar o aplicativo usando o sdk. De fato, toda a montagem é feita com o comando de chamada Cybiko C Compiller:
"C:\Program Files (x86)\Cybiko\Cybiko_SDK\bin\vcc" -R0 src/*.c res/*.help res/*.inf -o passwords_master.app
Nota importante: ao criar o Windows 7 para vcc.exe, você precisa definir o modo de compatibilidade como Windows XP (Service Pack 2); caso contrário, há problemas ao iniciar o compilador.
O diretório src contém o código fonte do programa. O resultado da compilação é um arquivo * .app.
Para descrever o desenvolvimento de todo o aplicativo, um artigo definitivamente não é suficiente, portanto descreverei apenas o começo. Se alguém tiver dúvidas, pergunte nos comentários ou no PM.
Tudo começa com a inicialização do contexto do aplicativo na função principal chamando:
Inicialização long init_module(struct module_t * main_module);
Após a inicialização, a estrutura main_module contém ponteiros para o contexto gráfico e o processo atual do aplicativo.
Em seguida, você precisa criar o formulário principal. Isso é feito da seguinte maneira:
Crie um formulário mestre struct cFrameForm * ptr_main_form = malloc(sizeof(struct cFrameForm)); cFrameForm_ctor(ptr_main_form, "Passwords Master", main_module.m_process);
Verifique se há um contêiner de senha no sistema de arquivos:
Verificando a disponibilidade do contêiner int check_database() { struct FileInput * ptr_file_input = (struct FileInput *) malloc(sizeof(struct FileInput)); FileInput_ctor_Ex(ptr_file_input, DATABASE_FILE); if (FileInput_is_good(ptr_file_input)) { FileInput_dtor(ptr_file_input, FREE_MEMORY); return 0; } FileInput_dtor(ptr_file_input, FREE_MEMORY); return -1; }
Mostramos a caixa de diálogo de entrada da senha mestra. Se o contêiner já existir, tentamos descriptografar com a senha mestra inserida. Se não houver contêiner, use a senha mestra inserida para criar um novo contêiner.
Digite a senha mestra void get_master_password(struct cFrameForm * ptr_form, char * master_password) {
Todo o trabalho adicional do aplicativo é construído em torno de um ciclo de processamento de mensagens do sistema operacional até que o formulário principal seja fechado.
Processamento de mensagens 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:
O resultado do trabalho na inicialização do emulador é apresentado abaixo:

Com o código fonte completo, se desejado
pode ser encontrado no github no link.Iniciar em um dispositivo real
Como eu já disse, iniciar um dispositivo real é difícil, porque o software para sincronizar o Cybiko com um computador não suporta sistemas operacionais modernos. De acordo com as instruções encontradas
aqui , consegui sincronizar o Cybiko com o Windows 2000 em execução no Virtual Box. Das nuances, posso observar que o programa viu o Cybiko apenas quando foi conectado via USB e encaminhado automaticamente para a máquina virtual. É provavelmente por isso que o autor do manual escreve que ele precisa ser adicionado como um dispositivo permanente para esta máquina nas configurações da Caixa Virtual USB.
O resultado da sincronização na imagem abaixo:

O resultado da minha inscrição é apresentado no seguinte vídeo:
Conclusão
Tenho muitas memórias maravilhosas relacionadas ao Cybiko Xtreme e, mais uma vez, tocar nesse maravilhoso dispositivo foi muito bom para mim. Quero dizer muito obrigado aos seus criadores pelo trabalho realizado. Também gostaria de agradecer aos criadores do emulador, fóruns e sites no Cybiko, bem como minha esposa por sua ajuda na gravação do vídeo e na edição deste artigo.
Obrigado a todos pela atenção!