argv@island.uu.net (Dan Heller) (07/13/89)
Submitted-by: sun!argv Posting-number: Volume 4, Issue 43 Archive-name: kterm/patch1 Patch-To: Volume 4, Issue 10 Two bugs are fixed. 1. Originally, cutting Kanji text under SystemV caused kterm dump core. 2. Text operations on a Kanji character sometimes left a half part of it. New kterm clears the character before such an operation. -- Hiroto Kagotani kagotani@cs.titech.ac.jp ------------ *** kterm.3.1.0/button.c Tue May 30 14:53:31 1989 --- kterm.3.1.1/button.c Sat Jul 8 16:10:15 1989 *************** *** 1,6 **** /* * $XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $ ! * $Header: button.c,v 1.1 89/05/30 14:53:29 kagotani Rel $ */ --- 1,6 ---- /* * $XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $ ! * $Header: button.c,v 1.2 89/07/08 16:10:08 kagotani Rel $ */ *************** *** 37,43 **** */ #ifndef lint static char rcs_id[] = "$XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $"; ! static char kterm_id[] = "$Header: button.c,v 1.1 89/05/30 14:53:29 kagotani Rel $"; #endif /* lint */ #include <X11/Xos.h> #include <X11/Xlib.h> --- 37,43 ---- */ #ifndef lint static char rcs_id[] = "$XConsortium: button.c,v 1.32 89/01/05 12:47:45 swick Exp $"; ! static char kterm_id[] = "$Header: button.c,v 1.2 89/07/08 16:10:08 kagotani Rel $"; #endif /* lint */ #include <X11/Xos.h> #include <X11/Xlib.h> *************** *** 1294,1307 **** if ((*p++ & 0x8080) == 0) nc++; } ! p = term->screen.selection; ! s = q = (char *)LOCAL_ALLOC(nc); ! for (nw = term->screen.selection_length; nw > 0; nw--, p++) { ! if ((*p & 0x8080) == 0) ! *q++ = *p & 0x7f; } ! XStoreBytes( XtDisplay((Widget)term), s, nc, buffer); ! LOCAL_FREE(s); } #else XStoreBytes( XtDisplay((Widget)term), term->screen.selection, --- 1294,1311 ---- if ((*p++ & 0x8080) == 0) nc++; } ! if (nc > 0) { ! p = term->screen.selection; ! s = q = (char *)LOCAL_ALLOC(nc); ! for (nw = term->screen.selection_length; nw > 0; nw--, p++) { ! if ((*p & 0x8080) == 0) ! *q++ = *p & 0x7f; ! } ! XStoreBytes( XtDisplay((Widget)term), s, nc, buffer); ! LOCAL_FREE(s); } ! else ! XStoreBytes( XtDisplay((Widget)term), NULL, nc, buffer); } #else XStoreBytes( XtDisplay((Widget)term), term->screen.selection, *** kterm.3.1.0/charproc.c Tue May 30 14:53:35 1989 --- kterm.3.1.1/charproc.c Sat Jul 8 16:10:28 1989 *************** *** 1,6 **** /* * $XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $ ! * $Header: charproc.c,v 1.1 89/05/30 14:53:32 kagotani Rel $ */ --- 1,6 ---- /* * $XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $ ! * $Header: charproc.c,v 1.2 89/07/08 16:10:16 kagotani Rel $ */ *************** *** 165,171 **** #ifndef lint static char rcs_id[] = "$XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $"; ! static char kterm_id[] = "$Header: charproc.c,v 1.1 89/05/30 14:53:32 kagotani Rel $"; #endif /* lint */ static long arg; --- 165,171 ---- #ifndef lint static char rcs_id[] = "$XConsortium: charproc.c,v 1.64 89/01/04 13:37:50 jim Exp $"; ! static char kterm_id[] = "$Header: charproc.c,v 1.2 89/07/08 16:10:16 kagotani Rel $"; #endif /* lint */ static long arg; *************** *** 1679,1684 **** --- 1679,1688 ---- cx = CursorX(screen, screen->cur_col); cy = CursorY(screen, screen->cur_row)+screen->fnt_norm->ascent; #ifdef KANJI /* sano & michael */ + BreakKanji(screen); + screen->cur_col += len; + BreakKanji(screen); + screen->cur_col -= len; if (fgs & KCS) { /* * Draw Kanji string with currentGC. If no k_boldGC nor *** kterm.3.1.0/patchlevel.c Tue May 30 14:53:50 1989 --- kterm.3.1.1/patchlevel.c Sat Jul 8 16:10:30 1989 *************** *** 2,7 **** /* * Patchlevel for the difference between xterm and kterm. */ ! static char kterm_patchlevel[] = "kterm 3.1.0 based on xterm in release 3"; ! char menuname[] = "kterm X11/3.1.0"; #endif KANJI --- 2,7 ---- /* * Patchlevel for the difference between xterm and kterm. */ ! static char kterm_patchlevel[] = "kterm 3.1.1 based on xterm in release 3"; ! char menuname[] = "kterm X11/3.1.1"; #endif KANJI *** kterm.3.1.0/util.c Tue May 30 14:53:59 1989 --- kterm.3.1.1/util.c Sat Jul 8 16:10:36 1989 *************** *** 1,6 **** /* * $XConsortium: util.c,v 1.10 88/10/07 08:20:08 swick Exp $ ! * $Header: util.c,v 1.1 89/05/30 14:53:58 kagotani Rel $ */ #include <X11/copyright.h> --- 1,6 ---- /* * $XConsortium: util.c,v 1.10 88/10/07 08:20:08 swick Exp $ ! * $Header: util.c,v 1.2 89/07/08 16:10:32 kagotani Rel $ */ #include <X11/copyright.h> *************** *** 32,38 **** #ifndef lint static char rcs_id[] = "$XConsortium: util.c,v 1.10 88/10/07 08:20:08 swick Exp $"; ! static char kterm_id[] = "$Header: util.c,v 1.1 89/05/30 14:53:58 kagotani Rel $"; #endif /* lint */ #include <stdio.h> --- 32,38 ---- #ifndef lint static char rcs_id[] = "$XConsortium: util.c,v 1.10 88/10/07 08:20:08 swick Exp $"; ! static char kterm_id[] = "$Header: util.c,v 1.2 89/07/08 16:10:32 kagotani Rel $"; #endif /* lint */ #include <stdio.h> *************** *** 587,592 **** --- 587,596 ---- if(!AddToRefresh(screen)) { if(screen->scroll_amt) FlushScroll(screen); + + #ifdef KANJI /* kagotani */ + BreakKanji(screen); + #endif KANJI if (screen->incopy) CopyWait (screen); *************** *** 645,650 **** --- 649,661 ---- FlushScroll(screen); width = n * FontWidth(screen); + + #ifdef KANJI /* kagotani */ + BreakKanji(screen); + screen->cur_col += n; + BreakKanji(screen); + screen->cur_col -= n; + #endif KANJI if (screen->incopy) CopyWait (screen); *************** *** 741,746 **** --- 752,760 ---- if(!AddToRefresh(screen)) { if(screen->scroll_amt) FlushScroll(screen); + #ifdef KANJI /* kagotani */ + BreakKanji(screen); + #endif KANJI XFillRectangle(screen->display, TextWindow(screen), #ifdef STATUSLINE /* michael */ screen->instatus ? screen->normalGC : *************** *** 776,781 **** --- 790,798 ---- if(!AddToRefresh(screen)) { if(screen->scroll_amt) FlushScroll(screen); + #ifdef KANJI /* kagotani */ + BreakKanji(screen); + #endif KANJI XFillRectangle (screen->display, TextWindow(screen), #ifdef STATUSLINE /* michael */ screen->instatus ? screen->normalGC : *************** *** 1050,1052 **** --- 1067,1094 ---- return; } + #ifdef KANJI /* kagotani */ + /* + * If the cursor points KCS2 character, replace this Kanji into two blanks. + */ + BreakKanji(screen) + register TScreen *screen; + { + register char *col; + register char *att; + if (screen->cur_col >= 1 && screen->cur_col <= screen->max_col + && *(att = screen->buf[2*screen->cur_row+1]+screen->cur_col) & KCS2) { + col = screen->buf[2*screen->cur_row] + screen->cur_col; + XFillRectangle(screen->display, TextWindow(screen), + #ifdef STATUSLINE + screen->instatus ? screen->normalGC : + #endif STATUSLINE + screen->reverseGC, + CursorX(screen, screen->cur_col - 1), + CursorY(screen, screen->cur_row), + 2 * FontWidth(screen), FontHeight(screen)); + bzero(col - 1, 2); + bzero(att - 1, 2); + } + } + #endif KANJI