Index: X11//lcEuc.c
===================================================================
RCS file: /cvsroot/xoncygwin/xc/lib/X11/lcEuc.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 lcEuc.c
--- X11//lcEuc.c	3 Jun 2003 11:03:57 -0000	1.1.1.2
+++ X11//lcEuc.c	13 Oct 2003 01:19:27 -0000
@@ -834,6 +834,8 @@
     wchar_t wch;
     Ulong wc_encoding;
     CTData ctdp = ctdata;
+    CTData GL_ctdp = ctdp;/* GL ctdp save */
+    CTData GR_ctdp = ctdp;/* GR ctdp save */
     Bool save_outbuf = True;
     /* If outbufptr is NULL, doen't save output, but just counts
        a length to hold the output */
@@ -842,6 +844,18 @@
     for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length)
     {
 	ct_type = CT_STD;
+	/* change GL/GR charset */
+	if(ctdp->side == XlcGR && isleftside(*inbufptr)){
+	    /* select GL side */
+	    ctdp = GL_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}else if(ctdp->side == XlcGL && isrightside(*inbufptr)){
+	    /* select GR side */
+	    ctdp = GR_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}
 	if (*inbufptr == '\033' || *inbufptr == (char)'\233') {
 	    for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) {
 
@@ -858,6 +872,11 @@
 			}
 		    }
 		    ct_type = ctdp->ct_type;
+		    if(ctdp->side == XlcGL){
+			GL_ctdp = ctdp; /* save GL ctdp */
+		    }else{
+			GR_ctdp = ctdp; /* save GR ctdp */
+		    }
 		    break;
 		}
 	    }
@@ -1093,6 +1112,8 @@
     unsigned int ct_seglen = 0;
     Uchar ct_type = 0;
     CTData ctdp = &ctdata[0];	/* default */
+    CTData GL_ctdp = ctdp;	/* GL ctdp save */
+    CTData GR_ctdp = ctdp;	/* GR ctdp save */
     Bool save_outbuf = True;
     /* If outbufptr is NULL, doen't save output, but just counts
        a length to hold the output */
@@ -1101,6 +1122,18 @@
     for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length)
     {
 	ct_type = CT_STD;
+	/* change GL/GR charset */
+	if(ctdp->side == XlcGR && isleftside(*inbufptr)){
+	    /* select GL side */
+	    ctdp = GL_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}else if(ctdp->side == XlcGL && isrightside(*inbufptr)){
+	    /* select GR side */
+	    ctdp = GR_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}
 	if (*inbufptr == '\033' || *inbufptr == (char)'\233') {
 
 	    for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) {
@@ -1118,6 +1151,11 @@
 			}
 		    }
 		    ct_type = ctdp->ct_type;
+		    if(ctdp->side == XlcGL){
+			GL_ctdp = ctdp; /* save GL ctdp */
+		    }else{
+			GR_ctdp = ctdp; /* save GR ctdp */
+		    }
 		    break;
 		}
 	    }
Index: X11//lcSjis.c
===================================================================
RCS file: /cvsroot/xoncygwin/xc/lib/X11/lcSjis.c,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 lcSjis.c
--- X11//lcSjis.c	3 Jun 2003 11:03:58 -0000	1.1.1.2
+++ X11//lcSjis.c	13 Oct 2003 01:19:33 -0000
@@ -991,6 +991,13 @@
 	    ct_state.GR_charset = charset;
 	else if (charset->side == XlcGL)
 	    ct_state.GL_charset = charset;
+
+	if (charset == ct_state.GR_charset) {
+	    clen = charset->length;
+	    do {
+		(*(Uchar *)(ctptr-clen)) = BIT8ON(*(Uchar *)(ctptr-clen));
+	    } while (--clen); 
+	}
     }
 
     *to = (XPointer)ctptr;
@@ -1147,6 +1154,8 @@
     unsigned int ct_seglen = 0;
     Uchar ct_type;
     CTData ctdp = ctdata;	/* default */
+    CTData GL_ctdp = ctdp;/* GL ctdp save */
+    CTData GR_ctdp = ctdp;/* GR ctdp save */
 
     if (*from_left > *to_left)
 	*from_left = *to_left;
@@ -1154,6 +1163,18 @@
     for (length = ctdata[Ascii].length; *from_left > 0 ; (*from_left) -= length)
     {
 	ct_type = CT_STD;
+	/* change GL/GR charset */
+	if(ctdp->side == XlcGR && isleftside(*inbufptr)){
+	    /* select GL side */
+	    ctdp = GL_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}else if(ctdp->side == XlcGL && isrightside(*inbufptr)){
+	    /* select GR side */
+	    ctdp = GR_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}
 	if (*inbufptr == '\033' || *inbufptr == (char)'\233') {
 
 	    for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) {
@@ -1171,6 +1192,11 @@
 			}
 		    }
 		    ct_type = ctdp->ct_type;
+		    if(ctdp->side == XlcGL){
+			GL_ctdp = ctdp; /* save GL ctdp */
+		    }else{
+			GR_ctdp = ctdp; /* save GR ctdp */
+		    }
 		    break;
 		}
 	    }
@@ -1265,6 +1291,8 @@
     wchar_t wch;
     Ulong wc_encoding;
     CTData ctdp = ctdata;
+    CTData GL_ctdp = ctdp;/* GL ctdp save */
+    CTData GR_ctdp = ctdp;/* GR ctdp save */
 
     if (*from_left > *to_left)
 	*from_left = *to_left;
@@ -1272,6 +1300,18 @@
     for (length = ctdata[Ascii].length; *from_left > 0; (*from_left) -= length )
     {
 	ct_type = CT_STD;
+	/* change GL/GR charset */
+	if(ctdp->side == XlcGR && isleftside(*inbufptr)){
+	    /* select GL side */
+	    ctdp = GL_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}else if(ctdp->side == XlcGL && isrightside(*inbufptr)){
+	    /* select GR side */
+	    ctdp = GR_ctdp;
+	    length = ctdp->length;
+	    ct_type = ctdp->ct_type;
+	}
 	if (*inbufptr == '\033' || *inbufptr == (char)'\233') {
 	    for (ctdp = ctdata; ctdp <= ctd_endp ; ctdp++) {
 
@@ -1288,6 +1328,11 @@
 			}
 		    }
 		    ct_type = ctdp->ct_type;
+		    if(ctdp->side == XlcGL){
+			GL_ctdp = ctdp; /* save GL ctdp */
+		    }else{
+			GR_ctdp = ctdp; /* save GR ctdp */
+		    }
 		    break;
 		}
 	    }
