|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2019 [email protected]
4: //
5:
6: #pragma once
7:
8: #include "header.h"
9: #if defined(HAVE_HISTEDIT_H)
10: #include <histedit.h>
11: #endif
12:
13: // コンソールの基本クラス
14: class Console
15: {
16: public:
17: Console();
18: virtual ~Console() { }
19:
20: // 初期化
21: virtual bool Init() = 0;
22: virtual bool Open() = 0;
23:
24: // EditLine を初期化する
25: void InitEditLine(const char *prompt);
26:
27: virtual void Close();
28:
29: // プロンプトを出力する
30: void Prompt();
31:
32: void Print(const char *fmt, ...) __printflike(2, 3);
33: void Flush();
34:
35: // 1行読み込む。
36: // 正常に読み込めれば true を返す。
37: // バッファは \0 で終端してある。
38: bool Gets(std::string&);
39:
40: // 受信データがあれば正、なければ 0 を返す。エラーなら負数を返す。
41: int Poll();
42:
43: protected:
44: void FDOpen();
45:
46: struct {
47: int fd;
48: FILE *file;
49: } inp, out;
50:
51: // Editline を使うかどうかのフラグ。継承側がセットする。
52: // 今のところ TCP console では動かないのでこんなことになっている。
53: bool use_editline = false;
54:
55: // Editline
56: const char *prompt = NULL;
57: #if defined(HAVE_HISTEDIT_H)
58: EditLine *el = NULL;
59: History *hist = NULL;
60: HistEvent hev {};
61: #endif
62:
63: private:
64: // Gets() の下請け
65: #if defined(HAVE_HISTEDIT_H)
66: bool Gets_editline(std::string& buf);
67: #endif
68: bool Gets_normal(std::string& buf);
69: };
70:
71: // 標準入出力コンソール
72: class ConsoleStdio
73: : public Console
74: {
75: public:
76: ConsoleStdio();
77: virtual ~ConsoleStdio();
78:
79: bool Init();
80: bool Open();
81: void Close();
82: };
83:
84: // TCP コンソール
85: class ConsoleTCP
86: : public Console
87: {
88: typedef Console inherited;
89: public:
90: ConsoleTCP();
91: virtual ~ConsoleTCP();
92:
93: bool Init();
94: bool Open();
95: void Close();
96:
97: private:
98: int ls = 0;
99: int sock = 0;
100: struct addrinfo *res = NULL;
101: struct addrinfo *ai = NULL;
102: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.