Mona
Monaをmakeしよう@0.3.0a7 †
- うろうろマウス for Monaのスクリーンショットを撮るべく、Monaのmakeに挑戦中です。しかし、またしても壁が……。
- 環境
- Cygwin
- firstbootのcscとかいうのは、v2.0.50727に書き換えて作りました。
- secondbootにて
うろうろマウスをMonaOSで †
- src/servers/mouse/main.cppを直して共通パラメータの値変更が反映されるようにでもすればいいのでは?<うろうろマウス --
- マウスサーバーいじっちゃいますか… -- あっきぃ?
- あとは「うろうろマウスを移植したいのでマウスサーバーの修正よろ」ってひげぽんさんに頼むしか・・・ --
- とりあえずうろうろマウスは後にします〜 -- あっきぃ?
- 以下のようにいじれば動きました。これでよければCVSに登録しちゃいます。>あっきー -- bayside?
- include/servers/mouse.h:12付近
MSG_MOUSE_REGIST_TO_SERVER = 0x0300,
MSG_MOUSE_UNREGIST_FROM_SERVER,
MSG_MOUSE_INFO,
MSG_MOUSE_ENABLE_CURSOR,
MSG_MOUSE_DISABLE_CURSOR,
MSG_MOUSE_GET_CURSOR_POSITION,
MSG_MOUSE_SET_CURSOR_POSITION, ←追加
- src/servers/mouse/main.cpp:340付近
case MSG_MOUSE_SET_CURSOR_POSITION:
this->posX = receive.arg1;
this->posY = receive.arg2;
Paint();
Message::reply(&receive);
SendMouseInformation();
break;
- samples/non-gui/hello/hello.cpp:マウスカーソルを勝手に動かすサンプル
#include <monapi.h>
#include <monapi/messages.h>
int MonaMain(List<char*>* pekoe)
{
dword pid = monapi_get_server_thread_id(ID_MOUSE_SERVER);
MonAPI::Message::sendReceive(NULL, pid, MSG_MOUSE_SET_CURSOR_POSITION, 10, 10);
sleep(1000);
MonAPI::Message::sendReceive(NULL, pid, MSG_MOUSE_SET_CURSOR_POSITION, 20, 20);
sleep(1000);
MonAPI::Message::sendReceive(NULL, pid, MSG_MOUSE_SET_CURSOR_POSITION, 30, 30);
sleep(1000);
MonAPI::Message::sendReceive(NULL, pid, MSG_MOUSE_SET_CURSOR_POSITION, 40, 40);
return 0;
}
- replyは処理が済んでからするべきのような。特に値を代入する前にやるのはどうかと。sendReceiveはデフォルト引数があるから最後の0,NULLは書かないほうがスマートのような。 --
- SendMouseInformation()でメッセージの受け渡しをしているので先に呼ばないとデッドロックになる可能性があります。あとサンプルはあくまでサンプルですので(もちろんサンプルは登録しません)。 -- bayside?
- SendMouseInformation()では非同期で送りつけているのでデッドロックの可能性はありません。 --
- ↑のソース修正しておきました。SendMouseInformation() の先でMSG_MOUSE_SET_CURSOR_POSITION を呼ばれるといやなので早めにreplyしています。 -- bayside
- すみません、言い過ぎた部分があったので削除しておきます。 --
- SendMouseInformation() の先でMSG_MOUSE_SET_CURSOR_POSITION が呼ばれても問題は起きません。MSG_MOUSE_INFOは非同期で送っているためその結果何かメッセージが来てもキューに溜まるだけで割り込みがかかるわけではないからです。あくまでデッドロックするのはsendReceiveを送ってきた相手にreplyせずにsendReceiveしようとしたときです。そのためSendMouseInformation()から抜けてくるのはメッセージをばら撒いた後で、そのメッセージによって発生した処理を待つわけではありません。逆に言うと待っていても何か変化が起こるわけではないので、SendMouseInformation()の前でreplyするのは特に構わないです。 --
- Paint()の先を見ると分かりますが、共通パラメータを書き換えています。共通パラメータを見ることでMSG_MOUSE_GET_CURSOR_POSITIONなしにマウスの位置を取得することができるので、共通パラメータを書き換える前にリプライするべきではないと思います。 --
- えっと、うろうろマウスはあとでやる予定です・・・^^;;; -- あっきぃ?
- といいつつ、作っちゃった〜!いろいろ教えてくれたBaysideさんに感謝(-人-) -- あっきぃ?
- sarではないバージョンも置いて欲しいです。 --
- sar布教活動のためにsarにしてみたんですが、やっぱりだめですか。じゃあsarinstでsar自己解凍形式にしますね!! -- あっきぃ?
- sar自己解凍形式での配布を開始しました〜(´・ω・`)b -- あっきぃ?
|