definition of vasprintf
[fw/sdcc] / sim / ucsim / cmd.src / cmdutil.cc
index 90bb15dccc81539471f085050acac339873ece36..86fd4c542942a474fcab6dee77ed0ed63ced96cc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Simulator of microcontrollers (cmdutil.cc)
+ * Simulator of microcontrollers (cmd.src/cmdutil.cc)
  *
  * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
  * 
@@ -86,18 +86,18 @@ make_server_socket(unsigned short int port)
  * Printing out an integer in binary format
  */
 
-void
-print_bin(long data, int bits, FILE *f)
+/*void
+print_bin(long data, int bits, class cl_console *con)
 {
   long mask= 1;
 
   mask= mask << ((bits >= 1)?(bits-1):0);
   while (bits--)
     {
-      fprintf(f, "%c", (data&mask)?'1':'0');
+      con->printf("%c", (data&mask)?'1':'0');
       mask>>= 1;
     }
-}
+}*/
 
 
 /*
@@ -110,15 +110,22 @@ get_name_entry(struct name_entry tabl[], char *name, class cl_uc *uc)
   int i= 0;
   char *p;
 
+  if (!tabl ||
+      !name ||
+      !(*name))
+    return(0);
   for (p= name; *p; *p= toupper(*p), p++);
   while (tabl[i].name &&
         (!(tabl[i].cpu_type & uc->type) ||
         (strcmp(tabl[i].name, name) != 0)))
-    i++;
+    {
+      //printf("tabl[%d].name=%s <-> %s\n",i,tabl[i].name,name);
+      i++;
+    }
   if (tabl[i].name != NULL)
     return(&tabl[i]);
   else
-    return(NULL);
+    return(0);
 }
 
 
@@ -126,7 +133,7 @@ get_name_entry(struct name_entry tabl[], char *name, class cl_uc *uc)
  * Interpreting a bitname
  */
 
-bool
+/*bool
 interpret_bitname(char *name, class cl_uc *uc,
                  uchar **cell, uchar *celladdr,
                  uchar *bitaddr, uchar *bitmask,
@@ -185,7 +192,8 @@ interpret_bitname(char *name, class cl_uc *uc,
        *celladdr= (*bitaddr >> 3) + 0x20;
     }
   // *bitaddr, *celladdr now OK
-  *cell= uc->get_bit/*FIXME*/(*bitaddr);
+  *cell= uc->get_bit//FIXME
+    (*bitaddr);
   *bitmask= BIT_MASK(*bitaddr);
   // making symbolic name
   if (!symname)
@@ -217,7 +225,7 @@ interpret_bitname(char *name, class cl_uc *uc,
   strcat(sym, bitnumstr);
   *symname= sym;
   return(DD_TRUE);
-}
+}*/
 
 
 /*
@@ -227,8 +235,8 @@ interpret_bitname(char *name, class cl_uc *uc,
 char *
 proc_escape(char *string, int *len)
 {
-  char  spec_chars[]= "fnrtvab";
-  char  spec[]= "\f\n\r\t\v\a\b";
+  char  spec_chars[]= "fnrtvab\"";
+  char  spec[]= "\f\n\r\t\v\a\b\"";
   char  *s, *str, *p;
 
   s  = string;
@@ -283,4 +291,54 @@ proc_escape(char *string, int *len)
 }
 
 
-/* End of cmdutil.cc */
+
+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);
+
+int
+cmd_vfprintf(FILE *f, char *format, va_list ap)
+{
+  int ret;
+  if (!f)
+    return(0);
+#ifdef HAVE_VASPRINTF
+  char *msg= NULL;
+  vasprintf(&msg, format, ap);
+  ret= fprintf(f, "%s", msg);
+  free(msg);
+#else
+#  ifdef HAVE_VSNPRINTF
+  char msg[80*25];
+  vsnprintf(msg, 80*25, format, ap);
+  ret= fprintf(f, "%s", msg);
+#  else
+#    ifdef HAVE_VPRINTF
+  char msg[80*25];
+  vsprintf(msg, format, ap); /* Dangerous */
+  ret= fprintf(f, "%s", msg);
+#    else
+#      ifdef HAVE_DOPRNT
+  /* ??? */
+  /*strcpy(msg, "Unimplemented printf has called.\n");*/
+#      else
+  /*strcpy(msg, "printf can not be implemented, upgrade your libc.\n");*/
+#      endif
+#    endif
+#  endif
+#endif
+  fflush(f);
+  return(ret);
+}
+
+int
+cmd_fprintf(FILE *f, char *format, ...)
+{
+  va_list ap;
+  va_start(ap, format);
+  int ret= cmd_vfprintf(f, format, ap);
+  va_end(ap);
+  return(ret);
+}
+
+
+/* End of cmd.src/cmdutil.cc */