Module Name:    src
Committed By:   martin
Date:           Sun Sep 11 18:10:23 UTC 2022

Modified Files:
        src/sys/arch/atari/dev [netbsd-9]: ite.c ite_cc.c ite_et.c itevar.h

Log Message:
Pull up following revision(s) (requested by tsutsui in ticket #1518):

        sys/arch/atari/dev/ite.c: revision 1.82
        sys/arch/atari/dev/ite_cc.c: revision 1.45
        sys/arch/atari/dev/ite_et.c: revision 1.36
        sys/arch/atari/dev/itevar.h: revision 1.15

Add a minimum DEC special graphics character support for atari ite(4).

This closes PR port-atari/46647 (Menu borders in sysinst appear as
characters with diacritical marks instead of graphics characters).

Switching encoding support by "ESC ( <F>" sequence for vt220 was
pulled from x68k ite(4) (that already supports ISO-2022-JP and EUC-JP).

Note atari's fonts already include DEC special graphics characters.
ET4000 on Hades is untested due to long-term lack of hardware.

Discussed on port-atari@ etc.


To generate a diff of this commit:
cvs rdiff -u -r1.79 -r1.79.2.1 src/sys/arch/atari/dev/ite.c
cvs rdiff -u -r1.40 -r1.40.2.1 src/sys/arch/atari/dev/ite_cc.c
cvs rdiff -u -r1.31 -r1.31.2.1 src/sys/arch/atari/dev/ite_et.c
cvs rdiff -u -r1.14 -r1.14.58.1 src/sys/arch/atari/dev/itevar.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/atari/dev/ite.c
diff -u src/sys/arch/atari/dev/ite.c:1.79 src/sys/arch/atari/dev/ite.c:1.79.2.1
--- src/sys/arch/atari/dev/ite.c:1.79	Sat Jun 29 16:41:19 2019
+++ src/sys/arch/atari/dev/ite.c	Sun Sep 11 18:10:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ite.c,v 1.79 2019/06/29 16:41:19 tsutsui Exp $	*/
+/*	$NetBSD: ite.c,v 1.79.2.1 2022/09/11 18:10:23 martin Exp $	*/
 
 /*
  * Copyright (c) 1988 University of Utah.
@@ -44,7 +44,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ite.c,v 1.79 2019/06/29 16:41:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ite.c,v 1.79.2.1 2022/09/11 18:10:23 martin Exp $");
 
 #include "opt_ddb.h"
 
@@ -736,6 +736,12 @@ ite_reset(struct ite_softc *sc)
 	sc->keypad_appmode = 0;
 	sc->imode = 0;
 	sc->key_repeat = 1;
+	sc->G0 = CSET_ASCII;
+	sc->G1 = CSET_DECGRAPH;
+	sc->G2 = 0;
+	sc->G3 = 0;
+	sc->GL = &sc->G0;
+	sc->GR = &sc->G1;
 	memset(sc->tabs, 0, sc->cols);
 	for (i = 0; i < sc->cols; i++)
 		sc->tabs[i] = ((i & 7) == 0);
@@ -1247,6 +1253,14 @@ ite_lf (struct ite_softc *sc)
     }
   SUBR_CURSOR(sc, MOVE_CURSOR);
   clr_attr(sc, ATTR_INV);
+
+  /* reset character set */
+  sc->G0 = CSET_ASCII;
+  sc->G1 = CSET_DECGRAPH;
+  sc->G2 = 0;
+  sc->G3 = 0;
+  sc->GL = &sc->G0;
+  sc->GR = &sc->G1;
 }
 
 static inline void
@@ -1446,7 +1460,7 @@ iteputchar(register int c, struct ite_so
 		  case 'B':	/* ASCII */
 		  case 'A':	/* ISO latin 1 */
 		  case '<':	/* user preferred suplemental */
-		  case '0':	/* dec special graphics */
+		  case '0':	/* DEC special graphics */
 		  
 		  /* 96-character sets: */
 		  case '-':	/* G1 */
@@ -1471,27 +1485,32 @@ iteputchar(register int c, struct ite_so
 		  
 		  /* locking shift modes (as you might guess, not yet supported..) */
 		  case '`':
-		    sc->GR = sc->G1;
+		    sc->GR = &sc->G1;
 		    sc->escape = 0;
 		    return;
 		    
 		  case 'n':
-		    sc->GL = sc->G2;
+		    sc->GL = &sc->G2;
 		    sc->escape = 0;
 		    return;
 		    
 		  case '}':
-		    sc->GR = sc->G2;
+		    sc->GR = &sc->G2;
 		    sc->escape = 0;
 		    return;
 		    
 		  case 'o':
-		    sc->GL = sc->G3;
+		    sc->GL = &sc->G3;
 		    sc->escape = 0;
 		    return;
 		    
 		  case '|':
-		    sc->GR = sc->G3;
+		    sc->GR = &sc->G3;
+		    sc->escape = 0;
+		    return;
+
+		  case '~':
+		    sc->GR = &sc->G1;
 		    sc->escape = 0;
 		    return;
 		    
@@ -1511,16 +1530,30 @@ iteputchar(register int c, struct ite_so
 
 
 		  case '7':
+		    /* save cursor */
 		    sc->save_curx = sc->curx;
 		    sc->save_cury = sc->cury;
 		    sc->save_attribute = sc->attribute;
+		    sc->sc_G0 = sc->G0;
+		    sc->sc_G1 = sc->G1;
+		    sc->sc_G2 = sc->G2;
+		    sc->sc_G3 = sc->G3;
+		    sc->sc_GL = sc->GL;
+		    sc->sc_GR = sc->GR;
 		    sc->escape = 0;
 		    return;
 		    
 		  case '8':
+		    /* restore cursor */
 		    sc->curx = sc->save_curx;
 		    sc->cury = sc->save_cury;
 		    sc->attribute = sc->save_attribute;
+		    sc->G0 = sc->sc_G0;
+		    sc->G1 = sc->sc_G1;
+		    sc->G2 = sc->sc_G2;
+		    sc->G3 = sc->sc_G3;
+		    sc->GL = sc->sc_GL;
+		    sc->GR = sc->sc_GR;
 		    SUBR_CURSOR(sc, MOVE_CURSOR);
 		    sc->escape = 0;
 		    return;
@@ -1551,8 +1584,22 @@ iteputchar(register int c, struct ite_so
 		break;
 
 
-	      case '(':
-	      case ')':
+	      case '(': /* designated G0 */
+		switch (c) {
+		case 'B': /* US-ASCII */
+		  sc->G0 = CSET_ASCII;
+		  sc->escape = 0;
+		  return;
+		case '0': /* DEC special graphics */
+		  sc->G0 = CSET_DECGRAPH;
+		  sc->escape = 0;
+		  return;
+		default:
+		  /* not supported */
+		  sc->escape = 0;
+		  return;
+		}
+	      case ')': /* designated G1 */
 		sc->escape = 0;
 		return;
 
@@ -2165,11 +2212,11 @@ iteputchar(register int c, struct ite_so
 		break;
 
 	case SO:
-		sc->GL = sc->G1;
+		sc->GL = &sc->G1;
 		break;
 		
 	case SI:
-		sc->GL = sc->G0;
+		sc->GL = &sc->G0;
 		break;
 
 	case ENQ:

Index: src/sys/arch/atari/dev/ite_cc.c
diff -u src/sys/arch/atari/dev/ite_cc.c:1.40 src/sys/arch/atari/dev/ite_cc.c:1.40.2.1
--- src/sys/arch/atari/dev/ite_cc.c:1.40	Sat Jun 29 16:41:19 2019
+++ src/sys/arch/atari/dev/ite_cc.c	Sun Sep 11 18:10:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ite_cc.c,v 1.40 2019/06/29 16:41:19 tsutsui Exp $	*/
+/*	$NetBSD: ite_cc.c,v 1.40.2.1 2022/09/11 18:10:23 martin Exp $	*/
 
 /*
  * Copyright (c) 1996 Leo Weppelman
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ite_cc.c,v 1.40 2019/06/29 16:41:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ite_cc.c,v 1.40.2.1 2022/09/11 18:10:23 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/conf.h>
@@ -579,6 +579,15 @@ putc8(struct ite_softc *ip, int c, int d
 	if (c < ip->font.font_lo || c > ip->font.font_hi)
 		return;
 
+	/*
+	 * Handle DEC special graphics character by 'ESC ( B' sequence.
+	 * Note we assume all font data (fontdata_8x8 and fontdata_8x16)
+	 * contain DEC graphics glyph (for 0x5f to 0x7e) at 0x00 to 0x1F.
+	 */
+	if (*ip->GL == CSET_DECGRAPH) {
+		if (ip->font.font_lo == 0 && c >= 0x5f && c <= 0x7e)
+			c -= 0x5f;
+	}
 	ft = cci->font_cell[c];
 
 	if (!mode) {

Index: src/sys/arch/atari/dev/ite_et.c
diff -u src/sys/arch/atari/dev/ite_et.c:1.31 src/sys/arch/atari/dev/ite_et.c:1.31.2.1
--- src/sys/arch/atari/dev/ite_et.c:1.31	Sat Jun 29 16:41:19 2019
+++ src/sys/arch/atari/dev/ite_et.c	Sun Sep 11 18:10:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: ite_et.c,v 1.31 2019/06/29 16:41:19 tsutsui Exp $	*/
+/*	$NetBSD: ite_et.c,v 1.31.2.1 2022/09/11 18:10:23 martin Exp $	*/
 
 /*
  * Copyright (c) 1996 Leo Weppelman.
@@ -26,7 +26,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ite_et.c,v 1.31 2019/06/29 16:41:19 tsutsui Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ite_et.c,v 1.31.2.1 2022/09/11 18:10:23 martin Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -488,6 +488,16 @@ et_putc(struct ite_softc *ip, int c, int
 	u_char	attr;
 	u_short	*cp;
 
+	/*
+	 * Handle DEC special graphics character by 'ESC ( B' sequence.
+	 * Note we assume all font data (fontdata_8x8 and fontdata_8x16)
+	 * contain DEC graphics glyph (for 0x5f to 0x7e) at 0x00 to 0x1F.
+	 */
+	if (*ip->GL == CSET_DECGRAPH) {
+		if (ip->font.font_lo == 0 && c >= 0x5f && c <= 0x7e)
+			c -= 0x5f;
+	}
+
 	attr = (unsigned char) ((mode & ATTR_INV) ? (0x70) : (0x07));
 	if (mode & ATTR_UL)     attr |= 0x01;
 	if (mode & ATTR_BOLD)   attr |= 0x08;

Index: src/sys/arch/atari/dev/itevar.h
diff -u src/sys/arch/atari/dev/itevar.h:1.14 src/sys/arch/atari/dev/itevar.h:1.14.58.1
--- src/sys/arch/atari/dev/itevar.h:1.14	Sun Jun  5 16:25:12 2011
+++ src/sys/arch/atari/dev/itevar.h	Sun Sep 11 18:10:23 2022
@@ -1,4 +1,4 @@
-/*	$NetBSD: itevar.h,v 1.14 2011/06/05 16:25:12 tsutsui Exp $	*/
+/*	$NetBSD: itevar.h,v 1.14.58.1 2022/09/11 18:10:23 martin Exp $	*/
 
 /*
  * Copyright (c) 1995 Leo Weppelman (Atari modifications)
@@ -72,12 +72,18 @@ struct ite_softc {
 	u_char			escape;
 	u_char			cursor_opt;
 	u_char			key_repeat;
-	char			GL;
-	char			GR;
 	char			G0;
 	char			G1;
 	char			G2;
 	char			G3;
+	char			*GL;
+	char			*GR;
+	char			sc_G0;
+	char			sc_G1;
+	char			sc_G2;
+	char			sc_G3;
+	char			*sc_GL;
+	char			*sc_GR;
 	char			linefeed_newline;
 	char			auto_wrap;
 	char			cursor_appmode;
@@ -173,6 +179,10 @@ enum tab_size { TABSIZE = 8 };
 
 #ifdef _KERNEL
 
+/* character set */
+#define CSET_ASCII	0	/* US-ASCII */
+#define CSET_DECGRAPH	1	/* DEC special graphics characters */
+
 extern int ite_default_x;
 extern int ite_default_y;
 extern int ite_default_width;

Reply via email to