
Introduccion
Hola habr Me gustaría compartir mi experiencia escribiendo una aplicación para una computadora de mano muy antigua, que está muy adelantada a su tiempo, a saber, la versión Cybiko Xtreme 2001. Para aquellos que estén interesados en cómo vivía un desarrollador móvil a principios de la década de 2000, bienvenidos a cat.
Sobre Cybiko Xtreme
Entonces, este dispositivo vino a mí en el lejano 2002 y causó un completo deleite. No podía apreciar las capacidades de comunicación, ya que en mi ciudad nunca conocí a personas con tales PDA, sin embargo, en general, la capacidad de jugar muchos juegos sin tener que sentarme en una computadora fue fantástica. En muchos sentidos, los creadores del dispositivo se centraron en las capacidades de red de la PDA. Los desarrolladores eligieron una red de malla de radio para conectar los dispositivos entre sí. Directamente, los dispositivos estaban interconectados a una distancia de hasta 100 metros, sin embargo, era posible conectarse entre sí a través de otro dispositivo y, en teoría, con una cobertura de red densa, la distancia era ilimitada. El dispositivo tuvo la oportunidad de completar su perfil (incluso parece adjuntar una foto, aunque tendría poco sentido en la pantalla en escala de grises), chatear con otros usuarios con intereses similares, buscar nuevos amigos, etc. Se parece a toda esta red social, aunque, por lo que sé, ese término aún no existía. Si hubiera muchos dispositivos, creo que el proyecto despegaría, sin embargo, desafortunadamente, algo salió mal con los creadores.
Al encontrar este PDA en mis cosas anteriores, quería ponostalgizar. No fue muy interesante jugar juegos antiguos (sin embargo, no se ven especialmente en comparación con los nuevos), pero tratar de desarrollar una aplicación y sentir cómo vivieron los primeros desarrolladores móviles fue mucho más interesante.
Idea de aplicación
Dado que, por la naturaleza de mi actividad, estoy conectado con la seguridad de la información y este tema es extremadamente interesante para mí, decidí crear una aplicación en la misma área. El más simple (¿y al menos algo útil?) Me pareció la aplicación "administrador de contraseñas". Esta aplicación le permite ver cómo se desarrolla una interfaz gráfica de usuario y trabajar con el sistema de archivos (almacenamiento de un contenedor cifrado con contraseñas).
Como criptografía para proteger el contenedor, decidí usar el llamado
cifrado XOR . La clave es la contraseña maestra. La fuerza criptográfica de este cifrado depende en gran medida de la longitud de la clave, y no se recomienda usarlo en sistemas serios, sin embargo, este cifrado tiene una ventaja importante: es muy fácil de implementar. Dado que la aplicación se creó únicamente con fines de entretenimiento, dicho cifrado es ideal.
Emulador
Conectar Cybiko Xtreme a una computadora moderna es un proceso bastante complicado, así que decidí trabajar en el lanzamiento de pruebas de la aplicación en el emulador (afortunadamente lo es).
La apariencia se muestra en la figura a continuación.

Hay algunas características para descargar aplicaciones al emulador. De acuerdo con las instrucciones que se encuentran
aquí, la aplicación se puede enviar utilizando el botón "Enviar" en la ventana "Consola", sin embargo, no importa cómo lo intenté, no tuve éxito. El foro Planet Cybiko (desafortunadamente el foro está actualmente cerrado) tiene un enlace a una herramienta que le permite crear sus propios discos ram Cybiko. Por lo tanto, es suficiente crear un disco ram con una aplicación compilada y reiniciar el emulador con ella.
SDK
Encontrar un SDK en Internet no fue muy difícil. Después de desempacar y analizar la estructura del directorio, primero llamé la atención sobre el directorio doc, que resultó ser una ayuda muy útil para explicar cómo, en principio, compilar la aplicación y qué estructura debería tener el proyecto.
Encontré muchas aplicaciones de muestra en el directorio de demos. Particularmente interesantes fueron las aplicaciones del directorio de tutoriales, que paso a paso explicaron los principios de desarrollo de Cybiko Xtreme. Todo es simple, accesible y comprensible.
Escritura de código
La estructura de un proyecto que tiene un contenido mínimo se presenta a continuación:
Estructura del proyectoproject res root.inf src source1.c … make.bat
El archivo root.inf contiene los metadatos de la aplicación, es decir, información sobre su tipo (aplicación, juego o biblioteca), versión, versión mínima del sistema operativo (como en Android), un nombre único, etc.
El archivo make.bat contiene comandos para construir la aplicación usando sdk. De hecho, todo el ensamblaje se realiza con el comando de llamada 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: al compilar en Windows 7 para vcc.exe, debe establecer el modo de compatibilidad en Windows XP (Service Pack 2), de lo contrario, hay problemas al iniciar el compilador.
El directorio src contiene el código fuente del programa. El resultado de la compilación es un archivo * .app.
Para describir el desarrollo de la aplicación completa, un artículo definitivamente no es suficiente, por lo que describiré solo el comienzo. Si alguien tiene preguntas, pregunte en los comentarios o en PM.
Todo comienza con la inicialización del contexto de la aplicación en la función principal llamando a:
Inicialización long init_module(struct module_t * main_module);
Después de la inicialización, la estructura main_module contiene punteros al contexto gráfico y al proceso de aplicación actual.
A continuación, debe crear el formulario principal. Esto se hace de la siguiente manera:
Crea un formulario maestro struct cFrameForm * ptr_main_form = malloc(sizeof(struct cFrameForm)); cFrameForm_ctor(ptr_main_form, "Passwords Master", main_module.m_process);
Compruebe si hay un contenedor de contraseña en el sistema de archivos:
Comprobación de disponibilidad de contenedores 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 el cuadro de diálogo de entrada de contraseña maestra. Si el contenedor ya existe, intentamos descifrar con la contraseña maestra ingresada. Si no había un contenedor, use la contraseña maestra ingresada para crear un nuevo contenedor.
Ingrese la contraseña maestra void get_master_password(struct cFrameForm * ptr_form, char * master_password) {
Todo el trabajo posterior de la aplicación se basa en un ciclo de procesamiento de mensajes desde el sistema operativo hasta que se cierra el formulario principal.
Procesamiento de mensajes 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:
El resultado del trabajo al inicio en el emulador se presenta a continuación:

Con el código fuente completo, si lo desea
se puede encontrar en github en el enlace.Lanzamiento en un dispositivo real
Como ya dije, iniciar en un dispositivo real es difícil, porque el software para sincronizar Cybiko con una computadora no es compatible con los sistemas operativos modernos. De acuerdo con las instrucciones que se encuentran
aquí , pude sincronizar Cybiko con Windows 2000 ejecutándose en Virtual Box. De los matices, puedo notar que el programa vio a Cybiko solo cuando se conectó a través de USB y se reenvió automáticamente a la máquina virtual. Esta es probablemente la razón por la cual el autor del manual escribe que debe agregarse como dispositivo permanente para esta máquina en la configuración de la Caja virtual USB.
El resultado de la sincronización en la imagen a continuación:

El resultado de mi solicitud se presenta en el siguiente video:
Conclusión
Tengo muchos recuerdos maravillosos relacionados con Cybiko Xtreme, y una vez más tocar este maravilloso dispositivo fue muy agradable para mí. Quiero agradecerles a sus creadores por el trabajo realizado. También me gustaría agradecer a los creadores del emulador, foros y sitios en Cybiko, así como a mi esposa por su ayuda para filmar el video y editar este artículo.
¡Gracias a todos por su atención!