Annotation of nono/debugger/console.h, revision 1.1.1.4

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

unix.superglobalmegacorp.com

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