X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Futils.cc;h=ba5f57c7c4f98f83ed19f00a701231c4e2505b63;hb=f3a44fc094dc5ce393e2029d3c7c6587a4b1a835;hp=1a410ebbaedb090e81abdec49da66bfb3a091dfc;hpb=8800bcde618fdcb64399e279df088a7e781c64d6;p=fw%2Fsdcc diff --git a/sim/ucsim/utils.cc b/sim/ucsim/utils.cc index 1a410ebb..ba5f57c7 100644 --- a/sim/ucsim/utils.cc +++ b/sim/ucsim/utils.cc @@ -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 */