パッチ適用その他

 

Step-1

まずは簡単なところから始めよう。スクリーンセーバー機能の実装で発覚した、タイマー開放問題の対応をしておこう。対応はいたって簡単。タイマー開放処理の中で、念のため開放前にタイマーキャンセル関数を呼び出すだけだ。キャンセルが必要かどうかについても、関数の中で判断してくれるので、本当に呼び出すだけでよいのだ。これでいきなりタイマーを開放しても大丈夫。対応完了であります。これ以上書くことがありません(笑。

 


Step-2

次はちょっと冒険(?)をして、ウィンドウ作成APIを改造することにしよう。これはOSを改造し始めてからずーーっと気になっていたんだけど、なんだかんだで先延ばしにしてきた。メニュー機能も実装した今、まさに対応の時ではないか。きっとそうだ、今こそアクティブ化するのだ〜。そもそも、コンソールについてはもともとアクティブ化が実装されているため、余計に気になるんだよね、コレ。アプリが時計だけなら気にならないんだけど・・・(笑。

さあ本題に入ろう。アクティブ化は、key_winという変数で管理されている。これはメイン関数のローカルで定義されており、このままでは非常に具合が悪い。そこで、SHTCTL構造体に格納してどこからでも値を参照できる様にした。値の保管はkeywin_on関数内で行う。keywin_off関数の呼び出しもこの関数から行ことで、アクティブ化が簡単にできる様になる。既存でkey_winの値を直接操作している部分については、構造体のkey_winを使用する様に修正した。これで準備が完了したので、APIにkeywin_on関数の呼び出しを追加してすべて完了〜。ついでってわけじゃないんだけど、ウィンドウのタイトル部分を1ドットいじってます。はっきり言って、ぱっと見ではrapperでもわかりません(笑。とても暇で暇でしょうがなかったら探してみてください。ま、ソースを比較すれば一発ですが・・・(笑。



 Step-3

ウィンドウ作成APIにアクティブ化を追加できたところで、ウィンドウを最小化したときに他のウィンドウをアクティブ化する処理を追加しよう。今まで違ったの?って感じかもしれないけど、違ったんデス。えへ。修正は一箇所、一瞬で終わるんだけどね。ウィンドウが閉じられたときの処理の条件に、最小化された場合を加えれば完成。これで不自然なところがなくなったかな。よかったよかった。



Step-4

さ〜て、今度は実機実行時の不具合について対応します。これはrapuOSの親とも言うべき「はりぼてOS」で発覚したもので、サポートの方で検証が行われた。すべての実機で発生するわけではないのだが、なるべく多くの機種で動作した方がいいに決まってるので、rapuOSでも適用することにした。修正箇所等の詳細についてはサポートの方を参照してほしい。それ程大幅な修正ではないのですぐに対応は完了したが、対象となる実機がないのでrapperは確認できないのが残念なところだ。ま、実機で証明された対応なので、まず問題ないはずです。



Step-5

次もはりぼて系OS共通の修正です。かなり微妙なタイミングでないと不具合が発生しないので、いまのところ実害はないんだけど、論理的に不具合が生じる可能性があるので対応しておこう。と、何を修正するのか言ってなかったが、FIFO書き込み時の排他制御を行う。やることはごく簡単で、FIFO書き込みをする前にCLIして書き込み後にSTIする。呼び出し側のコードが複雑にならない様に、これらの3つの動作を行う関数を用意した。連続してFIFO書き込みを実施する場合等は、CLIした後もとの関数を呼び出し、STIすることにした。気をつけることと言えば、割り込み関数内ではこの対応を適用しないことだ。何も考えずにSTIしてしまうと異常終了する可能性がある。はい、rapperは身をもって証明してみました(笑。ともあれ、また一歩完成形に近づいたのだ(本当か?



Step-6
今度ははりぼて系OS共通の既知のバグ修正です。これはサポートのページに対応がすべて載っているので、詳細はそちらを参照してほしい。まあ、本当はもっと早くに対応しても良かったんだけど、開発が落ち着いてからでもいいかなと先延ばしにしてきたので、ここで一緒に対応してしまおう。以下に紹介しておきます。bug0000:strncmpをmemcmpに変更。bug0001:gviewでファイルが見つからなかった場合の対応。bug0005:8文字以上のファイル名を指定した場合の8文字以降の区別対応。bug0006:calcの演算子の優先順位修正。


Step-7
最後に2つ程アプリの修正をしておこう。まずはスクリーンセーバーの乱数発生系列の変更を追加する。というのは、そのうちこれを簡単なゲーム化しようと思うと、毎回組み合わせが同じでは成り立たない。実際ゲームにするときはもうちょっと考えるけどね。スクリーンセーバーにしても、同じよりは違った方が見ごたえがあるといものだ。別に見なくてもいいんだけどね(笑。というわけでsrandを追加してみた。最後はひよひよさん提供のCPUIDがバージョンアップして、APIを使用しなくても動作する様になったので、その対応だ。とは言っても、CPUID関連のAPIを削除して、新しいバージョンを組み込むだけ。なんとも簡単にできてしまった。ひよひよさんに感謝&今後のバージョンアップに期待!!



最後に
画像がないのも寂しいので、いつものスクリーンショットでも・・・。

Sample

いまさらながら、画像を載せてみました。やっぱり1ドットはわかりません(笑。