X-Git-Url: https://git.gag.com/?a=blobdiff_plain;ds=sidebyside;f=sim%2Fucsim%2Fsim.src%2Farg.cc;h=fe2e6811c21aaaa4e62797c2bee2c372d35cd0c9;hb=6ba6105dc5975c3b0cc0d1ce53f47a1ddf4be9cf;hp=4a79f7479ce4ceaf83669e5b125285b32478bf5a;hpb=f27cbdc6513b26748661452e50ed3af99fac16a2;p=fw%2Fsdcc diff --git a/sim/ucsim/sim.src/arg.cc b/sim/ucsim/sim.src/arg.cc index 4a79f747..fe2e6811 100644 --- a/sim/ucsim/sim.src/arg.cc +++ b/sim/ucsim/sim.src/arg.cc @@ -128,9 +128,9 @@ cl_cmd_arg::~cl_cmd_arg(void) } bool -cl_cmd_arg::as_address(void) +cl_cmd_arg::as_address(class cl_uc *uc) { - return(get_address(&(value.address))); + return(get_address(uc, &(value.address))); } bool @@ -149,7 +149,7 @@ cl_cmd_arg::as_data(void) } bool -cl_cmd_arg::as_memory(void) +cl_cmd_arg::as_memory(class cl_uc *uc) { value.memory= uc->mem(s_value); return(value.memory != 0); @@ -189,12 +189,12 @@ cl_cmd_arg::as_bit(class cl_uc *uc) /* Interger number */ -cl_cmd_int_arg::cl_cmd_int_arg(class cl_uc *iuc, long addr): - cl_cmd_arg(iuc, addr) +cl_cmd_int_arg::cl_cmd_int_arg(/*class cl_uc *iuc,*/ long addr): + cl_cmd_arg(/*iuc,*/ addr) {} bool -cl_cmd_int_arg::get_address(t_addr *addr) +cl_cmd_int_arg::get_address(class cl_uc *uc, t_addr *addr) { long iv; @@ -212,7 +212,7 @@ cl_cmd_int_arg::get_bit_address(class cl_uc *uc, // input { t_addr bit_addr; - if (!get_address(&bit_addr)) + if (!get_address(uc, &bit_addr)) return(DD_FALSE); return(uc->extract_bit_address(bit_addr, mem, mem_addr, bit_mask)); } @@ -229,8 +229,8 @@ cl_cmd_int_arg::as_string(void) /* Symbol */ -cl_cmd_sym_arg::cl_cmd_sym_arg(class cl_uc *iuc, char *sym): - cl_cmd_arg(iuc, sym) +cl_cmd_sym_arg::cl_cmd_sym_arg(/*class cl_uc *iuc,*/ char *sym): + cl_cmd_arg(/*iuc,*/ sym) {} bool @@ -245,7 +245,7 @@ cl_cmd_sym_arg::as_string(void) } bool -cl_cmd_sym_arg::get_address(t_addr *addr) +cl_cmd_sym_arg::get_address(class cl_uc *uc, t_addr *addr) { struct name_entry *ne; @@ -276,7 +276,7 @@ cl_cmd_sym_arg::get_bit_address(class cl_uc *uc, // input } bool -cl_cmd_sym_arg::as_address(void) +cl_cmd_sym_arg::as_address(class cl_uc *uc) { struct name_entry *ne; //printf("SYM %s as addr?\n",get_svalue()); @@ -308,16 +308,16 @@ cl_cmd_sym_arg::as_hw(class cl_uc *uc) /* String */ -cl_cmd_str_arg::cl_cmd_str_arg(class cl_uc *iuc, char *str): - cl_cmd_arg(iuc, str) +cl_cmd_str_arg::cl_cmd_str_arg(/*class cl_uc *iuc,*/ char *str): + cl_cmd_arg(/*iuc,*/ str) {} /* Bit */ -cl_cmd_bit_arg::cl_cmd_bit_arg(class cl_uc *iuc, +cl_cmd_bit_arg::cl_cmd_bit_arg(/*class cl_uc *iuc,*/ class cl_cmd_arg *asfr, class cl_cmd_arg *abit): - cl_cmd_arg(iuc, (long)0) + cl_cmd_arg(/*iuc,*/ (long)0) { sfr= asfr; bit= abit; @@ -332,10 +332,10 @@ cl_cmd_bit_arg::~cl_cmd_bit_arg(void) } bool -cl_cmd_bit_arg::get_address(t_addr *addr) +cl_cmd_bit_arg::get_address(class cl_uc *uc, t_addr *addr) { if (sfr) - return(sfr->get_address(addr)); + return(sfr->get_address(uc, addr)); return(0); } @@ -345,43 +345,34 @@ cl_cmd_bit_arg::get_bit_address(class cl_uc *uc, // input t_addr *mem_addr, t_mem *bit_mask) { -printf("**1\n"); if (mem) *mem= uc->mem(MEM_SFR); -printf("**2\n"); if (mem_addr) { -printf("**3\n"); if (!sfr || - !sfr->get_address(mem_addr)) + !sfr->get_address(uc, mem_addr)) return(DD_FALSE); -printf("**4\n"); } -printf("**5\n"); if (bit_mask) { -printf("**6\n"); if (!bit) return(DD_FALSE); -printf("**7\n"); long l; if (!bit->get_ivalue(&l) || l > 7) return(DD_FALSE); -printf("**8\n"); *bit_mask= 1 << l; } -printf("**9\n"); return(DD_TRUE); } /* Array */ -cl_cmd_array_arg::cl_cmd_array_arg(class cl_uc *iuc, +cl_cmd_array_arg::cl_cmd_array_arg(/*class cl_uc *iuc,*/ class cl_cmd_arg *aname, class cl_cmd_arg *aindex): - cl_cmd_arg(iuc, (long)0) + cl_cmd_arg(/*iuc,*/ (long)0) { name = aname; index= aindex; @@ -404,7 +395,7 @@ cl_cmd_array_arg::as_hw(class cl_uc *uc) if (name == 0 || index == 0 || (n= name->get_svalue()) == NULL || - !index->get_address(&a)) + !index->get_address(uc, &a)) return(DD_FALSE); value.hw= uc->get_hw(n, a, NULL); @@ -452,4 +443,113 @@ cl_prg_arg::~cl_prg_arg(void) } +/* + * List of arguments + *---------------------------------------------------------------------------- + */ + +int +cl_arguments::arg_avail(char name) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if (a->short_name == name) + return(1); + } + return(0); +} + +int +cl_arguments::arg_avail(char *name) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if (a->long_name && + strcmp(a->long_name, name) == 0) + return(1); + } + return(0); +} + +long +cl_arguments::get_iarg(char sname, char *lname) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if ((sname && a->short_name == sname) || + (lname && a->long_name && strcmp(a->long_name, lname) == 0)) + { + long iv; + if (a->get_ivalue(&iv)) + return(iv); + else + //FIXME + return(0); + } + } + return(0); +} + +char * +cl_arguments::get_sarg(char sname, char *lname) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if ((sname && a->short_name == sname) || + (lname && a->long_name && strcmp(a->long_name, lname) == 0)) + return(a->get_svalue()); + } + return(0); +} + + +double +cl_arguments::get_farg(char sname, char *lname) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if ((sname && a->short_name == sname) || + (lname && a->long_name && strcmp(a->long_name, lname) == 0)) + return(a->get_fvalue()); + } + return(0); +} + +void * +cl_arguments::get_parg(char sname, char *lname) +{ + class cl_prg_arg *a; + int i; + + for (i= 0; i < count; i++) + { + a= (class cl_prg_arg *)(at(i)); + if ((sname && a->short_name == sname) || + (lname && a->long_name && strcmp(a->long_name, lname) == 0)) + return(a->get_pvalue()); + } + return(0); +} + + /* End of arg.cc */