|
|
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.