version 0.5.2
[fw/sdcc] / sim / ucsim / cmd.src / show.cc
index 9833d2b8e4a2eb3284f03b30d7cca3d201ca3ed1..8f6fee137ca68aca471c684122bdcb921cff32e2 100644 (file)
@@ -26,11 +26,14 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 /*@1@*/
 
 #include "ddconfig.h"
+
+#include <stdlib.h>
 #include "i_string.h"
 
 // prj
 #include "globals.h"
 #include "utils.h"
+#include "errorcl.h"
 
 // sim
 #include "simcl.h"
@@ -93,20 +96,22 @@ COMMAND_DO_WORK_APP(cl_show_option_cmd)
       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);
-         union option_value *val= o->get_value();
+         con->dd_printf("  Type: %s\n", o->get_type_name());
+         /*union option_value *val= o->get_value();
          con->dd_printf("  Value: \"");
          unsigned int uj;
-         int j;
          TYPE_UBYTE *d= (TYPE_UBYTE*)val;
          for (uj= 0; uj < sizeof(*val); uj++)
-           con->print_char_octal(d[uj]);
-         con->dd_printf("\"\n  Creator: \"%s\"\n  %d Users:\n",
+         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);
-         con->dd_printf("  Hidden: %s\n", (o->hidden)?"True":"False");
          for (j= 0; j < o->users->count; j++)
            {
              class cl_optref *r= (class cl_optref *)(o->users->at(j));
@@ -119,7 +124,65 @@ COMMAND_DO_WORK_APP(cl_show_option_cmd)
        }
     }
   
-  return(DD_FALSE);;
+  return(DD_FALSE);
+}
+
+
+// prj
+#include "errorcl.h"
+
+static void
+show_error_cmd_print_node(class cl_console *con,
+                         int indent, class cl_base *node)
+{
+  if (!node)
+    return;
+  int i;
+  for (i= 0; i < indent; i++)
+    con->dd_printf(" ");
+  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");
+  */
+  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);
 }