--- nono/cli/cli_app.cpp 2026/04/29 17:05:27 1.1.1.13 +++ nono/cli/cli_app.cpp 2026/04/29 17:05:49 1.1.1.14 @@ -23,7 +23,6 @@ class CLIApp bool Parse(); int OnCreate(); void OnHalt(); - void OnAppExit(); int ac {}; char **av {}; @@ -50,7 +49,7 @@ CLIApp::OnInit() int rv; // CLI 側では関係ないが wx 側で必要なので初期化は2ステージに分かれている - rv = gMainApp.Init1(true, ac, av); + rv = gMainApp.Init1(ac, av, NULL); if (rv != MainApp::PASS) { return rv; } @@ -81,14 +80,7 @@ CLIApp::OnInit() int CLIApp::OnCreate() { - CUIMessage::Connect(UIMessage::APPEXIT, - [&](const UIMessage&) { OnAppExit(); }); - if (gMainApp.Has(VMCap::M68K)) { - CUIMessage::Connect(UIMessage::HALT, - [&](const UIMessage&) { OnHalt(); }); - } - // UIMessage の処理を開始する。 - UIMessage::Attach(&CUIMessage::Process); + gMainApp.GetUIMessage()->StartUIMessage(&CUIMessage::Process); // 電源投入 auto power = GetPowerDevice(); @@ -108,17 +100,29 @@ CLIApp::OnCreate() } // パイプから1メッセージ分読み出す - UIMessage m; + union64 m; if (read((int)kev.ident, &m, sizeof(m)) < 0) { warn("CLIApp::OnCreate: read"); // XXX どうする? continue; } + uint id = m.h; - // ディスパッチ - CUIMessage::Dispatch(m); + // 少ないのでこの場でディスパッチする。 + switch (id) { + case UIMessage::APPEXIT: + exit_request = true; + break; + case UIMessage::HALT: + OnHalt(); + break; + default: + break; + } } + gMainApp.GetUIMessage()->StopUIMessage(); + return 0; } @@ -129,10 +133,3 @@ CLIApp::OnHalt() // どうする? warnx("Double bus fault has occurred in VM"); } - -// アプリケーションの終了要求で呼ばれるコールバック。 -void -CLIApp::OnAppExit() -{ - exit_request = true; -}