summaryrefslogtreecommitdiff
path: root/news/husky-msged/files/patch-curses.c
diff options
context:
space:
mode:
Diffstat (limited to 'news/husky-msged/files/patch-curses.c')
-rw-r--r--news/husky-msged/files/patch-curses.c139
1 files changed, 139 insertions, 0 deletions
diff --git a/news/husky-msged/files/patch-curses.c b/news/husky-msged/files/patch-curses.c
new file mode 100644
index 000000000000..1908ac667347
--- /dev/null
+++ b/news/husky-msged/files/patch-curses.c
@@ -0,0 +1,139 @@
+--- curses.c.orig Wed Jan 29 00:48:13 2003
++++ curses.c Wed Jan 29 01:37:29 2003
+@@ -22,6 +22,7 @@
+ #include "winsys.h"
+ #include "unused.h"
+ #include "keys.h"
++#include "readtc.h"
+ #include "specch.h"
+
+ int color;
+@@ -40,6 +41,7 @@
+ 0
+ };
+
++static int tcflags = 0; /* what we want to extract from termcap */
+
+ #define EBUFSZ 100
+ static EVT EVent[EBUFSZ]; /* event circular queue */
+@@ -436,6 +438,8 @@
+ Key_A_5, Key_A_6, Key_A_7, Key_A_8, Key_A_9
+ };
+
++void TTSendMsg(int msg, int x, int y, int msgtype);
++
+ unsigned int TTGetKey(void)
+ {
+ int ch;
+@@ -443,6 +447,11 @@
+ ch = getch();
+ switch (ch)
+ {
++ case KEY_RESIZE:
++ term.NRow = getmaxy(stdscr);
++ term.NCol = getmaxx(stdscr);
++ TTSendMsg(1, 0, 0, WND_WM_RESIZE);
++ return -1;
+ case KEY_LEFT:
+ return Key_Lft;
+ case KEY_RIGHT:
+@@ -566,6 +575,7 @@
+ case '0':
+ return Key_F10;
+ }
++ break;
+ }
+
+ if (ch >= 127) /* Treat special characters */
+@@ -611,7 +621,7 @@
+ return ch;
+ }
+
+-void TTSendMsg(unsigned int msg, int x, int y, unsigned int msgtype)
++void TTSendMsg(int msg, int x, int y, int msgtype)
+ {
+ if (((ebufin + 1) % EBUFSZ) != ebufout)
+ {
+@@ -633,6 +643,7 @@
+ meta(stdscr, TRUE);
+ intrflush(stdscr, FALSE);
+ raw();
++ query_termcap(tcflags);
+ return 0;
+ }
+
+@@ -660,30 +671,47 @@
+ return 0;
+ }
+
++static void
++collect_events(void)
++{
++ int ch = TTGetKey();
++ if (ch < 0)
++ return;
++
++ TTSendMsg(ch, 0, 0, WND_WM_CHAR);
++}
++
+ int TTGetMsg(EVT * e)
+ {
+- e->msg = TTGetKey();
+- e->x = 0;
+- e->y = 0;
+- e->msgtype = WND_WM_CHAR;
++ while (ebufin == ebufout)
++ collect_events();
++
++ e->msg = EVent[ebufout].msg;
++ e->x = EVent[ebufout].x;
++ e->y = EVent[ebufout].y;
++ e->msgtype = EVent[ebufout].msgtype;
+ e->id = 0;
++ ebufout = (ebufout + 1) % EBUFSZ;
+ return e->msg;
+ }
+
+ int TTPeekQue(void)
+ {
+- return kbhit();
++ if (kbhit())
++ collect_events();
++ return ebufin != ebufout;
+ }
+
+ void TTClearQue(void)
+ {
+- while (TTPeekQue())
+- TTGetKey();
++ ebufin = ebufout;
+ }
+
+ int TTGetChr(void)
+ {
+- return TTGetKey();
++ EVT e;
++ TTGetMsg(&e);
++ return e.msg;
+ }
+
+ static char ansi2curses[8] = {
+@@ -754,6 +782,18 @@
+ allowed_special_characters =
+ (unsigned char *) malloc(l = (strlen(value) + 1));
+ memcpy(allowed_special_characters, value, l);
++ }
++ else if (!strcmp(keyword,"pseudographics"))
++ {
++ if (atoi(value))
++ {
++ tcflags |= QUERY_ALTCHARSET;
++ }
++ else
++ {
++ tcflags &= ~QUERY_ALTCHARSET;
++ }
++ query_termcap(tcflags);
+ }
+ else
+ {