virtual int execute(const string &command, ParameterList ¶ms, unsigned int phase) { if (command == "-i" || command == "--input") { if (params.size()==0) { cerr << "Warning: " << command << " needs a file path to follow. Ignoring." << endl; return 0; } else { getInputPath() = params[0]; params.erase(params.begin()); return 0; } } else if (command == "-o" || command == "--output") { if (params.size()==0) { cerr << "Warning: " << command << " needs a file path to follow. Ignoring." << endl; return 0; } else { getOutputPath() = params[0]; params.erase(params.begin()); return 0; } } else if (command == "-c" || command == "--convert") { if (params.size() < 3) { cerr << "Fatal: " << command << " needs three arguments:\n" << "\tmesher <...> " << command << " {XMesh|BFXM|Wavefront} (XMesh|BFXM|Wafefront|Ogre) (create|append|optimize)\n" << "\n" << "Do \"mesher --help convert\" for details" << endl; return 1; } else { if (phase == 0) { // Do nothing in phase 0. return 0; } else if (phase == 1) { ConversionImplList& registry = getRegistry(); ConversionImpl::RetCodeEnum rc = ConversionImpl::RC_NOT_IMPLEMENTED; for (ConversionImplList::iterator cit=registry.begin(); (rc == ConversionImpl::RC_NOT_IMPLEMENTED)&&(cit!=registry.end()); ++cit) { rc = cit->second->convert(params[0],params[1],params[2]); } if (rc == ConversionImpl::RC_NOT_IMPLEMENTED) { cerr << "Error: " << params[2] << " from " << params[0] << " to " << params[1] << " unimplemneted" << endl; return ConversionImpl::RC_NOT_IMPLEMENTED; } else if (rc == ConversionImpl::RC_OK) { params.erase(params.begin(),params.begin()+3); return ConversionImpl::RC_OK; } else { cerr << "Error: "; switch (rc) { case ConversionImpl::RC_INVALID_PARAMS: cerr << "Invalid parameters specified for " << command; break; case ConversionImpl::RC_INVALID_INPUT: cerr << "Invalid input"; break; case ConversionImpl::RC_INTERNAL_ERROR: cerr << "Internal error"; break; default: cerr << "(see above messages)"; break; } cerr << endl; return rc; } } else { cerr << "Warning: ConvertHandler::execute(): received an unexpected phase. Ignoring." << endl; return 0; } } } else if (command.length()>2 && command[0]=='-' && command[1]!='-') { string::size_type eq = command.rfind('='); string::size_type nn = ((eq==string::npos)?string::npos:eq-1); string option = command.substr(1,nn); if (mOptions.count(option)) { string value = ((eq!=string::npos)?command.substr(eq+1):string("1")); AliasList::const_iterator ait = mAliases.find(option); if (ait != mAliases.end()) option = ait->second; getNamedOption(option) = value; return 0; } else { cerr << "Fatal: Internal error - ConvertHandler::execute() received an unrecognized option" << endl; return 1; } } else { cerr << "Fatal: Internal error - ConvertHandler::execute() received an unrecognized command" << endl; return 1; } }