From owner-freebsd-hackers Tue Oct 3 02:40:45 1995 Return-Path: owner-hackers Received: (from root@localhost) by freefall.freebsd.org (8.6.12/8.6.6) id CAA05601 for hackers-outgoing; Tue, 3 Oct 1995 02:40:45 -0700 Received: from frya.zgik.zaporizhzhe.ua (ZGIK-1-ELIS-14.4K.zgik.zaporizhzhe.ua [193.124.62.253]) by freefall.freebsd.org (8.6.12/8.6.6) with ESMTP id CAA05448 for ; Tue, 3 Oct 1995 02:40:02 -0700 Received: from zgik.UUCP by frya.zgik.zaporizhzhe.ua with UUCP id LAA06772; (8.6.11/vak/1.8e) Tue, 3 Oct 1995 11:29:19 +0200 Received: by relay1.bcs.zaporizhzhe.ua (uumail v1.5/ache) id AA07212; Tue, 3 Oct 1995 11:15:49 +0200 Received: from bcs1.bcs.zaporizhzhe.ua (bcs1.bcs.zaporizhzhe.ua [193.124.62.29]) by bcs.zaporizhzhe.ua (8.6.11/8.6.9) with SMTP id LAA07209 for ; Tue, 3 Oct 1995 11:15:48 +0200 Received: by bcs1.bcs.zaporizhzhe.ua id AA06715 (5.65c8/IDA-1.4.4 for hackers@freebsd.org); Tue, 3 Oct 1995 11:09:58 +0200 From: Sergey Shkonda Message-Id: <199510030909.AA06715@bcs1.bcs.zaporizhzhe.ua> Subject: Some more patches to syscons To: hackers@freebsd.org Date: Tue, 3 Oct 1995 11:09:53 +0200 (UKR) X-Mailer: ELM [version 2.4 PL0] Content-Type: text Content-Length: 3646 Sender: owner-hackers@freebsd.org Precedence: bulk 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) {