version 0.5.2
[fw/sdcc] / sim / ucsim / cmd.src / show.cc
index 02ba10b387f09ecb8620c909c1f0516df01c6e5d..8f6fee137ca68aca471c684122bdcb921cff32e2 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"
@@ -42,11 +47,12 @@ 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)
+//int
+//cl_show_copying_cmd::do_work(class cl_sim *sim,
+//                          class cl_cmdline *cmdline, class cl_console *con)
+COMMAND_DO_WORK(cl_show_copying_cmd)
 {
-  con->printf("%s\n", copying);
+  con->dd_printf("%s\n", copying);
   return(DD_FALSE);;
 }
 
@@ -56,13 +62,128 @@ cl_show_copying_cmd::do_work(class cl_sim *sim,
  *----------------------------------------------------------------------------
  */
 
-int
-cl_show_warranty_cmd::do_work(class cl_sim *sim,
-                             class cl_cmdline *cmdline, class cl_console *con)
+//int
+//cl_show_warranty_cmd::do_work(class cl_sim *sim,
+//                           class cl_cmdline *cmdline, class cl_console *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 *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);
+}
+
+
 /* End of cmd.src/show.cc */