|
|
1.1 ! root 1: // ! 2: // nono ! 3: // Copyright (C) 2018 [email protected] ! 4: // ! 5: ! 6: #pragma once ! 7: ! 8: #include "header.h" ! 9: #include "textscreen.h" ! 10: #include <vector> ! 11: ! 12: // ! 13: // 基本オブジェクト ! 14: // ! 15: // ログ出力機能を持つ。 ! 16: // ! 17: class Object ! 18: { ! 19: public: ! 20: Object(); ! 21: virtual ~Object(); ! 22: ! 23: // ! 24: // ログ ! 25: // ! 26: ! 27: // ログ識別名 ! 28: std::string logname; ! 29: // ログレベル ! 30: // 0: 未実装動作などのデバッグログではない情報 ! 31: // 1: 大雑把なデバッグログ ! 32: // 2: 詳細なデバッグログ ! 33: // 3: うるさいデバッグログ ! 34: int loglevel = 0; ! 35: ! 36: // メッセージ出力 ! 37: // loglevel が lv 以上の時だけ表示。 ! 38: // こちらは仮想時刻、現在の PC を表示しない。Init() など VM 実行前や ! 39: // 仮想マシン(特に仮想時刻、PC) に関係ないあたりはこちらを使用。 ! 40: inline void ! 41: putmsg(int lv, const char *fmt, ...) __printflike(3, 4) ! 42: { ! 43: if (__predict_false(loglevel >= lv)) { ! 44: va_list ap; ! 45: ! 46: va_start(ap, fmt); ! 47: vputmsg(fmt, ap); ! 48: va_end(ap); ! 49: } ! 50: } ! 51: // メッセージ出力 ! 52: void putmsg(const char *fmt, ...) __printflike(2, 3); ! 53: void vputmsg(const char *fmt, va_list ap) __printflike(2, 0); ! 54: ! 55: // ログ出力 ! 56: // loglevel が lv 以上の時だけ表示。 ! 57: // 仮想時刻と現在の PC も表示する。VM 実行中は基本的にこれで表示。 ! 58: inline void ! 59: putlog(int lv, const char *fmt, ...) __printflike(3, 4) ! 60: { ! 61: if (__predict_false(loglevel >= lv)) { ! 62: va_list ap; ! 63: ! 64: va_start(ap, fmt); ! 65: vputlog(fmt, ap); ! 66: va_end(ap); ! 67: } ! 68: } ! 69: // ログ出力(ログレベル限定なし) ! 70: void putlog(const char *fmt, ...) __printflike(2, 3); ! 71: void vputlog(const char *fmt, va_list ap) __printflike(2, 0); ! 72: ! 73: // デバイス名(デバッグ表示用) ! 74: // XXX オブジェクトなのにデバイス名とは一体... ! 75: const char *devname = NULL; ! 76: ! 77: // ログの最新行 ! 78: char lastbuf[1024] {}; ! 79: ! 80: // ! 81: // モニター ! 82: // ! 83: ! 84: // モニター更新 (派生クラス側で用意) ! 85: // 戻り値はモニタースクリーンの有無。 ! 86: // 基底クラスのこれはモニタースクリーンを提供していないので false を返す。 ! 87: // 派生クラス側のは必ず true を返すこと。 ! 88: virtual bool MonitorUpdate(); ! 89: ! 90: // モニター用のテキストスクリーン ! 91: TextScreen monitor; ! 92: }; ! 93: ! 94: // 全オブジェクトのリスト ! 95: extern std::vector<Object*> gObjects;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.