more fix on Ec/Ev.
[gss-tcad.git] / src / cmd / cmdbuf.cc
blob576636cd9f8880dca4cc3245021205677e1068a0
1 /*****************************************************************************/
2 /* 8888888 88888888 88888888 */
3 /* 8 8 8 */
4 /* 8 8 8 */
5 /* 8 88888888 88888888 */
6 /* 8 8888 8 8 */
7 /* 8 8 8 8 */
8 /* 888888 888888888 888888888 */
9 /* */
10 /* A Two-Dimensional General Purpose Semiconductor Simulator. */
11 /* */
12 /* GSS 0.4x */
13 /* Last update: May 14, 2006 */
14 /* */
15 /* Gong Ding */
16 /* gdiso@ustc.edu */
17 /* NINT, No.69 P.O.Box, Xi'an City, China */
18 /* */
19 /*****************************************************************************/
21 #include "cmdbuf.h"
24 bool Cmd::allowed_args(int argc,...)
26 va_list arg;
27 va_start(arg,argc);
29 for(parg=arg_map.begin();parg!=arg_map.end();parg++)
31 int flag = 0;
32 va_start(arg,argc);
33 for(int i=0;i<argc;i++)
34 if( parg->second.arg_label==va_arg(arg,char *)) flag = 1;
35 if(!flag)
37 va_end(arg);
38 return false;
40 va_end(arg);
42 return true;
45 double Cmd::get_number(const char *name, int alias_num, ...)
47 string arg_name=name;
48 string alias[20];
49 va_list arg;
50 va_start(arg,alias_num);
51 for(int i=0;i<alias_num;i++)
52 alias[i] = va_arg(arg,char *);
53 double value = va_arg(arg,double);
54 va_end(arg);
56 if((parg=arg_map.find(arg_name))!=arg_map.end())
57 return parg->second.arg_value.dval;
59 for(int i=0;i<alias_num;i++)
60 if((parg=arg_map.find(alias[i]))!=arg_map.end())
61 return parg->second.arg_value.dval;
63 return value;
67 int Cmd::get_integer(const char *name, int alias_num, ...)
69 string arg_name=name;
70 string alias[20];
71 va_list arg;
72 va_start(arg,alias_num);
73 for(int i=0;i<alias_num;i++)
74 alias[i] = va_arg(arg,char *);
75 int value = va_arg(arg,int);
76 va_end(arg);
78 if((parg=arg_map.find(arg_name))!=arg_map.end())
79 return parg->second.arg_value.ival;
81 for(int i=0;i<alias_num;i++)
82 if((parg=arg_map.find(alias[i]))!=arg_map.end())
83 return parg->second.arg_value.ival;
85 return value;
89 bool Cmd::get_bool(const char *name, int alias_num, ...)
91 string arg_name=name;
92 string alias[20];
93 va_list arg;
94 va_start(arg,alias_num);
95 for(int i=0;i<alias_num;i++)
96 alias[i] = va_arg(arg,char *);
97 bool value = va_arg(arg,int);
98 va_end(arg);
100 if((parg=arg_map.find(arg_name))!=arg_map.end())
101 return parg->second.arg_value.bval;
103 for(int i=0;i<alias_num;i++)
104 if((parg=arg_map.find(alias[i]))!=arg_map.end())
105 return parg->second.arg_value.bval;
107 return value;
111 char * Cmd::get_string(const char *name, int alias_num, ...)
113 string arg_name=name;
114 string alias[20];
115 va_list arg;
116 va_start(arg,alias_num);
117 for(int i=0;i<alias_num;i++)
118 alias[i] = va_arg(arg,char *);
119 char * value = va_arg(arg,char *);
120 va_end(arg);
122 if((parg=arg_map.find(arg_name))!=arg_map.end())
123 return parg->second.arg_value.sval;
125 for(int i=0;i<alias_num;i++)
126 if((parg=arg_map.find(alias[i]))!=arg_map.end())
127 return parg->second.arg_value.sval;
129 return value;
133 bool Cmd::is_arg_exist(const char *name)
135 string arg_name=name;
136 if((parg=arg_map.find(arg_name))!=arg_map.end())
137 return true;
138 return false;
142 bool Cmd::is_arg_value(const char *name, const char * value)
144 string arg_name=name;
145 if((parg=arg_map.find(arg_name))!=arg_map.end())
146 if(!strcmp(parg->second.arg_value.sval,value))
147 return true;
148 else
149 return false;
150 return false;