Date: Mon, 2 Oct 1995 20:07:02 +0200 (UKR) From: Sergey Shkonda <serg@bcs1.bcs.zaporizhzhe.ua> To: hackers@freebsd.org Subject: Some patches to syscons Message-ID: <199510021807.AA18684@bcs1.bcs.zaporizhzhe.ua>
next in thread | raw e-mail | index | archive | help
First change is a bug fix in syscons.c:
sequence 'ESC [ n X' now work
Second change append SCO console like font changing:
ESC [ 10 m - selects the primary font
ESC [ 12 m - selects seconds alternate font; toggles
high bit of extended ASCII code before
displaying as ROM sharacters
ESC [ m
ESC [ 0 m + selects the primary font
Serg | Relcom:
(Sergey Shkonda) | serg@bcs1.bcs.zaporizhzhe.ua
*** syscons.c Mon Oct 2 19:30:53 1995
--- syscons.c Mon Oct 2 19:32:52 1995
***************
*** 1590,1597 ****
if (n > scp->xsize - scp->xpos)
n = scp->xsize - scp->xpos;
fillw(scp->term.cur_attr | scr_map[0x20],
! scp->scr_buf + scp->xpos +
! ((scp->xsize*scp->ypos) * sizeof(u_short)), n);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf + n);
break;
--- 1590,1596 ----
if (n > scp->xsize - scp->xpos)
n = scp->xsize - scp->xpos;
fillw(scp->term.cur_attr | scr_map[0x20],
! scp->cursor_pos, n);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf);
mark_for_update(scp, scp->cursor_pos - scp->scr_buf + n);
break;
***************
*** 1630,1641 ****
--- 1629,1642 ----
case 'm': /* change attribute */
if (scp->term.num_param == 0) {
scp->term.cur_attr = scp->term.std_attr;
+ scp->term.SCOfont = 0;
break;
}
for (i = 0; i < scp->term.num_param; i++) {
switch (n = scp->term.param[i]) {
case 0: /* back to normal */
scp->term.cur_attr = scp->term.std_attr;
+ scp->term.SCOfont = 0;
break;
case 1: /* highlight (bold) */
scp->term.cur_attr &= 0xFF00;
***************
*** 1652,1657 ****
--- 1653,1664 ----
case 7: /* reverse video */
scp->term.cur_attr = scp->term.rev_attr;
break;
+ case 10:
+ scp->term.SCOfont = 0;
+ break;
+ case 12:
+ scp->term.SCOfont = 0x80;
+ break;
case 30: case 31: /* set fg color */
case 32: case 33: case 34:
case 35: case 36: case 37:
***************
*** 1678,1683 ****
--- 1685,1691 ----
scp->term.cur_attr = scp->term.std_attr =
current_default->std_attr;
scp->term.rev_attr = current_default->rev_attr;
+ scp->term.SCOfont = 0;
break;
case 1: /* set ansi background */
scp->term.cur_attr = scp->term.std_attr =
***************
*** 1862,1870 ****
else if (PRINTABLE(*ptr)) { /* Print only printables */
int cnt = len <= (scp->xsize-scp->xpos) ? len : (scp->xsize-scp->xpos);
u_short cur_attr = scp->term.cur_attr;
u_short *cursor_pos = scp->cursor_pos;
do {
! *cursor_pos++ = (scr_map[*ptr++] | cur_attr);
cnt--;
} while (cnt && PRINTABLE(*ptr));
len -= (cursor_pos - scp->cursor_pos);
--- 1870,1879 ----
else if (PRINTABLE(*ptr)) { /* Print only printables */
int cnt = len <= (scp->xsize-scp->xpos) ? len : (scp->xsize-scp->xpos);
u_short cur_attr = scp->term.cur_attr;
+ u_char SCOfont = scp->term.SCOfont;
u_short *cursor_pos = scp->cursor_pos;
do {
! *cursor_pos++ = ( (scr_map[*ptr++] ^ SCOfont) | cur_attr );
cnt--;
} while (cnt && PRINTABLE(*ptr));
len -= (cursor_pos - scp->cursor_pos);
***************
*** 2028,2033 ****
--- 2037,2043 ----
kernel_console.std_attr = kernel_default.std_attr;
kernel_console.rev_attr = kernel_default.rev_attr;
kernel_console.cur_attr = kernel_default.std_attr;
+ kernel_console.SCOfont = 0;
/* initialize mapscrn array to a one to one map */
for (i=0; i<sizeof(scr_map); i++)
scr_map[i] = i;
***************
*** 2066,2071 ****
--- 2076,2082 ----
scp->term.std_attr = current_default->std_attr;
scp->term.rev_attr = current_default->rev_attr;
scp->term.cur_attr = scp->term.std_attr;
+ scp->term.SCOfont = 0;
scp->border = BG_BLACK;
scp->cursor_start = *(char *)pa_to_va(0x461);
scp->cursor_end = *(char *)pa_to_va(0x460);
*** syscons.h Mon Oct 2 19:30:54 1995
--- syscons.h Mon Oct 2 19:32:52 1995
***************
*** 122,127 ****
--- 122,130 ----
int cur_attr; /* current attributes */
int std_attr; /* normal attributes */
int rev_attr; /* reverse attributes */
+ u_char SCOfont; /* SCO-like font changing
+ as/ae (smacs/rmacs),
+ with CSI12m/CSI10m */
} term_stat;
typedef struct scr_stat {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510021807.AA18684>
