include <sys/types.h> to define fd_set automated build
[fw/sdcc] / sim / ucsim / cmd.src / newcmdcl.h
index 7a8500ae1fdad2b6e35ee84fbd49358f25b63afb..5d8fd47f17b221b784e7f77ea2e397079c6cca23 100644 (file)
@@ -32,12 +32,17 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #include "ddconfig.h"
 
 #include <stdio.h>
+#include <sys/types.h> // to define fd_set
 #if FD_HEADER_OK
 # include HEADER_FD
 #endif
 
+// prj
 #include "pobjcl.h"
 
+// sim.src
+#include "appcl.h"
+
 
 #define SY_ADDR                'a'
 #define ADDRESS                "a"
@@ -56,6 +61,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 #define SY_BIT         'b'
 #define BIT            "b"
 
+enum cmd_operate_on {
+  operate_on_none,
+  operate_on_app,
+  operate_on_sim,
+  operate_on_uc
+};
+
+
 /*
  * Command line with parameters
  */
@@ -63,6 +76,7 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 class cl_cmdline: cl_base
 {
 public:
+  class cl_app *app;
   char *cmd;
   char *name;
   class cl_list *params;
@@ -71,7 +85,7 @@ public:
   class cl_console *con;
 
 public:
-  cl_cmdline(char *acmd, class cl_console *acon);
+  cl_cmdline(class cl_app *the_app, char *acmd, class cl_console *acon);
   virtual ~cl_cmdline(void);
   virtual int init(void);
 
@@ -80,7 +94,7 @@ 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 syntax_match(class cl_uc *uc, char *syntax);
   virtual bool set_data_list(class cl_cmd_arg *parm, int *iparm);
 private:
   char *skip_delims(char *start);
@@ -95,14 +109,14 @@ private:
 class cl_cmd: public cl_base
 {
 public:
-  //class cl_sim *sim;
+  enum cmd_operate_on operate_on;
   class cl_strings *names;
   int  can_repeat;
   char *short_help;
   char *long_help;
 
 public:
-  cl_cmd(//class cl_sim *asim,
+  cl_cmd(enum cmd_operate_on opon,
         char *aname,
         int  can_rep,
         char *short_hlp,
@@ -113,10 +127,15 @@ 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_sim *sim,
+  virtual int work(class cl_app *app,
                   class cl_cmdline *cmdline, class cl_console *con);
+  virtual int do_work(class cl_cmdline *cmdline, class cl_console *con);
+  virtual int do_work(class cl_app *app,
+                     class cl_cmdline *cmdline, class cl_console *con);
   virtual int do_work(class cl_sim *sim,
                      class cl_cmdline *cmdline, class cl_console *con);
+  virtual int do_work(class cl_uc *uc,
+                     class cl_cmdline *cmdline, class cl_console *con);
 };
 
 #define COMMAND_HEAD(CLASS_NAME) \
@@ -130,38 +149,68 @@ class CLASS_NAME : public ANCESTOR \
 public:\
   CLASS_NAME (char *aname,\
               int  can_rep,\
-              char *chort_help,\
+              char *short_help,\
               char *long_help):\
-    cl_cmd(aname, can_rep, short_help, long_help) {}\
-  virtual int do_work(class cl_sim *sim,\
+    cl_cmd(operate_on_none, aname, can_rep, short_help, long_help) {}\
+  virtual int do_work(class cl_cmdline *cmdline, class cl_console *con);
+
+#define COMMAND_METHODS_ON(ON,CLASS_NAME) \
+public:\
+  CLASS_NAME (char *aname,\
+              int  can_rep,\
+              char *short_help,\
+              char *long_help):\
+    cl_cmd(operate_on_ ## ON, aname, can_rep, short_help, long_help) {}\
+  virtual int do_work(class cl_ ## ON * ON ,\
                      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 *short_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);
+  virtual int do_work(class cl_cmdline *cmdline, class cl_console *con);
+
+#define COMMAND_METHODS_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR) \
+public:\
+  CLASS_NAME (char *aname,\
+              int  can_rep,\
+              char *short_help,\
+              char *long_help):\
+    ANCESTOR (aname, can_rep, short_help, long_help) {}\
+  virtual int do_work(class cl_ ## ON * ON ,\
+                     class cl_cmdline *cmdline, class cl_console *con); \
 
-#define COMMAND_TAIL \
-}
+
+#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_ANCESTOR(CLASS_NAME,ANCESTOR) \
+#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(CLASS_NAME,ANCESTOR) \
+COMMAND_METHODS_ANCESTOR_ON(ON,CLASS_NAME,ANCESTOR) \
 COMMAND_TAIL
 
 #define COMMAND_DATA_ANCESTOR(CLASS_NAME,ANCESTOR,DATA) \
@@ -170,16 +219,38 @@ 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 *con)
+#define COMMAND_DO_WORK_APP(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_app *app,\
+                   class cl_cmdline *cmdline, class cl_console *con)
+#define COMMAND_DO_WORK_SIM(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_sim *sim,\
+                   class cl_cmdline *cmdline, class cl_console *con)
+#define COMMAND_DO_WORK_UC(CLASS_NAME) \
+int \
+CLASS_NAME::do_work(class cl_uc *uc,\
+                   class cl_cmdline *cmdline, class cl_console *con)
 
 // Command set is list of cl_cmd objects
 class cl_cmdset: public cl_list
 {
 public:
-  class cl_sim *sim;
+  //class cl_sim *sim;
   class cl_cmd *last_command;
 
 public:
-  cl_cmdset(class cl_sim *asim);
+  cl_cmdset(void);
+  //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);
@@ -194,15 +265,14 @@ public:
   class cl_cmdset *commands;
 
 public:
-  cl_super_cmd(//class cl_sim *asim,
-              char *aname,
+  cl_super_cmd(char *aname,
               int  can_rep,
               char *short_hlp,
               char *long_hlp,
               class cl_cmdset *acommands);
   ~cl_super_cmd(void);
 
-  virtual int work(class cl_sim *sim,
+  virtual int work(class cl_app *app,
                   class cl_cmdline *cmdline, class cl_console *con);
 };
 
@@ -217,17 +287,17 @@ class cl_console: public cl_base
 protected:
   FILE *in, *out;
 public:
-  class cl_sim *sim;
+  class cl_app *app;
   char *last_command;
   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);
 #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 int init(void);
@@ -250,7 +320,7 @@ 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) {}
@@ -269,24 +339,24 @@ 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_cmdset *acmdset, 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);
 
-  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);