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>