1 /*
2 * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
3 * This file is part of FreeWnn.
4 *
5 * Copyright Kyoto University Research Institute for Mathematical Sciences
6 * 1987, 1988, 1989, 1990, 1991, 1992
7 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
8 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
9 * Copyright FreeWnn Project 1999, 2000, 2002
10 *
11 * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp>
12 *
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License as published by
15 * the Free Software Foundation; either version 2 of the License, or
16 * (at your option) any later version.
17 *
18 * This program is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU General Public License for more details.
22 *
23 * You should have received a copy of the GNU General Public License
24 * along with this program; if not, write to the Free Software
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 */
27
28 static char rcs_id[] = "$Id: renbn_kai.c,v 1.4 2002/09/01 17:13:11 hiroo Exp $";
29
30 #ifdef HAVE_CONFIG_H
31 # include <config.h>
32 #endif
33
34 /* #include <stdio.h> */ /* for debug only */
35 #include "commonhd.h"
36 #include "de_header.h"
37 #include "fzk.h"
38 #include "kaiseki.h"
39
40 static struct DSD_DBN *dcdbn_set (struct DSD_DBN *, struct DSD_SBN **, struct BZD *);
41 static struct DSD_SBN *dcdsbn_set (struct DSD_SBN *, struct SYO_BNSETSU *);
42 static int cnt_syo (struct SYO_BNSETSU *);
43 static void cnt_bzd (struct BZD *, int *, int *);
44 static int chk_yomi_endvect (int, int, int, int);
45 static int set_kata_giji_sbn (int, int, int, int, struct SYO_BNSETSU **);
46 static int set_kata_giji_bzd (int, int, int, int, struct BZD **, int);
47
48 int
renbn_kai(int yomi_sno,int yomi_eno,int beginvect,w_char * fzkchar,int endvect,int endvect1,int endvect2,int kaidbno,int kaisbno,struct DSD_DBN ** dsd_dbn)49 renbn_kai (int yomi_sno, /* ����ʸ���� start index */
50 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
51 int beginvect, /* ��ü�٥���(-1:ʸ����Ƭ��-2:�ʤ�Ǥ�)�ʻ�No. */
52 #ifndef NO_FZK
53 w_char *fzkchar,
54 #endif /* NO_FZK */
55 int endvect, /* ��ü�٥��� */
56 int endvect1, /* ��ü�٥��� (ͽ��) */
57 int endvect2, /* bunsetsu ��ü�٥��� */
58 int kaidbno, /* ������ʸ��� */
59 int kaisbno, /* ���Ͼ�ʸ��� */
60 struct DSD_DBN **dsd_dbn) /* ������ʸ����ꥢ pointer */
61 {
62 int dbn_cnt;
63 int sbn_cnt;
64 struct DSD_SBN *dsd_sbn; /* ������ʸ����ꥢ pointer */
65
66 UINT dicidyno, /* ���ꤷ����ʸ��� index */
67 buncnt = 0; /* ���ꤷ����ʸ��� */
68 struct BZD *rbzdptr; /* ������оݤȤʤ�Ρ��� top pointer */
69 struct BZD *brbzdptr, /* work pointer */
70 *dicide_bp = 0, /* ���ꤷ����ʸ��� top pointer */
71 *dicide_np, /* ���ꤷ����ʸ��ؤ� pointer */
72 *wkbzdptr, /* work pointer */
73 *maxbzd; /* ������оݤȤʤäƤ�����ʸ��� */
74 /* �����ɾ���ͤ���ĥΡ��ɤؤ� pointer */
75 int rtmknode;
76 extern int _status;
77
78 dicidyno = yomi_sno - 1;
79 rbzdptr = 0;
80 rtmknode = 1;
81
82 _status = 0;
83
84 if (c_env->fzk_fid == -1)
85 {
86 wnn_errorno = WNN_FZK_FILE_NO_LOAD;
87 return (-1);
88 }
89 ft = (struct FT *) files[c_env->fzk_fid].area;
90 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0)
91 return (-1);
92 while (dicidyno + 1 < yomi_eno)
93 {
94 if (rbzdptr == 0)
95 {
96 if (dbn_kai (dicidyno + 1, yomi_eno, beginvect,
97 #ifndef NO_FZK
98 fzkchar,
99 #endif /* NO_FZK */
100 endvect, endvect1, kaisbno, &rbzdptr) < 0)
101 {
102 log_err ("CONVERSION ERROR.");
103 init_work_areas ();
104 return (-1); /* ERROR */
105 }
106 if (rbzdptr == 0)
107 {
108 if (set_kata_giji_bzd (dicidyno + 1, yomi_eno, endvect, endvect1, &rbzdptr, buncnt) < 0)
109 return (-1);
110 buncnt++;
111 rtmknode = 0;
112 if (dicide_bp == 0)
113 dicide_bp = rbzdptr;
114 else
115 dicide_np->lnk_son = rbzdptr;
116 break;
117 }
118 }
119 /* 1 ʸ������ǽ�ˤʤ�ޤǥΡ��ɤ��� */
120 if (kaidbno == 1)
121 {
122 /* ��ʸ���ɾ���ͤ�����(son_v)�ϡ�mknode �Ǥ�������� kaidbno �� 1
123 �Ĥޤ� 1ʸ����Ϥξ��ϡ��������̤�ʤ����餳���Ǥ�� */
124 for (brbzdptr = rbzdptr->lnk_br; brbzdptr != 0; brbzdptr = brbzdptr->lnk_br)
125 brbzdptr->son_v = brbzdptr->v_jc;
126 }
127 else
128 {
129 while ((int) (rbzdptr->kbcnt) < kaidbno && rtmknode > 0)
130 {
131 for (brbzdptr = rbzdptr; brbzdptr != 0; brbzdptr = brbzdptr->lnk_br)
132 {
133 rtmknode = mknode (brbzdptr, yomi_eno, beginvect,
134 #ifndef NO_FZK
135 fzkchar,
136 #endif /* NO_FZK */
137 endvect2, kaisbno);
138 brbzdptr->son_v /= brbzdptr->kbcnt;
139 if (rtmknode == 0)
140 {
141 brbzdptr->son_v += brbzdptr->v_jc;
142 }
143 else if (rtmknode == -1)
144 {
145 log_err ("CONVERSION ERROR.");
146 init_work_areas (); /* ���顼�Ǥ����Τ��� */
147 return (-1); /* ERROR */
148 }
149 }
150 }
151 }
152
153 /* �����ɾ������ĥΡ��ɤĤ��� */
154 for (brbzdptr = rbzdptr->lnk_br, maxbzd = rbzdptr; brbzdptr != 0; brbzdptr = wkbzdptr)
155 {
156 wkbzdptr = brbzdptr->lnk_br;
157 if (maxbzd->son_v <= brbzdptr->son_v)
158 {
159 clr_node (maxbzd); /* garbage collection */
160 maxbzd = brbzdptr;
161 }
162 else
163 clr_node (brbzdptr);
164 }
165
166 /* 1 ʸ����� */
167 buncnt++; /* ����ʸ�� count up */
168 dicidyno = maxbzd->j_c; /* ���ꤷ��ʸ��� top */
169 /* kettei sita node no link */
170 if (maxbzd->bend_m == yomi_sno)
171 {
172 dicide_bp = dicide_np = maxbzd;
173 }
174 else
175 {
176 dicide_np->lnk_son = maxbzd;
177 dicide_np = maxbzd;
178 }
179 rbzdptr = maxbzd->lnk_son;
180 }
181
182 cnt_bzd (dicide_bp, &dbn_cnt, &sbn_cnt);
183 if ((*dsd_dbn = get_dsd_dbn (dbn_cnt)) <= (struct DSD_DBN *) 0)
184 {
185 init_work_areas ();
186 return (-1);
187 }
188 if ((dsd_sbn = get_dsd_sbn (sbn_cnt)) <= (struct DSD_SBN *) 0)
189 {
190 init_work_areas ();
191 return (-1);
192 }
193
194 dcdbn_set (*dsd_dbn, &dsd_sbn, dicide_bp);
195 return (buncnt);
196 }
197
198 /************************************************************/
199 /* ñʸ�����(��ʸ��) routine */
200 /************************************************************/
201 int
tan_dai(int yomi_sno,int yomi_eno,int beginvect,w_char * fzkchar,int endvect,int endvect1,int kaisbno,struct DSD_DBN ** dsd_dbn)202 tan_dai (int yomi_sno, /* ����ʸ���� start index */
203 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
204 int beginvect, /* ��ü�٥���(-1:ʸ����Ƭ��-2:�ʤ�Ǥ�)�ʻ�No. */
205 #ifndef NO_FZK
206 w_char *fzkchar,
207 #endif /* NO_FZK */
208 int endvect, /* ��ü�٥��� */
209 int endvect1, /* ��ü�٥��� */
210 int kaisbno, /* ���Ͼ�ʸ��� */
211 struct DSD_DBN **dsd_dbn) /* ������ʸ����ꥢ pointer */
212 {
213 int dbn_cnt;
214 int sbn_cnt;
215 struct DSD_SBN *dsd_sbn; /* ������ʸ����ꥢ pointer */
216 struct BZD *rbzdptr; /* ������оݤȤʤ�Ρ��ɤ�
217 �ȥåץݥ��� */
218 struct BZD *brbzdptr, *wkbzdptr;
219 struct BZD *maxbzd; /* ������оݤȤʤäƤ���ʸ���
220 �����ɾ���ͤ���ĥΡ��ɤؤΥݥ��� */
221 extern int _status;
222
223 if (c_env->fzk_fid == -1)
224 {
225 wnn_errorno = WNN_FZK_FILE_NO_LOAD;
226 return (-1);
227 }
228 ft = (struct FT *) files[c_env->fzk_fid].area;
229
230 rbzdptr = 0;
231 _status = 0;
232 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0)
233 return (-1);
234 if (dbn_kai (yomi_sno, yomi_eno, beginvect,
235 #ifndef NO_FZK
236 fzkchar,
237 #endif /* NO_FZK */
238 endvect, endvect1, kaisbno, &rbzdptr) < 0)
239 {
240 init_work_areas ();
241 return (-1); /* ERROR */
242 }
243
244 /* �����ɾ���ͤ���ĥΡ��ɤĤ��� */
245 for (brbzdptr = rbzdptr, maxbzd = 0; brbzdptr != 0; brbzdptr = wkbzdptr)
246 {
247 wkbzdptr = brbzdptr->lnk_br;
248 if (brbzdptr->j_c == yomi_eno - 1)
249 { /* ʸ��Ĺ�� */
250 if (maxbzd == 0)
251 {
252 maxbzd = brbzdptr;
253 }
254 else if (maxbzd->v_jc < brbzdptr->v_jc)
255 {
256 freebzd (maxbzd);
257 maxbzd = brbzdptr;
258 }
259 else
260 {
261 freebzd (brbzdptr);
262 }
263 }
264 else
265 {
266 clr_node (brbzdptr);
267 }
268 }
269
270 if (maxbzd == 0)
271 {
272 if (set_kata_giji_bzd (yomi_sno, yomi_eno, endvect, endvect1, &maxbzd, 0) < 0)
273 return (-1);
274 }
275 cnt_bzd (maxbzd, &dbn_cnt, &sbn_cnt);
276 if ((*dsd_dbn = get_dsd_dbn (dbn_cnt)) <= (struct DSD_DBN *) 0)
277 {
278 init_work_areas ();
279 return (-1);
280 }
281 if ((dsd_sbn = get_dsd_sbn (sbn_cnt)) <= (struct DSD_SBN *) 0)
282 {
283 init_work_areas ();
284 return (-1);
285 }
286
287 dcdbn_set (*dsd_dbn, &dsd_sbn, maxbzd);
288 return (1);
289 }
290
291 /************************************************************/
292 /* ñʸ�����(��ʸ��) routine */
293 /************************************************************/
294 int
tan_syo(int yomi_sno,int yomi_eno,int beginvect,w_char * fzkchar,int endvect,int endvect1,struct DSD_SBN ** dsd_sbn)295 tan_syo (int yomi_sno, /* ����ʸ���� start index */
296 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
297 int beginvect, /* ��ü�٥���(-1:ʸ����Ƭ��-2:�ʤ�Ǥ�)�ʻ�No. */
298 #ifndef NO_FZK
299 w_char *fzkchar,
300 #endif /* NO_FZK */
301 int endvect, /* ��ü�٥��� */
302 int endvect1, /* ��ü�٥��� */
303 struct DSD_SBN **dsd_sbn) /* ���꾮ʸ����ꥢ pointer */
304 {
305 int sbn_cnt;
306 struct SYO_BNSETSU *rsbnptr; /* ������оݤȤʤ�Ρ��ɤΥȥåץݥ��� */
307 struct SYO_BNSETSU *brsbnptr, *wksbnptr;
308 struct SYO_BNSETSU *maxsbn; /* ������оݤȤʤäƤ���ʸ���
309 �����ɾ���ͤ���ĥΡ��ɤؤΥݥ��� */
310 int divid;
311 extern int _status;
312
313 if (c_env->fzk_fid == -1)
314 {
315 wnn_errorno = WNN_FZK_FILE_NO_LOAD;
316 return (-1);
317 }
318 ft = (struct FT *) files[c_env->fzk_fid].area;
319
320 rsbnptr = 0;
321 _status = 0;
322 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0)
323 return (-1);
324 if (sbn_kai (yomi_sno, yomi_eno, endvect, endvect1, &rsbnptr, 1, 0) < 0)
325 {
326 init_work_areas ();
327 return (-1); /* ERROR */
328 }
329
330 /* �����ɾ���ͤ���ĥΡ��ɤĤ��� */
331 for (brsbnptr = rsbnptr, maxsbn = 0; brsbnptr != 0; brsbnptr = wksbnptr)
332 {
333 wksbnptr = brsbnptr->lnk_br;
334 if (brsbnptr->j_c == yomi_eno - 1)
335 { /* ʸ��Ĺ�� */
336 if (maxsbn == 0)
337 {
338 maxsbn = brsbnptr;
339 divid = get_status (brsbnptr->kangovect, beginvect,
340 #ifndef NO_FZK
341 fzkchar,
342 #endif /* NO_FZK */
343 &(brsbnptr->status));
344 brsbnptr->v_jc = DIVID_HYOUKA (brsbnptr->v_jc, divid);
345 }
346 else
347 {
348 divid = get_status (brsbnptr->kangovect, beginvect,
349 #ifndef NO_FZK
350 fzkchar,
351 #endif /* NO_FZK */
352 &(brsbnptr->status));
353 brsbnptr->v_jc = DIVID_HYOUKA (brsbnptr->v_jc, divid);
354 if (beginvect != WNN_ALL_HINSI && ((brsbnptr->status == WNN_SENTOU && maxsbn->status != WNN_SENTOU) || (brsbnptr->status == WNN_CONNECT && maxsbn->status != WNN_CONNECT)))
355 {
356 freesbn (maxsbn);
357 maxsbn = brsbnptr;
358 }
359 else if (maxsbn->v_jc < brsbnptr->v_jc)
360 {
361 freesbn (maxsbn);
362 maxsbn = brsbnptr;
363 }
364 else
365 {
366 freesbn (brsbnptr);
367 }
368 }
369 }
370 else
371 {
372 freesbn (brsbnptr);
373 }
374 }
375
376 if (maxsbn == 0)
377 {
378 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &maxsbn) < 0)
379 return (-1);
380 }
381 if (maxsbn->jentptr == 0 && maxsbn->status == WNN_NOT_CONNECT)
382 maxsbn->status = WNN_GIJI;
383 sbn_cnt = cnt_syo (maxsbn);
384 if ((*dsd_sbn = get_dsd_sbn (sbn_cnt)) <= (struct DSD_SBN *) 0)
385 {
386 init_work_areas ();
387 return (-1);
388 }
389 dcdsbn_set (*dsd_sbn, maxsbn);
390 freesbn (maxsbn);
391 return (1);
392 }
393
394 /**********************************************/
395 /* ���ꤷ��ʸ��ξ���åȤ��� */
396 /**********************************************/
397 static struct DSD_DBN *
dcdbn_set(struct DSD_DBN * dsd_dbn,struct DSD_SBN ** dsd_sbn,struct BZD * bzd)398 dcdbn_set (struct DSD_DBN *dsd_dbn,
399 struct DSD_SBN **dsd_sbn,
400 struct BZD *bzd)
401 {
402 struct DSD_DBN *nextp;
403 #ifdef CONVERT_from_TOP
404 struct DSD_DBN *dsd_dbn_head;
405 struct BZD *s_bzd; /* Buffer son's bzd */
406 dsd_dbn_head = dsd_dbn;
407 while (bzd != 0)
408 {
409 nextp = dsd_dbn++;
410 nextp->bun_m = bzd->bend_m;
411 nextp->bun_jc = bzd->j_c;
412 nextp->sbncnt = bzd->sbn_cnt;
413 nextp->v_jc = bzd->v_jc;
414
415 if (bzd->sbn->status == 0)
416 bzd->sbn->status = WNN_SENTOU;
417
418 nextp->sbn = *dsd_sbn;
419 *dsd_sbn = dcdsbn_set (*dsd_sbn, bzd->sbn);
420
421 s_bzd = bzd->lnk_son;
422 freebzd (bzd);
423 bzd = s_bzd;
424 }
425 return (dsd_dbn_head);
426 #else /* CONVERT_from_TOP */
427 if (bzd == 0)
428 return (dsd_dbn);
429 nextp = dcdbn_set (dsd_dbn, dsd_sbn, bzd->lnk_son);
430 nextp->bun_m = bzd->bend_m;
431 nextp->bun_jc = bzd->j_c;
432 nextp->sbncnt = bzd->sbn_cnt;
433 nextp->v_jc = bzd->v_jc;
434
435 if (bzd->sbn->status == 0)
436 bzd->sbn->status = WNN_SENTOU;
437
438 nextp->sbn = *dsd_sbn;
439 *dsd_sbn = dcdsbn_set (*dsd_sbn, bzd->sbn);
440 freebzd (bzd);
441 return (++nextp);
442 #endif /* CONVERT_from_TOP */
443 }
444
445 static struct DSD_SBN *
dcdsbn_set(struct DSD_SBN * dsd_sbn,struct SYO_BNSETSU * sbn)446 dcdsbn_set (struct DSD_SBN *dsd_sbn,
447 struct SYO_BNSETSU *sbn)
448 {
449 if (sbn == 0)
450 return (dsd_sbn);
451 #ifdef CONVERT_from_TOP
452 dsd_sbn = dcdsbn_set (dsd_sbn, sbn->parent);
453 #endif /* CONVERT_from_TOP */
454 dsd_sbn->bun_m = sbn->bend_m;
455 dsd_sbn->bun_jc = sbn->j_c;
456 dsd_sbn->i_jc = sbn->i_jc;
457 dsd_sbn->jentptr = sbn->jentptr;
458 dsd_sbn->t_jc = sbn->t_jc;
459 dsd_sbn->hinsi = sbn->hinsi_fk;
460 dsd_sbn->kangovect = sbn->kangovect;
461 dsd_sbn->v_jc = sbn->v_jc;
462 dsd_sbn->status = sbn->status;
463 dsd_sbn->status_bkwd = sbn->status_bkwd;
464 dsd_sbn++;
465 #ifndef CONVERT_from_TOP
466 dsd_sbn = dcdsbn_set (dsd_sbn, sbn->parent);
467 #endif /* CONVERT_from_TOP */
468 return (dsd_sbn);
469 }
470
471 /* 1 ��ʸ����ξ�ʸ��ο� */
472 static int
cnt_syo(struct SYO_BNSETSU * sbn)473 cnt_syo (struct SYO_BNSETSU *sbn)
474 {
475 int cnt;
476 cnt = 0;
477 while (sbn)
478 {
479 cnt++;
480 sbn = sbn->parent;
481 }
482 return (cnt);
483 }
484
485 /* 1 ��ʸ��ο� */
486 static void
cnt_bzd(struct BZD * bzd,int * dbn_cnt,int * sbn_cnt)487 cnt_bzd (struct BZD *bzd,
488 int *dbn_cnt,
489 int *sbn_cnt)
490 {
491 *dbn_cnt = 0;
492 *sbn_cnt = 0;
493 while (bzd)
494 {
495 *sbn_cnt += cnt_syo (bzd->sbn);
496 (*dbn_cnt)++;
497 bzd = bzd->lnk_son;
498 }
499 }
500
501 static int
chk_yomi_endvect(int yomi_sno,int yomi_eno,int endvect,int endvect1)502 chk_yomi_endvect (
503 int yomi_sno, /* ����ʸ���� start index */
504 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
505 int endvect, /* ��ü�٥��� */
506 int endvect1) /* ��ü�٥��� */
507 {
508 if (yomi_sno == yomi_eno || (fzk_ckvt (endvect) == NO && fzk_ckvt (endvect1) == NO))
509 {
510 wnn_errorno = WNN_NO_KOUHO;
511 log_err ("chk_yomi_endvect: cannot make tan-bunsetu kouho.");
512 return (-1);
513 }
514 return (0);
515 }
516
517 static int
set_kata_giji_sbn(int yomi_sno,int yomi_eno,int endvect,int endvect1,struct SYO_BNSETSU ** sbn)518 set_kata_giji_sbn (
519 int yomi_sno, /* ����ʸ���� start index */
520 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
521 int endvect, /* ��ü�٥��� */
522 int endvect1, /* ��ü�٥��� */
523 struct SYO_BNSETSU **sbn)
524 {
525 struct ICHBNP *ichbnpbp; /* ICHBNP ������ */
526 int fzkcnt;
527 int tempi;
528 int connect_flg = NO;
529
530 if (chk_yomi_endvect (yomi_sno, yomi_eno, endvect, endvect1) < 0)
531 return (-1);
532
533 fzkcnt = fzk_kai (&bun[yomi_sno], &bun[yomi_eno], endvect, endvect1, &ichbnpbp);
534 if (fzkcnt <= 0)
535 {
536 log_err ("tan_syo(): cannot make tan-bunsetu kouho.");
537 init_work_areas ();
538 return (-1); /* ERROR */
539 }
540 for (tempi = fzkcnt - 1; (int) tempi >= (int) 0; tempi--)
541 {
542 if (kan_ck_vector (giji_no, getfzkoh (ichbnpbp, tempi)->vector) == WNN_CONNECT_BK)
543 {
544 connect_flg = YES;
545 break;
546 }
547 }
548 if (tempi < 0)
549 {
550 for (tempi = fzkcnt - 1; (int) tempi >= (int) 0; tempi--)
551 {
552 if (kan_ck_vector (giji_no, getfzkoh1 (ichbnpbp, tempi)->vector) == WNN_CONNECT_BK)
553 {
554 break;
555 }
556 }
557 if (tempi < 0)
558 {
559 freeibsp (ichbnpbp);
560 wnn_errorno = WNN_NO_KOUHO;
561 log_err ("tan_syo(): cannot make tanbunsetu kouho.");
562 return (-1);
563 }
564 }
565
566 if ((*sbn = getsbnsp ()) == 0)
567 return (-1);
568
569 (*sbn)->j_c = yomi_eno - 1;
570 (*sbn)->i_jc = getfzkoh (ichbnpbp, tempi)->offset + yomi_sno;
571 (*sbn)->bend_m = yomi_sno;
572 (*sbn)->v_jc = 0;
573 (*sbn)->jentptr = 0;
574 (*sbn)->t_jc = WNN_KATAKANA;
575 (*sbn)->kangovect = ft->kango_hinsi_area[giji_no];
576 (*sbn)->hinsi_fk = giji_no;
577 (*sbn)->status = WNN_GIJI;
578 (*sbn)->status_bkwd = connect_flg;
579 freeibsp (ichbnpbp);
580 return (1);
581 }
582
583 static int
set_kata_giji_bzd(int yomi_sno,int yomi_eno,int endvect,int endvect1,struct BZD ** bzd,int buncnt)584 set_kata_giji_bzd (
585 int yomi_sno, /* ����ʸ���� start index */
586 int yomi_eno, /* ����ʸ���� end index (end char �μ�) */
587 int endvect, /* ��ü�٥��� */
588 int endvect1, /* ��ü�٥��� */
589 struct BZD **bzd,
590 int buncnt)
591 {
592 if ((*bzd = getbzdsp ()) == 0)
593 return (-1);
594 if (set_kata_giji_sbn (yomi_sno, yomi_eno, endvect, endvect1, &(*bzd)->sbn) < 0)
595 return (-1);
596 (*bzd)->j_c = yomi_eno - 1;
597 (*bzd)->bend_m = yomi_sno;
598 (*bzd)->v_jc = 0;
599 (*bzd)->sbn_cnt = 1;
600 (*bzd)->kbcnt = buncnt + 1;
601 return (1);
602 }
603