Bool CommandVarNew::Execute( GChar * strOutput, const GChar * strArgList ) { // Get console environment ConsoleEnvironment * pEnv = ConsoleFn->GetEnvironment(); // Parse arguments GChar strArg0[CONSOLECOMMAND_OUTPUT_LENGTH]; GChar strArg1[CONSOLECOMMAND_OUTPUT_LENGTH]; // Pick first argument strArgList = _ExtractArgument_String( strArg0, strArgList ); // No argument case if ( strArgList == NULL ) { strOutput = StringFn->Copy( strOutput, TEXT("Missing parameter 0 : varname ...") ); return false; } // Pick second argument strArgList = _ExtractArgument_String( strArg1, strArgList ); // One argument case if ( strArgList == NULL ) { ConsoleVariable * pVar = pEnv->CreateVariable( strArg0 ); if ( pVar == NULL ) { strOutput = StringFn->Copy( strOutput, TEXT("Bad parameter 0 : varname already exists ...") ); return false; } strOutput = StringFn->Format( strOutput, TEXT("Created variable %s"), pVar->GetName() ); return true; } // Two arguments case ConsoleVariableType iVarType = ConsoleVariable::GetTypeValue( strArg0 ); if ( iVarType == CONSOLEVAR_TYPE_UNDEFINED ) { strOutput = StringFn->Copy( strOutput, TEXT("Bad parameter 0 : Invalid vartype ...") ); return false; } ConsoleVariable * pVar = pEnv->CreateVariable( strArg1, iVarType, NULL ); if ( pVar == NULL ) { strOutput = StringFn->Copy( strOutput, TEXT("Bad parameter 1 : varname already exists ...") ); return false; } strOutput = StringFn->Format( strOutput, TEXT("Created variable %s"), pVar->GetName() ); return true; }
ConsoleVariable * ConsoleEnvironment::CreateVariable( const GChar * strName, ConsoleVariableType iType, Void * pValue ) { // Variable already exists if ( m_mapVariables.Contains(strName) ) return NULL; ConsoleFn->SelectMemory( TEXT("Environment") ); ConsoleVariable * pVar = New ConsoleVariable( strName, iType, pValue ); ConsoleFn->UnSelectMemory(); VariableMap::Iterator itVar; Bool bInserted = m_mapVariables.Insert( pVar->GetName(), pVar, &itVar ); Assert( bInserted && !(itVar.IsNull()) ); return itVar.GetItem(); }