X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=sim%2Fucsim%2Futils.cc;h=a46aebc460ad40a7c362e27e840f64fcc5370fb2;hb=90d3640cdd575040ccb9bcf1e73f031027dc7f60;hp=6bbdbc170ac73c5216d9f2367a41e4da289d6276;hpb=1e5d63db2c3471fc6c0f30ee9a0a90da0f89f7a2;p=fw%2Fsdcc diff --git a/sim/ucsim/utils.cc b/sim/ucsim/utils.cc index 6bbdbc17..a46aebc4 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; @@ -63,11 +72,127 @@ 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) +{ + 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); + +char * +format_string(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); +} + + +char * +object_name(class cl_base *o) +{ + char *name= 0; + + if (o) + name= o->get_name(); + if (name && *name) + return(name); + return("(unkown)"); +} + + +char * +case_string(enum letter_case lcase, 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); +} + +/*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 */