+
+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
+ int res;
+ char *msg= NULL;
+ res = vasprintf(&msg, format, ap);
+ return(msg);
+#elif defined HAVE_VSNPRINTF
+ int res;
+ char *msg= (char*)malloc(80*25);
+ res = 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);
+}*/
+
+