* sim/ucsim/*.*, sim/ucsim/configure, sim/ucsim/configure.in:
[fw/sdcc] / sim / ucsim / cmd.src / show.cc
index 6a734cc8a0d591cf85b4b46c4527389dc754a903..28763745f69bf92e254d532bce022638495f0618 100644 (file)
@@ -27,8 +27,13 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 #include "ddconfig.h"
 
+#include <stdlib.h>
+#include "i_string.h"
+
 // prj
 #include "globals.h"
+#include "utils.h"
+#include "errorcl.h"
 
 // sim
 #include "simcl.h"
@@ -44,10 +49,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 
 //int
 //cl_show_copying_cmd::do_work(class cl_sim *sim,
-//                          class cl_cmdline *cmdline, class cl_console *con)
+//                           class cl_cmdline *cmdline, class cl_console_base *con)
 COMMAND_DO_WORK(cl_show_copying_cmd)
 {
-  con->printf("%s\n", copying);
+  con->dd_printf("%s\n", copying);
   return(DD_FALSE);;
 }
 
@@ -59,12 +64,127 @@ COMMAND_DO_WORK(cl_show_copying_cmd)
 
 //int
 //cl_show_warranty_cmd::do_work(class cl_sim *sim,
-//                           class cl_cmdline *cmdline, class cl_console *con)
+//                            class cl_cmdline *cmdline, class cl_console_base *con)
 COMMAND_DO_WORK(cl_show_warranty_cmd)
 {
-  con->printf("%s\n", warranty);
+  con->dd_printf("%s\n", warranty);
   return(DD_FALSE);;
 }
 
 
+/*
+ * Command: show option
+ *----------------------------------------------------------------------------
+ */
+COMMAND_DO_WORK_APP(cl_show_option_cmd)
+{
+  class cl_cmd_arg *parm= cmdline->param(0);
+  char *s= 0;
+
+  if (!parm)
+    ;
+  else if (cmdline->syntax_match(0/*app->get_uc()*/, STRING)) {
+    s= parm->value.string.string;
+  }
+  else
+    con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n");
+
+  int i;
+  for (i= 0; i < app->options->count; i++)
+    {
+      class cl_option *o= (class cl_option *)(/*uc*/app->options->at(i));
+      if (!s ||
+          !strcmp(s, o->get_name()))
+        {
+          int j;
+          con->dd_printf("%d. %s: ", i, object_name(o));
+          o->print(con);
+          con->dd_printf(" - %s\n", o->help);
+          con->dd_printf("  Type: %s\n", o->get_type_name());
+          /*union option_value *val= o->get_value();
+          con->dd_printf("  Value: \"");
+          unsigned int uj;
+          TYPE_UBYTE *d= (TYPE_UBYTE*)val;
+          for (uj= 0; uj < sizeof(*val); uj++)
+          con->print_char_octal(d[uj]);
+          con->dd_printf("\"\n");*/
+          con->dd_printf("  Hidden: %s\n", (o->hidden)?"True":"False");
+          con->dd_printf("  Creator: \"%s\"\n  %d Users:\n",
+                         object_name(o->get_creator()),
+                         o->users->count);
+          for (j= 0; j < o->users->count; j++)
+            {
+              class cl_optref *r= (class cl_optref *)(o->users->at(j));
+              con->dd_printf("    %2d. owner(s)=\"%s\"\n", j,
+                             object_name(r->get_owner()));
+            }
+          if (i >= 0 &&
+              i < app->options->count-1)
+            con->dd_printf("\n");
+        }
+    }
+  
+  return(DD_FALSE);
+}
+
+
+// prj
+#include "errorcl.h"
+
+static void
+show_error_cmd_print_node(class cl_console_base *con,
+                          int indent, class cl_base *node)
+{
+  if (!node)
+    return;
+  int i;
+  for (i= 0; i < indent; i++)
+    con->dd_printf(" ");
+  const char *name= node->get_name("unknown");
+  class cl_error_class *ec= dynamic_cast<class cl_error_class *>(node);
+  char *str;
+  con->dd_printf("%s: %s [%s/%s]\n",
+                 str= case_string(case_case, ec->get_type_name()),
+                 name, get_id_string(error_on_off_names,
+                                     ec->get_on()),
+                 (ec->is_on())?"ON":"OFF");
+  free(str);
+  class cl_base *c= node->first_child();
+  while (c)
+    {
+      show_error_cmd_print_node(con, indent+2, c);
+      c= node->next_child(c);
+    }
+}
+
+/*
+ * Command: show error
+ *----------------------------------------------------------------------------
+ */
+COMMAND_DO_WORK_APP(cl_show_error_cmd)
+{
+  /*class cl_cmd_arg *parm= cmdline->param(0);
+  char *s= 0;
+
+  if (!parm)
+    ;
+  else if (cmdline->syntax_match(0, STRING)) {
+    s= parm->value.string.string;
+  }
+  else
+    con->dd_printf("%s\n", short_help?short_help:"Error: wrong syntax\n");
+  */
+  class cl_list *registered_errors = cl_error_registry::get_list();
+  int i;
+  for (i= 0; i < registered_errors->count; i++)
+    {
+      class cl_error_class *ec;
+      ec= dynamic_cast<class cl_error_class*>(registered_errors->object_at(i));
+      if (!ec->get_parent())
+        show_error_cmd_print_node(con, 0, ec);
+    }
+  return(DD_FALSE);
+}
+
+
 /* End of cmd.src/show.cc */