ucsim-0.2.37-pre3 into cvs
[fw/sdcc] / sim / ucsim / sim.src / arg.cc
1 /*
2  * Simulator of microcontrollers (arg.cc)
3  *
4  * Copyright (C) 1999,99 Drotos Daniel, Talker Bt.
5  * 
6  * To contact author send email to drdani@mazsola.iit.uni-miskolc.hu
7  *
8  */
9
10 /* This file is part of microcontroller simulator: ucsim.
11
12 UCSIM is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2 of the License, or
15 (at your option) any later version.
16
17 UCSIM is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
20 GNU General Public License for more details.
21
22 You should have received a copy of the GNU General Public License
23 along with UCSIM; see the file COPYING.  If not, write to the Free
24 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
25 02111-1307, USA. */
26 /*@1@*/
27
28 #include "ddconfig.h"
29
30 #include <stdio.h>
31 #include <stdlib.h>
32 #include "i_string.h"
33
34 // prj
35 #include "globals.h"
36
37 // sim
38 #include "simcl.h"
39
40 // cmd
41 #include "cmdutil.h"
42
43 // local
44 #include "argcl.h"
45
46
47 /*
48  * Making the argument
49  */
50
51 cl_arg::cl_arg(long long lv):
52   cl_base()
53 {
54   i_value= lv;
55   s_value= 0;
56 }
57
58 cl_arg::cl_arg(char *sv):
59   cl_base()
60 {
61   s_value= sv?strdup(sv):0;
62 }
63
64 cl_arg::cl_arg(double fv):
65   cl_base()
66 {
67   f_value= fv;
68   s_value= 0;
69 }
70
71 cl_arg::cl_arg(void *pv):
72   cl_base()
73 {
74   p_value= pv;
75   s_value= 0;
76 }
77
78 cl_arg::~cl_arg(void)
79 {
80   if (s_value)
81     free(s_value);
82 }
83
84
85 /*
86  * Getting value of the argument
87  */
88
89 long long
90 cl_arg::get_ivalue(void)
91 {
92   return(i_value);
93 }
94
95 char *
96 cl_arg::get_svalue(void)
97 {
98   return(s_value);
99 }
100
101 double
102 cl_arg::get_fvalue(void)
103 {
104   return(f_value);
105 }
106
107 void *
108 cl_arg::get_pvalue(void)
109 {
110   return(p_value);
111 }
112
113
114 /*
115  * Command parameters
116  *----------------------------------------------------------------------------
117  */
118
119 cl_cmd_int_arg::cl_cmd_int_arg(long long addr):
120   cl_cmd_arg(addr)
121 {}
122
123 cl_cmd_sym_arg::cl_cmd_sym_arg(char *sym):
124   cl_cmd_arg(sym)
125 {}
126
127 long
128 cl_cmd_sym_arg::get_address(void)
129 {
130   struct name_entry *ne;
131
132   if ((ne= get_name_entry(simulator->uc->sfr_tbl(),
133                           get_svalue(),
134                           simulator->uc)) != NULL)
135     {
136       return(ne->addr);
137     }
138   return(-1);
139 }
140
141 cl_cmd_str_arg::cl_cmd_str_arg(char *str):
142   cl_cmd_arg(str)
143 {}
144
145 cl_cmd_bit_arg::cl_cmd_bit_arg(class cl_cmd_arg *asfr, class cl_cmd_arg *abit):
146   cl_cmd_arg((long long)0)
147 {
148   sfr= asfr;
149   bit= abit;
150 }
151
152 cl_cmd_bit_arg::~cl_cmd_bit_arg(void)
153 {
154   if (sfr)
155     delete sfr;
156   if (bit)
157     delete bit;
158 }
159
160 long
161 cl_cmd_bit_arg::get_address(void)
162 {
163   if (sfr)
164     return(sfr->get_address());
165   return(-1);
166 }
167
168
169 /*
170  * Program arguments
171  *----------------------------------------------------------------------------
172  */
173
174 cl_prg_arg::cl_prg_arg(char sn, char *ln, long long lv):
175   cl_arg(lv)
176 {
177   short_name= sn;
178   long_name = ln?strdup(ln):0;
179 }
180
181 cl_prg_arg::cl_prg_arg(char sn, char *ln, char *sv):
182   cl_arg(sv)
183 {
184   short_name= sn;
185   long_name = ln?strdup(ln):0;
186 }
187
188 cl_prg_arg::cl_prg_arg(char sn, char *ln, double fv):
189   cl_arg(fv)
190 {
191   short_name= sn;
192   long_name = ln?strdup(ln):0;
193 }
194
195 cl_prg_arg::cl_prg_arg(char sn, char *ln, void *pv):
196   cl_arg(pv)
197 {
198   short_name= sn;
199   long_name = ln?strdup(ln):0;
200 }
201
202 cl_prg_arg::~cl_prg_arg(void)
203 {
204   if (long_name)
205     free(long_name);
206 }
207
208
209 /* End of arg.cc */