Add general dispatcher for CSI and escape functions
This commit is contained in:
+34
-1
@@ -3,17 +3,45 @@
|
||||
|
||||
#include <vector>
|
||||
#include <string>
|
||||
#include <map>
|
||||
|
||||
namespace Parser {
|
||||
class Action;
|
||||
class Param;
|
||||
class Collect;
|
||||
class Clear;
|
||||
class Esc_Dispatch;
|
||||
class CSI_Dispatch;
|
||||
}
|
||||
|
||||
namespace Terminal {
|
||||
class Framebuffer;
|
||||
class Dispatcher;
|
||||
|
||||
enum Function_Type { ESCAPE, CSI };
|
||||
|
||||
class Function {
|
||||
public:
|
||||
Function() : function( NULL ) {}
|
||||
Function( Function_Type type, std::string dispatch_chars,
|
||||
void (*s_function)( Framebuffer *, Dispatcher * ) );
|
||||
void (*function)( Framebuffer *, Dispatcher * );
|
||||
};
|
||||
|
||||
typedef std::map<std::string, Function> dispatch_map_t;
|
||||
|
||||
class DispatchRegistry {
|
||||
public:
|
||||
dispatch_map_t escape;
|
||||
dispatch_map_t CSI;
|
||||
|
||||
DispatchRegistry() : escape(), CSI() {}
|
||||
};
|
||||
|
||||
static DispatchRegistry global_dispatch_registry;
|
||||
|
||||
class Dispatcher {
|
||||
private:
|
||||
public: /* tmp */
|
||||
std::string params;
|
||||
std::vector<int> parsed_params;
|
||||
bool parsed;
|
||||
@@ -23,6 +51,8 @@ namespace Terminal {
|
||||
void parse_params( void );
|
||||
|
||||
public:
|
||||
std::string terminal_to_host; /* this is the reply string */
|
||||
|
||||
Dispatcher();
|
||||
int getparam( size_t N, int defaultval );
|
||||
|
||||
@@ -31,6 +61,9 @@ namespace Terminal {
|
||||
void clear( Parser::Clear *act );
|
||||
|
||||
std::string str( void );
|
||||
|
||||
void dispatch( Function_Type type, Parser::Action *act, Framebuffer *fb );
|
||||
const std::string get_dispatch_chars( void ) { return dispatch_chars; }
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user