diff options
author | scw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-17 13:28:53 +0800 |
---|---|---|
committer | scw <scw@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2005-08-17 13:28:53 +0800 |
commit | 7c7adbd6aefd1498cd84ee947c52269ce099d347 (patch) | |
tree | 0cf6027e7edf5f7137d519a34769411115e46251 /mbbsd/io.c | |
parent | 1598828725cc3a14f4e9a1a18b4212ad808a3516 (diff) | |
download | pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar.gz pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar.bz2 pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar.lz pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar.xz pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.tar.zst pttbbs-7c7adbd6aefd1498cd84ee947c52269ce099d347.zip |
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
Diffstat (limited to 'mbbsd/io.c')
-rw-r--r-- | mbbsd/io.c | 33 |
1 files changed, 9 insertions, 24 deletions
@@ -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; } } |