aboutsummaryrefslogtreecommitdiff
path: root/engines/glk/alan2/term.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2019-06-17 22:36:31 -0700
committerPaul Gilbert2019-06-22 14:40:49 -0700
commit08bc570308b0698090ce668dc7dca4c0c76dd3df (patch)
tree59baa530a4f79b16185c5422ed9f2b706011c8b2 /engines/glk/alan2/term.cpp
parent84dfa6d3b83e080f099ad606dc7fbeb40ebe4b97 (diff)
downloadscummvm-rg350-08bc570308b0698090ce668dc7dca4c0c76dd3df.tar.gz
scummvm-rg350-08bc570308b0698090ce668dc7dca4c0c76dd3df.tar.bz2
scummvm-rg350-08bc570308b0698090ce668dc7dca4c0c76dd3df.zip
GLK: ALAN2: Initial import of full set of interpreter files
Diffstat (limited to 'engines/glk/alan2/term.cpp')
-rw-r--r--engines/glk/alan2/term.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/engines/glk/alan2/term.cpp b/engines/glk/alan2/term.cpp
new file mode 100644
index 0000000000..cf60fc5bbe
--- /dev/null
+++ b/engines/glk/alan2/term.cpp
@@ -0,0 +1,123 @@
+/* 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/main.h"
+#include "glk/alan2/term.h"
+
+namespace Glk {
+namespace Alan2 {
+
+/*======================================================================
+
+ getPageSize()
+
+ Try to get the current page size from the system, else use the ones
+ from the header.
+
+ */
+#ifdef _PROTOTYPES_
+void getPageSize(void)
+#else
+void getPageSize()
+#endif
+{
+#ifdef GLK
+ paglen = 0;
+ pagwidth = 0;
+
+#else
+#ifdef HAVE_TERMIO
+
+#include <sys/termios.h>
+
+ extern int ioctl();
+
+ struct winsize win;
+ int ecode;
+
+ ecode = ioctl(1, TIOCGWINSZ, &win);
+
+ if (ecode != 0 || win.ws_row == 0)
+ paglen = header->paglen;
+ else
+ paglen = win.ws_row;
+
+ if (ecode != 0 || win.ws_col == 0)
+ pagwidth = header->pagwidth;
+ else
+ pagwidth = win.ws_col;
+
+#else
+#ifdef __amiga__
+#include <libraries/dosextens.h>
+#include <intuition/intuition.h>
+#include <graphics/text.h>
+#include <clib/exec_protos.h>
+
+ struct Process * proc;
+ struct InfoData *id;
+ struct Window *win;
+ struct TextFont *textFont;
+ struct StandardPacket *packet;
+
+ proc = (struct Process *) FindTask(0L);
+
+ id = (struct InfoData *) allocate(sizeof(struct InfoData));
+
+ if (proc->pr_ConsoleTask) {
+ packet = (struct StandardPacket *) allocate(sizeof(struct StandardPacket));
+ packet->sp_Msg.mn_Node.ln_Name = (char *)&(packet->sp_Pkt);
+ packet->sp_Pkt.dp_Link = & packet->sp_Msg;
+ packet->sp_Pkt.dp_Port = & proc->pr_MsgPort;
+ packet->sp_Pkt.dp_Type = ACTION_DISK_INFO;
+
+ packet->sp_Pkt.dp_Arg1 = ((LONG) id) >> 2;
+
+ PutMsg ((struct MsgPort *) proc->pr_ConsoleTask, & packet->sp_Msg);
+ WaitPort(&proc->pr_MsgPort);
+ GetMsg(&proc->pr_MsgPort);
+ free((char *)packet);
+
+ win = (struct Window *) id->id_VolumeNode;
+ free(id);
+
+ /* Calculate number of characters and lines w.r.t font size and borders */
+ textFont = win->IFont;
+ paglen = win->Height/textFont->tf_YSize-2;
+ pagwidth = win->Width/textFont->tf_XSize-3;
+ } else {
+ paglen = header->paglen;
+ pagwidth = header->pagwidth;
+ }
+
+#else
+
+ paglen = header->paglen;
+ pagwidth = header->pagwidth;
+
+#endif
+#endif
+#endif
+}
+
+} // End of namespace Alan2
+} // End of namespace Glk