* sim/ucsim/*.*, sim/ucsim/configure, sim/ucsim/configure.in:
[fw/sdcc] / sim / ucsim / utils.cc
index d8b4a0833152c784ab9481a1936aa0cf8a8771ae..eb648e7ff56e8cf0447cf425f2c25778b32d2d66 100644 (file)
@@ -2,7 +2,7 @@
  * Simulator of microcontrollers (utils.cc)
  *
  * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
- * 
+ *
  * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
  *
  */
@@ -25,9 +25,18 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
 02111-1307, USA. */
 /*@1@*/
 
+#include "ddconfig.h"
+
+#include <stdio.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <unistd.h>
 #include "i_string.h"
 
+  // prj
 #include "stypes.h"
+#include "pobjcl.h"
 
 
 int
@@ -49,7 +58,7 @@ get_sub_opt(char **option, const char * const *tokens, char **valuep)
     *valuep= 0;
   i= 0;
   while (tokens[i] &&
-        strcmp(*option, tokens[i]))
+   strcmp(*option, tokens[i]))
     i++;
   if (!tokens[i])
     *valuep= *option;
@@ -58,45 +67,132 @@ get_sub_opt(char **option, const char * const *tokens, char **valuep)
 }
 
 
-char *
+const char *
 get_id_string(struct id_element *ids, int id)
 {
   int i= 0;
 
-  while (ids[i].id_string &&
-        id != ids[i].id)
+  while (ids[i].id_string && id != ids[i].id)
     i++;
   return(ids[i].id_string);
 }
 
-char *
-get_id_string(struct id_element *ids, int id, char *def)
+const char *
+get_id_string(struct id_element *ids, int id, const char *def)
 {
-  char *s= get_id_string(ids, id);
+  const char *s= get_id_string(ids, id);
 
   return(s?s:def);
 }
 
 int
-get_string_id(struct id_element *ids, char *str)
+get_string_id(struct id_element *ids, const char *str)
 {
   int i= 0;
 
-  while (ids[i].id_string &&
-        strcmp(ids[i].id_string, str) != 0)
+  while (ids[i].id_string && strcmp(ids[i].id_string, str) != 0)
     i++;
   return(ids[i].id);
 }
 
 int
-get_string_id(struct id_element *ids, char *str, int def)
+get_string_id(struct id_element *ids, const char *str, int def)
 {
   int i= 0;
 
-  while (ids[i].id_string &&
-        strcmp(ids[i].id_string, str) != 0)
+  while (ids[i].id_string && strcmp(ids[i].id_string, str) != 0)
     i++;
   return(ids[i].id_string?ids[i].id:def);
 }
 
+
+extern "C" int vasprintf(char **strp, const  char *format, va_list ap);
+extern "C" int vsnprintf(char *str, size_t size,const char *format,va_list ap);
+
+char *
+format_string(const char *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+#ifdef HAVE_VASPRINTF
+  char *msg= NULL;
+  vasprintf(&msg, format, ap);
+  return(msg);
+#elif defined HAVE_VSNPRINTF
+  char *msg= (char*)malloc(80*25);
+  vsnprintf(msg, 80*25, format, ap);
+  return(msg);
+#elif defined HAVE__VSNPRINTF
+  char *msg= (char*)malloc(80*25);
+  _vsnprintf(msg, 80*25, format, ap);
+  return(msg);
+#else
+#error No vasprintf or vsnprintf
+#endif
+  va_end(ap);
+  return(msg);
+}
+
+
+const char *
+object_name(class cl_base *o)
+{
+  const char *name= 0;
+
+  if (o)
+    name= o->get_name();
+  if (name && *name)
+    return(name);
+  return("(unkown)");
+}
+
+
+char *
+case_string(enum letter_case lcase, const char *str)
+{
+  char *p= strdup(str);
+  char *s= p;
+
+  switch (lcase)
+    {
+    case case_upper:
+      while (p && *p)
+        {
+          *p= toupper(*p);
+          p++;
+       }
+      break;
+    case case_lower:
+      while (p && *p)
+        {
+          *p= tolower(*p);
+          p++;
+        }
+      break;
+    case case_case:
+      if (!p || *p == '\0')
+        break;
+      while (isspace(*p))
+        p++;
+      if (*p)
+        *p= toupper(*p);
+      break;
+    }
+  return(s);
+}
+
+/*const char *
+case_string(enum letter_case lcase, const char *str)
+{
+  char *p= NIL;
+
+  if (!str ||
+      !*str)
+    return(NIL);
+  p= strdup(str);
+  return case_string(lcase, p);
+}*/
+
+
 /* End of utils.cc */