
引言
哈勃! 我想分享一下我为一台非常古老的掌上电脑编写应用程序的经验,这比Cybiko Xtreme 2001版本要早得多。 如果您对2000年代初期的移动开发人员的生活方式感兴趣,欢迎加入。
关于Cybiko Xtreme
因此,这个设备在遥远的2002年出现在我眼前,引起了极大的喜悦。 我无法欣赏其通信功能,因为在我所在的城市,我再也没有遇到过配备此类PDA的人,但是,总的来说,无需坐在电脑前就能玩很多游戏的能力真是太棒了。 在许多方面,设备的创建者专注于PDA的网络功能。 开发人员选择了无线电网状网络以将设备彼此连接。 这些设备之间的直接互连距离最大为100米,但是,可以通过另一个设备相互连接,并且理论上,由于网络覆盖范围很广,因此距离是无限的。 该设备有机会填写您的个人资料(即使在灰度显示中几乎没有意义,它甚至似乎附有照片),与具有相同兴趣的其他用户聊天,寻找新朋友等。 它类似于所有这些社交网络,但是据我所知,那时还不存在该术语。 如果有很多设备,我认为该项目将会开始,但是不幸的是,创作者出了点问题。
在我的旧东西中找到这款PDA,我想作废。 玩旧游戏并不是很有趣(不过,与新游戏相比,它们看起来并不特别),但是尝试开发应用程序并感觉第一批移动开发者的生活却有趣得多。
应用思路
由于根据我的活动性质,我与信息安全相关联,因此对我来说这个主题非常有趣,因此我决定在同一领域中创建一个应用程序。 最简单(至少有用)?在我看来,应用程序是“密码管理器”。 该应用程序使您可以查看图形用户界面的开发方式,以及如何使用文件系统(使用密码存储加密的容器)。
为了保护容器,我决定使用所谓的
XOR加密 。 密钥是主密码。 这种加密的加密强度在很大程度上取决于密钥长度,因此不建议在严肃的系统中使用它,但是,这种加密有一个重要的优点-易于实现。 由于仅出于娱乐目的而创建应用程序,因此这种加密是理想的。
仿真器
将Cybiko Xtreme连接到现代计算机是一个相当复杂的过程,因此我决定在模拟器上测试该应用程序的测试启动(很幸运)。
外观如下图所示。

有一些功能可以将应用程序下载到仿真器。 根据
此处找到的说明
,可以使用“控制台”窗口中的“发送”按钮发送应用程序,但是,无论如何尝试,都无法成功。 Planet Cybiko论坛(不幸的是,该论坛当前关闭)具有指向工具的链接,该工具使您可以创建自己的Cybiko ram磁盘。 因此,创建带有已编译应用程序的ram磁盘并使用它重新启动仿真器就足够了。
开发包
在互联网上找到一个SDK并不是很困难。 在解压缩并分析目录结构之后,我首先将注意力放在doc目录上,结果证明这对解释原理上如何编译应用程序以及项目应具有的结构非常有用。
我在demos目录中找到了许多示例应用程序。 教程目录中的应用程序特别有趣,它逐步解释了Cybiko Xtreme的开发原理。 一切都很简单,可访问且易于理解。
代码编写
内容最少的项目结构如下所示:
项目结构project res root.inf src source1.c … make.bat
root.inf文件包含应用程序的元数据,即有关其类型(应用程序,游戏或库),版本,操作系统的最低版本(就像Android中一样),唯一名称等信息。
make.bat文件包含用于使用sdk构建应用程序的命令。 实际上,整个组装是通过Cybiko C Compiller调用命令完成的:
"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),否则编译器会启动。
src目录包含该程序的源代码。 编译结果为* .app文件。
要描述整个应用程序的开发,绝对不能只写一篇文章,因此我将仅描述其开始。 如果有人有疑问,请在评论中或PM中提问。
这一切都始于通过调用以下命令在主函数中初始化应用程序上下文:
初始化 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() { 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; }
我们显示主密码输入对话框。 如果容器已经存在,那么我们尝试使用输入的主密码进行解密。 如果没有容器,则使用输入的主密码创建一个新的容器。
输入主密码 void get_master_password(struct cFrameForm * ptr_form, char * master_password) {
该应用程序的所有其他工作都围绕一个处理来自操作系统的消息直至关闭主窗体的周期来构建。
讯息处理 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:
在模拟器中启动时的工作结果如下所示:

如有需要,请提供完整的源代码
可以在github的链接上找到。在真实设备上启动
正如我已经说过的那样,很难在真实设备上启动,因为用于将Cybiko与计算机同步的软件不支持现代操作系统。 根据
此处找到的说明,我能够将Cybiko与Virtual Box中运行的Windows 2000同步。 在细微差别中,我可以注意到该程序仅在通过USB连接并自动转发到虚拟机时看到了Cybiko。 这可能就是手册作者写道,需要在USB Virtual Box设置中将他添加为该设备的永久设备的原因。
下图的同步结果:

以下视频显示了我的申请结果:
结论
Cybiko Xtreme带给我很多美好的回忆,再次触摸这个奇妙的设备对我来说真是太好了。 我要感谢其创作者所做的工作。 我还要感谢模拟器的创建者,Cybiko上的论坛和站点,以及我的妻子在拍摄视频和编辑本文方面的帮助。
谢谢大家的关注!