From fa41f9ffd05a97c90a59fb629a7b6e61abf231fa Mon Sep 17 00:00:00 2001 From: Arnaud Boutonné Date: Wed, 18 Aug 2010 16:14:38 +0000 Subject: Hugo - Check double F1, display properly the content of help.dat if present svn-id: r52189 --- engines/hugo/file.cpp | 12 +++++++----- engines/hugo/file.h | 4 ++++ engines/hugo/parser.cpp | 12 ++++++------ engines/hugo/parser.h | 1 + 4 files changed, 18 insertions(+), 11 deletions(-) (limited to 'engines/hugo') diff --git a/engines/hugo/file.cpp b/engines/hugo/file.cpp index 487f331039..f4838e7320 100644 --- a/engines/hugo/file.cpp +++ b/engines/hugo/file.cpp @@ -908,25 +908,27 @@ void FileManager::readUIFItem(int16 id, byte *buf) { void FileManager::instructions() { // Simple instructions given when F1 pressed twice in a row // Only in DOS versions -#define HELPFILE "help.dat" -#define EOP '#' /* Marks end of a page in help file */ Common::File f; char line[1024], *wrkLine; char readBuf[2]; wrkLine = line; - if (!f.open(UIF_FILE)) - Utils::Error(FILE_ERR, HELPFILE); + if (!f.open(HELPFILE)) { + warning("help.dat not found"); + return; + } while (f.read(readBuf, 1)) { wrkLine[0] = readBuf[0]; + wrkLine++; do { f.read(wrkLine, 1); } while (*wrkLine++ != EOP); wrkLine[-2] = '\0'; /* Remove EOP and previous CR */ Utils::Box(BOX_ANY, line); - f.read(wrkLine, 1); /* Remove CR after EOP */ + wrkLine = line; + f.read(readBuf, 2); /* Remove CRLF after EOP */ } f.close(); } diff --git a/engines/hugo/file.h b/engines/hugo/file.h index 50f4b505c3..e775285727 100644 --- a/engines/hugo/file.h +++ b/engines/hugo/file.h @@ -33,6 +33,10 @@ #ifndef HUGO_FILE_H #define HUGO_FILE_H +// TODO get rid of those defines +#define HELPFILE "help.dat" +#define EOP '#' /* Marks end of a page in help file */ + namespace Hugo { class FileManager { diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp index c9c3b8dc4e..60a33425de 100644 --- a/engines/hugo/parser.cpp +++ b/engines/hugo/parser.cpp @@ -54,6 +54,7 @@ namespace Hugo { Parser::Parser(HugoEngine &vm) : _vm(vm), _putIndex(0), _getIndex(0) { + _checkDoubleF1Fl = false; } void Parser::keyHandler(uint16 nChar, uint16 nFlags) { @@ -81,11 +82,12 @@ void Parser::keyHandler(uint16 nChar, uint16 nFlags) { } break; case Common::KEYCODE_F1: // User Help (DOS) - if (repeatedFl) { + if (_checkDoubleF1Fl) { _vm.file().instructions(); - nChar = '\0'; + _checkDoubleF1Fl = false; } else _vm.screen().userHelp(); + _checkDoubleF1Fl = true; break; case Common::KEYCODE_F2: // Toggle sound case Common::KEYCODE_F3: // Repeat last line @@ -110,6 +112,8 @@ void Parser::keyHandler(uint16 nChar, uint16 nFlags) { } break; } + if ((_checkDoubleF1Fl) && (nChar != Common::KEYCODE_F1)) + _checkDoubleF1Fl = false; } // Add any new chars to line buffer and display them. @@ -125,10 +129,6 @@ void Parser::charHandler() { // bool updateFl = (_getIndex != _putIndex); // TRUE if any chars processed // command_t status_line; // Includes prompt, cursor -//Strangerke : Useless ? -// bool updateFl = (_getIndex != _putIndex); // TRUE if any chars processed - //command_t status_line; // Includes prompt, cursor - debugC(4, kDebugParser, "charHandler"); // Check for one or more characters in ring buffer diff --git a/engines/hugo/parser.h b/engines/hugo/parser.h index 0bfbe32715..692f293e36 100644 --- a/engines/hugo/parser.h +++ b/engines/hugo/parser.h @@ -71,6 +71,7 @@ private: char _ringBuffer[32]; // Ring buffer uint16 _putIndex; uint16 _getIndex; // Index into ring buffer + bool _checkDoubleF1Fl; // Flag used to display user help or instructions command_t _statusLine; command_t _scoreLine; -- cgit v1.2.3