- Timestamp:
- Nov 12, 2005, 1:40:06 PM (19 years ago)
- Location:
- trunk/src/lib
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/shell/shell_command.cc
r5374 r5552 259 259 tList<ShellCommandAlias>* ShellCommandClass::aliasList = NULL; 260 260 261 262 263 264 265 266 267 268 269 270 //////////////////////// 271 // SHELL COMMAND BASE // 272 //////////////////////// 261 273 /** 262 274 * constructs and registers a new Command … … 282 294 this->paramCount = paramCount; 283 295 this->parameters = new unsigned int[paramCount]; 296 this->defaultValue = new MultiType[paramCount]; 284 297 285 298 va_list parameterList; 286 299 va_start(parameterList, paramCount); 287 300 301 // What Parameters we have got 288 302 for (unsigned int i = 0; i < paramCount; i++) 289 {290 303 this->parameters[i] = va_arg(parameterList, int); 291 292 switch (this->parameters[i])293 {294 case ParameterBool:295 this->defaultBools[i] = va_arg(parameterList, int);296 break;297 case ParameterChar:298 this->defaultStrings[i] = new char[2];299 sprintf(this->defaultStrings[0], "%c", va_arg(parameterList, int));300 break;301 case ParameterString:302 this->defaultStrings[i] = va_arg(parameterList, char*);303 break;304 case ParameterInt:305 this->defaultInts[i] = va_arg(parameterList, int);306 break;307 case ParameterUInt:308 this->defaultInts[i] = va_arg(parameterList, unsigned int);309 break;310 case ParameterFloat:311 this->defaultFloats[i] = va_arg(parameterList, double);312 break;313 case ParameterLong:314 this->defaultInts[i] = va_arg(parameterList, long);315 break;316 default:317 break;318 }319 }320 304 } 321 305 … … 327 311 { 328 312 delete[] this->parameters; 313 delete[] this->defaultValue; 329 314 if (this->alias != NULL && ShellCommandClass::aliasList != NULL) 330 315 { … … 598 583 for (unsigned int i = 0; i < count; i++) 599 584 { 585 586 600 587 switch (this->parameters[i]) 601 588 { 602 589 case ParameterBool: 603 this->default Bools[i] = va_arg(defaultList, int);590 this->defaultValue[i].setInt(va_arg(defaultList, int)); 604 591 break; 605 592 case ParameterChar: 606 this->defaultStrings[i] = new char[2]; 607 sprintf(this->defaultStrings[0], "%c", va_arg(defaultList, int)); 593 this->defaultValue[i].setChar((char)va_arg(defaultList, int)); 608 594 break; 609 595 case ParameterString: 610 this->default Strings[i] = va_arg(defaultList, char*);596 this->defaultValue[i].setString(va_arg(defaultList, char*)); 611 597 break; 612 598 case ParameterInt: 613 this->default Ints[i] = va_arg(defaultList, int);599 this->defaultValue[i].setInt(va_arg(defaultList, int)); 614 600 break; 615 601 case ParameterUInt: 616 this->default Ints[i] = va_arg(defaultList, unsigned int);602 this->defaultValue[i].setInt((int)va_arg(defaultList, unsigned int)); 617 603 break; 618 604 case ParameterFloat: 619 this->default Floats[i] = va_arg(defaultList, double);605 this->defaultValue[i].setFloat(va_arg(defaultList, double)); 620 606 break; 621 607 case ParameterLong: 622 this->default Ints[i] = va_arg(defaultList, long);608 this->defaultValue[i].setInt((int) va_arg(defaultList, long)); 623 609 break; 624 610 default: … … 626 612 } 627 613 } 628 629 614 return this; 630 615 } -
trunk/src/lib/shell/shell_command.h
r5551 r5552 10 10 11 11 #include "helper_functions.h" 12 #include "multi_type.h" 12 13 #include "substring.h" 13 14 #include "functor_list.h" … … 133 134 unsigned int paramCount; //!< the count of parameters. 134 135 unsigned int* parameters; //!< Parameters the function of this Command takes. 135 char* defaultStrings[FUNCTOR_MAX_ARGUMENTS];//!< A list of default Strings stored. 136 int defaultInts[FUNCTOR_MAX_ARGUMENTS]; //!< A list of default Ints stored. 137 float defaultFloats[FUNCTOR_MAX_ARGUMENTS]; //!< A list of default Floats stored. 138 bool defaultBools[FUNCTOR_MAX_ARGUMENTS]; //!< A list of default Bools stored. 139 136 MultiType* defaultValue; //!< Default Values. 140 137 141 138 private: … … 153 150 ///////////////////////////////// 154 151 //! where to chek for default BOOL values 155 #define l_BOOL_DEFGRAB(i) this->default Bools[i]152 #define l_BOOL_DEFGRAB(i) this->defaultValue[i].getBool() 156 153 //! where to chek for default INT values 157 #define l_INT_DEFGRAB(i) this->default Ints[i]154 #define l_INT_DEFGRAB(i) this->defaultValue[i].getInt() 158 155 //! where to chek for default UINT values 159 #define l_UINT_DEFGRAB(i) (unsigned int)this->default Ints[i]156 #define l_UINT_DEFGRAB(i) (unsigned int)this->defaultValue[i].getInt() 160 157 //! where to chek for default LONG values 161 #define l_LONG_DEFGRAB(i) (long)this->default Ints[i]158 #define l_LONG_DEFGRAB(i) (long)this->defaultValue[i].getInt() 162 159 //! where to chek for default FLOAT values 163 #define l_FLOAT_DEFGRAB(i) this->default Floats[i]160 #define l_FLOAT_DEFGRAB(i) this->defaultValue[i].getFloat() 164 161 //! where to chek for default STRING values 165 #define l_STRING_DEFGRAB(i) this->default Strings[i]162 #define l_STRING_DEFGRAB(i) this->defaultValue[i].getString() 166 163 167 164 ////////////////////////// … … 183 180 //! registers a command with 1 parameter 184 181 #define ShellCommandRegister1(t1) \ 185 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE) , t1##_TYPE d1 = t1##_DEFAULT) \182 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE)) \ 186 183 { \ 187 184 if (isRegistered(commandName, className, 1, t1##_PARAM)== true) \ 188 185 return NULL; \ 189 return new SHELLCOMMAND<T>(commandName, className, function , d1); \186 return new SHELLCOMMAND<T>(commandName, className, function); \ 190 187 } 191 188 192 189 //! registers a command with 2 parameters 193 190 #define ShellCommandRegister2(t1,t2) \ 194 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE) , t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT) \191 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE)) \ 195 192 { \ 196 193 if (isRegistered(commandName, className, 2, t1##_PARAM, t2##_PARAM)== true) \ 197 194 return NULL; \ 198 return new SHELLCOMMAND<T>(commandName, className, function , d1, d2); \195 return new SHELLCOMMAND<T>(commandName, className, function); \ 199 196 } 200 197 201 198 //! registers a command with 3 parameters 202 199 #define ShellCommandRegister3(t1,t2,t3) \ 203 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE) , t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT) \200 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE)) \ 204 201 { \ 205 202 if (isRegistered(commandName, className, 3, t1##_PARAM, t2##_PARAM, t3##_PARAM)== true) \ 206 203 return NULL; \ 207 return new SHELLCOMMAND<T>(commandName, className, function , d1, d2, d3); \204 return new SHELLCOMMAND<T>(commandName, className, function); \ 208 205 } 209 206 210 207 //! registers a command with 4 parameters 211 208 #define ShellCommandRegister4(t1,t2,t3,t4) \ 212 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE) , t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT, t4##_TYPE d4 = t4##_DEFAULT) \209 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE)) \ 213 210 { \ 214 211 if (isRegistered(commandName, className, 4, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM)== true) \ 215 212 return NULL; \ 216 return new SHELLCOMMAND<T>(commandName, className, function , d1, d2, d3, d4); \213 return new SHELLCOMMAND<T>(commandName, className, function); \ 217 214 } 218 215 219 216 //! registers a command with 5 parameters 220 217 #define ShellCommandRegister5(t1,t2,t3,t4,t5) \ 221 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE) , t1##_TYPE d1 = t1##_DEFAULT, t2##_TYPE d2 = t2##_DEFAULT, t3##_TYPE d3 = t3##_DEFAULT, t4##_TYPE d4 = t4##_DEFAULT, t5##_TYPE d5 = t5##_DEFAULT) \218 static SHELLCOMMAND<T>* registerCommand(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE)) \ 222 219 { \ 223 220 if (isRegistered(commandName, className, 5, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM, t5##_PARAM)== true) \ 224 221 return NULL; \ 225 return new ShellCommand<T>(commandName, className, function , d1, d2, d3, d4, d5); \222 return new ShellCommand<T>(commandName, className, function); \ 226 223 } 227 224 … … 264 261 //! creates a command that takes one parameter 265 262 #define ShellCommandConstructor1(t1) \ 266 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE) , t1##_TYPE d1) \267 : ShellCommandBase(commandName, className, 1, t1##_PARAM , d1) \263 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE)) \ 264 : ShellCommandBase(commandName, className, 1, t1##_PARAM) \ 268 265 { \ 269 266 this->functorType = SHELLCOMMANDTYPE; \ … … 273 270 //! creates a command that takes two parameters 274 271 #define ShellCommandConstructor2(t1,t2) \ 275 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE) , t1##_TYPE d1, t2##_TYPE d2) \276 : ShellCommandBase(commandName, className, 2, t1##_PARAM, d1, t2##_PARAM, d2) \272 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE)) \ 273 : ShellCommandBase(commandName, className, 2, t1##_PARAM, t2##_PARAM) \ 277 274 { \ 278 275 this->functorType = SHELLCOMMANDTYPE; \ … … 282 279 //! creates a command that takes three parameter 283 280 #define ShellCommandConstructor3(t1,t2,t3) \ 284 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE) , t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3) \285 : ShellCommandBase(commandName, className, 3, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3) \281 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE)) \ 282 : ShellCommandBase(commandName, className, 3, t1##_PARAM, t2##_PARAM, t3##_PARAM) \ 286 283 { \ 287 284 this->functorType = SHELLCOMMANDTYPE; \ … … 291 288 //! creates a command that takes four parameter 292 289 #define ShellCommandConstructor4(t1,t2,t3,t4) \ 293 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE) , t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3, t4##_TYPE d4) \294 : ShellCommandBase(commandName, className, 4, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3, t4##_PARAM, d4) \290 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE)) \ 291 : ShellCommandBase(commandName, className, 4, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM) \ 295 292 { \ 296 293 this->functorType = SHELLCOMMANDTYPE; \ … … 300 297 //! creates a command that takes five parameter 301 298 #define ShellCommandConstructor5(t1,t2,t3,t4,t5) \ 302 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE) , t1##_TYPE d1, t2##_TYPE d2, t3##_TYPE d3, t4##_TYPE d4, t5##_TYPE d5) \303 : ShellCommandBase(commandName, className, 5, t1##_PARAM, d1, t2##_PARAM, d2, t3##_PARAM, d3, t4##_PARAM, d4, t5##_PARAM, d5) \299 SHELLCOMMAND(const char* commandName, const char* className, void SHELLCOMMANDINCLASS(*function)(t1##_TYPE, t2##_TYPE, t3##_TYPE, t4##_TYPE, t5##_TYPE)) \ 300 : ShellCommandBase(commandName, className, 5, t1##_PARAM, t2##_PARAM, t3##_PARAM, t4##_PARAM, t5##_PARAM) \ 304 301 { \ 305 302 this->functorType = SHELLCOMMANDTYPE; \ -
trunk/src/lib/util/multi_type.cc
r5545 r5552 30 30 MultiType::MultiType() 31 31 { 32 this->type = MT_NULL; 33 this->storedString = NULL; 34 } 35 32 this->init(); 33 } 36 34 /** 37 35 * creates a multiType out of a boolean … … 178 176 if (this->storedString != NULL) 179 177 delete[] this->storedString; 180 this->storedString = new char[strlen(value)+1]; 181 strcpy(storedString, value); 182 183 this->value.String = this->storedString; 178 179 if (value == NULL) 180 { 181 this->storedString = new char[1]; 182 this->storedString[0] = '\0'; 183 this->value.String = this->storedString; 184 return; 185 } 186 else 187 { 188 this->storedString = new char[strlen(value)+1]; 189 strcpy(storedString, value); 190 this->value.String = this->storedString; 191 } 184 192 } 185 193 -
trunk/src/lib/util/multi_type.h
r5551 r5552 57 57 inline MT_Type getType() const { return this->type; }; 58 58 59 60 /* RETRIEVING FUNCTIONS */ 59 61 bool getBool() const; 60 62 int getInt() const;
Note: See TracChangeset
for help on using the changeset viewer.