From 19b2ab858fcf2684213f741a0e7ac9c727f06362 Mon Sep 17 00:00:00 2001
From: westcott <westcott>
Date: Tue, 4 May 2010 15:05:05 +0000
Subject: [PATCH] enabled ~

---
 mothur.h       | 162 ++++++++++++++++++++++++++-----------------------
 nocommands.cpp |   4 +-
 2 files changed, 89 insertions(+), 77 deletions(-)

diff --git a/mothur.h b/mothur.h
index 7f3608e..f101d1f 100644
--- a/mothur.h
+++ b/mothur.h
@@ -379,7 +379,7 @@ inline string hasPath(string longName){
 	string path = "";
 	
 	size_t found;
-	found=longName.find_last_of("/\\");
+	found=longName.find_last_of("~/\\");
 
 	if(found != longName.npos){
 		path = longName.substr(0, found+1);
@@ -433,91 +433,103 @@ inline string getFullPathName(string fileName){
 		string cwd;
 		//get current working directory 
 		#if defined (__APPLE__) || (__MACH__) || (linux) || (__linux)	
-			if (path.rfind("./") == -1) { return fileName; } //already complete name
-			else { newFileName = fileName.substr(fileName.rfind("./")+2); } //save the complete part of the name
 			
-			char* cwdpath = new char[1024];
+			if (path.find("~") != -1) { //go to home directory
+				string homeDir = getenv ("HOME");
+				newFileName = homeDir + fileName.substr(fileName.find("~")+1);
+				return newFileName;
+			}else { //find path
+				if (path.rfind("./") == -1) { return fileName; } //already complete name
+				else { newFileName = fileName.substr(fileName.rfind("./")+2); } //save the complete part of the name
+				
+				char* cwdpath = new char[1024];
 
-			size_t size;
-			cwdpath=getcwd(cwdpath,size);
-		
-			cwd = cwdpath;
-			
-			//rip off first '/'
-			string simpleCWD;
-			if (cwd.length() > 0) { simpleCWD = cwd.substr(1); }
+				size_t size;
+				cwdpath=getcwd(cwdpath,size);
 			
-			//break apart the current working directory
-			vector<string> dirs;
-			while (simpleCWD.find_first_of('/') != -1) {
-				string dir = simpleCWD.substr(0,simpleCWD.find_first_of('/'));
-				simpleCWD = simpleCWD.substr(simpleCWD.find_first_of('/')+1, simpleCWD.length());
-				dirs.push_back(dir);
-			}
-			//get last one              // ex. ../../../filename = /user/work/desktop/filename
-			dirs.push_back(simpleCWD);  //ex. dirs[0] = user, dirs[1] = work, dirs[2] = desktop
+				cwd = cwdpath;
+				
+				//rip off first '/'
+				string simpleCWD;
+				if (cwd.length() > 0) { simpleCWD = cwd.substr(1); }
+				
+				//break apart the current working directory
+				vector<string> dirs;
+				while (simpleCWD.find_first_of('/') != -1) {
+					string dir = simpleCWD.substr(0,simpleCWD.find_first_of('/'));
+					simpleCWD = simpleCWD.substr(simpleCWD.find_first_of('/')+1, simpleCWD.length());
+					dirs.push_back(dir);
+				}
+				//get last one              // ex. ../../../filename = /user/work/desktop/filename
+				dirs.push_back(simpleCWD);  //ex. dirs[0] = user, dirs[1] = work, dirs[2] = desktop
+				
 			
+				int index = dirs.size()-1;
 		
-			int index = dirs.size()-1;
-	
-			while((pos = path.rfind("./")) != -1) { //while you don't have a complete path
-				if (pos == 0) { break;  //you are at the end
-				}else if (path[(pos-1)] == '.') { //you want your parent directory ../
-					path = path.substr(0, pos-1);
-					index--;
-					if (index == 0) {  break; }
-				}else if (path[(pos-1)] == '/') { //you want the current working dir ./
-					path = path.substr(0, pos);
-				}else if (pos == 1) { break;  //you are at the end
-				}else { cout << "cannot resolve path for " <<  fileName << endl; return fileName; }
-			}
-		
-			for (int i = index; i >= 0; i--) {
-				newFileName = dirs[i] +  "/" + newFileName;		
-			}
+				while((pos = path.rfind("./")) != -1) { //while you don't have a complete path
+					if (pos == 0) { break;  //you are at the end
+					}else if (path[(pos-1)] == '.') { //you want your parent directory ../
+						path = path.substr(0, pos-1);
+						index--;
+						if (index == 0) {  break; }
+					}else if (path[(pos-1)] == '/') { //you want the current working dir ./
+						path = path.substr(0, pos);
+					}else if (pos == 1) { break;  //you are at the end
+					}else { cout << "cannot resolve path for " <<  fileName << endl; return fileName; }
+				}
 			
-			newFileName =  "/" +  newFileName;
-			return newFileName;
+				for (int i = index; i >= 0; i--) {
+					newFileName = dirs[i] +  "/" + newFileName;		
+				}
 				
+				newFileName =  "/" +  newFileName;
+				return newFileName;
+			}	
 		#else
-			if (path.rfind(".\\") == -1) { return fileName; } //already complete name
-			else { newFileName = fileName.substr(fileName.rfind(".\\")+2); } //save the complete part of the name
-						
-			char *cwdpath = NULL;
-			cwdpath = getcwd(NULL, 0); // or _getcwd
-			if ( cwdpath != NULL) { cwd = cwdpath; }
-			else { cwd = "";  }
-			
-			//break apart the current working directory
-			vector<string> dirs;
-			while (cwd.find_first_of('\\') != -1) {
-				string dir = cwd.substr(0,cwd.find_first_of('\\'));
-				cwd = cwd.substr(cwd.find_first_of('\\')+1, cwd.length());
-				dirs.push_back(dir);
-	
-			}
-			//get last one
-			dirs.push_back(cwd);  //ex. dirs[0] = user, dirs[1] = work, dirs[2] = desktop
-				
-			int index = dirs.size()-1;
+			if (path.find("~") != -1) { //go to home directory
+				string homeDir = getenv ("HOME");
+				newFileName = homeDir + fileName.substr(fileName.find("~")+1);
+				return newFileName;
+			}else { //find path
+				if (path.rfind(".\\") == -1) { return fileName; } //already complete name
+				else { newFileName = fileName.substr(fileName.rfind(".\\")+2); } //save the complete part of the name
+							
+				char *cwdpath = NULL;
+				cwdpath = getcwd(NULL, 0); // or _getcwd
+				if ( cwdpath != NULL) { cwd = cwdpath; }
+				else { cwd = "";  }
 				
-			while((pos = path.rfind(".\\")) != -1) { //while you don't have a complete path
-				if (pos == 0) { break;  //you are at the end
-				}else if (path[(pos-1)] == '.') { //you want your parent directory ../
-					path = path.substr(0, pos-1);
-					index--;
-					if (index == 0) {  break; }
-				}else if (path[(pos-1)] == '\\') { //you want the current working dir ./
-					path = path.substr(0, pos);
-				}else if (pos == 1) { break;  //you are at the end
-				}else { cout << "cannot resolve path for " <<  fileName << endl; return fileName; }
-			}
+				//break apart the current working directory
+				vector<string> dirs;
+				while (cwd.find_first_of('\\') != -1) {
+					string dir = cwd.substr(0,cwd.find_first_of('\\'));
+					cwd = cwd.substr(cwd.find_first_of('\\')+1, cwd.length());
+					dirs.push_back(dir);
 		
-			for (int i = index; i >= 0; i--) {
-				newFileName = dirs[i] +  "\\" + newFileName;		
-			}
+				}
+				//get last one
+				dirs.push_back(cwd);  //ex. dirs[0] = user, dirs[1] = work, dirs[2] = desktop
+					
+				int index = dirs.size()-1;
+					
+				while((pos = path.rfind(".\\")) != -1) { //while you don't have a complete path
+					if (pos == 0) { break;  //you are at the end
+					}else if (path[(pos-1)] == '.') { //you want your parent directory ../
+						path = path.substr(0, pos-1);
+						index--;
+						if (index == 0) {  break; }
+					}else if (path[(pos-1)] == '\\') { //you want the current working dir ./
+						path = path.substr(0, pos);
+					}else if (pos == 1) { break;  //you are at the end
+					}else { cout << "cannot resolve path for " <<  fileName << endl; return fileName; }
+				}
 			
-			return newFileName;
+				for (int i = index; i >= 0; i--) {
+					newFileName = dirs[i] +  "\\" + newFileName;		
+				}
+				
+				return newFileName;
+			}
 			
 		#endif
 	}
diff --git a/nocommands.cpp b/nocommands.cpp
index 459ac5c..1a01d37 100644
--- a/nocommands.cpp
+++ b/nocommands.cpp
@@ -22,8 +22,8 @@ NoCommand::~NoCommand(){}
 int NoCommand::execute(){
 	//Could choose to give more help here?fdsah
 	cout << "Invalid command.\n";
-	
-	CommandFactory* valid =  CommandFactory::getInstance();
+   
+		CommandFactory* valid =  CommandFactory::getInstance();
 	valid->printCommands(cout);
 	
 	return 0;
-- 
2.39.5