From af8f62d5f4f18a60ad4230b38a74e1f26f71ce30 Mon Sep 17 00:00:00 2001 From: piaip Date: Sun, 13 Jan 2008 00:55:09 +0000 Subject: - enable ncurses 'typeahead' API git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3832 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/pfterm.c | 48 +++++++++++++++++++++++++++++++++++++++++------- mbbsd/screen.c | 21 ++++++++++++++++++++- 2 files changed, 61 insertions(+), 8 deletions(-) (limited to 'mbbsd') diff --git a/mbbsd/pfterm.c b/mbbsd/pfterm.c index faf2ffd0..08dec655 100644 --- a/mbbsd/pfterm.c +++ b/mbbsd/pfterm.c @@ -71,6 +71,14 @@ #define GRAYOUT_COLORNORM (+2) #endif // GRAYOUT_DARK +////////////////////////////////////////////////////////////////////////// +// Typeahead +////////////////////////////////////////////////////////////////////////// +#ifndef TYPEAHEAD_NONE +#define TYPEAHEAD_NONE (-1) +#define TYPEAHEAD_STDIN (0) +#endif // TYPEAHEAD + ////////////////////////////////////////////////////////////////////////// // pfterm: piaip's flat terminal system, a new replacement for 'screen'. // pfterm can also be read as "Perfect Term" @@ -86,10 +94,10 @@ // // Copyright(c) 2007-2008 Hung-Te Lin // All Rights Reserved. -// You are free to use, modify, redistribute this program -// in any non-commercial usage (including network service). -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. +// You are free to use, modify, redistribute this program in any +// non-commercial usage (including network service). +// The above copyright notice and this permission notice shall be +// included in all copies or substantial portions of the Software. // // MAJOR IMPROVEMENTS: // - Interpret ANSI code and maintain a virtual terminal @@ -205,16 +213,20 @@ typedef struct int dirty; int scroll; + // memory allocation + int mrows, mcols; + // raw terminal status int ry, rx; ftattr rattr; - // memory allocation - int mrows, mcols; + // typeahead + char typeahead; // escape command ftchar cmd[FTCMD_MAXLEN+1]; int szcmd; + } FlatTerm; static FlatTerm ft; @@ -331,6 +343,7 @@ void newwin (int nlines, int ncols, int y, int x); void refresh (void); // optimized refresh void doupdate (void); // optimized refresh, ignore input queue void redrawwin (void); // invalidate whole screen +int typeahead (int fd);// prevent refresh if input queue is not empty // scrolling void scroll (void); // scroll up @@ -417,6 +430,9 @@ initscr(void) ft.mi = 1; clrscr(); ft.mi = 0; + // typeahead + ft.typeahead = 1; + fterm_rawclear(); move(0, 0); } @@ -704,11 +720,29 @@ redrawwin(void) fterm_markdirty(); } +int +typeahead(int fd) +{ + switch(fd) + { + case TYPEAHEAD_NONE: + ft.typeahead = 0; + break; + case TYPEAHEAD_STDIN: + ft.typeahead = 1; + break; + default: // shall never reach here + assert(NULL); + break; + } + return 0; +} + void refresh(void) { // prevent passive update - if(fterm_inbuf()) + if(fterm_inbuf() && ft.typeahead) return; doupdate(); } diff --git a/mbbsd/screen.c b/mbbsd/screen.c index 5eee18e4..25ec5c22 100644 --- a/mbbsd/screen.c +++ b/mbbsd/screen.c @@ -13,6 +13,7 @@ static unsigned short cur_ln = 0, cur_col = 0; static unsigned char docls; static unsigned char standing = NA; static int scrollcnt, tc_col, tc_line; +static unsigned char _typeahead = 1; #define MODIFIED (1) /* if line has been modifed, screen output */ #define STANDOUT (2) /* if this line has a standout region */ @@ -205,10 +206,28 @@ redrawwin(void) oflush(); } +int +typeahead(int fd) +{ + switch(fd) + { + case TYPEAHEAD_NONE: + _typeahead = 0; + break; + case TYPEAHEAD_STDIN: + _typeahead = 1; + break; + default: // shall never reach here + assert(NULL); + break; + } + return 0; +} + void refresh(void) { - if (num_in_buf()) + if (num_in_buf() && _typeahead) return; doupdate(); } -- cgit v1.2.3