* debugger/mcs51/break.c, debugger/mcs51/cmd.c,
[fw/sdcc] / sim / ucsim / utils.cc
index 1a410ebbaedb090e81abdec49da66bfb3a091dfc..ba5f57c7c4f98f83ed19f00a701231c4e2505b63 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
  *
  */
@@ -58,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;
@@ -67,43 +67,40 @@ 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);
 }
@@ -112,74 +109,92 @@ get_string_id(struct id_element *ids, char *str, int 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);
 
-static char *
-vformat_string(char *format, va_list ap)
+char *
+format_string(const char *format, ...)
 {
+  va_list ap;
+
+  va_start(ap, format);
 #ifdef HAVE_VASPRINTF
+  int res;
   char *msg= NULL;
-  vasprintf(&msg, format, ap);
+  res = vasprintf(&msg, format, ap);
   return(msg);
-#else
-#  ifdef HAVE_VSNPRINTF
+#elif defined HAVE_VSNPRINTF
+  int res;
   char *msg= (char*)malloc(80*25);
-  vsnprintf(msg, 80*25, format, ap);
+  res = vsnprintf(msg, 80*25, format, ap);
   return(msg);
-#  else
-#    ifdef HAVE_VPRINTF
+#elif defined HAVE__VSNPRINTF
   char *msg= (char*)malloc(80*25);
-  vsprintf(msg, format, ap); /* Dangerous */
+  _vsnprintf(msg, 80*25, format, ap);
   return(msg);
-#    endif
-#  endif
+#else
+#error No vasprintf or vsnprintf
 #endif
-}
-
-char *
-format_string(char *format, ...)
-{
-  va_list ap;
-
-  va_start(ap, format);
-  char *s= vformat_string(format, ap);
   va_end(ap);
-  return(s);
-}
-
-
-void
-print_char_octal(char c, FILE *f)
-{
-  if (strchr("\a\b\f\n\r\t\v\"", c))
-    switch (c)
-      {
-      case '\a': fprintf(f, "\a"); break;
-      case '\b': fprintf(f, "\b"); break;
-      case '\f': fprintf(f, "\f"); break;
-      case '\n': fprintf(f, "\n"); break;
-      case '\r': fprintf(f, "\r"); break;
-      case '\t': fprintf(f, "\t"); break;
-      case '\v': fprintf(f, "\v"); break;
-      case '\"': fprintf(f, "\""); break;
-      }
-  else if (isprint(c))
-    fprintf(f, "%c", c);
-  else
-    fprintf(f, "\\%03hho", c);
+  return(msg);
 }
 
 
-char *
+const char *
 object_name(class cl_base *o)
 {
-  char *name= 0;
+  const char *name= 0;
 
   if (o)
     name= o->get_name();
-  if (name &&
-      *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 */