X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Futils.cc;h=eb648e7ff56e8cf0447cf425f2c25778b32d2d66;hb=34d14506fd0c12ee5434fec0f9dec27753e1aab5;hp=d8b4a0833152c784ab9481a1936aa0cf8a8771ae;hpb=f27cbdc6513b26748661452e50ed3af99fac16a2;p=fw%2Fsdcc diff --git a/sim/ucsim/utils.cc b/sim/ucsim/utils.cc index d8b4a083..eb648e7f 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 * */ @@ -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 @@ -49,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; @@ -58,45 +67,132 @@ 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); } + +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 + char *msg= NULL; + vasprintf(&msg, format, ap); + return(msg); +#elif defined HAVE_VSNPRINTF + char *msg= (char*)malloc(80*25); + 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); +}*/ + + /* End of utils.cc */