2019年の古いPDA(Cybiko Xtreme)のアプリケーション開発





はじめに



こんにちはHabr! 非常に古いハンドヘルドコンピュータ用のアプリケーションを作成した経験を共有したいと思います。これは、その時代を大きく先取りしており、2001年のCybiko Xtremeです。 モバイル開発者が2000年代前半にどのように暮らしていたかに興味がある人は、catを歓迎します。



Cybiko Xtremeについて



それで、このデバイスは2002年の遠い頃に私に来て、完全な喜びを引き起こしました。 私の街ではそのようなPDAを持っている人とは一度も会ったことがないので、コミュニケーション能力を評価することはできませんでしたが、一般的には、コンピューターに座らずに多くのゲームをプレイする能力は素晴らしいものでした。 多くの点で、デバイスの作成者はPDAのネットワーク機能に焦点を合わせました。 開発者は、無線メッシュネットワークを選択して、デバイスを相互に接続しました。 デバイスは直接最大100メートルの距離で相互接続されていましたが、別のデバイスを介して相互に接続することは可能で、理論的には、高密度のネットワークカバレッジでは、距離は無制限でした。 デバイスには、プロファイルを記入する機会があり(グレースケール表示ではほとんど意味がありませんが、写真を添付するようです)、同様の関心を持つ他のユーザーと通信し、新しい友達を探すなどします。 私の知る限り、このような用語はまだ存在していませんでしたが、このソーシャルネットワークに似ています。 たくさんのデバイスがあった場合、プロジェクトはうまくいくと思いますが、残念ながら、クリエイターに何か問題が生じました。



私の古いものにこのCCPを見つけたので、私はponostalgizeしたかったです。 古いゲームをプレイすることはそれほど面白くはありませんでした(それでも、新しいゲームと比べて見た目はあまりよくありません)が、アプリケーションを開発し、最初のモバイル開発者がどのように住んでいたかを感じるのはずっと面白かったです。



アプリケーションのアイデア



私の活動の性質上、私は情報セキュリティに関連しており、このトピックは私にとって非常に興味深いので、同じ分野でアプリケーションを作成することにしました。 最も単純な(そして少なくとも何か有用なものは?)アプリケーションの「パスワードマネージャ」と思われました。 このアプリケーションを使用すると、グラフィカルユーザーインターフェイスの開発方法を確認し、ファイルシステム(暗号化されたコンテナーとパスワードの保存)を操作できます。



コンテナーを保護する暗号として、私はいわゆるXOR暗号化を使用することにしました。 キーはマスターパスワードです。 この暗号化の暗号強度はキーの長さに強く依存し、深刻なシステムで使用することは推奨されませんが、この暗号化には1つの深刻なプラスがあります-実装が非常に簡単です。 アプリケーションは娯楽目的のためだけに作成されたため、このような暗号化は理想的です。



エミュレーター



Cybiko Xtremeを最新のコンピューターに接続するのはかなり複雑なプロセスであるため、エミュレーターでアプリケーションのテスト起動を行うことにしました(残念ながらそうです)。

外観を次の図に示します。







エミュレータにアプリケーションをダウンロードするための機能がいくつかあります。 ここに記載ている指示に従って、「コンソール」ウィンドウの「送信」ボタンを使用しアプリケーションを送信できますが、どのように試しても成功しませんでした。 Planet Cybikoフォーラム(残念ながら現在フォーラムは閉じられています)には、独自のCybikoラムディスクを作成できるツールへのリンクがあります。 したがって、コンパイルされたアプリケーションでRAMディスクを作成し、それでエミュレータを再起動するだけで十分です。



SDK



インターネットで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
      
      





重要な注意:vcc.exe用にWindows 7でビルドする場合、互換モードをWindows XP(Service Pack 2)に設定する必要があります。そうしないと、コンパイラーの起動に問題があります。



srcディレクトリには、プログラムのソースコードが含まれています。 コンパイル結果は* .appファイルです。



アプリケーション全体の開発を説明するために、1つの記事では間違いなく十分ではないため、最初の部分のみを説明します。 誰かに質問がある場合は、コメントまたは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) { // 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をVirtual Boxで実行されているWindows 2000と同期させることができました。 ニュアンスのうち、プログラムがCybikoを認識したのは、USB経由で接続され、仮想マシンに自動的に転送された場合のみです。 これがおそらく、マニュアルの著者が、USB Virtual Box設定でこのマシンの永続的なデバイスとして追加する必要があると書いている理由です。



以下の図の同期の結果:







私の申請の結果は、次のビデオに示されています。





おわりに



Cybiko Xtremeに関連する素晴らしい思い出がたくさんあります。この素晴らしいデバイスに触れることは、私にとってとても嬉しいことです。 作成者の仕事に感謝します。 また、Cybikoのエミュレータ、フォーラム、サイトの作成者、およびビデオを撮影してこの記事を編集してくれた妻にも感謝したいと思います。



ご清聴ありがとうございました!



All Articles