X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=website%2Farchive%2Fbinaries%2Fmac%2Fsrc%2Fclustalw%2Fsrc%2Fgeneral%2FClustalWResources.cpp;fp=website%2Farchive%2Fbinaries%2Fmac%2Fsrc%2Fclustalw%2Fsrc%2Fgeneral%2FClustalWResources.cpp;h=480ed51ba4fd0e7de056f22792e32b86e318be6f;hb=dbde3fb6f00b9bb770343631a517c0e599db8528;hp=0000000000000000000000000000000000000000;hpb=85f830bbd51a7277994bd4233141016304e210c9;p=jabaws.git diff --git a/website/archive/binaries/mac/src/clustalw/src/general/ClustalWResources.cpp b/website/archive/binaries/mac/src/clustalw/src/general/ClustalWResources.cpp new file mode 100644 index 0000000..480ed51 --- /dev/null +++ b/website/archive/binaries/mac/src/clustalw/src/general/ClustalWResources.cpp @@ -0,0 +1,148 @@ +/** + * Implements a singleton that maintains program resources. + * The single instance is (re)instantiated on demand like: + * Resources *res = Resources::Instance(); + * + * 24-05-07,Nigel Brown(EMBL): created. + * 3-7-07, Mark Larkin, modified this class for clustalw + */ +#ifdef HAVE_CONFIG_H + #include "config.h" +#endif +#include "ClustalWResources.h" +#include +#include "clustalw.h" +#include +using namespace std; + +namespace clustalw +{ + +//environment variables +static const char *CLUW_INSTALL_DIR = "CLUW_INSTALL_DIR"; + +//return the sole instance +ClustalWResources *ClustalWResources::Instance() { + static ClustalWResources instance; + return &instance; +} + +ClustalWResources::ClustalWResources() +{ + //defaultPath + defaultPath = "."; + + //executablePath + executablePath = "."; + + //installPath + installPath = "."; + char *env; + if ((env = getenv(CLUW_INSTALL_DIR)) != 0) + { + installPath = string(env); + } + + homePath = ""; +} + +void ClustalWResources::setPathToExecutable(string path) +{ + executablePath = dirname(path); +} + +string ClustalWResources::dirname(string path) +{ + string tempString; + int size = path.size(); + tempString = path; + for (int i = size - 1; i > 0; i--) + { + if (tempString[i] == DIRDELIM) // Mark, no standard function in c++ + { + tempString.erase(i); + break; + } + } + return tempString; +} + +void ClustalWResources::dump() +{ + printf("%s => %s [%s]\n%s => %s\n%s => %s\n", + "installPath", installPath.c_str(), CLUW_INSTALL_DIR, + "executablePath", executablePath.c_str(), + "homePath", homePath.c_str() + ); +} + +string ClustalWResources::findFile(const char *file, const ClustalWResourcePathType where) const +{ + return findFile(string(file), where); +} + +string ClustalWResources::findFile(const string file, const ClustalWResourcePathType where) const +{ + const string *path; + ifstream ifs; + + switch (where) + { + case InstallPath: + path = &installPath; + break; + case ExecutablePath: + path = &executablePath; + break; + case HomePath: + path = &homePath; + break; + default: + path = &defaultPath; + break; + } + char delim[1]; + delim[0] = DIRDELIM; + delim[1] = 0; + + string fileName = *path + string(delim) + file; + + ifs.open(fileName.c_str(), ifstream::in); + if (ifs.fail()) { + return string(); + } + + if (ifs.is_open() && ifs.good()) + { + ifs.close(); + return fileName; + } + return string(); //not found/readable +} + +// Search for a (string) file in a succession of likely locations and +// return the full path as (string). +// +string ClustalWResources::searchPathsForFile(const string fileName) const +{ + string file; + while (1) { + file = findFile(fileName, InstallPath); + if (file != "") break; + + file = findFile(fileName, ExecutablePath); + if (file != "") break; + + file = findFile(fileName, HomePath); + if (file != "") break; + + file = findFile(fileName); + if (file != "") break; + + file = fileName; // give up + break; + } + return file; +} + +}