From 7c7adbd6aefd1498cd84ee947c52269ce099d347 Mon Sep 17 00:00:00 2001 From: scw Date: Wed, 17 Aug 2005 05:28:53 +0000 Subject: screen_backup() & screen_restore() update: * automatic allocate memory, save cursor location and backup * automatic restore screen, cursor location and free memory * works on screen lessening * no more crash on screen enlarged git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3051 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/io.c | 33 +++++++++------------------------ 1 file changed, 9 insertions(+), 24 deletions(-) (limited to 'mbbsd/io.c') diff --git a/mbbsd/io.c b/mbbsd/io.c index bea4d207..89f03a0b 100644 --- a/mbbsd/io.c +++ b/mbbsd/io.c @@ -427,22 +427,17 @@ igetch(void) screen_backup_t old_screen; int oldroll = roll; - int y, x, my_newfd; + int my_newfd; - getyx(&y, &x); - old_screen.raw_memory = malloc(screen_backupsize(t_lines, big_picture)); - screen_backup(t_lines, big_picture, &old_screen); + screen_backup(&old_screen); my_newfd = i_newfd; i_newfd = 0; t_users(); i_newfd = my_newfd; - screen_restore(t_lines, big_picture, &old_screen); - free(old_screen.raw_memory); roll = oldroll; - move(y, x); - redoscr(); + screen_restore(&old_screen); continue; } return ch; @@ -462,21 +457,16 @@ igetch(void) if (currutmp->msgs[0].pid && WATERMODE(WATER_OFO) && wmofo == NOTREPLYING) { - int y, x, my_newfd; + int my_newfd; screen_backup_t old_screen; - old_screen.raw_memory = malloc(screen_backupsize(t_lines, big_picture)); - screen_backup(t_lines, big_picture, &old_screen); - getyx(&y, &x); + screen_backup(&old_screen); my_newfd = i_newfd; i_newfd = 0; my_write2(); - screen_restore(t_lines, big_picture, &old_screen); - free(old_screen.raw_memory); + screen_restore(&old_screen); i_newfd = my_newfd; - move(y, x); - redoscr(); continue; } else if (!WATERMODE(WATER_OFO)) { if (watermode > 0) { @@ -494,10 +484,8 @@ igetch(void) } else if (watermode == -1 && currutmp->msgs[0].pid) { /* 第一次按 Ctrl-R (必須先被丟過水球) */ screen_backup_t old_screen; - int y, x, my_newfd; - getyx(&y, &x); - old_screen.raw_memory = malloc(screen_backupsize(t_lines, big_picture)); - screen_backup(t_lines, big_picture, &old_screen); + int my_newfd; + screen_backup(&old_screen); /* 如果正在talk的話先不處理對方送過來的封包 (不去select) */ my_newfd = i_newfd; @@ -527,10 +515,7 @@ igetch(void) i_newfd = my_newfd; /* 還原螢幕 */ - screen_restore(t_lines, big_picture, &old_screen); - free(old_screen.raw_memory); - move(y, x); - redoscr(); + screen_restore(&old_screen); continue; } } -- cgit v1.2.3