aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/alan2/glkio.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/glk/alan2/glkio.cpp')
-rw-r--r--engines/glk/alan2/glkio.cpp42
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