}
bool
-cl_cmd_arg::as_address(void)
+cl_cmd_arg::as_address(class cl_uc *uc)
{
- return(get_address(&(value.address)));
+ bool b= get_address(uc, &(value.address));
+ return(b);
}
bool
}
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);
/* 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;
{
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));
+
+ if (mem)
+ *mem= uc->bit2mem(bit_addr, mem_addr, bit_mask);
+ return(mem && *mem);
}
bool
/* 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
}
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;
get_svalue(),
uc)) == NULL)
return(DD_FALSE);
- return(uc->extract_bit_address(ne->addr, mem, mem_addr, bit_mask));
+ if (mem)
+ *mem= uc->bit2mem(ne->addr, mem_addr, bit_mask);
+ return(mem && *mem);
}
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());
/* 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;
}
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);
}
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;
+ name_arg= aname;
index= aindex;
}
cl_cmd_array_arg::~cl_cmd_array_arg(void)
{
- if (name)
- delete name;
+ if (name_arg)
+ delete name_arg;
if (index)
delete index;
}
char *n;
t_addr a;
- if (name == 0 ||
+ if (name_arg == 0 ||
index == 0 ||
- (n= name->get_svalue()) == NULL ||
- !index->get_address(&a))
+ (n= name_arg->get_svalue()) == NULL ||
+ !index->get_address(uc, &a))
return(DD_FALSE);
value.hw= uc->get_hw(n, a, NULL);
}
+/*
+ * List of arguments
+ *----------------------------------------------------------------------------
+ */
+
+int
+cl_arguments::arg_avail(char nam)
+{
+ class cl_prg_arg *a;
+ int i;
+
+ for (i= 0; i < count; i++)
+ {
+ a= (class cl_prg_arg *)(at(i));
+ if (a->short_name == nam)
+ return(1);
+ }
+ return(0);
+}
+
+int
+cl_arguments::arg_avail(char *nam)
+{
+ 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, nam) == 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 */