00001
00002
00003
00004
00005
00006
00007 #include "SgSystem.h"
00008 #include "FuegoMainUtil.h"
00009
00010 #include <fstream>
00011 #include <sstream>
00012 #include "GoBook.h"
00013 #include "SgDebug.h"
00014
00015 using namespace std;
00016 using namespace boost::filesystem;
00017
00018
00019
00020 namespace {
00021
00022 bool LoadBookFile(GoBook& book, const path& file)
00023 {
00024 path normalizedFile = file;
00025 normalizedFile.normalize();
00026 string nativeFile = normalizedFile.native_file_string();
00027 SgDebug() << "Loading opening book from '" << nativeFile << "'... ";
00028 ifstream in(nativeFile.c_str());
00029 if (! in)
00030 {
00031 SgDebug() << "not found\n";
00032 return false;
00033 }
00034 try
00035 {
00036 book.Read(in);
00037 }
00038 catch (const SgException& e)
00039 {
00040 SgDebug() << "error: " << e.what() << '\n';
00041 return false;
00042 }
00043 SgDebug() << "ok\n";
00044 return true;
00045 }
00046
00047 }
00048
00049
00050
00051 void FuegoMainUtil::LoadBook(GoBook& book,
00052 const boost::filesystem::path& programDir)
00053 {
00054 const string fileName = "book.dat";
00055 if (LoadBookFile(book, programDir / fileName))
00056 return;
00057 #ifdef ABS_TOP_SRCDIR
00058 if (LoadBookFile(book, path(ABS_TOP_SRCDIR) / "book" / fileName))
00059 return;
00060 #endif
00061 #if defined(DATADIR) && defined(PACKAGE)
00062 if (LoadBookFile(book, path(DATADIR) / PACKAGE / fileName))
00063 return;
00064 #endif
00065 throw SgException("Could not find opening book.");
00066 }
00067
00068 std::string FuegoMainUtil::Version()
00069 {
00070 ostringstream s;
00071 #ifdef VERSION
00072 s << VERSION;
00073 #else
00074 s << "(" __DATE__ ")";
00075 #endif
00076 #ifdef SVNREV
00077 s << "(" SVNREV ")";
00078 #endif
00079 #ifndef NDEBUG
00080 s << " (dbg)";
00081 #endif
00082 return s.str();
00083 }
00084
00085