comparison 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
comparison
equal deleted inserted replaced
-1:000000000000 0:92745d501b9a
1 /*
2 * Copyright 1999 Justsystem Corporation, Japan.
3 *
4 * Permission to use, copy, modify, and distribute this software and its
5 * documentation for any purpose and without fee is hereby granted,
6 * provided that the above copyright notice appear in all copies and that
7 * both that copyright notice and this permission notice appear in
8 * supporting documentation, and that the name of Justsystem Corporation
9 * not be used in advertising or publicity pertaining to distribution
10 * of the software without specific, written prior permission. Justsystem
11 * Corporation makes no representations about the suitability of this
12 * software for any purpose. It is provided "as is" without express
13 * or implied warranty.
14 *
15 * Author: Atsushi Irisawa
16 */
17
18 #ifndef lint
19 static char rcsid[] = "$Id: segment.c,v 1.3 1999/08/24 09:05:27 ishisone Exp $" ;
20 #endif /* !lint */
21
22 #include <ICtypes.h>
23 #include <Xatoklib.h>
24 /* Page */
25 /*
26 * [$B4X?tL>(B]
27 * XatokGetModeStr( )
28 * [$BI=Bj(B]
29 * $B%b!<%IJ8;zNs$N<hF@(B
30 * [$B8F=P7A<0(B]
31 * WCHAR *XatokGetModeStr( _XatokRecPtr abuf, int *length )
32 * [$B0z?t(B]
33 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
34 * _XatokRecPtr : abuf : i/o : kinput2$BMQJQ49%P%C%U%!(B
35 * int : *length : o : $BJ8;zNs$ND9$5(B
36 *
37 * [$BJV$jCM(B]
38 * $B%b!<%IJ8;zNs3JG<NN0h$N%"%I%l%9(B
39 * [$B;HMQ4X?t(B]
40 * $B$J$7(B
41 * [$B5!G=(B]
42 * $B%b!<%II=<(MQ$NJ8;zNs$*$h$S$=$ND9$5$r<hF@$9$k!#(B
43 */
44 WCHAR *XatokGetModeStr(abuf, length)
45 _XatokRecPtr abuf;
46 int *length;
47 {
48 int i, n ;
49
50 *length = ( int )abuf->mode.length ;
51 n = *length ;
52
53 #ifdef ATOK_DEBUG
54 printf( "GET \245\342\241\274\245\311 : "/*=GET $B%b!<%I(B : =*/ ) ;
55 for ( i = 0 ; i < n ; i++ ) {
56 printf( "0x%x ", abuf->mode.name[i] ) ;
57 }
58 printf( "\n" ) ;
59 #endif /* ATOK_DEBUG */
60
61 return abuf->mode.name ;
62 }
63
64 /* Page */
65 /*
66 * [$B4X?tL>(B]
67 * XatokGetSegmentPosition( )
68 * [$BI=Bj(B]
69 * $B%+%l%s%H%;%0%a%s%H$N<hF@(B
70 * [$B8F=P7A<0(B]
71 * int wordStartFunc( _XatokRecPtr acomm )
72 *
73 * [$B0z?t(B]
74 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
75 * _XatokRecPtr : acomm : i/o : kinput2$BMQJQ49%P%C%U%!(B
76 *
77 * [$BJV$jCM(B]
78 * 0 :
79 * 1 :
80 *
81 * [$B;HMQ4X?t(B]
82 * $B$J$7(B
83 * [$B5!G=(B]
84 * $B8=:_$N%+%l%s%H%;%0%a%s%H$r<hF@$9$k!#(B
85 * $B8=:_4IM}$7$F$$$k(B $B%+%l%s%H%]%7%7%g%s$,(B
86 * $B%;%0%a%s%H?t$h$j>.$5$1$l$P$=$N%;%0%a%s%H$,!"(B
87 * $B8F$P$l$?;~$N%;%0%a%s%H$H$J$k!#(B
88 * $B%;%0%a%s%H$,8:>/$7$F(B($BJ8@a$r1d$P$7$?>l9g$J$I(B)
89 * $B8=:_$N%]%8%7%g%s$,%;%0%a%s%H?t$h$jBg$-$1$l$P!"(B
90 * $B:G8e$N%;%0%a%s%H$,(B $B%+%l%s%H%]%8%7%g%s$H$J$k!#(B
91 */
92 int XatokGetSegmentPosition(abuf, nsegp, ncharp)
93 _XatokRecPtr abuf;
94 int *nsegp;
95 int *ncharp;
96 {
97 int ret = 0 ;
98
99 if ( abuf->cur_seg < abuf->nbr_of_seg ) {
100 *nsegp = abuf->cur_seg ;
101 *ncharp = abuf->segments[abuf->cur_seg].offset ;
102 }
103 else if ( abuf->cur_seg > 0 ) {
104 *nsegp = abuf->nbr_of_seg - 1 ;
105 *ncharp = abuf->segments[abuf->cur_seg].offset ;
106 ret = 1 ;
107 }
108 else {
109 *nsegp = 0 ;
110 *ncharp = 0 ;
111 ret = 1 ;
112 }
113
114 return ret ;
115 }
116
117 /* Page */
118 /*
119 * [$B4X?tL>(B]
120 * XatokGetSegmentNumber( )
121 * [$BI=Bj(B]
122 * $B%;%0%a%s%H?t$N<hF@(B
123 * [$B8F=P7A<0(B]
124 * int XatokGetSegmentNumber( _XatokRecPtr abuf )
125 *
126 * [$B0z?t(B]
127 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
128 * _XatokRecPtr : acomm : i/o : kinput2$BMQJQ49%P%C%U%!(B
129 *
130 * [$BJV$jCM(B]
131 * N : $B%;%0%a%s%H?t(B
132 *
133 * [$B;HMQ4X?t(B]
134 * $B$J$7(B
135 * [$B5!G=(B]
136 * $B8=:_$N%;%0%a%s%H?t$r<hF@$9$k!#(B
137 */
138 int XatokGetSegmentNumber(abuf)
139 _XatokRecPtr abuf;
140 {
141 int nbr ;
142
143 nbr = abuf->nbr_of_seg ;
144
145 return nbr ;
146 }
147
148 /* Page */
149 /*
150 * [$B4X?tL>(B]
151 * XatokGetSegmentRec( )
152 * [$BI=Bj(B]
153 * $B;XDj%;%0%a%s%H$N%G!<%?<hF@(B
154 * [$B8F=P7A<0(B]
155 * wchar *XatokGetSegmentRec( _XatokRecPtr *abuf,
156 * int n, int *len, int *attr )
157 *
158 * [$B0z?t(B]
159 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
160 * _XatokRecPtr : acomm : i : kinput2$BMQJQ49%P%C%U%!(B
161 * int : n : i : $B;XDj%;%0%a%s%HHV9f(B
162 * int : *len : o : $B;XDj%;%0%a%s%H$NJ8;zNs$ND9$5(B
163 * int : *attr : o : $B;XDj%;%0%a%s%H$NB0@-(B
164 *
165 * [$BJV$jCM(B]
166 * $B;XDj%;%0%a%s%H$NJ8;zNs(B
167 *
168 * [$B;HMQ4X?t(B]
169 * $B$J$7(B
170 * [$B5!G=(B]
171 * $B;XDj$5$l$?%;%0%a%s%H$NJ8;zNs$*$h$S$=$NJ8;zNs$ND9$5!"(B
172 * $BI=<(B0@-$r<hF@$9$k!#(B
173 */
174 wchar *XatokGetSegmentRec(abuf, n, len, attr)
175 _XatokRecPtr abuf;
176 int n;
177 int *len;
178 int *attr;
179 {
180 wchar *data ;
181
182 if ( abuf->cur_seg == n ) {
183 *attr = ICAttrConverted | ICAttrCurrentSegment ;
184 }
185 else if ( n < abuf->cur_seg ) {
186 *attr = ICAttrConverted ;
187 }
188 else {
189 *attr = ICAttrConverted ;
190 }
191
192 *len = abuf->segments[n].length ;
193 data = abuf->segments[n].string ;
194
195 return data ;
196 }
197 /* Page */
198 /*
199 * [$B4X?tL>(B]
200 * XatokGetConvertedLength( )
201 * [$BI=Bj(B]
202 * $BJQ497k2LJ8;zNs$ND9$5<hF@(B
203 * [$B8F=P7A<0(B]
204 * int XatokGetConvertedLength( _XatokRecPtr abuf )
205 *
206 * [$B0z?t(B]
207 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
208 * _XatokRecPtr : abuf : i : kinput2$BMQJQ49%P%C%U%!(B
209 *
210 * [$BJV$jCM(B]
211 * N : $BJ8;zNs$ND9$5(B
212 *
213 * [$B;HMQ4X?t(B]
214 * $B$J$7(B
215 * [$B5!G=(B]
216 * $BJQ497k2LJ8;zNs$ND9$5$r<hF@$9$k!#(B
217 * $BJQ497k2LJ8;zNs$ND9$5$H$O!"%;%0%a%s%H$KJ]B8$5$l$F$$$k(B
218 * $BJ8;zNs$ND9$5$N9g7W$G$"$k!#(B
219 */
220 int XatokGetConvertedLength(abuf)
221 _XatokRecPtr abuf;
222 {
223
224 int n = 0 ;
225 int i ;
226
227 for( i = 0 ; i < abuf->nbr_of_seg ; i++ ) {
228 n += abuf->segments[i].length ;
229 }
230 return n ;
231 }
232
233 /* Page */
234 /*
235 * [$B4X?tL>(B]
236 * XatokGetConvertedString( )
237 * [$BI=Bj(B]
238 * $BJQ497k2LJ8;zNs$N<hF@(B
239 * [$B8F=P7A<0(B]
240 * int XatokGetConvertedString( _XatokRecPtr abuf, wchar *wstr )
241 *
242 * [$B0z?t(B]
243 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
244 * _XatokRecPtr : abuf : i : kinput2$BMQJQ49%P%C%U%!(B
245 * wchar : *wstr : o : $B<hF@$7$?J8;zNs3JG<NN0h(B
246 *
247 * [$BJV$jCM(B]
248 * N : $BJ8;zNs$ND9$5(B
249 *
250 * [$B;HMQ4X?t(B]
251 * $B$J$7(B
252 * [$B5!G=(B]
253 * $BJQ497k2LJ8;zNs$ND9$5$r<hF@$9$k!#(B
254 */
255 int XatokGetConvertedString(abuf, wstr)
256 _XatokRecPtr abuf;
257 wchar *wstr;
258 {
259 register wchar *w1, *w2 ;
260 int i, n = 0 ;
261
262 w1 = wstr ;
263
264 for( i = 0 ; i < abuf->nbr_of_seg ; i++ ) {
265 w2 = abuf->segments[i].string ;
266 while( *w2 ) {
267 *w1 = *w2 ;
268 w1++ ;
269 w2++ ;
270 n++ ;
271 }
272 }
273 *w1 = 0 ;
274 return n ;
275 }
276 /* Page */
277 /*
278 * [$B4X?tL>(B]
279 * XatokShiftRight( )
280 * [$BI=Bj(B]
281 * $B%;%0%a%s%H%G!<%?$N1&(BROTATE
282 * [$B8F=P7A<0(B]
283 * int XatokShiftRight( _XatokRecPtr abuf )
284 *
285 * [$B0z?t(B]
286 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
287 * _XatokRecPtr : abuf : i/o : kinput2$BMQJQ49%P%C%U%!(B
288 *
289 * [$BJV$jCM(B]
290 * 1 : $B>o$K#1(B
291 *
292 * [$B;HMQ4X?t(B]
293 * $B$J$7(B
294 * [$B5!G=(B]
295 * $B%;%0%a%s%H%G!<%?$r1&$K(B ROTATE$B$9$k!#(B
296 * $B1&$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,>.$5$$%G!<%?$r(B
297 * $B#1$DBg$-$$=j$K0\$9$H$$$&;v$G$"$k!#(B
298 * $B#1HVBg$-$$=j$O!"@hF,$K0\$k!#(B
299 */
300 int XatokShiftRight(abuf)
301 _XatokRecPtr abuf;
302 {
303 _XatokSegment tmpseg ;
304 _XatokSegment *sp ;
305 int offset ;
306 int nseg ;
307 int i ;
308
309 nseg = abuf->nbr_of_seg ;
310 offset = abuf->offset ;
311 sp = abuf->segments ;
312
313 tmpseg.string = sp[nseg].string ;
314 tmpseg.length = sp[nseg].length ;
315 tmpseg.size = sp[nseg].size ;
316 tmpseg.offset = sp[nseg].offset ;
317
318 sp = &abuf->segments[nseg] ;
319 for( i = nseg ; i > offset ; i-- ) {
320 sp->string = ( sp - 1 )->string ;
321 sp->length = ( sp - 1 )->length ;
322 sp->size = ( sp - 1 )->size ;
323 sp->offset = ( sp - 1 )->offset ;
324 sp-- ;
325 }
326 sp = &abuf->segments[offset] ;
327 sp->string = tmpseg.string ;
328 sp->length = tmpseg.length ;
329 sp->size = tmpseg.size ;
330 sp->offset = tmpseg.offset ;
331
332 abuf->offset++ ;
333 abuf->nbr_of_seg++ ;
334 abuf->cur_seg++ ;
335
336 return 1 ;
337 }
338
339
340 /* Page */
341 /*
342 * [$B4X?tL>(B]
343 * XatokShiftLeft( )
344 * [$BI=Bj(B]
345 * $B%;%0%a%s%H%G!<%?$N:8(BROTATE
346 * [$B8F=P7A<0(B]
347 * int XatokShiftLeft( _XatokRecPtr abuf )
348 *
349 * [$B0z?t(B]
350 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
351 * _XatokRecPtr : abuf : i/o : kinput2$BMQJQ49%P%C%U%!(B
352 *
353 * [$BJV$jCM(B]
354 * 1 : $B>o$K#1(B
355 *
356 * [$B;HMQ4X?t(B]
357 * $B$J$7(B
358 * [$B5!G=(B]
359 * $B%;%0%a%s%H%G!<%?$r:8$K(B ROTATE$B$9$k!#(B
360 * $B:8$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,Bg$-$$%G!<%?$r(B
361 * $B#1$D>.$5$$=j$K0\$9$H$$$&;v$G$"$k!#(B
362 * $B#1HV>.$5$$=j$O!"(BOFFSET$B$K0\$k!#(B
363 */
364 int XatokShiftLeft(abuf)
365 _XatokRecPtr abuf;
366 {
367 _XatokSegment tmpseg ;
368 _XatokSegment *sp ;
369 int offset ;
370 int i ;
371
372 offset = abuf->offset ;
373
374 sp = abuf->segments ;
375 tmpseg.string = sp[0].string ;
376 tmpseg.length = sp[0].length ;
377 tmpseg.size = sp[0].size ;
378 tmpseg.offset = sp[0].offset ;
379
380 for( i = 0 ; i < offset - 1 ; i++ ) {
381 sp->string = ( sp + 1 )->string ;
382 sp->length = ( sp + 1 )->length ;
383 sp->size = ( sp + 1 )->size ;
384 sp->offset = ( sp + 1 )->offset ;
385 sp++ ;
386 }
387 abuf->segments[offset-1].string = tmpseg.string ;
388 abuf->segments[offset-1].length = tmpseg.length ;
389 abuf->segments[offset-1].size = tmpseg.size ;
390 abuf->segments[offset-1].offset = tmpseg.offset ;
391
392 return 1 ;
393 }
394 /* Page */
395 /*
396 * [$B4X?tL>(B]
397 * XatokShiftLeftAll( )
398 * [$BI=Bj(B]
399 * $BA4%;%0%a%s%H%G!<%?$N:8(BROTATE
400 * [$B8F=P7A<0(B]
401 * int XatokShiftLeftAll( _XatokRecPtr abuf )
402 *
403 * [$B0z?t(B]
404 * $B7?(B : $BL>(B $B>N(B : I O : $B@b(B $BL@(B
405 * _XatokRecPtr : abuf : i/o : kinput2$BMQJQ49%P%C%U%!(B
406 *
407 * [$BJV$jCM(B]
408 * 1 : $B>o$K#1(B
409 *
410 * [$B;HMQ4X?t(B]
411 * $B$J$7(B
412 * [$B5!G=(B]
413 * $B%;%0%a%s%H%G!<%?$r:8$K(B ROTATE$B$9$k!#(B
414 * $B:8$N(BROTATE$B$H$O(B $B%;%0%a%s%H$NG[Ns$N%$%s%G%C%/%9$,Bg$-$$%G!<%?$r(B
415 * $B#1$D>.$5$$=j$K0\$9$H$$$&;v$G$"$k!#(B
416 */
417 int XatokShiftLeftAll(abuf)
418 _XatokRecPtr abuf;
419 {
420 _XatokSegment tmpseg ;
421 _XatokSegment *sp ;
422 int offset ;
423 int nseg ;
424 int i ;
425
426 nseg = abuf->nbr_of_seg ;
427 sp = abuf->segments ;
428 tmpseg.string = sp->string ;
429 tmpseg.length = sp->length ;
430 tmpseg.size = sp->size ;
431 tmpseg.offset = sp->offset ;
432 for( i = 0 ; i < nseg - 1 ; i++ ) {
433 sp->string = ( sp + 1 )->string ;
434 sp->length = ( sp + 1 )->length ;
435 sp->size = ( sp + 1 )->size ;
436 sp->offset = ( sp + 1 )->offset ;
437 sp++ ;
438 }
439 sp = &abuf->segments[nseg-1] ;
440 sp->string = tmpseg.string ;
441 sp->length = tmpseg.length ;
442 sp->size = tmpseg.size ;
443 sp->offset = tmpseg.offset ;
444
445 abuf->offset-- ;
446 abuf->nbr_of_seg-- ;
447 abuf->cur_seg-- ;
448 }
449
450 /* End of segment.c */