X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fcmd.src%2Fnewcmdcl.h;h=6e3af3e443cd988e48e14c997e3ef4dbf757224b;hb=f27da39dbcab5678aca6d8462f1cc37a643f37e9;hp=19512133544c05360a379d45b96028f4ba2bd93c;hpb=0ad8c78844ada3a7591fc0b355c19c06c4a069b0;p=fw%2Fsdcc diff --git a/sim/ucsim/cmd.src/newcmdcl.h b/sim/ucsim/cmd.src/newcmdcl.h index 19512133..6e3af3e4 100644 --- a/sim/ucsim/cmd.src/newcmdcl.h +++ b/sim/ucsim/cmd.src/newcmdcl.h @@ -32,104 +32,68 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include "ddconfig.h" #include +#include +#include #if FD_HEADER_OK # include HEADER_FD #endif +// prj #include "pobjcl.h" - -/* - * Command line with parameters - */ - -class cl_cmdline: cl_base +// sim.src +#include "appcl.h" + +// local, cmd +#include "commandcl.h" + + +// Flags of consoles +#define CONS_NONE 0 +#define CONS_DEBUG 0x01 // Print debug messages on this console +#define CONS_FROZEN 0x02 // Console is frozen (g command issued) +#define CONS_PROMPT 0x04 // Prompt is out, waiting for input +#define CONS_INTERACTIVE 0x08 // Interactive console +#define CONS_NOWELCOME 0x10 // Do not print welcome message +#define CONS_INACTIVE 0x20 // Do not do any action +#define CONS_ECHO 0x40 // Echo commands + +#define SY_ADDR 'a' +#define ADDRESS "a" +#define SY_NUMBER 'n' +#define NUMBER "n" +#define SY_DATA 'd' +#define DATA "d" +#define SY_STRING 's' +#define STRING "s" +#define SY_MEMORY 'm' +#define MEMORY "m" +#define SY_HW 'h' +#define HW "h" +#define SY_DATALIST 'D' +#define DATALIST "D" +#define SY_BIT 'b' +#define BIT "b" + + +class cl_prompt_option: public cl_optref { +protected: + class cl_console *con; public: - char *cmd; - char *name; - class cl_list *params; - class cl_ustrings *tokens; - -public: - cl_cmdline(char *cmd); - virtual ~cl_cmdline(void); + cl_prompt_option(class cl_console *console); virtual int init(void); - - virtual int split(void); - virtual int shift(void); - virtual int repeat(void); - virtual class cl_cmd_arg *param(int num); - virtual void insert_param(int pos, class cl_cmd_arg *param); -private: - char *skip_delims(char *start); -}; - - -/* - * Command and container - */ - -// simple command -class cl_cmd: public cl_base -{ -public: - class cl_sim *sim; - class cl_strings *names; - int can_repeat; - char *short_help; - char *long_help; - -public: - cl_cmd(class cl_sim *asim, - char *aname, - int can_rep, - char *short_hlp, - char *long_hlp); - ~cl_cmd(void); - - virtual void add_name(char *name); - virtual int name_match(char *aname, int strict); - virtual int name_match(class cl_cmdline *cmdline, int strict); - virtual int syntax_ok(class cl_cmdline *cmdline); - virtual int work(class cl_cmdline *cmdline, class cl_console *con); - virtual int do_work(class cl_cmdline *cmdline, class cl_console *con); + virtual void option_changed(void); }; -// Command set is list of cl_cmd objects -class cl_cmdset: public cl_list +class cl_debug_option: public cl_prompt_option { public: - class cl_sim *sim; - class cl_cmd *last_command; - -public: - cl_cmdset(class cl_sim *asim); - - virtual class cl_cmd *get_cmd(class cl_cmdline *cmdline); - virtual void del(char *name); - virtual void replace(char *name, class cl_cmd *cmd); -}; - -// subset of commands -class cl_super_cmd: public cl_cmd -{ -public: - class cl_cmdset *commands; - -public: - cl_super_cmd(class cl_sim *asim, - char *aname, - int can_rep, - char *short_hlp, - char *long_hlp, - class cl_cmdset *acommands); - ~cl_super_cmd(void); - - virtual int work(class cl_cmdline *cmdline, class cl_console *con); + cl_debug_option(class cl_console *console); + virtual int init(void); + virtual void option_changed(void); }; - /* * Command console */ @@ -138,34 +102,52 @@ class cl_console: public cl_base { friend class cl_commander; protected: - FILE *in, *out; + FILE *in, *out, *rout/*redirected output*/; + int id; + class cl_prompt_option *prompt_option; + class cl_optref *null_prompt_option; + class cl_debug_option *debug_option; + class cl_ustrings *lines_printed; + class cl_cmd *last_command; + class cl_cmdline *last_cmdline; public: - class cl_sim *sim; - char *last_command; + class cl_app *app; int flags; // See CONS_XXXX char *prompt; - + public: - cl_console(): cl_base() {} - cl_console(char *fin, char *fout, class cl_sim *asim); - cl_console(FILE *fin, FILE *fout, class cl_sim *asim); + cl_console(void): cl_base() { app= 0; in= out= 0; flags= 0; } + cl_console(char *fin, char *fout, class cl_app *the_app); + cl_console(FILE *fin, FILE *fout, class cl_app *the_app); + cl_console(char *fin, FILE *fout); #ifdef SOCKET_AVAIL - cl_console(int portnumber, class cl_sim *asim); + cl_console(int portnumber, class cl_app *the_app); #endif - ~cl_console(void); + virtual ~cl_console(void); + virtual class cl_console *cl_console::clone_for_exec(char *fin); virtual int init(void); + virtual bool accept_last(void); + virtual void welcome(void); + virtual void redirect(char *fname, char *mode); + virtual void un_redirect(void); + virtual FILE *get_out(void) { return(rout?rout:out); } + int cmd_do_print(FILE *f, char *format, va_list ap); virtual void print_prompt(void); - virtual int printf(char *format, ...); + virtual int dd_printf(char *format, ...); + virtual int debug(char *format, ...); virtual void print_bin(long data, int bits); + virtual void print_char_octal(char c); virtual int match(int fdnum); virtual int get_in_fd(void); virtual int input_avail(void); virtual char *read_line(void); - virtual int proc_input(void); + virtual int proc_input(class cl_cmdset *cmdset); virtual bool interpret(char *cmd); - virtual bool old_command(class cl_cmdline *cmdline) { return(DD_FALSE); } + virtual void set_id(int new_id); + virtual int get_id(void) { return(id); } + virtual void set_prompt(char *p); }; #ifdef SOCKET_AVAIL @@ -174,18 +156,29 @@ class cl_listen_console: public cl_console public: int sock; public: - cl_listen_console(int serverport, class cl_sim *asim); + cl_listen_console(int serverport, class cl_app *the_app); virtual void welcome(void) {} virtual void prompt(void) {} virtual int match(int fdnum); virtual int get_in_fd(void); - virtual int proc_input(void); + virtual int proc_input(class cl_cmdset *cmdset); }; #endif +class cl_sub_console: public cl_console +{ + class cl_console *parent; +public: + cl_sub_console(class cl_console *the_parent, + FILE *fin, FILE *fout, class cl_app *the_app); + virtual ~cl_sub_console(void); + virtual int init(void); +}; + + /* * Command interpreter */ @@ -193,37 +186,44 @@ public: class cl_commander: public cl_base { public: + class cl_app *app; class cl_list *cons; fd_set read_set, active_set; int fd_num; - class cl_sim *sim; + //class cl_sim *sim; class cl_console *actual_console, *frozen_console; + class cl_cmdset *cmdset; public: - cl_commander(class cl_sim *asim); - ~cl_commander(void); + cl_commander(class cl_app *the_app, + class cl_cmdset *acmdset/*, class cl_sim *asim*/); + virtual ~cl_commander(void); virtual int init(void); - virtual class cl_console *mk_console(char *fin, char *fout, - class cl_sim *asim); - virtual class cl_console *mk_console(FILE *fin, FILE *fout, - class cl_sim *asim); + virtual class cl_console *mk_console(char *fin, char *fout); + virtual class cl_console *mk_console(FILE *fin, FILE *fout); #ifdef SOCKET_AVAIL - virtual class cl_console *mk_console(int portnumber, class cl_sim *asim); + virtual class cl_console *mk_console(int portnumber); #endif void add_console(class cl_console *console); void del_console(class cl_console *console); + void activate_console(class cl_console *console); + void deactivate_console(class cl_console *console); void set_fd_set(void); + void prompt(void); int all_printf(char *format, ...); // print to all consoles int all_print(char *string, int length); - int printf(char *format, ...); // print to actual_console + int dd_printf(char *format, ...); // print to actual_console + int dd_printf(char *format, va_list ap);// print to actual_console int debug(char *format, ...); // print consoles with debug flag set + int debug(char *format, va_list ap); // print consoles with debug flag set int flag_printf(int iflags, char *format, ...); int input_avail(void); int input_avail_on_frozen(void); int wait_input(void); int proc_input(void); + void exec_on(class cl_console *cons, char *file_name); };