(svn r10188) -Codechange: make it a little easier to load a savegame from the console:
authorrubidium
Sun, 17 Jun 2007 20:09:05 +0000
changeset 6935 0a2a174d3f6a
parent 6934 c2249b79356f
child 6936 3ea055cc4957
(svn r10188) -Codechange: make it a little easier to load a savegame from the console:
-g <absolute path>
-g <relative path from current working directory>
-g <relative path from within the savegame directory>
src/fileio.cpp
src/fileio.h
src/openttd.cpp
src/saveload.cpp
--- a/src/fileio.cpp	Sun Jun 17 19:46:01 2007 +0000
+++ b/src/fileio.cpp	Sun Jun 17 20:09:05 2007 +0000
@@ -279,7 +279,7 @@
 	FILE *f = NULL;
 	char buf[MAX_PATH];
 
-	if (subdir == BASE_DIR) {
+	if (subdir == NO_DIRECTORY) {
 		ttd_strlcpy(buf, filename, lengthof(buf));
 	} else {
 		snprintf(buf, lengthof(buf), "%s%s%s", _searchpaths[sp], _subdirs[subdir], filename);
@@ -301,11 +301,11 @@
 	FILE *f = NULL;
 	Searchpath sp;
 
-	assert(subdir < NUM_SUBDIRS);
+	assert(subdir < NUM_SUBDIRS || subdir == NO_DIRECTORY);
 
 	FOR_ALL_SEARCHPATHS(sp) {
 		f = FioFOpenFileSp(filename, mode, sp, subdir);
-		if (f != NULL || subdir == 0) break;
+		if (f != NULL || subdir == NO_DIRECTORY) break;
 	}
 
 	return f;
--- a/src/fileio.h	Sun Jun 17 19:46:01 2007 +0000
+++ b/src/fileio.h	Sun Jun 17 20:09:05 2007 +0000
@@ -33,6 +33,7 @@
 	DATA_DIR,      ///< Subdirectory for all data (GRFs, sample.cat, intro game)
 	LANG_DIR,      ///< Subdirectory for all translation files
 	NUM_SUBDIRS,   ///< Number of subdirectories
+	NO_DIRECTORY,  ///< A path without any base directory
 };
 
 /**
--- a/src/openttd.cpp	Sun Jun 17 19:46:01 2007 +0000
+++ b/src/openttd.cpp	Sun Jun 17 20:09:05 2007 +0000
@@ -860,7 +860,7 @@
 		_opt_ptr = &_opt;
 		ResetGRFConfig(true);
 
-		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, BASE_DIR)) {
+		if (!SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_NORMAL, NO_DIRECTORY)) {
 			LoadIntroGame();
 			ShowErrorMessage(INVALID_STRING_ID, STR_4009_GAME_LOAD_FAILED, 0, 0);
 		} else {
@@ -894,7 +894,7 @@
 		break;
 
 	case SM_LOAD_SCENARIO: { /* Load scenario from scenario editor */
-		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, BASE_DIR)) {
+		if (SafeSaveOrLoad(_file_to_saveload.name, _file_to_saveload.mode, GM_EDITOR, NO_DIRECTORY)) {
 			_opt_ptr = &_opt;
 
 			SetLocalPlayer(OWNER_NONE);
@@ -910,7 +910,7 @@
 		break;
 
 	case SM_SAVE: /* Save game */
-		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, BASE_DIR) != SL_OK) {
+		if (SaveOrLoad(_file_to_saveload.name, SL_SAVE, NO_DIRECTORY) != SL_OK) {
 			ShowErrorMessage(INVALID_STRING_ID, STR_4007_GAME_SAVE_FAILED, 0, 0);
 		} else {
 			DeleteWindowById(WC_SAVELOAD, 0);
--- a/src/saveload.cpp	Sun Jun 17 19:46:01 2007 +0000
+++ b/src/saveload.cpp	Sun Jun 17 20:09:05 2007 +0000
@@ -1584,6 +1584,11 @@
 	}
 
 	_sl.fh = (mode == SL_SAVE) ? FioFOpenFile(filename, "wb", sb) : FioFOpenFile(filename, "rb", sb);
+
+	/* Make it a little easier to load savegames from the console */
+	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", SAVE_DIR);
+	if (_sl.fh == NULL && mode == SL_LOAD) _sl.fh = FioFOpenFile(filename, "rb", BASE_DIR);
+
 	if (_sl.fh == NULL) {
 		DEBUG(sl, 0, "Cannot open savegame '%s' for saving/loading.", filename);
 		return SL_ERROR;