Développement d'applications pour un ancien PDA (Cybiko Xtreme) en 2019



Présentation


Salut Habr! Je voudrais partager mon expérience en écrivant une application pour un très vieil ordinateur de poche, qui est sérieusement en avance sur son temps, à savoir la version Cybiko Xtreme 2001. Pour ceux qui s'intéressent à la façon dont vivait un développeur mobile au début des années 2000, bienvenue chez cat.

À propos de Cybiko Xtreme


Donc, cet appareil m'est venu dans le lointain 2002 et a causé un plaisir total. Je ne pouvais pas apprécier les capacités de communication, car dans ma ville, je ne rencontrais plus de personnes avec de tels PDA, cependant, en général, la possibilité de jouer à de nombreux jeux sans avoir à s'asseoir devant un ordinateur était fantastique. À bien des égards, les créateurs de l'appareil se sont concentrés sur les capacités réseau du PDA. Les développeurs ont choisi un réseau radio maillé pour connecter les appareils entre eux. Directement, les appareils étaient interconnectés à une distance pouvant atteindre 100 mètres, mais il était possible de se connecter les uns aux autres via un autre appareil, et en théorie, avec une couverture réseau dense, la distance était illimitée. L'appareil a eu l'occasion de remplir votre profil (il semble même y attacher une photo, même si cela aurait peu de sens dans l'affichage en niveaux de gris), discuter avec d'autres utilisateurs ayant des intérêts similaires, chercher de nouveaux amis, etc. Il ressemble à tout ce réseau social, même si, à ma connaissance, un tel terme n'existait pas encore. S'il y avait beaucoup d'appareils, je pense que le projet allait décoller, mais malheureusement, quelque chose s'est mal passé avec les créateurs.

Trouver ce PDA dans mes vieilles affaires, je voulais ponostalgiser. Ce n'était pas très intéressant de jouer à d'anciens jeux (néanmoins, ils n'ont pas l'air spécialement par rapport aux nouveaux), mais essayer de développer une application et sentir comment vivaient les premiers développeurs mobiles était beaucoup plus intéressant.

Idée d'application


Étant donné que, par la nature de mon activité, je suis lié à la sécurité de l'information et que ce sujet est extrêmement intéressant pour moi, j'ai décidé de créer une application dans le même domaine. Le plus simple (et au moins quelque chose d'utile?) Me semblait l'application «gestionnaire de mots de passe». Cette application vous permet de voir comment évolue une interface utilisateur graphique, et de travailler avec le système de fichiers (stockage d'un conteneur chiffré avec des mots de passe).

En tant que cryptographie pour protéger le conteneur, j'ai décidé d'utiliser le soi-disant cryptage XOR . La clé est le mot de passe principal. La force cryptographique de ce cryptage dépend fortement de la longueur de la clé, et il n'est pas recommandé de l'utiliser dans des systèmes sérieux, cependant, ce cryptage a un sérieux plus - il est très facile à mettre en œuvre. Étant donné que l'application a été créée uniquement à des fins de divertissement, un tel cryptage est idéal.

Émulateur


La connexion de Cybiko Xtreme à un ordinateur moderne est un processus assez compliqué, j'ai donc décidé de travailler sur les lancements de test de l'application sur l'émulateur (heureusement, c'est le cas).
L'apparence est indiquée dans la figure ci-dessous.



Il existe certaines fonctionnalités pour télécharger des applications sur l'émulateur. Selon les instructions trouvées ici, l' application peut être envoyée en utilisant le bouton "Envoyer" dans la fenêtre "Console", cependant, peu importe comment j'ai essayé, je n'ai pas réussi. Le forum Planet Cybiko (malheureusement le forum est actuellement fermé) a un lien vers un outil qui vous permet de créer vos propres disques RAM Cybiko. Par conséquent, il suffit de créer un disque RAM avec une application compilée et de redémarrer l'émulateur avec.

SDK


Trouver un SDK sur Internet n'a pas été très difficile. Après avoir déballé et analysé la structure du répertoire, j'ai d'abord attiré l'attention sur le répertoire doc, qui s'est avéré être une aide très utile expliquant comment, en principe, compiler l'application, et quelle structure le projet devrait avoir.

J'ai trouvé de nombreux exemples d'applications dans le répertoire des démos. Les applications du répertoire du didacticiel étaient particulièrement intéressantes et expliquaient pas à pas les principes de développement de Cybiko Xtreme. Tout est simple, accessible et compréhensible.

Écriture de code


La structure d'un projet au contenu minimal est présentée ci-dessous:

Structure du projet
project res root.inf src source1.c … make.bat 


Le fichier root.inf contient les métadonnées de l'application, à savoir des informations sur son type (application, jeu ou bibliothèque), la version, la version minimale du système d'exploitation (comme dans Android), un nom unique, etc.

Le fichier make.bat contient des commandes pour créer l'application à l'aide de sdk. En fait, l'assemblage complet se fait avec la commande d'appel Cybiko C Compiller:

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

Remarque importante: lorsque vous construisez sur Windows 7 pour vcc.exe, vous devez définir le mode de compatibilité sur Windows XP (Service Pack 2), sinon il y a des problèmes avec le démarrage du compilateur.

Le répertoire src contient le code source du programme. Le résultat de la compilation est un fichier * .app.

Pour décrire le développement de l'application entière, un article ne suffit certainement pas, je ne décrirai donc que le tout début. Si quelqu'un a des questions, posez-les dans les commentaires ou dans PM.

Tout commence par l'initialisation du contexte d'application dans la fonction principale en appelant:

Initialisation
 long init_module(struct module_t * main_module); 


Après l'initialisation, la structure main_module contient des pointeurs vers le contexte graphique et le processus d'application en cours.

Ensuite, vous devez créer le formulaire principal. Cela se fait comme suit:

Créer un formulaire maître
 struct cFrameForm * ptr_main_form = malloc(sizeof(struct cFrameForm)); cFrameForm_ctor(ptr_main_form, "Passwords Master", main_module.m_process); 


Vérifiez s'il existe un conteneur de mots de passe sur le système de fichiers:

Vérification de la disponibilité des conteneurs
 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; } 


Nous montrons la boîte de dialogue de saisie du mot de passe principal. Si le conteneur existe déjà, nous essayons de déchiffrer avec le mot de passe principal entré. S'il n'y avait pas de conteneur, utilisez le mot de passe principal entré pour créer un nouveau conteneur.

Entrez le mot de passe principal
 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); } 


Tous les autres travaux de l'application sont construits autour d'un cycle de traitement des messages du système d'exploitation jusqu'à la fermeture du formulaire principal.

Traitement des messages
 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); } 


Le résultat du travail au démarrage dans l'émulateur est présenté ci-dessous:



Avec le code source complet, si vous le souhaitez
peut être trouvé sur github au lien.

Lancer sur un vrai appareil


Comme je l'ai déjà dit, le lancement sur un véritable appareil est difficile, car le logiciel de synchronisation de Cybiko avec un ordinateur ne prend pas en charge les systèmes d'exploitation modernes. Selon les instructions trouvées ici , j'ai pu synchroniser Cybiko avec Windows 2000 fonctionnant dans Virtual Box. Parmi les nuances, je peux noter que le programme n'a vu Cybiko que lorsqu'il était connecté via USB et automatiquement transmis à la machine virtuelle. C'est probablement pourquoi l'auteur du manuel écrit qu'il doit être ajouté en tant que périphérique permanent pour cette machine dans les paramètres USB Virtual Box.

Le résultat de la synchronisation dans l'image ci-dessous:



Le résultat de ma candidature est présenté dans la vidéo suivante:


Conclusion


J'ai beaucoup de merveilleux souvenirs liés à Cybiko Xtreme, et encore une fois, toucher ce merveilleux appareil était sacrément agréable pour moi. Je tiens à remercier chaleureusement ses créateurs pour le travail accompli. Je voudrais également remercier les créateurs de l'émulateur, des forums et des sites sur Cybiko, ainsi que ma femme pour leur aide dans le tournage de la vidéo et l'édition de cet article.

Merci à tous pour votre attention!

Source: https://habr.com/ru/post/fr445686/


All Articles