Version 0.3.0
[fw/sdcc] / sim / ucsim / cmd.src / newcmdcl.h
index 255a8578e732be7ca213e1ae1edaf60a66786015..c0693331efadca2117add80e658a2943188eeb31 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Simulator of microcontrollers (cmdcl.h)
+ * Simulator of microcontrollers (cmd.src/cmdcl.h)
  *
  * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
  * 
@@ -25,8 +25,8 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA. */
 /*@1@*/
 
-#ifndef CMDCL_HEADER
-#define CMDCL_HEADER
+#ifndef CMD_NEWCMDCL_HEADER
+#define CMD_NEWCMDCL_HEADER
 
 
 #include "ddconfig.h"
@@ -39,6 +39,23 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "pobjcl.h"
 
 
+#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"
+
 /*
  * Command line with parameters
  */
@@ -50,9 +67,11 @@ public:
   char *name;
   class cl_list *params;
   class cl_ustrings *tokens;
+  char *matched_syntax;
+  class cl_console *con;
 
 public:
-  cl_cmdline(char *cmd);
+  cl_cmdline(char *acmd, class cl_console *acon);
   virtual ~cl_cmdline(void);
   virtual int init(void);
 
@@ -61,6 +80,8 @@ public:
   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_sim *sim, char *syntax);
+  virtual bool set_data_list(class cl_cmd_arg *parm, int *iparm);
 private:
   char *skip_delims(char *start);
 };
@@ -74,14 +95,14 @@ private:
 class cl_cmd: public cl_base
 {
 public:
-  class cl_sim *sim;
+  //class cl_sim *sim;
   class cl_strings *names;
   int  can_repeat;
   char *short_help;
   char *long_help;
 
 public:
-  cl_cmd(class cl_sim *asim,
+  cl_cmd(//class cl_sim *asim,
         char *aname,
         int  can_rep,
         char *short_hlp,
@@ -92,10 +113,64 @@ public:
   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 int work(class cl_sim *sim,
+                  class cl_cmdline *cmdline, class cl_console *con);
+  virtual int do_work(class cl_sim *sim,
+                     class cl_cmdline *cmdline, class cl_console *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 (char *aname,\
+              int  can_rep,\
+              char *chort_help,\
+              char *long_help):\
+    cl_cmd(aname, can_rep, short_help, long_help) {}\
+  virtual int do_work(class cl_sim *sim,\
+                     class cl_cmdline *cmdline, class cl_console *con);
+#define COMMAND_METHODS_ANCESTOR(CLASS_NAME,ANCESTOR) \
+public:\
+  CLASS_NAME (char *aname,\
+              int  can_rep,\
+              char *chort_help,\
+              char *long_help):\
+    ANCESTOR (aname, can_rep, short_help, long_help) {}\
+  virtual int do_work(class cl_sim *sim,\
+                     class cl_cmdline *cmdline, class cl_console *con);
+
+#define COMMAND_TAIL \
+}
+
+#define COMMAND(CLASS_NAME) \
+COMMAND_HEAD(CLASS_NAME) \
+COMMAND_METHODS(CLASS_NAME) \
+COMMAND_TAIL
+
+#define COMMAND_DATA(CLASS_NAME,DATA) \
+COMMAND_HEAD(CLASS_NAME) \
+public: DATA ; \
+COMMAND_METHODS(CLASS_NAME)\
+COMMAND_TAIL
+
+#define COMMAND_ANCESTOR(CLASS_NAME,ANCESTOR) \
+COMMAND_HEAD_ANCESTOR(CLASS_NAME,ANCESTOR) \
+COMMAND_METHODS_ANCESTOR(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
+
+
 // Command set is list of cl_cmd objects
 class cl_cmdset: public cl_list
 {
@@ -107,6 +182,7 @@ public:
   cl_cmdset(class cl_sim *asim);
 
   virtual class cl_cmd *get_cmd(class cl_cmdline *cmdline);
+  virtual class cl_cmd *get_cmd(char *cmd_name);
   virtual void del(char *name);
   virtual void replace(char *name, class cl_cmd *cmd);
 };
@@ -118,7 +194,7 @@ public:
   class cl_cmdset *commands;
 
 public:
-  cl_super_cmd(class cl_sim *asim,
+  cl_super_cmd(//class cl_sim *asim,
               char *aname,
               int  can_rep,
               char *short_hlp,
@@ -126,7 +202,8 @@ public:
               class cl_cmdset *acommands);
   ~cl_super_cmd(void);
 
-  virtual int work(class cl_cmdline *cmdline, class cl_console *con);
+  virtual int work(class cl_sim *sim,
+                  class cl_cmdline *cmdline, class cl_console *con);
 };
 
 
@@ -136,9 +213,11 @@ public:
 
 class cl_console: public cl_base
 {
+  friend class cl_commander;
+protected:
+  FILE *in, *out;
 public:
   class cl_sim *sim;
-  FILE *in, *out;
   char *last_command;
   int flags; // See CONS_XXXX
   char *prompt;
@@ -161,9 +240,8 @@ public:
   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_app *app, class cl_cmdset *cmdset);
   virtual bool interpret(char *cmd);
-  virtual bool old_command(class cl_cmdline *cmdline) { return(DD_FALSE); }
 };
 
 #ifdef SOCKET_AVAIL
@@ -179,7 +257,7 @@ public:
 
   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
 
@@ -191,14 +269,17 @@ 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_console *actual_console, *frozen_console;
+  class cl_cmdset *cmdset;
 
 public:
-  cl_commander(class cl_sim *asim);
+  cl_commander(class cl_app *the_app,
+              class cl_cmdset *acmdset, class cl_sim *asim);
   ~cl_commander(void);
   virtual int init(void);
 
@@ -227,4 +308,4 @@ public:
 
 #endif
 
-/* End of cmdcl.h */
+/* End of cmd.src/cmdcl.h */