diff options
-rw-r--r-- | engines/glk/alan2/alan2.cpp | 23 | ||||
-rw-r--r-- | engines/glk/alan2/alan2.h | 7 | ||||
-rw-r--r-- | engines/glk/alan2/debug.cpp | 2 | ||||
-rw-r--r-- | engines/glk/alan2/exe.cpp | 2 | ||||
-rw-r--r-- | engines/glk/alan2/glkio.cpp | 42 | ||||
-rw-r--r-- | engines/glk/alan2/glkio.h | 6 | ||||
-rw-r--r-- | engines/glk/alan2/main.cpp | 10 | ||||
-rw-r--r-- | engines/glk/alan2/parse.cpp | 1 | ||||
-rw-r--r-- | engines/glk/alan2/readline.cpp | 62 | ||||
-rw-r--r-- | engines/glk/alan2/readline.h | 41 | ||||
-rw-r--r-- | engines/glk/module.mk | 1 |
11 files changed, 80 insertions, 117 deletions
diff --git a/engines/glk/alan2/alan2.cpp b/engines/glk/alan2/alan2.cpp index f9077c9f7a..0ad524bd47 100644 --- a/engines/glk/alan2/alan2.cpp +++ b/engines/glk/alan2/alan2.cpp @@ -39,17 +39,18 @@ namespace Alan2 { Alan2 *g_vm = nullptr; Alan2::Alan2(OSystem *syst, const GlkGameDescription &gameDesc) : GlkAPI(syst, gameDesc), - vm_exited_cleanly(false), _restartFlag(false) { + vm_exited_cleanly(false), _restartFlag(false), _saveSlot(-1), _pendingLook(false) { g_vm = this; + txtfil = nullptr; + logfil = nullptr; + memory = nullptr; } void Alan2::runGame() { - Common::String gameFileName = _gameFile.getName(); + if (initialize()) + Glk::Alan2::run(); - if (!initialize()) - return; - - Glk::Alan2::run(); + deinitialize(); } bool Alan2::initialize() { @@ -91,9 +92,19 @@ bool Alan2::initialize() { return false; } + // Check for a save being loaded directly from the launcher + _saveSlot = ConfMan.hasKey("save_slot") ? ConfMan.getInt("save_slot") : -1; + return true; } +void Alan2::deinitialize() { + free(memory); + + delete txtfil; + delete logfil; +} + Common::Error Alan2::readSaveData(Common::SeekableReadStream *rs) { Common::Serializer s(rs, nullptr); synchronizeSave(s); diff --git a/engines/glk/alan2/alan2.h b/engines/glk/alan2/alan2.h index 413800cd90..baf02c8770 100644 --- a/engines/glk/alan2/alan2.h +++ b/engines/glk/alan2/alan2.h @@ -40,6 +40,8 @@ private: public: bool vm_exited_cleanly; Common::String _advName; + int _saveSlot; + bool _pendingLook; private: /** * Initialization @@ -47,6 +49,11 @@ private: bool initialize(); /** + * Deinitialization + */ + void deinitialize(); + + /** * Synchronize data to or from a save file */ void synchronizeSave(Common::Serializer &s); diff --git a/engines/glk/alan2/debug.cpp b/engines/glk/alan2/debug.cpp index bea427bdb4..af72c315f5 100644 --- a/engines/glk/alan2/debug.cpp +++ b/engines/glk/alan2/debug.cpp @@ -28,8 +28,6 @@ #include "glk/alan2/inter.h" #include "glk/alan2/main.h" #include "glk/alan2/parse.h" -#include "glk/alan2/readline.h" - namespace Glk { namespace Alan2 { diff --git a/engines/glk/alan2/exe.cpp b/engines/glk/alan2/exe.cpp index 5ff79c88f4..1abe60355e 100644 --- a/engines/glk/alan2/exe.cpp +++ b/engines/glk/alan2/exe.cpp @@ -23,10 +23,10 @@ #include "glk/alan2/alan2.h" #include "glk/alan2/types.h" #include "glk/alan2/exe.h" +#include "glk/alan2/glkio.h" #include "glk/alan2/inter.h" #include "glk/alan2/main.h" #include "glk/alan2/parse.h" -#include "glk/alan2/readline.h" #include "glk/alan2/stack.h" #include "glk/alan2/decode.h" diff --git a/engines/glk/alan2/glkio.cpp b/engines/glk/alan2/glkio.cpp index fda54deec8..9f30531107 100644 --- a/engines/glk/alan2/glkio.cpp +++ b/engines/glk/alan2/glkio.cpp @@ -23,6 +23,7 @@ #include "glk/glk.h" #include "glk/alan2/alan2.h" #include "glk/alan2/glkio.h" +#include "glk/alan2/main.h" namespace Glk { namespace Alan2 { @@ -31,6 +32,10 @@ winid_t glkMainWin; winid_t glkStatusWin; void glkio_printf(const char *fmt, ...) { + // If there's a savegame being loaded from the launcher, ignore any text out + if (g_vm->_saveSlot != -1) + return; + va_list argp; va_start(argp, fmt); if (glkMainWin) { @@ -46,6 +51,43 @@ void glkio_printf(const char *fmt, ...) { va_end(argp); } +/*====================================================================== + + readline() + + Read a line from the user, with history and editing + + */ + + /* 4f - length of user buffer should be used */ +Boolean readline(char usrbuf[]) { + if (g_vm->_pendingLook) { + g_vm->_pendingLook = false; + glkio_printf("look\n"); + strcpy(usrbuf, "look"); + } else { + event_t event; + g_vm->glk_request_line_event(glkMainWin, usrbuf, 255, 0); + + /* FIXME: buffer size should be infallible: all existing calls use 256 or + 80 character buffers, except parse which uses LISTLEN (currently 100) + */ + do { + g_vm->glk_select(&event); + if (evtype_Arrange == event.type) + statusline(); + if (g_vm->shouldQuit()) + return false; + + } while (event.type != evtype_LineInput); + + usrbuf[event.val1] = 0; + } + + return TRUE; +} + + } // End of namespace Alan2 } // End of namespace Glk diff --git a/engines/glk/alan2/glkio.h b/engines/glk/alan2/glkio.h index 2dff66f6ea..4bb2e026b5 100644 --- a/engines/glk/alan2/glkio.h +++ b/engines/glk/alan2/glkio.h @@ -27,6 +27,7 @@ */ #include "glk/windows.h" +#include "glk/alan2/types.h" namespace Glk { namespace Alan2 { @@ -41,6 +42,11 @@ extern winid_t glkStatusWin; void glkio_printf(const char *, ...); +#define LINELENGTH 80 +#define HISTORYLENGTH 20 + +extern Boolean readline(char usrbuf[]); + } // End of namespace Alan2 } // End of namespace Glk diff --git a/engines/glk/alan2/main.cpp b/engines/glk/alan2/main.cpp index 58c483a852..551fbe5b59 100644 --- a/engines/glk/alan2/main.cpp +++ b/engines/glk/alan2/main.cpp @@ -116,9 +116,6 @@ Boolean skipsp = FALSE; */ void terminate(CONTEXT, int code) { newline(); - free(memory); - if (logflg) - fclose(logfil); g_vm->glk_exit(); LONG_JUMP @@ -1404,6 +1401,13 @@ void run() { g_vm->setRestart(false); init(); + if (g_vm->_saveSlot != -1) { + if (g_vm->loadGameState(g_vm->_saveSlot).getCode() != Common::kNoError) + return; + g_vm->_saveSlot = -1; + g_vm->_pendingLook = true; + } + Context ctx; while (!g_vm->shouldQuit() && !g_vm->shouldRestart()) { if (!ctx._break) { diff --git a/engines/glk/alan2/parse.cpp b/engines/glk/alan2/parse.cpp index 5c9fd35db4..51bf0927d7 100644 --- a/engines/glk/alan2/parse.cpp +++ b/engines/glk/alan2/parse.cpp @@ -28,7 +28,6 @@ #include "glk/alan2/main.h" #include "glk/alan2/params.h" #include "glk/alan2/parse.h" -#include "glk/alan2/readline.h" #include "glk/alan2/term.h" #include "glk/alan2/types.h" diff --git a/engines/glk/alan2/readline.cpp b/engines/glk/alan2/readline.cpp deleted file mode 100644 index cd05435c18..0000000000 --- a/engines/glk/alan2/readline.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#include "glk/alan2/alan2.h" -#include "glk/alan2/types.h" -#include "glk/alan2/glkio.h" -#include "glk/alan2/main.h" -#include "glk/alan2/readline.h" - -namespace Glk { -namespace Alan2 { - -/*====================================================================== - - readline() - - Read a line from the user, with history and editing - - */ - -/* 4f - length of user buffer should be used */ -Boolean readline(char usrbuf[]) { - event_t event; - g_vm->glk_request_line_event(glkMainWin, usrbuf, 255, 0); - /* FIXME: buffer size should be infallible: all existing calls use 256 or - 80 character buffers, except parse which uses LISTLEN (currently 100) - */ - do { - g_vm->glk_select(&event); - if (evtype_Arrange == event.type) - statusline(); - if (g_vm->shouldQuit()) - return false; - - } while (event.type != evtype_LineInput); - - usrbuf[event.val1] = 0; - return TRUE; -} - -} // End of namespace Alan2 -} // End of namespace Glk - diff --git a/engines/glk/alan2/readline.h b/engines/glk/alan2/readline.h deleted file mode 100644 index 249ccbd62c..0000000000 --- a/engines/glk/alan2/readline.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ScummVM - Graphic Adventure Engine - * - * ScummVM is the legal property of its developers, whose names - * are too numerous to list here. Please refer to the COPYRIGHT - * file distributed with this source distribution. - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * - */ - -#ifndef GLK_ALAN2_READLINE -#define GLK_ALAN2_READLINE - -/* Header file for user input, history andediting support */ - -#include "glk/alan2/types.h" - -namespace Glk { -namespace Alan2 { - -#define LINELENGTH 80 -#define HISTORYLENGTH 20 - -extern Boolean readline(char usrbuf[]); - -} // End of namespace Alan2 -} // End of namespace Glk - -#endif diff --git a/engines/glk/module.mk b/engines/glk/module.mk index 6536cf071f..0a5a83d44d 100644 --- a/engines/glk/module.mk +++ b/engines/glk/module.mk @@ -43,7 +43,6 @@ MODULE_OBJS := \ alan2/main.o \ alan2/params.o \ alan2/parse.o \ - alan2/readline.o \ alan2/reverse.o \ alan2/rules.o \ alan2/stack.o \ |