From 8be09ca8b33fd584476430c8407f0c4bcfbd9c9a Mon Sep 17 00:00:00 2001 From: kato Date: Sat, 25 Jan 1997 06:38:14 +0000 Subject: [PATCH] Synchronize with sys/i386/isa/syscons.{c,h} rev. 1.199 and 1.27, respectively. --- sys/pc98/pc98/syscons.c | 36 +++++++++++++++++++++++++++++++++++- sys/pc98/pc98/syscons.h | 2 ++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/sys/pc98/pc98/syscons.c b/sys/pc98/pc98/syscons.c index 774767510bab..64f758ddd5a1 100644 --- a/sys/pc98/pc98/syscons.c +++ b/sys/pc98/pc98/syscons.c @@ -2021,6 +2021,16 @@ scan_esc(scr_stat *scp, u_char c) #endif switch (c) { + case '7': /* Save cursor position */ + scp->saved_xpos = scp->xpos; + scp->saved_ypos = scp->ypos; + break; + + case '8': /* Restore saved cursor position */ + if (scp->saved_xpos >= 0 && scp->saved_ypos >= 0) + move_crsr(scp, scp->saved_xpos, scp->saved_ypos); + break; + case '[': /* Start ESC [ sequence */ scp->term.esc = 2; scp->term.last_param = -1; @@ -2162,6 +2172,7 @@ scan_esc(scr_stat *scp, u_char c) mark_for_update(scp, scp->cursor_atr - scp->atr_buf); #endif mark_for_update(scp, scp->xsize * scp->ysize); + remove_cutmarking(scp); break; case 1: /* clear from beginning of display to cursor */ #ifdef PC98 @@ -2181,9 +2192,20 @@ scan_esc(scr_stat *scp, u_char c) #ifdef PC98 mark_for_update(scp, scp->cursor_atr - scp->atr_buf); #endif + remove_cutmarking(scp); break; case 2: /* clear entire display */ - clear_screen(scp); +#ifdef PC98 + fillw(scr_map[0x20], scp->scr_buf, + scp->xsize * scp->ysize); + fillw(at2pc98(scp->term.cur_color), scp->atr_buf, + scp->xsize * scp->ysize); +#else + fillw(scp->term.cur_color | scr_map[0x20], scp->scr_buf, + scp->xsize * scp->ysize); +#endif + mark_all(scp); + remove_cutmarking(scp); break; } break; @@ -2515,6 +2537,16 @@ scan_esc(scr_stat *scp, u_char c) } break; + case 's': /* Save cursor position */ + scp->saved_xpos = scp->xpos; + scp->saved_ypos = scp->ypos; + break; + + case 'u': /* Restore saved cursor position */ + if (scp->saved_xpos >= 0 && scp->saved_ypos >= 0) + move_crsr(scp, scp->saved_xpos, scp->saved_ypos); + break; + case 'x': if (scp->term.num_param == 0) n = 0; @@ -3280,6 +3312,8 @@ init_scp(scr_stat *scp) scp->font_size = FONT_16; scp->xsize = COL; scp->ysize = ROW; + scp->xpos = scp->ypos = 0; + scp->saved_xpos = scp->saved_ypos = -1; scp->start = scp->xsize * scp->ysize; scp->end = 0; scp->term.esc = 0; diff --git a/sys/pc98/pc98/syscons.h b/sys/pc98/pc98/syscons.h index 1d6ec83e47e4..6c3348b27d8c 100644 --- a/sys/pc98/pc98/syscons.h +++ b/sys/pc98/pc98/syscons.h @@ -168,6 +168,8 @@ typedef struct scr_stat { #endif int xpos; /* current X position */ int ypos; /* current Y position */ + int saved_xpos; /* saved X position */ + int saved_ypos; /* saved Y position */ int xsize; /* X text size */ int ysize; /* Y text size */ int xpixel; /* X graphics size */