summaryrefslogtreecommitdiff
path: root/sim/ucsim/cmd.src/newcmdcl.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/newcmdcl.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/newcmdcl.h')
-rw-r--r--sim/ucsim/cmd.src/newcmdcl.h269
1 files changed, 269 insertions, 0 deletions
diff --git a/sim/ucsim/cmd.src/newcmdcl.h b/sim/ucsim/cmd.src/newcmdcl.h
new file mode 100644
index 0000000..b469fe8
--- /dev/null
+++ b/sim/ucsim/cmd.src/newcmdcl.h
@@ -0,0 +1,269 @@
+/*
+ * Simulator of microcontrollers (cmd.src/newcmdcl.h)
+ *
+ * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
+ * Copyright (C) 2006, Borut Razem - borut.razem@siol.net
+ *
+ * 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_NEWCMDCL_HEADER
+#define CMD_NEWCMDCL_HEADER
+
+
+#include "ddconfig.h"
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <sys/types.h>
+
+// prj
+#include "pobjcl.h"
+#include "optioncl.h"
+
+// sim.src
+//#include "appcl.h"
+
+// local, cmd
+#include "commandcl.h"
+
+
+// Flags of consoles
+enum con_flags {
+ CONS_NONE = 0,
+ CONS_DEBUG = 0x01, // Print debug messages on this console
+ CONS_FROZEN = 0x02, // Console is frozen (g command issued)
+ CONS_INTERACTIVE = 0x08, // Interactive console
+ CONS_NOWELCOME = 0x10, // Do not print welcome message
+ CONS_INACTIVE = 0x20, // Do not do any action
+ CONS_ECHO = 0x40, // Echo commands
+ CONS_REDIRECTED = 0x80, // Console is actually redirected
+};
+
+#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"
+#define SY_CELL 'c'
+#define CELL "c"
+
+
+class cl_prompt_option: public cl_optref
+{
+protected:
+ class cl_console_base *con;
+public:
+ cl_prompt_option(class cl_console_base *console);
+ virtual int init(void);
+ virtual void option_changed(void);
+};
+
+class cl_debug_option: public cl_prompt_option
+{
+public:
+ cl_debug_option(class cl_console_base *console);
+ virtual int init(void);
+ virtual void option_changed(void);
+};
+
+/*
+ * Command console
+ */
+
+class cl_console_base: public cl_base
+{
+ protected:
+ 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;
+ chars last_cmd;
+ chars startup_command;
+
+ char nl;
+ chars lbuf;
+
+ int tu_bg_color, tu_fg_color;
+ public:
+ int prev_quit;
+
+ public:
+ cl_console_base(void);
+ virtual ~cl_console_base(void);
+
+ virtual class cl_console_base *clone_for_exec(char *fin) = 0;
+
+ virtual void redirect(char *fname, char *mode) = 0;
+ virtual void un_redirect(void) = 0;
+ virtual bool is_tty(void) const = 0;
+ virtual bool is_eof(void) const = 0;
+ virtual bool input_avail(void) = 0;
+ virtual int read_line(void) = 0;
+ virtual class cl_f *get_fout(void)= 0;
+ virtual class cl_f *get_fin(void)= 0;
+ virtual void drop_files(void)= 0; // do not close, just ignore
+ virtual void close_files(bool close_in, bool close_out)= 0;
+ virtual void replace_files(bool close_old, cl_f *new_in, cl_f *new_out)= 0;
+
+ virtual int init(void);
+ virtual void set_startup(chars the);
+ virtual chars *get_startup() { return &startup_command; }
+ virtual bool has_startup() { return startup_command.nempty(); }
+
+ virtual void welcome(void);
+ virtual int proc_input(class cl_cmdset *cmdset);
+ virtual bool need_check(void) { return false; }
+
+ virtual void print_prompt(void);
+ virtual int dd_printf(const char *format, ...);
+ virtual int dd_cprintf(const char *color_name, const char *format, ...);
+ virtual chars get_color_ansiseq(const char *color_name, bool add_reset= false);
+ virtual void dd_color(const char *color_name);
+ virtual int write(char *buf, int count);
+ virtual int debug(const char *format, ...);
+ virtual void print_bin(long data, int bits);
+ virtual void print_char_octal(char c);
+ virtual int cmd_do_print(const char *format, va_list ap);
+ virtual int cmd_do_cprint(const char *color_name, const char *format, va_list ap);
+ //virtual void flush(void);
+ virtual void tu_cls(void);
+ virtual void tu_clc(void);
+ virtual void tu_cll(void);
+ virtual void tu_go(int x1, int y1);
+ virtual void tu_save(void);
+ virtual void tu_restore(void);
+ virtual void tu_hide(void);
+ virtual void tu_show(void);
+ virtual void tu_color(int bg, int fg);
+ virtual void tu_mouse_on(void);
+ virtual void tu_mouse_off(void);
+ virtual void tu_reset(void);
+
+ virtual bool interpret(char *cmd);
+ virtual int get_id(void) const { return(id); }
+ virtual void set_id(int new_id);
+ virtual void set_prompt(char *p);
+
+ virtual bool input_active(void) const;
+ //virtual bool accept_last(void) { return /*is_tty() ? DD_TRUE : DD_FALSE;*/flags&CONS_INTERACTIVE; }
+ virtual bool prevent_quit(void) { return (prev_quit>=0)?prev_quit:true; }
+
+ private:
+ int flags; // See CONS_XXXX
+ public:
+ virtual int set_flag(int flag, bool value);
+ virtual void set_interactive(bool new_val);
+ virtual bool get_flag(int flag);
+ virtual int get_flags() { return flags; };
+ virtual bool is_interactive() { return get_flag(CONS_INTERACTIVE); }
+ virtual bool is_frozen() { return get_flag(CONS_FROZEN); }
+ virtual bool set_cooked(bool new_val);
+
+ protected:
+ class cl_app *app;
+ char *prompt;
+ int id;
+};
+
+class cl_console_dummy: public cl_console_base
+{
+ public:
+ cl_console_dummy(void): cl_console_base() {}
+
+ virtual class cl_console_base *clone_for_exec(char *fin) { return NULL; }
+
+ virtual void redirect(char *fname, char *mode) {}
+ virtual void un_redirect(void) {}
+ virtual bool is_tty(void) const { return false; }
+ virtual bool is_eof(void) const { return false; }
+ virtual bool input_avail(void) { return false; }
+ virtual int read_line(void) { return 0; }
+ virtual class cl_f *get_fout(void) { return NULL; }
+ virtual class cl_f *get_fin(void) { return NULL; }
+ virtual void drop_files(void) {}
+ virtual void close_files(bool close_in, bool close_out) {}
+ virtual void replace_files(bool close_old, cl_f *new_in, cl_f *new_out) {}
+};
+
+/*
+ * Command interpreter
+ */
+
+class cl_commander_base: public cl_base
+{
+ public:
+ class cl_app *app;
+ class cl_list *cons;
+ class cl_console_base *actual_console, *frozen_console, *config_console;
+ class cl_cmdset *cmdset;
+ protected:
+ class cl_list *active_inputs;
+ class cl_list *check_list;
+
+ public:
+ cl_commander_base(class cl_app *the_app, class cl_cmdset *acmdset);
+ virtual ~cl_commander_base(void);
+
+ virtual void add_console(class cl_console_base *console);
+ virtual void del_console(class cl_console_base *console);
+ virtual void activate_console(class cl_console_base *console);
+ virtual void deactivate_console(class cl_console_base *console);
+ virtual int consoles_prevent_quit(void);
+
+ //void prompt(void);
+ int all_printf(const char *format, ...); // print to all consoles
+ int dd_printf(const char *format, va_list ap); // print to actual_console
+ int dd_cprintf(const char *color_name, const char *format, va_list ap); // print to actual_console
+ int dd_printf(const char *format, ...); // print to actual_console
+ int dd_cprintf(const char *color_name, const char *format, ...); // print to actual_console
+ int debug(const char *format, ...); // print consoles with debug flag set
+ int debug(const char *format, va_list ap); // print consoles with debug flag set
+ int flag_printf(int iflags, const char *format, ...);
+ int input_avail_on_frozen(void);
+ class cl_console_base *exec_on(class cl_console_base *cons, char *file_name);
+
+ virtual int init(void) = 0;
+ virtual void update_active(void) = 0;
+ virtual int proc_input(void) = 0;
+ virtual int input_avail(void) = 0;
+ virtual int wait_input(void) = 0;
+ virtual void check(void) { return; }
+};
+
+
+#endif
+
+/* End of cmd.src/newcmdcl.h */