X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fcmd.src%2Fcmdutil.cc;h=d27a335fb1f88c05100efafacd338b7ca27f0d67;hb=95b161f67718bee54c4713e173167a43162a01d9;hp=083b84562d73e8d793633e1fd405c61225414b1f;hpb=1854d0ec377d6032617c09d2bd31fa0866764744;p=fw%2Fsdcc diff --git a/sim/ucsim/cmd.src/cmdutil.cc b/sim/ucsim/cmd.src/cmdutil.cc index 083b8456..d27a335f 100644 --- a/sim/ucsim/cmd.src/cmdutil.cc +++ b/sim/ucsim/cmd.src/cmdutil.cc @@ -1,5 +1,5 @@ /* - * Simulator of microcontrollers (cmdutil.cc) + * Simulator of microcontrollers (cmd.src/cmdutil.cc) * * Copyright (C) 1999,99 Drotos Daniel, Talker Bt. * @@ -31,7 +31,10 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #include #include -#ifdef HAVE_SYS_SOCKET_H +#ifdef _WIN32 +# include +# define SOCKET_AVAIL +#elif defined HAVE_SYS_SOCKET_H # include # include # include @@ -86,18 +89,18 @@ make_server_socket(unsigned short int port) * Printing out an integer in binary format */ -void -print_bin(long data, int bits, FILE *f) +/*void +print_bin(long data, int bits, class cl_console *con) { long mask= 1; mask= mask << ((bits >= 1)?(bits-1):0); while (bits--) { - fprintf(f, "%c", (data&mask)?'1':'0'); + con->printf("%c", (data&mask)?'1':'0'); mask>>= 1; } -} +}*/ /* @@ -110,15 +113,22 @@ get_name_entry(struct name_entry tabl[], char *name, class cl_uc *uc) int i= 0; char *p; + if (!tabl || + !name || + !(*name)) + return(0); for (p= name; *p; *p= toupper(*p), p++); while (tabl[i].name && (!(tabl[i].cpu_type & uc->type) || (strcmp(tabl[i].name, name) != 0))) - i++; + { + //printf("tabl[%d].name=%s <-> %s\n",i,tabl[i].name,name); + i++; + } if (tabl[i].name != NULL) return(&tabl[i]); else - return(NULL); + return(0); } @@ -126,7 +136,7 @@ get_name_entry(struct name_entry tabl[], char *name, class cl_uc *uc) * Interpreting a bitname */ -bool +/*bool interpret_bitname(char *name, class cl_uc *uc, uchar **cell, uchar *celladdr, uchar *bitaddr, uchar *bitmask, @@ -147,7 +157,7 @@ interpret_bitname(char *name, class cl_uc *uc, { dot--; *dot= '.'; - return(FALSE); + return(DD_FALSE); } } else @@ -155,12 +165,12 @@ interpret_bitname(char *name, class cl_uc *uc, if ((*celladdr < 0x20) || ((*celladdr > 0x2f) && (*celladdr < 0x80)) || ((*celladdr > 0x7f) && (*celladdr & 0x07))) - return(FALSE); + return(DD_FALSE); bitnum= strtol(dot, &p, 0); if ((p && *p) || (bitnum < 0) || (bitnum > 7)) - return(FALSE); + return(DD_FALSE); if (*celladdr > 0x7f) *bitaddr= *celladdr + bitnum; else @@ -175,7 +185,7 @@ interpret_bitname(char *name, class cl_uc *uc, *bitaddr= strtol(name, &p, 0); if ((p && *p) || (*bitaddr > 0xff)) - return(FALSE); + return(DD_FALSE); } else *bitaddr= ne->addr; @@ -185,11 +195,12 @@ interpret_bitname(char *name, class cl_uc *uc, *celladdr= (*bitaddr >> 3) + 0x20; } // *bitaddr, *celladdr now OK - *cell= uc->get_bit/*FIXME*/(*bitaddr); + *cell= uc->get_bit//FIXME + (*bitaddr); *bitmask= BIT_MASK(*bitaddr); // making symbolic name if (!symname) - return(TRUE); + return(DD_TRUE); i= 0; while (uc->bit_tbl()[i].name && (uc->bit_tbl()[i].addr != *bitaddr)) @@ -198,7 +209,7 @@ interpret_bitname(char *name, class cl_uc *uc, { sym= strdup(uc->bit_tbl()[i].name); *symname= sym; - return(TRUE); + return(DD_TRUE); } i= 0; while (uc->sfr_tbl()[i].name && @@ -216,8 +227,8 @@ interpret_bitname(char *name, class cl_uc *uc, sprintf(bitnumstr, "%1d", *bitaddr & 0x07); strcat(sym, bitnumstr); *symname= sym; - return(TRUE); -} + return(DD_TRUE); +}*/ /* @@ -227,8 +238,8 @@ interpret_bitname(char *name, class cl_uc *uc, char * proc_escape(char *string, int *len) { - char spec_chars[]= "fnrtvab"; - char spec[]= "\f\n\r\t\v\a\b"; + char spec_chars[]= "fnrtvab\""; + char spec[]= "\f\n\r\t\v\a\b\""; char *s, *str, *p; s = string; @@ -283,4 +294,54 @@ proc_escape(char *string, int *len) } -/* End of cmdutil.cc */ + +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); + +int +cmd_vfprintf(FILE *f, char *format, va_list ap) +{ + int ret; + if (!f) + return(0); +#ifdef HAVE_VASPRINTF + char *msg= NULL; + vasprintf(&msg, format, ap); + ret= fprintf(f, "%s", msg); + free(msg); +#else +# ifdef HAVE_VSNPRINTF + char msg[80*25]; + vsnprintf(msg, 80*25, format, ap); + ret= fprintf(f, "%s", msg); +# else +# ifdef HAVE_VPRINTF + char msg[80*25]; + vsprintf(msg, format, ap); /* Dangerous */ + ret= fprintf(f, "%s", msg); +# else +# ifdef HAVE_DOPRNT + /* ??? */ + /*strcpy(msg, "Unimplemented printf has called.\n");*/ +# else + /*strcpy(msg, "printf can not be implemented, upgrade your libc.\n");*/ +# endif +# endif +# endif +#endif + fflush(f); + return(ret); +} + +int +cmd_fprintf(FILE *f, char *format, ...) +{ + va_list ap; + va_start(ap, format); + int ret= cmd_vfprintf(f, format, ap); + va_end(ap); + return(ret); +} + + +/* End of cmd.src/cmdutil.cc */