diff options
Diffstat (limited to 'engines/glk/alan2/glkio.cpp')
-rw-r--r-- | engines/glk/alan2/glkio.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
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 |