From fbaa6c7ac44f857c1ece7c8199e9e7e09b4bbe74 Mon Sep 17 00:00:00 2001
From: westcott <westcott>
Date: Tue, 20 Jul 2010 14:40:07 +0000
Subject: [PATCH] added tempdefault to set.dir and fixed bug with padding type
 in sffinfo.

---
 makefile           |  2 +-
 mothur.cpp         |  4 ++--
 setdircommand.cpp  | 51 +++++++++++++++++++++++++++++++++++++++++-----
 setdircommand.h    |  2 +-
 sffinfocommand.cpp | 12 +++++------
 5 files changed, 56 insertions(+), 15 deletions(-)

diff --git a/makefile b/makefile
index b3bc136..974890d 100644
--- a/makefile
+++ b/makefile
@@ -13,7 +13,7 @@
 
 CXXFLAGS += -O3
 
-MOTHUR_FILES = "\"/Users/SarahsWork/desktop//Release\""
+MOTHUR_FILES = "\"/Users/SarahsWork/desktop/Release\""
 ifeq  ($(strip $(MOTHUR_FILES)),"\"Enter_your_default_path_here\"")
 else
 	CXXFLAGS += -DMOTHUR_FILES=${MOTHUR_FILES}
diff --git a/mothur.cpp b/mothur.cpp
index cb8d1e8..6e61f87 100644
--- a/mothur.cpp
+++ b/mothur.cpp
@@ -87,9 +87,9 @@ int main(int argc, char *argv[]){
 		#endif
 		
 		//header
-		m->mothurOut("mothur v.1.11.0");
+		m->mothurOut("mothur v.1.12.0");
 		m->mothurOutEndLine();		
-		m->mothurOut("Last updated: 6/18/2010");
+		m->mothurOut("Last updated: 7/23/2010");
 		m->mothurOutEndLine();	
 		m->mothurOutEndLine();		
 		m->mothurOut("by");
diff --git a/setdircommand.cpp b/setdircommand.cpp
index 238ffa5..1bc78bd 100644
--- a/setdircommand.cpp
+++ b/setdircommand.cpp
@@ -20,7 +20,7 @@ SetDirectoryCommand::SetDirectoryCommand(string option)  {
 		
 		else {
 			//valid paramters for this command
-			string Array[] =  {"output","input","outputdir","inputdir"};
+			string Array[] =  {"output","input","tempdefault","outputdir","inputdir"};
 			vector<string> myArray (Array, Array+(sizeof(Array)/sizeof(string)));
 			
 			OptionParser parser(option);
@@ -37,9 +37,12 @@ SetDirectoryCommand::SetDirectoryCommand(string option)  {
 			
 			input = validParameter.validFile(parameters, "input", false);			
 			if (input == "not found") {  input = "";  }
+			
+			tempdefault = validParameter.validFile(parameters, "tempdefault", false);			
+			if (tempdefault == "not found") {  tempdefault = "";  }
 				
-			if ((input == "") && (output == "")) {	
-				m->mothurOut("You must provide either an input or output for the set.outdir command."); m->mothurOutEndLine(); abort = true;
+			if ((input == "") && (output == "") && (tempdefault == "")) {	
+				m->mothurOut("You must provide either an input, output or tempdefault for the set.outdir command."); m->mothurOutEndLine(); abort = true;
 			}
 		}
 	}
@@ -54,10 +57,12 @@ void SetDirectoryCommand::help(){
 	try {
 		m->mothurOut("The set.dir command can be used to direct the output files generated by mothur to a specific place, the directory must exist.\n");
 		m->mothurOut("The set.dir command can also be used to specify the directory where your input files are located, the directory must exist.\n");
-		m->mothurOut("The set.dir command parameter is output and is required.\n");
+		m->mothurOut("The set.dir command can also be used to override or set the default location mothur will look for files if it is unable to find them, the directory must exist.\n");
+		m->mothurOut("The set.dir command parameters are input, output and tempdefault and one is required.\n");
 		m->mothurOut("To return the output to the same directory as the input files you may enter: output=clear.\n");
 		m->mothurOut("To return the input to the same directory as the mothur.exe you may enter: input=clear.\n");
-		m->mothurOut("The set.dir command should be in the following format: set.dir(output=yourOutputDirectory, input=yourInputDirectory).\n");
+		m->mothurOut("To return the tempdefault to the default you provided at compile time you may enter: tempdefault=clear.\n");
+		m->mothurOut("The set.dir command should be in the following format: set.dir(output=yourOutputDirectory, input=yourInputDirectory, tempdefault=yourTempDefault).\n");
 		m->mothurOut("Example set.outdir(output=/Users/lab/desktop/outputs, input=/Users/lab/desktop/inputs).\n");
 		m->mothurOut("Note: No spaces between parameter labels (i.e. output), '=' and parameters (i.e.yourOutputDirectory).\n\n");
 	}
@@ -130,6 +135,42 @@ int SetDirectoryCommand::execute(){
 				commandFactory->setInputDirectory(input); 
 			}
 		}
+		
+		//set default
+		if (tempdefault == "clear") {  
+			#ifdef MOTHUR_FILES
+				string temp = MOTHUR_FILES; 
+				m->mothurOut("Resetting default directory to " + temp); m->mothurOutEndLine();  
+				m->setDefaultPath(temp);
+			#else
+				string temp = ""; 
+				m->mothurOut("No default directory defined at compile time."); m->mothurOutEndLine();  
+				m->setDefaultPath(temp);
+			#endif
+		}else if (tempdefault == "") {  //do nothing
+		}else {
+			//add / to name if needed
+			string lastChar = tempdefault.substr(tempdefault.length()-1);
+			#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)
+				if (lastChar != "/") { tempdefault += "/"; }
+			#else
+				if (lastChar != "\\") { tempdefault += "\\"; }	
+			#endif
+			
+			//test to make sure directory exists
+			tempdefault = getFullPathName(tempdefault);
+			string inTemp = tempdefault + "temp";
+			ofstream in;
+			in.open(inTemp.c_str(), ios::trunc);
+			if(!in) {
+				m->mothurOut(tempdefault + " directory does not exist or is not writable."); m->mothurOutEndLine(); 
+			}else{
+				in.close();
+				remove(inTemp.c_str());
+				m->mothurOut("Changing default directory to " + tempdefault); m->mothurOutEndLine();  
+				m->setDefaultPath(tempdefault);
+			}
+		}
 
 		return 0;
 	}
diff --git a/setdircommand.h b/setdircommand.h
index 6634965..565b839 100644
--- a/setdircommand.h
+++ b/setdircommand.h
@@ -25,7 +25,7 @@ public:
 	
 private:
 	CommandFactory* commandFactory;
-	string output, input;
+	string output, input, tempdefault;
 	bool abort;
 		
 };
diff --git a/sffinfocommand.cpp b/sffinfocommand.cpp
index 07334f6..01338ca 100644
--- a/sffinfocommand.cpp
+++ b/sffinfocommand.cpp
@@ -363,8 +363,8 @@ int SffInfoCommand::readCommonHeader(ifstream& in, CommonHeader& header){
 			if (header.keySequence.length() > header.keyLength) { header.keySequence = header.keySequence.substr(0, header.keyLength);  }
 				
 			/* Pad to 8 chars */
-			int spotInFile = in.tellg();
-			int spot = (spotInFile + 7)& ~7;  // ~ inverts
+			unsigned long int spotInFile = in.tellg();
+			unsigned long int spot = (spotInFile + 7)& ~7;  // ~ inverts
 			in.seekg(spot);
 			
 		}else{
@@ -426,8 +426,8 @@ int SffInfoCommand::readHeader(ifstream& in, Header& header){
 			if (header.name.length() > header.nameLength) { header.name = header.name.substr(0, header.nameLength);  }
 			
 			/* Pad to 8 chars */
-			int spotInFile = in.tellg();
-			int spot = (spotInFile + 7)& ~7;
+			unsigned long int spotInFile = in.tellg();
+			unsigned long int spot = (spotInFile + 7)& ~7;
 			in.seekg(spot);
 			
 		}else{
@@ -478,8 +478,8 @@ int SffInfoCommand::readSeqData(ifstream& in, seqRead& read, int numFlowReads, i
 			}
 		
 			/* Pad to 8 chars */
-			int spotInFile = in.tellg();
-			int spot = (spotInFile + 7)& ~7;
+			unsigned long int spotInFile = in.tellg();
+			unsigned long int spot = (spotInFile + 7)& ~7;
 			in.seekg(spot);
 			
 		}else{
-- 
2.39.5