/* * Copyright (c) 1991-1994 Sony Corporation * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM, * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of Sony Corporation * shall not be used in advertising or otherwise to promote the sale, use * or other dealings in this Software without prior written authorization * from Sony Corporation. * */ /* * $SonyRCSfile: cl2knj.c,v $ * $SonyRevision: 1.1 $ * $SonyDate: 1994/06/03 08:01:31 $ */ #include "sj_kcnv.h" #include "sj_kanakan.h" static CLREC *nextrecblk(), *prevrecblk(); static void initkbuf(u_char *); int cl2knj(u_char *yomi, int len, u_char *kouho) { u_char *ptr1; u_char *ptr2; int i; khcount = nkhcount = 0; initkbuf(kouho); if (len > MAXCLINPUTLEN * 2) len = MAXCLINPUTLEN * 2; ptr1 = yomi; ptr2 = hyomi; for (i = 0 ; i < len ; i++) { if (isknj1(*ptr1)) { if (++i >= len) break; } ptr1 += sj2cd_chr(ptr1, ptr2++); } *ptr2 = 0; strlcpy(orgyomi, yomi, (int)(ptr1 - yomi) + 1); if (!hyomi[0]) return 0; freework(); inputyomi = orgyomi; cnvstart = ystart = hyomi; cnvlen = sstrlen(hyomi); mkjiritu(0); mkbunsetu(); if (!maxclptr) wakachi(); jrt1st = maxjptr; clt1st = maxclptr; mkkouho(); getrank(); selectid = 1; cvtclknj(); return hzstrlen(inputyomi, (int)clt1st -> cllen); } int nextcl(u_char *kouho, int mode) { CLREC *clptr; initkbuf(kouho); if (!khcount) return 0; if (!mode && (selectid < khcount)) selectid++; else if((mode < 2) && (clptr = nextrecblk())) { selectid = 1; clt1st = clptr; mkkouho(); getrank(); } else { cvtclknj(); return 0; } cvtclknj(); return hzstrlen(inputyomi, (int)clt1st -> cllen); } static CLREC* nextrecblk() { CLREC *clptr; int keeplen; keeplen = clt1st -> cllen; clptr = clt1st -> clsort; while (clptr && (int)clptr -> cllen == keeplen) clptr = clptr -> clsort; return clptr; } int prevcl(u_char *kouho, int mode) { CLREC *clptr; initkbuf(kouho); if (!khcount) return 0; if (!mode && (selectid > 1)) selectid--; else if ((mode < 2) && (clptr = prevrecblk())) { clt1st = clptr; mkkouho(); getrank(); selectid = khcount; } else { cvtclknj(); return 0; } cvtclknj(); return hzstrlen(inputyomi, (int)clt1st -> cllen); } static CLREC* prevrecblk() { CLREC *clptr; CLREC *keepptr; int keeplen; int cllen; clptr = maxclptr; if ((cllen = clt1st -> cllen) == clptr -> cllen) return NULL; while ((int)clptr -> cllen > cllen) { keeplen = clptr -> cllen; keepptr = clptr; while ((int)clptr -> cllen == keeplen) clptr = clptr -> clsort; } return keepptr; } static void initkbuf(u_char *kouho) { kanjitmp = kouho; memset(kanjitmp, 0, sizeof(STDYOUT) + 1); } int selectnum() { return selectid; }