From a8cfec296b543e31bf596b61c86473d094afc5fc Mon Sep 17 00:00:00 2001 From: victor Date: Mon, 15 Aug 2005 10:09:51 +0000 Subject: screen-resize awareness between screen_backup() and screen_restore(). git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3038 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/screen.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'mbbsd/screen.c') diff --git a/mbbsd/screen.c b/mbbsd/screen.c index b9b57b90..b7bde5ff 100644 --- a/mbbsd/screen.c +++ b/mbbsd/screen.c @@ -15,7 +15,6 @@ static int scrollcnt, tc_col, tc_line; #define MODIFIED (1) /* if line has been modifed, screen output */ #define STANDOUT (2) /* if this line has a standout region */ - void initscr(void) { @@ -522,11 +521,15 @@ standend(void) } } -// XXX race: signal handler write to screen, data larger than allocated buf -void screen_backup(int len, const screenline_t *bp, void *buf) +void screen_backup(int len, const screenline_t *bp, screen_backup_t *old) { int i; size_t offset=0; + void *buf = old->raw_memory; + + old->col = t_columns; + old->row = t_lines; + for(i=0;iraw_memory; + + // TODO try to be more user friendly. + if (old->col > t_columns || old->row > t_lines) { + move(1, 0); + clrtobot(); + move(2, 2); + outs("偵測到視窗改變大小,畫面繪製將會暫時失效"); + return; + } + for(i=0;i