v04i043: kterm, Patch1

Dan Heller argv at island.uu.net
Thu Jul 13 09:23:20 AEST 1989


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 at 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



More information about the Comp.sources.x mailing list