X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Futils.cc;h=1a410ebbaedb090e81abdec49da66bfb3a091dfc;hb=c34cf61917860a821a4631edda334443633805e7;hp=6bbdbc170ac73c5216d9f2367a41e4da289d6276;hpb=1e5d63db2c3471fc6c0f30ee9a0a90da0f89f7a2;p=fw%2Fsdcc diff --git a/sim/ucsim/utils.cc b/sim/ucsim/utils.cc index 6bbdbc17..1a410ebb 100644 --- a/sim/ucsim/utils.cc +++ b/sim/ucsim/utils.cc @@ -25,9 +25,18 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /*@1@*/ +#include "ddconfig.h" + +#include +#include +#include +#include +#include #include "i_string.h" + // prj #include "stypes.h" +#include "pobjcl.h" int @@ -69,5 +78,108 @@ get_id_string(struct id_element *ids, int id) return(ids[i].id_string); } +char * +get_id_string(struct id_element *ids, int id, char *def) +{ + char *s= get_id_string(ids, id); + + return(s?s:def); +} + +int +get_string_id(struct id_element *ids, char *str) +{ + int i= 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) +{ + int i= 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); + +static char * +vformat_string(char *format, va_list ap) +{ +#ifdef HAVE_VASPRINTF + char *msg= NULL; + vasprintf(&msg, format, ap); + return(msg); +#else +# ifdef HAVE_VSNPRINTF + char *msg= (char*)malloc(80*25); + vsnprintf(msg, 80*25, format, ap); + return(msg); +# else +# ifdef HAVE_VPRINTF + char *msg= (char*)malloc(80*25); + vsprintf(msg, format, ap); /* Dangerous */ + return(msg); +# endif +# endif +#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); +} + + +char * +object_name(class cl_base *o) +{ + char *name= 0; + + if (o) + name= o->get_name(); + if (name && + *name) + return(name); + return("(unkown)"); +} + /* End of utils.cc */