diff options
author | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-07-17 07:19:04 +0000 |
---|---|---|
committer | j-p-e-g <j-p-e-g@c06c8d41-db1a-0410-9941-cceddc491573> | 2008-07-17 07:19:04 +0000 |
commit | ae735f39601423c88be471340dfe88dc3d3d103d (patch) | |
tree | 6c70a5c28e9bb8202846737217ede5c0eaed2c13 /crawl-ref/source/command.cc | |
parent | df2a542d658cebfc151aff61d42abafd82de60c2 (diff) | |
download | crawl-ref-ae735f39601423c88be471340dfe88dc3d3d103d.tar.gz crawl-ref-ae735f39601423c88be471340dfe88dc3d3d103d.zip |
Fix 2017893: long file names not working on DOS. Crawl now takes a
shot at abbreviating them, and only fails if it can't find that file
either.
Handles all files included by default in /settings and /docs except
changes.stone_soup which is not strictly necessary for the version
information.
Tested artificially by manually mutilating the file names; not
actually tested on DOS.
git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/branches/stone_soup-0.4@6578 c06c8d41-db1a-0410-9941-cceddc491573
Diffstat (limited to 'crawl-ref/source/command.cc')
-rw-r--r-- | crawl-ref/source/command.cc | 48 |
1 files changed, 44 insertions, 4 deletions
diff --git a/crawl-ref/source/command.cc b/crawl-ref/source/command.cc index 86879504ea..501e8ada2a 100644 --- a/crawl-ref/source/command.cc +++ b/crawl-ref/source/command.cc @@ -202,6 +202,7 @@ static std::string _get_version_changes(void) return (result); } +//#define DEBUG_FILES static void _print_version(void) { formatted_scroller cmd_version; @@ -221,8 +222,28 @@ static void _print_version(void) cmd_version.add_text(_get_version_features()); cmd_version.add_text(_get_version_changes()); + std::string fname = "034_changes.txt"; // Read in information about changes in comparison to the latest version. - FILE* fp = fopen(datafile_path("034_changes.txt", false).c_str(), "r"); + FILE* fp = fopen(datafile_path(fname, false).c_str(), "r"); + +#if defined(DOS) + if (!fp) + { + #ifdef DEBUG_FILES + mprf(MSGCH_DIAGNOSTICS, "File '%s' could not be opened.", + fname.c_str()); + #endif + if (get_dos_compatible_file_name(&fname)) + { + #ifdef DEBUG_FILES + mprf(MSGCH_DIAGNOSTICS, + "Attempting to open file '%s'", fname.c_str()); + #endif + fp = fopen(datafile_path(fname, false).c_str(), "r"); + } + } +#endif + if (fp) { char buf[200]; @@ -1519,7 +1540,7 @@ int help_highlighter::entry_colour(const MenuEntry *entry) const return !pattern.empty() && pattern.matches(entry->text)? WHITE : -1; } -// to highlight species in aptitudes list ('?%') +// To highlight species in aptitudes list. ('?%') std::string help_highlighter::get_species_key() const { if (player_genus(GENPC_DRACONIAN) && you.experience_level < 7) @@ -1631,8 +1652,27 @@ static void _show_keyhelp_menu(const std::vector<formatted_string> &lines, for (int i = 0; help_files[i].name != NULL; ++i) { // Attempt to open this file, skip it if unsuccessful. - FILE* fp = - fopen(datafile_path(help_files[i].name, false).c_str(), "r"); + std::string fname = canonicalise_file_separator(help_files[i].name); + FILE* fp = fopen(datafile_path(fname, false).c_str(), "r"); + +#if defined(DOS) + if (!fp) + { + #ifdef DEBUG_FILES + mprf(MSGCH_DIAGNOSTICS, "File '%s' could not be opened.", + help_files[i].name); + #endif + if (get_dos_compatible_file_name(&fname)) + { + #ifdef DEBUG_FILES + mprf(MSGCH_DIAGNOSTICS, + "Attempting to open file '%s'", fname.c_str()); + #endif + fp = fopen(datafile_path(fname, false).c_str(), "r"); + } + } +#endif + if (!fp) continue; |