diff lib/Xatoklib/segment.c @ 0:92745d501b9a

initial import from kinput2-v3.1
author Yoshiki Yazawa <yaz@honeyplanet.jp>
date Mon, 08 Mar 2010 04:44:30 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/Xatoklib/segment.c	Mon Mar 08 04:44:30 2010 +0900
@@ -0,0 +1,450 @@
+/*
+ * Copyright 1999 Justsystem Corporation, Japan.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation for any purpose and without fee is hereby granted,
+ * provided that the above copyright notice appear in all copies and that
+ * both that copyright notice and this permission notice appear in
+ * supporting documentation, and that the name of Justsystem Corporation
+ * not be used in advertising or publicity pertaining to distribution
+ * of the software without specific, written prior permission.  Justsystem
+ * Corporation makes no representations about the suitability of this
+ * software for any purpose.  It is provided "as is" without express
+ * or implied warranty.
+ *
+ * Author: Atsushi Irisawa
+ */
+
+#ifndef lint
+static  char    rcsid[] = "$Id: segment.c,v 1.3 1999/08/24 09:05:27 ishisone Exp $" ;
+#endif  /* !lint */
+
+#include	<ICtypes.h>
+#include	<Xatoklib.h>
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetModeStr( )
+ * [$BI=Bj(B]
+ *              $B%b!<%IJ8;zNs$N<hF@(B
+ * [$B8F=P7A<0(B]
+ *		WCHAR	*XatokGetModeStr( _XatokRecPtr abuf, int *length )
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *		int          : *length :  o : $BJ8;zNs$ND9$5(B
+ *
+ * [$BJV$jCM(B]
+ *		$B%b!<%IJ8;zNs3JG<NN0h$N%"%I%l%9(B
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B%b!<%II=<(MQ$NJ8;zNs$*$h$S$=$ND9$5$r<hF@$9$k!#(B
+ */
+WCHAR *XatokGetModeStr(abuf, length)
+_XatokRecPtr	abuf;
+int		*length;
+{
+	int i, n ;
+	
+	*length = ( int )abuf->mode.length ;
+	n = *length ;
+
+#ifdef	ATOK_DEBUG
+	printf( "GET \245\342\241\274\245\311 : "/*=GET $B%b!<%I(B : =*/ ) ;
+	for ( i = 0 ; i < n ; i++ ) {
+		printf( "0x%x ", abuf->mode.name[i] ) ;
+	}
+	printf( "\n" ) ;
+#endif	/* ATOK_DEBUG */
+
+	return abuf->mode.name ;
+}
+
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetSegmentPosition( )
+ * [$BI=Bj(B]
+ *              $B%+%l%s%H%;%0%a%s%H$N<hF@(B
+ * [$B8F=P7A<0(B]
+ *	int	wordStartFunc( _XatokRecPtr  acomm )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : acomm   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		0 : 
+ *		1 :
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B8=:_$N%+%l%s%H%;%0%a%s%H$r<hF@$9$k!#(B
+ * 		$B8=:_4IM}$7$F$$$k(B $B%+%l%s%H%]%7%7%g%s$,(B
+ * 		$B%;%0%a%s%H?t$h$j>.$5$1$l$P$=$N%;%0%a%s%H$,!"(B
+ * 		$B8F$P$l$?;~$N%;%0%a%s%H$H$J$k!#(B
+ * 		$B%;%0%a%s%H$,8:>/$7$F(B($BJ8@a$r1d$P$7$?>l9g$J$I(B)
+ * 		$B8=:_$N%]%8%7%g%s$,%;%0%a%s%H?t$h$jBg$-$1$l$P!"(B
+ * 		$B:G8e$N%;%0%a%s%H$,(B $B%+%l%s%H%]%8%7%g%s$H$J$k!#(B
+ */
+int XatokGetSegmentPosition(abuf, nsegp, ncharp)
+_XatokRecPtr	abuf;
+int		*nsegp;
+int		*ncharp;
+{
+	int	ret = 0 ;
+
+	if ( abuf->cur_seg < abuf->nbr_of_seg ) {
+		*nsegp = abuf->cur_seg ;
+		*ncharp = abuf->segments[abuf->cur_seg].offset ;
+	}
+	else if ( abuf->cur_seg > 0 ) {
+		*nsegp = abuf->nbr_of_seg - 1 ;
+		*ncharp = abuf->segments[abuf->cur_seg].offset ;
+		ret = 1 ;
+	}
+	else {
+		*nsegp = 0 ;
+		*ncharp = 0 ;
+		ret = 1 ;
+	}
+
+	return ret ;
+}
+
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetSegmentNumber( )
+ * [$BI=Bj(B]
+ *              $B%;%0%a%s%H?t$N<hF@(B
+ * [$B8F=P7A<0(B]
+ *		int	XatokGetSegmentNumber( _XatokRecPtr abuf )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : acomm   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		N : $B%;%0%a%s%H?t(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B8=:_$N%;%0%a%s%H?t$r<hF@$9$k!#(B
+ */
+int XatokGetSegmentNumber(abuf)
+_XatokRecPtr	abuf;
+{
+	int	nbr ;
+
+	nbr = abuf->nbr_of_seg ;
+
+	return nbr ;
+}
+
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetSegmentRec( )
+ * [$BI=Bj(B]
+ *              $B;XDj%;%0%a%s%H$N%G!<%?<hF@(B
+ * [$B8F=P7A<0(B]
+ *		wchar *XatokGetSegmentRec( _XatokRecPtr *abuf,
+ *			int n, int *len, int *attr )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : acomm   : i   : kinput2$BMQJQ49%P%C%U%!(B
+ *		int          : n       : i   : $B;XDj%;%0%a%s%HHV9f(B
+ *		int          : *len    :  o  : $B;XDj%;%0%a%s%H$NJ8;zNs$ND9$5(B
+ *              int          : *attr   :  o  : $B;XDj%;%0%a%s%H$NB0@-(B
+ *
+ * [$BJV$jCM(B]
+ *		$B;XDj%;%0%a%s%H$NJ8;zNs(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B;XDj$5$l$?%;%0%a%s%H$NJ8;zNs$*$h$S$=$NJ8;zNs$ND9$5!"(B
+ *		$BI=<(B0@-$r<hF@$9$k!#(B
+ */
+wchar *XatokGetSegmentRec(abuf, n, len, attr)
+_XatokRecPtr	abuf;
+int		n;
+int		*len;
+int		*attr;
+{
+	wchar	*data ;
+
+	if ( abuf->cur_seg == n ) {
+		*attr = ICAttrConverted | ICAttrCurrentSegment ;
+	}
+	else if ( n < abuf->cur_seg ) {
+		*attr = ICAttrConverted ;
+	}
+	else {
+		*attr = ICAttrConverted ;
+	}
+
+	*len = abuf->segments[n].length ;
+	data = abuf->segments[n].string ;
+
+	return data ;
+}
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetConvertedLength( )
+ * [$BI=Bj(B]
+ *              $BJQ497k2LJ8;zNs$ND9$5<hF@(B
+ * [$B8F=P7A<0(B]
+ *		int XatokGetConvertedLength( _XatokRecPtr abuf )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i   : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		N : $BJ8;zNs$ND9$5(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$BJQ497k2LJ8;zNs$ND9$5$r<hF@$9$k!#(B
+ *		$BJQ497k2LJ8;zNs$ND9$5$H$O!"%;%0%a%s%H$KJ]B8$5$l$F$$$k(B
+ *		$BJ8;zNs$ND9$5$N9g7W$G$"$k!#(B
+ */
+int XatokGetConvertedLength(abuf)
+_XatokRecPtr	abuf;
+{
+
+	int	n = 0 ;
+	int	i ;
+
+	for( i = 0 ; i < abuf->nbr_of_seg ; i++ ) {
+		n += abuf->segments[i].length ;
+	}
+	return n ;
+}
+
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokGetConvertedString( )
+ * [$BI=Bj(B]
+ *              $BJQ497k2LJ8;zNs$N<hF@(B
+ * [$B8F=P7A<0(B]
+ *		int XatokGetConvertedString( _XatokRecPtr abuf, wchar *wstr )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i   : kinput2$BMQJQ49%P%C%U%!(B
+ *		wchar        : *wstr  :  o  : $B<hF@$7$?J8;zNs3JG<NN0h(B
+ *
+ * [$BJV$jCM(B]
+ *		N : $BJ8;zNs$ND9$5(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$BJQ497k2LJ8;zNs$ND9$5$r<hF@$9$k!#(B
+ */
+int XatokGetConvertedString(abuf, wstr)
+_XatokRecPtr	abuf;
+wchar		*wstr;
+{
+	register	wchar *w1, *w2 ;
+	int		i, n = 0 ;
+
+	w1 = wstr ;
+
+	for( i = 0 ; i < abuf->nbr_of_seg ; i++ ) {
+		w2 = abuf->segments[i].string ;
+		while( *w2 ) {
+			*w1 = *w2 ;
+			w1++ ;
+			w2++ ;
+			n++ ;
+		}
+	}
+	*w1 = 0 ;
+	return n ;
+}
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokShiftRight( )
+ * [$BI=Bj(B]
+ *              $B%;%0%a%s%H%G!<%?$N1&(BROTATE
+ * [$B8F=P7A<0(B]
+ *		int	XatokShiftRight( _XatokRecPtr  abuf )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		1 : $B>o$K#1(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B%;%0%a%s%H%G!<%?$r1&$K(B ROTATE$B$9$k!#(B
+ *		$B1&$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,>.$5$$%G!<%?$r(B
+ *		$B#1$DBg$-$$=j$K0\$9$H$$$&;v$G$"$k!#(B
+ *		$B#1HVBg$-$$=j$O!"@hF,$K0\$k!#(B
+ */
+int XatokShiftRight(abuf)
+_XatokRecPtr	abuf;
+{
+	_XatokSegment	tmpseg ;
+	_XatokSegment	*sp ;
+	int		offset ;
+	int		nseg ;
+	int		i ;
+
+	nseg = abuf->nbr_of_seg ;
+	offset = abuf->offset ;
+	sp = abuf->segments ;
+
+	tmpseg.string = sp[nseg].string ;
+	tmpseg.length = sp[nseg].length ;
+	tmpseg.size = sp[nseg].size ;
+	tmpseg.offset = sp[nseg].offset ;
+
+	sp = &abuf->segments[nseg] ;
+	for( i = nseg ; i > offset ; i-- ) {
+		sp->string = ( sp - 1 )->string ;
+		sp->length = ( sp - 1 )->length ;
+		sp->size = ( sp - 1 )->size ;
+		sp->offset = ( sp - 1 )->offset ;
+		sp-- ;
+	}
+	sp = &abuf->segments[offset] ;
+	sp->string = tmpseg.string ;
+	sp->length = tmpseg.length ;
+	sp->size = tmpseg.size ;
+	sp->offset = tmpseg.offset ;
+
+	abuf->offset++ ;
+	abuf->nbr_of_seg++ ;
+	abuf->cur_seg++ ;
+
+	return 1 ;
+}
+
+
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokShiftLeft( )
+ * [$BI=Bj(B]
+ *              $B%;%0%a%s%H%G!<%?$N:8(BROTATE
+ * [$B8F=P7A<0(B]
+ *		int	XatokShiftLeft( _XatokRecPtr  abuf )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		1 : $B>o$K#1(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B%;%0%a%s%H%G!<%?$r:8$K(B ROTATE$B$9$k!#(B
+ *		$B:8$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,Bg$-$$%G!<%?$r(B
+ *		$B#1$D>.$5$$=j$K0\$9$H$$$&;v$G$"$k!#(B
+ *		$B#1HV>.$5$$=j$O!"(BOFFSET$B$K0\$k!#(B
+ */
+int XatokShiftLeft(abuf)
+_XatokRecPtr	abuf;
+{
+	_XatokSegment	tmpseg ;
+	_XatokSegment	*sp ;
+	int		offset ;
+	int		i ;
+
+	offset = abuf->offset ;
+
+	sp = abuf->segments ;
+	tmpseg.string = sp[0].string ;
+	tmpseg.length = sp[0].length ;
+	tmpseg.size = sp[0].size ;
+	tmpseg.offset = sp[0].offset ;
+
+	for( i = 0 ; i < offset - 1 ; i++ ) {
+		sp->string = ( sp + 1 )->string ;
+		sp->length = ( sp + 1 )->length ;
+		sp->size = ( sp + 1 )->size ;
+		sp->offset = ( sp + 1 )->offset ;
+		sp++ ;
+	}
+	abuf->segments[offset-1].string = tmpseg.string ;
+	abuf->segments[offset-1].length = tmpseg.length ;
+	abuf->segments[offset-1].size = tmpseg.size ;
+	abuf->segments[offset-1].offset = tmpseg.offset ;
+
+	return 1 ;
+}
+/* Page */
+/*
+ * [$B4X?tL>(B]
+ *		XatokShiftLeftAll( )
+ * [$BI=Bj(B]
+ *              $BA4%;%0%a%s%H%G!<%?$N:8(BROTATE
+ * [$B8F=P7A<0(B]
+ *		int	XatokShiftLeftAll( _XatokRecPtr  abuf )
+ *
+ * [$B0z?t(B]
+ *              $B7?(B           : $BL>(B  $B>N(B  : I O : $B@b(B      $BL@(B
+ *		_XatokRecPtr : abuf   : i/o : kinput2$BMQJQ49%P%C%U%!(B
+ *
+ * [$BJV$jCM(B]
+ *		1 : $B>o$K#1(B
+ *
+ * [$B;HMQ4X?t(B]
+ *		$B$J$7(B
+ * [$B5!G=(B]
+ *		$B%;%0%a%s%H%G!<%?$r:8$K(B ROTATE$B$9$k!#(B
+ *		$B:8$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,Bg$-$$%G!<%?$r(B
+ *		$B#1$D>.$5$$=j$K0\$9$H$$$&;v$G$"$k!#(B
+ */
+int XatokShiftLeftAll(abuf)
+_XatokRecPtr	abuf;
+{
+	_XatokSegment	tmpseg ;
+	_XatokSegment	*sp ;
+	int		offset ;
+	int		nseg ;
+	int		i ;
+
+	nseg = abuf->nbr_of_seg ;
+	sp = abuf->segments ;
+	tmpseg.string = sp->string ;
+	tmpseg.length = sp->length ;
+	tmpseg.size = sp->size ;
+	tmpseg.offset = sp->offset ;
+	for( i = 0 ; i < nseg - 1 ; i++ ) {
+		sp->string = ( sp + 1 )->string ;
+		sp->length = ( sp + 1 )->length ;
+		sp->size = ( sp + 1 )->size ;
+		sp->offset = ( sp + 1 )->offset ;
+		sp++ ;
+	}
+	sp = &abuf->segments[nseg-1] ;
+	sp->string = tmpseg.string ;
+	sp->length = tmpseg.length ;
+	sp->size = tmpseg.size ;
+	sp->offset = tmpseg.offset ;
+
+	abuf->offset-- ;
+	abuf->nbr_of_seg-- ;
+	abuf->cur_seg-- ;
+}
+
+/* End of segment.c */