X-Git-Url: https://git.donarmstrong.com/?p=mothur.git;a=blobdiff_plain;f=engine.cpp;h=e4e107168c5723c82b90a7f103ccb8d9ee83cb60;hp=f128c4684040346110d519c56f45c9506e953866;hb=df7e3ff9f68ef157b0328a2d353c3258c5d45d89;hpb=65f2be9d8f9b4cf72b4aafd800fdd11ad26435fd diff --git a/engine.cpp b/engine.cpp index f128c46..e4e1071 100644 --- a/engine.cpp +++ b/engine.cpp @@ -26,71 +26,7 @@ Engine::Engine(){ } } /***********************************************************************/ -string Engine::findMothursPath(){ - try { - - string envPath = getenv("PATH"); - string mothurPath = ""; - - //delimiting path char - char delim; - #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) - delim = ':'; - #else - delim = ';'; - #endif - - //break apart path variable by ':' - vector dirs; - mout->splitAtChar(envPath, dirs, delim); - - //get path related to mothur - for (int i = 0; i < dirs.size(); i++) { - //to lower so we can find it - string tempLower = ""; - for (int j = 0; j < dirs[i].length(); j++) { tempLower += tolower(dirs[i][j]); } - - //is this mothurs path? - if (tempLower.find("mothur") != -1) { mothurPath = dirs[i]; break; } - } - - if (mothurPath != "") { - //add mothur so it looks like what argv would look like - #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) - mothurPath += "/mothur"; - #else - mothurPath += "\\mothur"; - #endif - }else { - //okay mothur is not in the path, so the folder mothur is in must be in the path - //lets find out which one - - //get path related to mothur - for (int i = 0; i < dirs.size(); i++) { - - //is this mothurs path? - ifstream in; - string tempIn = dirs[i]; - #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) - tempIn += "/mothur"; - #else - tempIn += "\\mothur"; - #endif - mout->openInputFile(tempIn, in, ""); - - //if this file exists - if (in) { in.close(); mothurPath = tempIn; break; } - } - } - - return mothurPath; - - } - catch(exception& e) { - mout->errorOut(e, "Engine", "findMothursPath"); - exit(1); - } -} + /***********************************************************************/ InteractEngine::InteractEngine(string path){ @@ -99,7 +35,7 @@ InteractEngine::InteractEngine(string path){ string temppath = path.substr(0, (path.find_last_of("othur")-5)); //this will happen if you set the path variable to contain mothur's exe location - if (temppath == "") { path = findMothursPath(); } + if (temppath == "") { path = mout->findProgramPath("mothur"); } mout->argv = path; } @@ -129,7 +65,9 @@ bool InteractEngine::getInput(){ if (pid == 0) { #endif - + + if (mout->changedSeqNames) { mout->mothurOut("[WARNING]: your sequence names contained ':'. I changed them to '_' to avoid problems in your downstream analysis.\n"); } + mout->mothurOutEndLine(); input = getCommand(); @@ -179,15 +117,20 @@ bool InteractEngine::getInput(){ //cout << pid << " is in execute " << commandName << endl; #endif //executes valid command + mout->changedSeqNames = false; mout->runParse = true; - mout->Groups.clear(); - mout->namesOfGroups.clear(); + mout->clearGroups(); + mout->clearAllGroups(); mout->Treenames.clear(); - mout->names.clear(); mout->saveNextLabel = ""; + mout->printedHeaders = false; + mout->commandInputsConvertError = false; + mout->currentBinLabels.clear(); + mout->binLabelsInFile.clear(); Command* command = cFactory->getCommand(commandName, options); - quitCommandCalled = command->execute(); + if (mout->commandInputsConvertError) { quitCommandCalled = 2; } + else { quitCommandCalled = command->execute(); } //if we aborted command if (quitCommandCalled == 2) { mout->mothurOut("[ERROR]: did not complete " + commandName + "."); mout->mothurOutEndLine(); } @@ -214,14 +157,14 @@ bool InteractEngine::getInput(){ string Engine::getCommand() { try { - #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) + #if defined (__APPLE__) || (__MACH__) || (linux) || (__linux) || (__linux__) || (__unix__) || (__unix) #ifdef USE_READLINE char* nextCommand = NULL; nextCommand = readline("mothur > "); if(nextCommand != NULL) { add_history(nextCommand); } else{ //^D causes null string and we want it to quit mothur - strcpy(nextCommand, "quit"); + nextCommand = strdup("quit"); mout->mothurOut(nextCommand); } @@ -262,7 +205,7 @@ BatchEngine::BatchEngine(string path, string batchFileName){ string temppath = path.substr(0, (path.find_last_of("othur")-5)); //this will happen if you set the path variable to contain mothur's exe location - if (temppath == "") { path = findMothursPath(); } + if (temppath == "") { path = mout->findProgramPath("mothur"); } mout->argv = path; @@ -336,7 +279,7 @@ bool BatchEngine::getInput(){ if (input[0] != '#') { - + if (mout->changedSeqNames) { mout->mothurOut("[WARNING]: your sequence names contained ':'. I changed them to '_' to avoid problems in your downstream analysis.\n"); } mout->mothurOutEndLine(); mout->mothurOut("mothur > " + input); mout->mothurOutEndLine(); @@ -360,15 +303,21 @@ bool BatchEngine::getInput(){ if ((cFactory->MPIEnabled(commandName)) || (pid == 0)) { #endif //executes valid command + mout->changedSeqNames = false; mout->runParse = true; - mout->Groups.clear(); - mout->namesOfGroups.clear(); + mout->clearGroups(); + mout->clearAllGroups(); mout->Treenames.clear(); - mout->names.clear(); mout->saveNextLabel = ""; + mout->printedHeaders = false; + mout->commandInputsConvertError = false; + mout->currentBinLabels.clear(); + mout->binLabelsInFile.clear(); + Command* command = cFactory->getCommand(commandName, options); - quitCommandCalled = command->execute(); + if (mout->commandInputsConvertError) { quitCommandCalled = 2; } + else { quitCommandCalled = command->execute(); } //if we aborted command if (quitCommandCalled == 2) { mout->mothurOut("[ERROR]: did not complete " + commandName + "."); mout->mothurOutEndLine(); } @@ -399,7 +348,7 @@ bool BatchEngine::getInput(){ /***********************************************************************/ string BatchEngine::getNextCommand(ifstream& inputBatchFile) { try { - + string nextcommand = ""; if (inputBatchFile.eof()) { nextcommand = "quit()"; } @@ -425,7 +374,7 @@ ScriptEngine::ScriptEngine(string path, string commandString){ string temppath = path.substr(0, (path.find_last_of("othur")-5)); //this will happen if you set the path variable to contain mothur's exe location - if (temppath == "") { path = findMothursPath(); } + if (temppath == "") { path = mout->findProgramPath("mothur"); } mout->argv = path; @@ -468,11 +417,15 @@ bool ScriptEngine::getInput(){ input = getNextCommand(listOfCommands); if (input == "") { input = "quit()"; } + + if (mout->changedSeqNames) { mout->mothurOut("[WARNING]: your sequence names contained ':'. I changed them to '_' to avoid problems in your downstream analysis.\n"); } - if ((!mout->gui) || (input != "quit()")) { - mout->mothurOutEndLine(); - mout->mothurOut("mothur > " + input); - mout->mothurOutEndLine(); + if (mout->gui) { + if ((input.find("quit") != string::npos) || (input.find("set.logfile") != string::npos)) {} + else if ((input.find("get.current") != string::npos) && (!mout->hasCurrentFiles())) {} + else { mout->mothurOutEndLine(); mout->mothurOut("mothur > " + input); mout->mothurOutEndLine(); } + }else{ + mout->mothurOutEndLine(); mout->mothurOut("mothur > " + input); mout->mothurOutEndLine(); } #ifdef USE_MPI @@ -521,15 +474,20 @@ bool ScriptEngine::getInput(){ //cout << pid << " is in execute" << endl; #endif //executes valid command + mout->changedSeqNames = false; mout->runParse = true; - mout->Groups.clear(); - mout->namesOfGroups.clear(); + mout->clearGroups(); + mout->clearAllGroups(); mout->Treenames.clear(); - mout->names.clear(); mout->saveNextLabel = ""; - + mout->printedHeaders = false; + mout->commandInputsConvertError = false; + mout->currentBinLabels.clear(); + mout->binLabelsInFile.clear(); + Command* command = cFactory->getCommand(commandName, options); - quitCommandCalled = command->execute(); + if (mout->commandInputsConvertError) { quitCommandCalled = 2; } + else { quitCommandCalled = command->execute(); } //if we aborted command if (quitCommandCalled == 2) { mout->mothurOut("[ERROR]: did not complete " + commandName + "."); mout->mothurOutEndLine(); }