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

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;
                     52:        } inp, out;
                     53: 
                     54:        // Editline を使うかどうかのフラグ。継承側がセットする。
                     55:        // 今のところ TCP console では動かないのでこんなことになっている。
                     56:        bool use_editline = false;
                     57: 
                     58:        // Editline
                     59:        const char *prompt = NULL;
                     60: #if defined(HAVE_HISTEDIT_H)
                     61:        EditLine *el = NULL;
                     62:        History *hist = NULL;
                     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: // 標準入出力コンソール
                     75: class ConsoleStdio
                     76:        : public Console
                     77: {
                     78:  public:
                     79:        ConsoleStdio();
1.1.1.2 ! root       80:        ~ConsoleStdio() override;
1.1       root       81: 
1.1.1.2 ! root       82:        bool Init() override;
        !            83:        bool Accept() override;
        !            84:        void Close() override;
1.1       root       85: };
                     86: 
                     87: // TCP コンソール
                     88: class ConsoleTCP
                     89:        : public Console
                     90: {
1.1.1.2 ! root       91:        using inherited = Console;
1.1       root       92:  public:
                     93:        ConsoleTCP();
1.1.1.2 ! root       94:        ~ConsoleTCP() override;
1.1       root       95: 
1.1.1.2 ! root       96:        bool Init() override;
        !            97:        bool Accept() override;
        !            98:        void Close() override;
1.1       root       99: 
                    100:  private:
                    101:        int ls = 0;
                    102:        int sock = 0;
                    103:        struct addrinfo *res = NULL;
                    104:        struct addrinfo *ai = NULL;
                    105: };

unix.superglobalmegacorp.com

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