summaryrefslogtreecommitdiff
path: root/sim/ucsim/cmd.src/commandcl.h
diff options
context:
space:
mode:
authorXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
committerXavier ASUS <xavi92psx@gmail.com>2019-10-18 00:31:54 +0200
commit268a53de823a6750d6256ee1fb1e7707b4b45740 (patch)
tree42c1799a9a82b2f7d9790ee9fe181d72a7274751 /sim/ucsim/cmd.src/commandcl.h
downloadsdcc-gas-268a53de823a6750d6256ee1fb1e7707b4b45740.tar.gz
sdcc-3.9.0 fork implementing GNU assembler syntax
This fork aims to provide better support for stm8-binutils
Diffstat (limited to 'sim/ucsim/cmd.src/commandcl.h')
-rw-r--r--sim/ucsim/cmd.src/commandcl.h276
1 files changed, 276 insertions, 0 deletions
diff --git a/sim/ucsim/cmd.src/commandcl.h b/sim/ucsim/cmd.src/commandcl.h
new file mode 100644
index 0000000..c7cd599
--- /dev/null
+++ b/sim/ucsim/cmd.src/commandcl.h
@@ -0,0 +1,276 @@
+/*
+ * Simulator of microcontrollers (cmd.src/commandcl.h)
+ *
+ * Copyright (C) 2002,02 Drotos Daniel, Talker Bt.
+ *
+ * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
+ *
+ */
+
+/* This file is part of microcontroller simulator: ucsim.
+
+UCSIM is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+UCSIM is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with UCSIM; see the file COPYING. If not, write to the Free
+Software Foundation, 59 Temple Place - Suite 330, Boston, MA
+02111-1307, USA. */
+/*@1@*/
+
+#ifndef CMD_COMMAND_HEADER
+#define CMD_COMMAND_HEADER
+
+#include "ddconfig.h"
+
+// prj
+#include "pobjcl.h"
+
+// local, cmd
+#include "newcmdcl.h"
+
+
+enum cmd_operate_on {
+ operate_on_none,
+ operate_on_app,
+ operate_on_sim,
+ operate_on_uc
+};
+
+
+/*
+ * Command line with parameters
+ */
+
+class cl_cmdline: public cl_base
+{
+public:
+ class cl_app *app;
+ char *cmd;
+ char *rest;
+ //char *name;
+ class cl_list *params;
+ class cl_ustrings *tokens;
+ const char *matched_syntax;
+ class cl_console_base *con;
+
+public:
+ cl_cmdline(class cl_app *the_app, char *acmd, class cl_console_base *acon);
+ virtual ~cl_cmdline(void);
+ virtual int init(void);
+
+private:
+ virtual void split_out_string(char **_start, char **_end);
+ virtual void split_out_output_redirection(char **_start, char **_end);
+ virtual void split_out_bit(char *dot, char *param_str);
+ virtual void split_out_array(char *dot, char *param_str);
+public:
+ 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);
+ virtual bool syntax_match(class cl_uc *uc, const char *syntax);
+ virtual bool set_data_list(class cl_cmd_arg *parm, int *iparm);
+ virtual int nuof_params(void) { return(params->get_count()); }
+ virtual bool restart_at_rest(void);
+private:
+ char *skip_delims(char *start);
+};
+
+
+/*
+ * Command and container
+ */
+
+class cl_cmdset;
+
+// simple command
+class cl_cmd: public cl_base
+{
+public:
+ enum cmd_operate_on operate_on;
+ class cl_strings *names;
+ int can_repeat;
+ chars usage_help;
+ chars short_help;
+ chars long_help;
+
+public:
+ cl_cmd(enum cmd_operate_on opon,
+ const char *aname,
+ int can_rep);
+ virtual ~cl_cmd(void);
+
+ virtual int init(void) { set_help(); return 0; }
+ virtual void set_help(void) {}
+ virtual void set_help(const char *usage_hlp, const char *short_hlp, const char *long_hlp);
+ virtual class cl_cmdset *get_subcommands(void) { return(0); }
+ virtual void add_name(const char *nam);
+ virtual int name_match(const 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_app *app,
+ class cl_cmdline *cmdline, class cl_console_base *con);
+ virtual int do_work(class cl_cmdline *cmdline, class cl_console_base *con);
+ virtual int do_work(class cl_app *app,
+ class cl_cmdline *cmdline, class cl_console_base *con);
+ virtual int do_work(class cl_sim *sim,
+ class cl_cmdline *cmdline, class cl_console_base *con);
+ virtual int do_work(class cl_uc *uc,
+ class cl_cmdline *cmdline, class cl_console_base *con);
+ virtual void print_short(class cl_console_base *con);
+ virtual void syntax_error(class cl_console_base *con);
+};
+
+#define COMMAND_HEAD(CLASS_NAME) \
+class CLASS_NAME : public cl_cmd\
+{
+#define COMMAND_HEAD_ANCESTOR(CLASS_NAME,ANCESTOR) \
+class CLASS_NAME : public ANCESTOR \
+{
+
+#define COMMAND_METHODS(CLASS_NAME) \
+public:\
+ CLASS_NAME (const char *aname,\
+ int can_rep):\
+ cl_cmd(operate_on_none, aname, can_rep) {} \
+ virtual int do_work(class cl_cmdline *cmdline, class cl_console_base *con);\
+ virtual void set_help(void);
+
+#define COMMAND_METHODS_ON(ON,CLASS_NAME) \
+public:\
+ CLASS_NAME (const char *aname,\
+ int can_rep):\
+ cl_cmd(operate_on_ ## ON, aname, can_rep) {} \
+ virtual int do_work(class cl_ ## ON * ON ,\
+ class cl_cmdline *cmdline, class cl_console_base *con);\
+ virtual void set_help(void);
+
+#define COMMAND_METHODS_ANCESTOR(CLASS_NAME,ANCESTOR) \
+public:\
+ CLASS_NAME (const char *aname, int can_rep):\
+ ANCESTOR (aname, can_rep) {} \
+ virtual int do_work(class cl_cmdline *cmdline, class cl_console_base *con);\
+ virtual void set_help(void);
+
+#define COMMAND_METHODS_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR) \
+public:\
+ CLASS_NAME (const char *aname, int can_rep):\
+ ANCESTOR (aname, can_rep) {} \
+ virtual int do_work(class cl_ ## ON * ON ,\
+ class cl_cmdline *cmdline, class cl_console_base *con);\
+ virtual void set_help(void); \
+
+
+#define COMMAND_TAIL }
+
+#define COMMAND(CLASS_NAME) \
+COMMAND_HEAD(CLASS_NAME) \
+COMMAND_METHODS(CLASS_NAME) \
+COMMAND_TAIL
+
+#define COMMAND_ON(ON,CLASS_NAME) \
+COMMAND_HEAD(CLASS_NAME) \
+COMMAND_METHODS_ON(ON,CLASS_NAME) \
+COMMAND_TAIL
+
+#define COMMAND_DATA(CLASS_NAME,DATA) \
+COMMAND_HEAD(CLASS_NAME) \
+public: DATA ; \
+COMMAND_METHODS(CLASS_NAME)\
+COMMAND_TAIL
+
+#define COMMAND_DATA_ON(ON,CLASS_NAME,DATA) \
+COMMAND_HEAD(CLASS_NAME) \
+public: DATA ; \
+COMMAND_METHODS_ON(ON,CLASS_NAME)\
+COMMAND_TAIL
+
+#define COMMAND_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR) \
+COMMAND_HEAD_ANCESTOR(CLASS_NAME,ANCESTOR) \
+COMMAND_METHODS_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR) \
+COMMAND_TAIL
+
+#define COMMAND_DATA_ANCESTOR(CLASS_NAME,ANCESTOR,DATA) \
+COMMAND_HEAD_ANCESTOR(CLASS_NAME,ANCESTOR) \
+public: DATA ; \
+COMMAND_METHODS_ANCESTOR(CLASS_NAME,ANCESTOR)\
+COMMAND_TAIL
+
+#define COMMAND_DATA_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR,DATA) \
+COMMAND_HEAD_ANCESTOR(CLASS_NAME,ANCESTOR) \
+public: DATA ; \
+COMMAND_METHODS_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR)\
+COMMAND_TAIL
+
+#define COMMAND_DO_WORK(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_cmdline *cmdline, class cl_console_base *con)
+#define COMMAND_DO_WORK_APP(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_app *app,\
+ class cl_cmdline *cmdline, class cl_console_base *con)
+#define COMMAND_DO_WORK_SIM(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_sim *sim,\
+ class cl_cmdline *cmdline, class cl_console_base *con)
+#define COMMAND_DO_WORK_UC(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_uc *uc,\
+ class cl_cmdline *cmdline, class cl_console_base *con)
+
+#define CMDHELP(CLASS_NAME,USAGE_HLP,SHORT_HLP,LONG_HLP) \
+ void \
+ CLASS_NAME::set_help(void) \
+ { \
+ usage_help=(char*)USAGE_HLP; \
+ short_help=(char*)SHORT_HLP; \
+ long_help=(char*)LONG_HLP; \
+ }
+
+// Command set is list of cl_cmd objects
+class cl_cmdset: public cl_list
+{
+public:
+ //class cl_sim *sim;
+ //class cl_cmd *last_command;
+
+public:
+ cl_cmdset(void);
+ //cl_cmdset(class cl_sim *asim);
+
+ virtual class cl_cmd *get_cmd(class cl_cmdline *cmdline, bool accept_last);
+ virtual class cl_cmd *get_cmd(const char *cmd_name);
+ virtual void del(char *nam);
+ virtual void replace(char *nam, class cl_cmd *cmd);
+};
+
+// subset of commands
+class cl_super_cmd: public cl_cmd
+{
+public:
+ class cl_cmdset *commands;
+
+public:
+ cl_super_cmd(const char *aname,
+ int can_rep,
+ class cl_cmdset *acommands);
+ virtual ~cl_super_cmd(void);
+
+ virtual class cl_cmdset *get_subcommands(void) { return(commands); }
+ virtual int work(class cl_app *app,
+ class cl_cmdline *cmdline, class cl_console_base *con);
+};
+
+
+#endif
+
+/* End of cmd.src/commandcl.h */