Annotation of nono/vm/uimessage.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2021 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // VM から UI へのメッセージ機構
        !             9: //
        !            10: 
        !            11: #pragma once
        !            12: 
        !            13: #include "fixedqueue.h"
        !            14: #include <functional>
        !            15: 
        !            16: class UIMessage
        !            17: {
        !            18:  public:
        !            19:        // メッセージ ID
        !            20:        enum ID {
        !            21:                NONE = 0,
        !            22: 
        !            23:                // VM 電源オフになったのでアプリケーションを終了する場合
        !            24:                POWEROFF,
        !            25: 
        !            26:                // MPU がホールト状態になった
        !            27:                HALT,
        !            28: 
        !            29:                // SCSI (各 ID) のメディア状態が変わった (Load/Unload)
        !            30:                SCSI_MEDIA_CHANGE,
        !            31: 
        !            32:                // SCSI メディアの挿入に失敗した
        !            33:                SCSI_MEDIA_FAILED,
        !            34: 
        !            35:                // キー入力状態が変わった
        !            36:                KEYBOARD,
        !            37: 
        !            38:                // LCD 状態が変わった
        !            39:                LCD,
        !            40: 
        !            41:                ID_MAX,
        !            42:        };
        !            43: 
        !            44:        using Queue = FixedQueue<UIMessage, 16>;
        !            45: 
        !            46:  public:
        !            47:        UIMessage();
        !            48: 
        !            49:        ID GetID() const { return id; }
        !            50:        int GetArg() const { return arg; }
        !            51: 
        !            52:        // メッセージ処理関数をアタッチ
        !            53:        static void Attach(const std::function<void(Queue&)>& process_);
        !            54: 
        !            55:        // VM 外に向けてメッセージを投函
        !            56:        // 新しい UIMessage を生成して投函
        !            57:        static void Post(ID id);
        !            58:        // 新しい UIMessage を生成して投函(argあり)
        !            59:        static void Post(ID id, int arg);
        !            60: 
        !            61:  protected:
        !            62:        UIMessage(ID id_, int arg_);
        !            63: 
        !            64:        // 自身を投函
        !            65:        void Post();
        !            66: 
        !            67:  private:
        !            68:        ID id;
        !            69:        int arg;
        !            70: 
        !            71:        static Queue queue;
        !            72: 
        !            73:        // メッセージ処理コールバック
        !            74:        static std::function<void(Queue&)> process;
        !            75: };

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.