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>