Date: Tue, 3 Oct 1995 11:09:53 +0200 (UKR) From: Sergey Shkonda <serg@bcs1.bcs.zaporizhzhe.ua> To: hackers@freebsd.org Subject: Some more patches to syscons Message-ID: <199510030909.AA06715@bcs1.bcs.zaporizhzhe.ua>
next in thread | raw e-mail | index | archive | help
This patches errors in relative cursor moving when
(xpos+dx, ypos+dy) is not on screen. In this case cursor moving
to left (rigt, top, bottom) of screen.
ESC [ n H now move to row n, column 1
--
Serg | Relcom:
(Sergey Shkonda) | serg@bcs1.bcs.zaporizhzhe.ua
*** syscons.c Tue Oct 3 10:49:22 1995
--- syscons.c Tue Oct 3 10:49:18 1995
***************
*** 1410,1440 ****
--- 1410,1448 ----
case 'A': /* up n rows */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (n > scp->ypos) n = scp->ypos;
move_crsr(scp, scp->xpos, scp->ypos - n);
break;
case 'B': /* down n rows */
+ case 'e': /* move cursor n rows down */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (n + scp->ypos >= scp->ysize) n = scp->ysize - scp->ypos - 1;
move_crsr(scp, scp->xpos, scp->ypos + n);
break;
case 'C': /* right n columns */
+ case 'a': /* move cursor n columns to the right */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (n + scp->xpos >= scp->xsize) n = scp->xsize - scp->xpos -1;
move_crsr(scp, scp->xpos + n, scp->ypos);
break;
case 'D': /* left n columns */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (n > scp->xpos) n = scp->xpos;
move_crsr(scp, scp->xpos - n, scp->ypos);
break;
case 'E': /* cursor to start of line n lines down */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (scp->ypos + n >= scp->ysize) n = scp->ysize - scp->ypos - 1;
move_crsr(scp, 0, scp->ypos + n);
break;
case 'F': /* cursor to start of line n lines up */
n = scp->term.param[0]; if (n < 1) n = 1;
+ if (n > scp->ypos) n = scp->ypos;
move_crsr(scp, 0, scp->ypos - n);
break;
***************
*** 1442,1449 ****
case 'H':
if (scp->term.num_param == 0)
move_crsr(scp, 0, 0);
! else if (scp->term.num_param == 2)
! move_crsr(scp, scp->term.param[1] - 1, scp->term.param[0] - 1);
break;
case 'J': /* Clear all or part of display */
--- 1450,1459 ----
case 'H':
if (scp->term.num_param == 0)
move_crsr(scp, 0, 0);
! else if (scp->term.num_param == 1)
! move_crsr(scp, 0, scp->term.param[0] - 1);
! else if (scp->term.num_param == 2)
! move_crsr(scp, scp->term.param[1] - 1, scp->term.param[0] - 1);
break;
case 'J': /* Clear all or part of display */
***************
*** 1611,1631 ****
move_crsr(scp, n - 1, scp->ypos);
break;
- case 'a': /* move cursor n columns to the right */
- n = scp->term.param[0]; if (n < 1) n = 1;
- move_crsr(scp, scp->xpos + n, scp->ypos);
- break;
-
case 'd': /* move cursor to row n */
n = scp->term.param[0]; if (n < 1) n = 1;
move_crsr(scp, scp->xpos, n - 1);
break;
- case 'e': /* move cursor n rows down */
- n = scp->term.param[0]; if (n < 1) n = 1;
- move_crsr(scp, scp->xpos, scp->ypos + n);
- break;
-
case 'm': /* change attribute */
if (scp->term.num_param == 0) {
scp->term.cur_attr = scp->term.std_attr;
--- 1621,1631 ----
***************
*** 1724,1730 ****
break;
}
}
! else if (scp->term.esc == 3) {
if (c >= '0' && c <= '9') {
if (scp->term.num_param < MAX_ESC_PAR) {
if (scp->term.last_param != scp->term.num_param) {
--- 1724,1730 ----
break;
}
}
! else if (scp->term.esc == 3) { /* ESC [ = */
if (c >= '0' && c <= '9') {
if (scp->term.num_param < MAX_ESC_PAR) {
if (scp->term.last_param != scp->term.num_param) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510030909.AA06715>
