Module Name:    src
Committed By:   drochner
Date:           Wed Jun  8 10:25:21 UTC 2011

Modified Files:
        src/sys/dev/ic: vga.c
        src/sys/dev/wscons: wsconsio.h
        src/usr.sbin/wsfontload: wsfontload.8 wsfontload.c

Log Message:
add support for the interesting parts of ISO-2 and KOI8-R fonts
to the vga(4) driver


To generate a diff of this commit:
cvs rdiff -u -r1.106 -r1.107 src/sys/dev/ic/vga.c
cvs rdiff -u -r1.95 -r1.96 src/sys/dev/wscons/wsconsio.h
cvs rdiff -u -r1.24 -r1.25 src/usr.sbin/wsfontload/wsfontload.8
cvs rdiff -u -r1.14 -r1.15 src/usr.sbin/wsfontload/wsfontload.c

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

Modified files:

Index: src/sys/dev/ic/vga.c
diff -u src/sys/dev/ic/vga.c:1.106 src/sys/dev/ic/vga.c:1.107
--- src/sys/dev/ic/vga.c:1.106	Thu Dec  9 23:33:30 2010
+++ src/sys/dev/ic/vga.c	Wed Jun  8 10:25:21 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: vga.c,v 1.106 2010/12/09 23:33:30 christos Exp $ */
+/* $NetBSD: vga.c,v 1.107 2011/06/08 10:25:21 drochner Exp $ */
 
 /*
  * Copyright (c) 1995, 1996 Carnegie-Mellon University.
@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vga.c,v 1.106 2010/12/09 23:33:30 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vga.c,v 1.107 2011/06/08 10:25:21 drochner Exp $");
 
 /* for WSCONS_SUPPORT_PCVTFONTS */
 #include "opt_wsdisplay_compat.h"
@@ -311,7 +311,9 @@
 #define vga_valid_primary_font(f) \
 	(f->wsfont->encoding == WSDISPLAY_FONTENC_IBM || \
 	f->wsfont->encoding == WSDISPLAY_FONTENC_ISO || \
-	f->wsfont->encoding == WSDISPLAY_FONTENC_ISO7)
+	f->wsfont->encoding == WSDISPLAY_FONTENC_ISO2 || \
+	f->wsfont->encoding == WSDISPLAY_FONTENC_ISO7 || \
+	f->wsfont->encoding == WSDISPLAY_FONTENC_KOI8_R)
 
 struct egavga_font *
 egavga_getfont(struct vga_config *vc, struct vgascreen *scr, const char *name,
@@ -1335,6 +1337,32 @@
 
 #endif /* WSCONS_SUPPORT_ISO7FONTS */
 
+static const uint16_t iso2_unichars[0x60] = {
+	0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7,
+	0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B,
+	0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7,
+	0x00B8, 0x0161, 0x015F, 0x0165, 0x017A, 0x02DD, 0x017E, 0x017C,
+	0x0154, 0x00C1, 0x00C2, 0x0102, 0x00C4, 0x0139, 0x0106, 0x00C7,
+	0x010C, 0x00C9, 0x0118, 0x00CB, 0x011A, 0x00CD, 0x00CE, 0x010E,
+	0x0110, 0x0143, 0x0147, 0x00D3, 0x00D4, 0x0150, 0x00D6, 0x00D7,
+	0x0158, 0x016E, 0x00DA, 0x0170, 0x00DC, 0x00DD, 0x0162, 0x00DF,
+	0x0155, 0x00E1, 0x00E2, 0x0103, 0x00E4, 0x013A, 0x0107, 0x00E7,
+	0x010D, 0x00E9, 0x0119, 0x00EB, 0x011B, 0x00ED, 0x00EE, 0x010F,
+	0x0111, 0x0144, 0x0148, 0x00F3, 0x00F4, 0x0151, 0x00F6, 0x00F7,
+	0x0159, 0x016F, 0x00FA, 0x0171, 0x00FC, 0x00FD, 0x0163, 0x02D9
+};
+
+static const uint16_t koi8_unichars[0x40] = {
+	0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
+	0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E,
+	0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
+	0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A,
+	0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
+	0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E,
+	0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
+	0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A
+};
+
 static int _vga_mapchar(void *, const struct egavga_font *, int, u_int *);
 
 static int
@@ -1350,6 +1378,36 @@
 			*index = ' ';
 			return (0);
 		}
+	case WSDISPLAY_FONTENC_ISO2:
+		if (uni < 0xa0) {
+			*index = uni;
+			return (5);
+		} else {
+			int i;
+			for (i = 0; i < 0x60; i++) {
+				if (uni == iso2_unichars[i]) {
+					*index = i + 0xa0;
+					return (5);
+				}
+			}
+			*index = 0xa4; /* currency sign */
+			return (0);
+		}
+	case WSDISPLAY_FONTENC_KOI8_R:
+		if (uni < 0x80) {
+			*index = uni;
+			return (5);
+		} else {
+			int i;
+			for (i = 0; i < 0x40; i++) {
+				if (uni == koi8_unichars[i]) {
+					*index = i + 0xc0;
+					return (5);
+				}
+			}
+			*index = 0x94; /* box */
+			return (0);
+		}
 	case WSDISPLAY_FONTENC_IBM:
 		return (pcdisplay_mapchar(id, uni, index));
 #ifdef WSCONS_SUPPORT_PCVTFONTS

Index: src/sys/dev/wscons/wsconsio.h
diff -u src/sys/dev/wscons/wsconsio.h:1.95 src/sys/dev/wscons/wsconsio.h:1.96
--- src/sys/dev/wscons/wsconsio.h:1.95	Sun Feb  6 18:26:53 2011
+++ src/sys/dev/wscons/wsconsio.h	Wed Jun  8 10:25:21 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: wsconsio.h,v 1.95 2011/02/06 18:26:53 tsutsui Exp $ */
+/* $NetBSD: wsconsio.h,v 1.96 2011/06/08 10:25:21 drochner Exp $ */
 
 /*
  * Copyright (c) 1996, 1997 Christopher G. Demetriou.  All rights reserved.
@@ -404,6 +404,7 @@
 #define	WSDISPLAY_FONTENC_PCVT 2
 #define	WSDISPLAY_FONTENC_ISO7 3 /* greek */
 #define	WSDISPLAY_FONTENC_ISO2 4 /* east european */
+#define	WSDISPLAY_FONTENC_KOI8_R 5 /* russian */
 	u_int fontwidth, fontheight, stride;
 #define	WSDISPLAY_MAXFONTSZ	(512*1024)
 	int bitorder, byteorder;

Index: src/usr.sbin/wsfontload/wsfontload.8
diff -u src/usr.sbin/wsfontload/wsfontload.8:1.24 src/usr.sbin/wsfontload/wsfontload.8:1.25
--- src/usr.sbin/wsfontload/wsfontload.8:1.24	Mon Mar  9 19:24:33 2009
+++ src/usr.sbin/wsfontload/wsfontload.8	Wed Jun  8 10:25:21 2011
@@ -1,4 +1,4 @@
-.\"	$NetBSD: wsfontload.8,v 1.24 2009/03/09 19:24:33 joerg Exp $
+.\"	$NetBSD: wsfontload.8,v 1.25 2011/06/08 10:25:21 drochner Exp $
 .\"
 .\" Copyright (c) 1999, 2001
 .\" 	Matthias Drochner.  All rights reserved.
@@ -85,17 +85,24 @@
 .It Fl e Ar encoding
 Sets the encoding of the font.
 This can be either a symbolic abbreviation or a numeric value.
-Currently recognized abbreviations are
-.Ql iso
-for ISO-8859-1 encoding,
-.Ql ibm
-for IBM encoded fonts and
-.Ql pcvt
-for the custom encoding of the supplemental fonts which came with
-the
+Currently recognized abbreviations are:
+.Bl -tag -width xxxxxxx
+.It Ql iso
+ISO-8859-1 encoding
+.It Ql ibm
+IBM encoded fonts
+.It Ql pcvt
+the custom encoding of the supplemental fonts which came with the
 .Bx
 .Dq pcvt
-console driver.
+console driver
+.It Ql iso2
+ISO-8859-2 (east european) encoding
+.It Ql iso7
+ISO-8859-7 (greek) encoding
+.It Ql koi8r
+KOI8-R (russian) encoding
+.El
 Per default,
 .Ql iso
 is assumed.

Index: src/usr.sbin/wsfontload/wsfontload.c
diff -u src/usr.sbin/wsfontload/wsfontload.c:1.14 src/usr.sbin/wsfontload/wsfontload.c:1.15
--- src/usr.sbin/wsfontload/wsfontload.c:1.14	Sun Apr 19 02:25:48 2009
+++ src/usr.sbin/wsfontload/wsfontload.c	Wed Jun  8 10:25:21 2011
@@ -1,4 +1,4 @@
-/* $NetBSD: wsfontload.c,v 1.14 2009/04/19 02:25:48 lukem Exp $ */
+/* $NetBSD: wsfontload.c,v 1.15 2011/06/08 10:25:21 drochner Exp $ */
 
 /*
  * Copyright (c) 1999
@@ -68,6 +68,7 @@
 	{"pcvt", WSDISPLAY_FONTENC_PCVT},
 	{"iso7", WSDISPLAY_FONTENC_ISO7},
 	{"iso2", WSDISPLAY_FONTENC_ISO2},
+	{"koi8r", WSDISPLAY_FONTENC_KOI8_R},
 };
 
 static void

Reply via email to