/*
* $Log$
+ * Revision 1.2 2008/02/13 01:08:18 james
+ * *** empty log message ***
+ *
* Revision 1.1 2008/02/12 22:36:46 james
* *** empty log message ***
*
static TERMINAL terminal_list=NULL;
+int terminal_winches;
+
static void
}
+void terminal_atexit(void)
+{
+while (terminal_list)
+ terminal_close(terminal_list);
+}
+
+static void sigint(int dummy)
+{
+terminal_atexit();
+exit(-1);
+}
+
+static void
+sigwinch (int not)
+{
+ terminal_winches++;
+}
+
+
+void
+terminal_getsize (TTY *_t)
+{
+TERMINAL *t=(TTY *) _t;
+ struct winsize sz = { 0 };
+
+if (!t) return;
+
+if (ioctl (a->wfd, TIOCGWINSZ, &sz))
+ {
+ t->size.x = CRT_COLS;
+ t->size.y = CRT_ROWS;
+ }
+ else
+ {
+ t->size.x = sz.ws_col;
+ t->size.y = sz.ws_row;
+ }
+}
+
+
+void terminal_dispatch(void)
+{
+TERMINAL *t;
+
+
+if (!terminal_winches) return;
+
+terminal_winches=0;
+
+for (t=terminal_list;t;t=t->next)
+terminal_getsize(t);
+
+}
+
static int
terminal_read (TTY * _t, void *buf, int len)
TERMINAL *t = (TERMINAL *) _t;
int red, done = 0;
+ terminal_dispatch();
+
do
{
int writ, done = 0;
TERMINAL *t = (TERMINAL *) _t;
+ terminal_dispatch();
+
do
{
return done;
}
+
+void terminal_register_handlers(void)
+{
+ struct sigaction sa = { 0 };
+
+ sa.sa_handler = sigwinch;
+ sa.sa_flags = SA_RESTART;
+ sigaction (SIGWINCH, &sa, NULL);
+
+ sa.sa_handler = sigint;
+ sa.sa_flags = SA_RESTART;
+ sigaction (SIGINT, &sa, NULL);
+}
+
TTY *
terminal_open (int rfd,int wfd)
{
t->close = terminal_close;
- return (TTY *) t;
-}
+ terminal_getsize((TTY*) t);
-void
-terminal_getsize (TTY *_t,CRT_POS *pos)
-{
-TERMINAL *t=(TTY *) _t;
- struct winsize sz = { 0 };
-
-if ((!t) || (!pos)) return;
-
-if (ioctl (a->wfd, TIOCGWINSZ, &sz))
- {
- pos->x = CRT_COLS;
- pos->y = CRT_ROWS;
- }
- else
- {
- pos->x = sz.ws_col;
- pos->y = sz.ws_row;
- }
-}
-
-
-void terminal_atexit(void)
-{
-while (terminal_list)
- terminal_close(terminal_list);
+ return (TTY *) t;
}
-