/*
- * Simulator of microcontrollers (cmdcl.h)
+ * Simulator of microcontrollers (cmd.src/cmdcl.h)
*
* Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
*
02111-1307, USA. */
/*@1@*/
-#ifndef CMDCL_HEADER
-#define CMDCL_HEADER
+#ifndef CMD_NEWCMDCL_HEADER
+#define CMD_NEWCMDCL_HEADER
#include "ddconfig.h"
#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
*/
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);
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);
};
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,
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
{
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);
};
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,
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);
};
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;
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(FALSE); }
};
#ifdef SOCKET_AVAIL
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
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_cmdset *acmdset, class cl_sim *asim);
~cl_commander(void);
virtual int init(void);
void set_fd_set(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 debug(char *format, ...); // print consoles with debug flag set
int flag_printf(int iflags, char *format, ...);
#endif
-/* End of cmdcl.h */
+/* End of cmd.src/cmdcl.h */