[sci.lang.japan] kinput patch for EUC encoded fonts

mleisher@nmsu.edu (Mark Leisher) (11/30/90)

$@<!$,(J Jming16.bdf $@$d(J Jsong24.bdf $@$H8@$C$?(J EUC $@$G(J $@%3!<%G%$%s%0$5$l$?(J
$@4A;z%[%s%H(J $@$NI=<($r(J kinput $@$G(J $@2DG=$K$9$k(J $@%Q%C%A$G$9!#(J
$@(Jxlocal $@!J(Jkinput $@%=!<%9$N%5%V%@%$%l%/%H%j!<!K$K(J cd $@$7$F!"$3$N(J $@%Q%C%A$r(J
$@;H$C$F2<$5$$!#(J $@$3$N(J $@%Q%C%A$O(J kinput.fix.[123] $@%Q%C%A$,(J $@4{$K(J
$@;H$o$l$F$$$k;v$r(J $@A0Ds$H$7$F$$$^$9!#(J
$@(J
$@!JK]Lu$O(J $@<cHx!w(Jnmsu.edu $@$,(J $@9T$J$$$^$7$?!#!K(J
$@(J
$@(J
Here is the patch to allow kinput to display EUC encoded Kanji fonts
like Jming16.bdf and Jsong24.bdf.  cd to the 'xlocal' subdirectory of
the kinput source, and apply this patch.  This patch assumes that the
kinput.fix.[123] patches have already been applied.

----------------------- Cut Here -------------------------
*** XWStr.h.ORIG	Thu Nov 29 18:09:58 1990
--- XWStr.h	Thu Nov 29 18:10:39 1990
***************
*** 43,48 ****
--- 43,49 ----
  #define TWOB		1	/* 2-byte character set */
  #define FONTQUERY	2	/* XQueryFont()'ed by this library */
  #define GCCREAT		4	/* XtGetGC()'ed by this library */
+ #define HIGHENCODING	8	/* EUC encoded font */
  
  #define	GSET(c)	((c) & 0x8000 ? ((c) & 0x80 ? 1 : 3) : ((c) & 0x80 ? 2 : 0))
  
*** xtwstr.c.ORIG	Thu Nov 29 18:32:12 1990
--- xtwstr.c	Thu Nov 29 18:33:24 1990
***************
*** 27,32 ****
--- 27,33 ----
  #include "XWStr.h"
  
  #define IS2B(f)	(((f)->max_byte1 > 0) || ((f)->max_char_or_byte2 > 255))
+ #define HighEncoding(f) ((f)->min_char_or_byte2 > 0x80)
  
  XWSGC
  XtWSGetGCSet(w, mask, values, fontG0, fontG1, fontG2, fontG3)
***************
*** 57,62 ****
--- 58,65 ----
  			gcset->fe[i].flag = GCCREAT;
  			if (IS2B(gcset->fe[i].font))
  				gcset->fe[i].flag |= TWOB;
+                         if (HighEncoding(gcset->fe[i].font))
+                           gcset->fe[i].flag |= HIGHENCODING;
  		} else {
  			gcset->fe[i].gc = NULL;
  		}
*** xwstr.c.ORIG	Thu Nov 29 18:18:55 1990
--- xwstr.c	Thu Nov 29 18:29:25 1990
***************
*** 79,84 ****
--- 79,85 ----
  #define G3MASK	0x8000
  
  #define IS2B(f)	(((f)->max_byte1 > 0) || ((f)->max_char_or_byte2 > 255))
+ #define HighEncoding(f) ((f)->min_char_or_byte2 > 0x80)
  #define MIN(a, b)	((a) > (b) ? (b) : (a))
  #define MAX(a, b)	((a) > (b) ? (a) : (b))
  
***************
*** 125,130 ****
--- 126,133 ----
  			gcset->fe[i].flag = FONTQUERY;
  			if (IS2B(font))
  				gcset->fe[i].flag = TWOB;
+                         if (HighEncoding(font))
+                           gcset->fe[i].flag |= HIGHENCODING;
  		}
  	}
  
***************
*** 428,433 ****
--- 431,437 ----
  	int			gmask, gset;
  	FontEnt			*fe;
  	int			is2b;
+ 	unsigned char		encoding_mask;
  
  	while (wstr < wstr1) {
  		gmask = *wstr & 0x8080;
***************
*** 449,454 ****
--- 453,462 ----
  
  		fe = &gcset->fe[gset];
  		is2b = fe->flag & TWOB;
+                 if (fe->flag & HIGHENCODING)
+                   encoding_mask = 0xff;
+                 else
+                   encoding_mask = 0x7f;
  		cp = buf;
  
  		if (fe->gc == NULL) {
***************
*** 463,470 ****
  				cp = buf;
  			}
  			if (is2b)
! 				*cp++ = (c >> 8) & 0x7f;
! 			*cp++ = c & 0x7f;
  			wstr++;
  		}
  		/* flush */
--- 471,478 ----
  				cp = buf;
  			}
  			if (is2b)
!                           *cp++ = (c >> 8) & encoding_mask;
! 			*cp++ = c & encoding_mask;
  			wstr++;
  		}
  		/* flush */
-----------------------------------------------------------------------------
mleisher@nmsu.edu                      "I laughed.
Mark Leisher                                I cried.
Computing Research Lab                          I fell down.
New Mexico State University                        It changed my life."
Las Cruces, NM                     - Rich [Cowboy Feng's Space Bar and Grille]