// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#include <config.h>
+
#include <cassert>
#include <cstdio>
#include <iostream>
#include <cctype>
-#include "../app/globals.h"
-#include "../app/setup.h"
-#include "../video/screen.h"
-#include "../video/surface.h"
-#include "../gui/menu.h"
-#include "../utils/configfile.h"
-#include "../audio/sound_manager.h"
-#include "../app/gettext.h"
+#include "globals.h"
+#include "setup.h"
+#include "video/screen.h"
+#include "video/surface.h"
+#include "gui/menu.h"
+#include "utils/configfile.h"
+#include "audio/sound_manager.h"
+#include "gettext.h"
using namespace SuperTux;
void usage(char * prog, int ret);
/* Does the given file exist and is it accessible? */
-int FileSystem::faccessible(const std::string& filename)
+bool FileSystem::faccessible(const std::string& filename)
{
struct stat filestat;
if (stat(filename.c_str(), &filestat) == -1)
}
/* Can we write to this location? */
-int FileSystem::fwriteable(const std::string& filename)
+bool FileSystem::fwriteable(const std::string& filename)
{
FILE* fi;
fi = fopen(filename.c_str(), "wa");
{
return false;
}
+ fclose(fi);
return true;
}
/* Makes sure a directory is created in either the SuperTux home directory or the SuperTux base directory.*/
-int FileSystem::fcreatedir(const std::string& relative_dir)
+bool FileSystem::fcreatedir(const std::string& relative_dir)
{
std::string path = st_dir + "/" + relative_dir + "/";
if(mkdir(path.c_str(),0755) != 0)
return sdirs;
}
-void Setup::info(const std::string& _package_name, const std::string& _package_symbol_name, const std::string& _package_version)
+std::string FileSystem::dirname(const std::string& filename)
+{
+ std::string::size_type p = filename.find_last_of('/');
+ if(p == std::string::npos)
+ return "";
+
+ return filename.substr(0, p+1);
+}
+
+void Setup::init(const std::string& _package_name,
+ const std::string& _package_symbol_name,
+ const std::string& _package_version)
{
-package_name = _package_name;
-package_symbol_name = _package_symbol_name;
-package_version = _package_version;
+ package_name = _package_name;
+ package_symbol_name = _package_symbol_name;
+ package_version = _package_version;
+
+ directories();
+ dictionary_manager.add_directory(datadir + "/locale");
+ dictionary_manager.set_charset("iso8859-1");
}
/* --- SETUP --- */
/* Set SuperTux configuration and save directories */
-void Setup::directories(void)
+void Setup::directories()
{
std::string home;
/* Get home directory (from $HOME variable)... if we can't determine it,
st_dir = home + "/." + package_symbol_name;
/* Remove .supertux config-file from old SuperTux versions */
- if(FileSystem::faccessible(st_dir))
- {
- remove(st_dir.c_str());
- }
+ if(FileSystem::faccessible(st_dir)) {
+ remove(st_dir.c_str());
+ }
st_save_dir = st_dir + "/save";
mkdir((st_dir + "/levels").c_str(), 0755);
+ // try current directory as datadir
+ if(datadir.empty()) {
+ if(FileSystem::faccessible("./data/credits.txt"))
+ datadir = "./data/";
+ }
+
// User has not that a datadir, so we try some magic
if (datadir.empty())
{
}
else
{
- std::string exedir = std::string(dirname(exe_file)) + "/";
-
- datadir = exedir + "../../data"; // SuperTux run from source dir
+ std::string exedir = std::string(dirname(exe_file)) + "/";
+
+ datadir = exedir + "./data/"; // SuperTux run from source dir
if (access(datadir.c_str(), F_OK) != 0)
{
- datadir = exedir + "../share/" + package_symbol_name; // SuperTux run from PATH
+ datadir = exedir + "../../../../data/"; //SuperTux run from source dir (with libtool script)
+
+ if (access(datadir.c_str(), F_OK) != 0)
+ {
+ datadir = exedir + "../share/" + package_symbol_name + "/"; // SuperTux run from PATH
if (access(datadir.c_str(), F_OK) != 0)
{ // If all fails, fall back to compiled path
- datadir = DATA_PREFIX;
+ datadir = DATA_PREFIX;
+ datadir += "/";
}
+ }
}
}
#else
- datadir = DATA_PREFIX;
+ datadir = DATA_PREFIX;
+ datadir += "/";
#endif
}
printf("Datadir: %s\n", datadir.c_str());
else if (strcmp(argv[i], "--version") == 0)
{
/* Show version: */
- printf((package_name + package_version + "\n").c_str() );
+ printf((package_name + " " + package_version + "\n").c_str() );
exit(0);
}
else if (strcmp(argv[i], "--disable-sound") == 0)