freebsd-ports/news/husky-msged/files/patch-curses.c

139 lines
2.7 KiB
C

--- 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
{