aboutsummaryrefslogtreecommitdiff
path: root/sys/isa/syscons.c
diff options
context:
space:
mode:
authorSøren Schmidt <sos@FreeBSD.org>1997-01-23 20:00:45 +0000
committerSøren Schmidt <sos@FreeBSD.org>1997-01-23 20:00:45 +0000
commit0d3f983ad2c2a2713dcd12030883d4859e9e1bb0 (patch)
tree66eb50c8246c21651c97642b9145b7a0f390441e /sys/isa/syscons.c
parent6a4c8990923df5aafac643805c6aa461adfbb44e (diff)
Add save/restore cursor as pr SCO screen(HW) manpage.
Fix ESC[2J to not move cursor home Clear mouse cutmarking on more cases. Minor changes by me. Submitted by: ache
Notes
Notes: svn path=/head/; revision=21964
Diffstat (limited to 'sys/isa/syscons.c')
-rw-r--r--sys/isa/syscons.c29
1 files changed, 28 insertions, 1 deletions
diff --git a/sys/isa/syscons.c b/sys/isa/syscons.c
index 8d693d622541..7c6a5329643b 100644
--- a/sys/isa/syscons.c
+++ b/sys/isa/syscons.c
@@ -1723,6 +1723,16 @@ scan_esc(scr_stat *scp, u_char c)
if (scp->term.esc == 1) {
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;
@@ -1831,6 +1841,7 @@ scan_esc(scr_stat *scp, u_char c)
scp->scr_buf + scp->xsize * scp->ysize - scp->cursor_pos);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf);
mark_for_update(scp, scp->xsize * scp->ysize);
+ remove_cutmarking(scp);
break;
case 1: /* clear from beginning of display to cursor */
fillw(scp->term.cur_color | scr_map[0x20],
@@ -1838,9 +1849,13 @@ scan_esc(scr_stat *scp, u_char c)
scp->cursor_pos - scp->scr_buf);
mark_for_update(scp, 0);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf);
+ remove_cutmarking(scp);
break;
case 2: /* clear entire display */
- clear_screen(scp);
+ fillw(scp->term.cur_color | scr_map[0x20], scp->scr_buf,
+ scp->xsize * scp->ysize);
+ mark_all(scp);
+ remove_cutmarking(scp);
break;
}
break;
@@ -2049,6 +2064,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;
@@ -2494,6 +2519,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;