Skip site navigation (1)Skip section navigation (2)
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>