From c06397cfe74589ad688be9291edd1c8bbd0583ef Mon Sep 17 00:00:00 2001 From: Masanori Ogino Date: Wed, 29 Nov 2023 16:37:05 +0900 Subject: [PATCH] Remove sj3rkcv as it was client-side lib Signed-off-by: Masanori Ogino --- CMakeLists.txt | 9 - sj3rkcv/rk_conv.c | 1263 -------------------------------------------- sj3rkcv/sj3_rkcv.c | 838 ----------------------------- sj3rkcv/wc16_str.c | 449 ---------------- 4 files changed, 2559 deletions(-) delete mode 100644 sj3rkcv/rk_conv.c delete mode 100644 sj3rkcv/sj3_rkcv.c delete mode 100644 sj3rkcv/wc16_str.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 2897c73..8b4485b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -120,15 +120,6 @@ target_link_libraries(sj3serv sj3lib kanakan ) -add_library(sj3rkcv - sj3rkcv/rk_conv.c - sj3rkcv/sj3_rkcv.c - sj3rkcv/wc16_str.c -) -target_include_directories(sj3rkcv - PRIVATE include -) - add_executable(sj3dic sj3dic/codecnv.c sj3dic/dictdisp.c diff --git a/sj3rkcv/rk_conv.c b/sj3rkcv/rk_conv.c deleted file mode 100644 index 4006329..0000000 --- a/sj3rkcv/rk_conv.c +++ /dev/null @@ -1,1263 +0,0 @@ -/*- - * SPDX-License-Identifier: MIT-open-group - * - * Copyright (c) 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. - */ - - - - - -#include "sj_sysvdef.h" -#include "wchar16.h" -#include -#include -#ifdef SVR4 -#include -#else -#include -#endif -#ifdef __sony_news -#include -#endif -#include "kctype.h" -#include "rk.h" - -#if defined(__sony_news) && defined(SVR4) -#define wscmp sj3_wscmp16 -#define wsncmp sj3_wsncmp16 -#define wsncpy sj3_wsncpy16 -#define wscpy sj3_wscpy16 -#define wslen sj3_wslen16 -#define mbstowcs sj3_mbstowcs16 -#define wcstombs sj3_wcstombs16 -#endif - -extern int current_locale; - -#define ENDMARK(c) (c == SPACE || c == TAB) -#define SKLINE(c) (c == EOL || c == NSTR) -#define TOUPPER(c) (islower(c) ? toupper(c) : (c)) - -#define WTOUPPER(c) ((wchar16_t) (islower(((c) & 0xff)) ? toupper(((c) & 0xff)) : ((c) & 0xff))) - -#define RKSIZE 256 -#define RKINCZ 32 -typedef struct rkbufrec { - RkTablW16 *rkbuf; - RkTablW16 *rkend; - struct rkbufrec *rkbufp; -} RkbufRec; - -#define STRSIZE 1024 -#define STRINCZ 256 -typedef struct strbufrec { - wchar16_t *strbuf; - wchar16_t *strend; - struct strbufrec *strbufp; -} StrbufRec; - -#define YMISIZE 512 -#define YMIINCZ 64 -typedef struct ymibufrec { - wchar16_t *ymibuf; - wchar16_t *ymiend; - struct ymibufrec *ymibufp; -} YmibufRec; - - -#define SJ3_NO -1 -#define SJ3_SJIS 0 -#define SJ3_EUC 1 - -RkTabl *sj3_rcode[MAXCODE]; -RkTablW16 *sj3_rcode_w16[MAXCODE]; -RkTablW16 *rktblp; -wchar16_t rline[MAXLLEN]; -wchar16_t lstr[MAXLLEN]; -static wchar16_t intmp[MAXLLEN]; -static wchar16_t outtmp[MAXLLEN]; -static u_char mtmp[MAXLLEN]; -static int rk_erase; -static int rk_errin = 0; -static int rk_cflag; -static int rk_klen; -static int file_code = SJ3_NO; - - -static RkbufRec rkpbuf, *rkpp = NULL; -static RkTablW16 *rkhp; -static StrbufRec strpbuf, *strpp; -static wchar16_t *shp; -static YmibufRec ymipbuf, *ymipp; -static u_short *yhp; - - -sj3_rkcode(code) -int code; -{ - if (code) - file_code = SJ3_NO; -} - - - - -sj3_rkinit2(rkfile, erase) -char *rkfile; -int erase; -{ - rk_erase = erase; - return(sj3_rkinit_mb(rkfile)); -} - -rcode_sjis_init() -{ - int i, rkeylen = 0, ryomilen = 0, rstrlen = 0; - int klen, ylen, slen, tablnum = 0, tablsize; - u_char *mbstr, *mptr, mtmp[BUFSIZ], mtmp2[BUFSIZ]; - u_short *wcstr, *wcptr; - RkTabl *tabl, *tabl_next, *tabl_prev; - RkTablW16 *tabl_w16; - - tablsize = sizeof(RkTabl); - - - for (i = 0; i < MAXCODE; i++) { - if (sj3_rcode_w16[i]) { - tabl_w16 = sj3_rcode_w16[i]; - while (tabl_w16) { - tablnum++; - if (tabl_w16->r_key) - rkeylen += wslen(tabl_w16->r_key) + 1; - if (tabl_w16->r_str) - rstrlen += wslen(tabl_w16->r_str) + 1; - if (tabl_w16->k_yomi) - ryomilen += wslen(tabl_w16->k_yomi) + 1; - tabl_w16 = tabl_w16->next; - } - } - } - if (!tablnum) - return 1; - tabl = (RkTabl *) malloc(tablnum * tablsize); - if (!tabl) { - return 0; - } - memset(tabl, '\0', tablnum * tablsize); - mbstr = (u_char *) malloc(rkeylen + rstrlen); - if (!mbstr) { - free(tabl); - return 0; - } - memset(mbstr, '\0', rkeylen + rstrlen); - wcptr = wcstr = (u_short *) malloc(ryomilen * sizeof(u_short)); - if (!wcstr) { - free(tabl); - free(mbstr); - return 0; - } - memset(wcptr, '\0', ryomilen * sizeof(u_short)); - - rkeylen *= 2; - rstrlen *= 2; - for (i = 0; i < MAXCODE; i++) { - if (sj3_rcode_w16[i]) { - tabl_w16 = sj3_rcode_w16[i]; - tabl_next = sj3_rcode[i] = tabl; - while (tabl_w16) { - tabl += 1; - if (tabl_w16->r_key) { - if (current_locale == LC_CTYPE_EUC) { - mptr = mtmp; - } else { - mptr = mbstr; - } - if (wcstombs((char *)mptr, tabl_w16->r_key, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_EUC) { - if ((klen = euctosjis(mbstr, rkeylen, mtmp, sizeof(mtmp))) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - } else { - klen = strlen((char *)mbstr); - } - tabl_next->r_key = mbstr; - mbstr += klen + 1; - rkeylen -= klen + 1; - } else { - tabl_next->r_key = NULL; - } - if (tabl_w16->r_str) { - if (current_locale == LC_CTYPE_EUC) { - mptr = mtmp; - } else { - mptr = mbstr; - } - if (wcstombs((char *)mptr, tabl_w16->r_str, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_EUC) { - if ((slen = euctosjis(mbstr, rstrlen, mtmp, sizeof(mtmp))) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - } else { - slen = strlen((char *)mbstr); - } - tabl_next->r_str = mbstr; - mbstr += slen + 1; - rstrlen -= slen + 1; - } else { - tabl_next->r_str = NULL; - } - if (tabl_w16->k_yomi) { - mptr = mtmp; - if (wcstombs((char *)mptr, tabl_w16->k_yomi, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_EUC) { - if (euctosjis(mtmp2, sizeof(mtmp2), mtmp, sizeof(mtmp)) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - mptr = mtmp2; - } else { - mptr = mtmp; - } - tabl_next->k_yomi = wcptr; - ylen = 0; - while (*mptr) { - if (issjis1(*mptr) && issjis2(mptr[1])) { - *wcptr = (*mptr << 8) + mptr[1]; - mptr++; - } else { - *wcptr = *mptr; - } - wcptr++; - mptr++; - ylen++; - } - *wcptr++ = 0; - ryomilen -= ylen + 1; - } else { - tabl_next->k_yomi = NULL; - } - tabl_w16 = tabl_w16->next; - tabl_next->next = tabl; - tabl_prev = tabl_next; - tabl_next = tabl; - } - tabl_prev->next = NULL; - } - } - return 1; - -} - -rcode_euc_init() -{ - int i, rkeylen = 0, ryomilen = 0, rstrlen = 0; - int klen, ylen, slen, tablnum = 0, tablsize; - u_char *mbstr, *mptr, mtmp[BUFSIZ], mtmp2[BUFSIZ]; - u_short *wcstr, *wcptr; - RkTabl *tabl, *tabl_next, *tabl_prev; - RkTablW16 *tabl_w16; - - tablsize = sizeof(RkTabl); - - - for (i = 0; i < MAXCODE; i++) { - if (sj3_rcode_w16[i]) { - tabl_w16 = sj3_rcode_w16[i]; - while (tabl_w16) { - tablnum++; - if (tabl_w16->r_key) - rkeylen += wslen(tabl_w16->r_key) + 1; - if (tabl_w16->r_str) - rstrlen += wslen(tabl_w16->r_str) + 1; - if (tabl_w16->k_yomi) - ryomilen += wslen(tabl_w16->k_yomi) + 1; - tabl_w16 = tabl_w16->next; - } - } - } - if (!tablnum) - return 1; - tabl = (RkTabl *) malloc(tablnum * tablsize); - if (!tabl) { - return 0; - } - memset(tabl, '\0', tablnum * tablsize); - mbstr = (u_char *) malloc(rkeylen + rstrlen); - if (!mbstr) { - free(tabl); - return 0; - } - memset(mbstr, '\0', rkeylen + rstrlen); - wcptr = wcstr = (u_short *) malloc(ryomilen * sizeof(u_short)); - if (!wcstr) { - free(tabl); - free(mbstr); - return 0; - } - memset(wcptr, '\0', ryomilen * sizeof(u_short)); - - rkeylen *= 2; - rstrlen *= 2; - for (i = 0; i < MAXCODE; i++) { - if (sj3_rcode_w16[i]) { - tabl_w16 = sj3_rcode_w16[i]; - tabl_next = sj3_rcode[i] = tabl; - while (tabl_w16) { - tabl += 1; - if (tabl_w16->r_key) { - if (current_locale == LC_CTYPE_SHIFTJIS) { - mptr = mtmp; - } else { - mptr = mbstr; - } - if (wcstombs((char *)mptr, tabl_w16->r_key, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_SHIFTJIS) { - if ((klen = euctosjis(mbstr, rkeylen, mtmp, sizeof(mtmp))) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - } else { - klen = strlen((char *)mbstr); - } - tabl_next->r_key = mbstr; - mbstr += klen + 1; - rkeylen -= klen + 1; - } else { - tabl_next->r_key = NULL; - } - if (tabl_w16->r_str) { - if (current_locale == LC_CTYPE_SHIFTJIS) { - mptr = mtmp; - } else { - mptr = mbstr; - } - if (wcstombs((char *)mptr, tabl_w16->r_str, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_SHIFTJIS) { - if ((slen = sjistoeuc(mbstr, rstrlen, mtmp, sizeof(mtmp))) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - } else { - slen = strlen((char *)mbstr); - } - tabl_next->r_str = mbstr; - mbstr += slen + 1; - rstrlen -= slen + 1; - } else { - tabl_next->r_str = NULL; - } - if (tabl_w16->k_yomi) { - mptr = mtmp; - if (wcstombs((char *)mptr, tabl_w16->k_yomi, BUFSIZ) == -1) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - if (current_locale == LC_CTYPE_SHIFTJIS) { - if (sjistoeuc(mtmp2, sizeof(mtmp2), mtmp, sizeof(mtmp)) < 0) { - free(tabl); - free(mbstr); - free(wcstr); - return 0; - } - mptr = mtmp2; - } else { - mptr = mtmp; - } - tabl_next->k_yomi = wcptr; - ylen = 0; - while (*mptr) { - if (iseuc(*mptr) && iseuc(mptr[1])) { - *wcptr = (*mptr << 8) + mptr[1]; - mptr++; - } else { - *wcptr = *mptr; - } - wcptr++; - mptr++; - ylen++; - } - *wcptr++ = 0; - ryomilen -= ylen + 1; - } else { - tabl_next->k_yomi = NULL; - } - tabl_w16 = tabl_w16->next; - tabl_next->next = tabl; - tabl_prev = tabl_next; - tabl_next = tabl; - } - tabl_prev->next = NULL; - } - } - return 1; - -} - -sj3_rkinit(rkfile) -char *rkfile; -{ - return sj3_rkinit_sub(rkfile, rcode_sjis_init); -} - -sj3_rkinit_euc(rkfile) -char *rkfile; -{ - return sj3_rkinit_sub(rkfile, rcode_euc_init); -} - -sj3_rkinit_mb(rkfile) -char *rkfile; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_rkinit_sub(rkfile, rcode_euc_init); - else - return sj3_rkinit_sub(rkfile, rcode_sjis_init); -} - -sj3_rkinit_sub(rkfile, mbfunc) -char *rkfile; -int (*mbfunc)(); -{ - register char *p; - int len, klen, rlen, retv; - FILE *fp, *fopen(); - char line[MAXLEN + 1]; - wchar16_t rkey[MAXWLEN + 1], rstr[MAXWLEN + 1]; - u_short kstr[MAXWLEN + 1]; - char *strcpy(), *getkey(), *rkgetyomi(); - RkTablW16 *rktp, *mktable(); - - if (rkfile == NULL || *rkfile == NSTR) - fp = stdin; - else if ((fp = fopen(rkfile, "r")) == NULL) - return(1); - - cltable(); - line[MAXLEN - 1] = EOL; - retv = 0; - - - while ((p = fgets(line, MAXLEN + 1, fp)) != NULL) { - if (line[MAXLEN - 1] != EOL) { - line[MAXLEN - 1] = EOL; - continue; - } - if (SKLINE(*p) || *p == '#') - continue; - if ((p = getkey(p, rkey, &len)) == NULL) - continue; - if ((p = rkgetyomi(p, kstr, &klen)) == NULL) - continue; - p = getkey(p, rstr, &rlen); - if (rlen > 0 && chk_rstr(rstr, rkey, rlen, len)) - rlen = 0; - - if ((rktp = mktable(rkey, len)) == NULL) { - fprintf(stderr, "Can't allocate memory for table\n"); - retv = FAIL; - break; - } - if (rktp->k_yomi != NULL) - continue; - if (stradd(&(rktp->r_key), &rkey[1], len) == -1) { - fprintf(stderr, "Can't allocate memory for char\n"); - retv = FAIL; - break; - } - if (kstradd(&(rktp->k_yomi), kstr, klen + 1) == -1) { - fprintf(stderr, "Can't allocate memory for short\n"); - retv = FAIL; - break; - } - if (stradd(&(rktp->r_str), rstr, rlen + 1) == -1) { - fprintf(stderr, "Can't allocate memory for char\n"); - retv = FAIL; - break; - } - - } - fclose(fp); - if (!(*mbfunc)()) - retv = FAIL; - sj3_rkclear(); - return(retv); -} - - - -char * -getkey(istr, ostr, len) -char *istr; -wchar16_t *ostr; -int *len; -{ - register char c, *p; - register int i; - - while (ENDMARK(*istr)) - istr++; - - p = istr; - i = 0; - while (!ENDMARK(*p)) { - if (SKLINE(*p)) - break; - c = *p++; - - if ( c == BSL) { - if (SKLINE(*p)) - break; - c = *p++; - switch (c) { - case 'n' : - *ostr++ = (wchar16_t) EOL; - break; - case 't' : - *ostr++ = (wchar16_t) TAB; - break; - default : - *ostr++ = (wchar16_t) TOUPPER(c); - } - } else if ( c == '^') { - if (*p >= '@' && *p <= '_') { - *ostr++ = (wchar16_t) (*p - '@'); - p++; - } else if (*p == '?') { - *ostr++ = (wchar16_t) 0x7f; - p++; - } else - *ostr++ = (wchar16_t) '^'; - } else - *ostr++ = (wchar16_t) TOUPPER(c); - if (++i > MAXWLEN) { - i = 0; - break; - } - } - *ostr = (wchar16_t) NSTR; - *len = i; - if (i > 0) - return(p); - return(NULL); -} - - - -char * -rkgetyomi(istr, ostr, len) -char *istr; -wchar16_t *ostr; -int *len; -{ - register u_char c; - register u_char *p; - register int i; - u_short cc; - - while (ENDMARK(*istr)) - istr++; - - p = (u_char *)istr; - i = 0; - while (!ENDMARK(*p)) { - if (SKLINE(*p)) - break; - cc = c = *p++; - if (file_code == SJ3_SJIS) { - if (issjis1(c) && issjis2(*p)) { - cc = (c << 8) + (*p & MASK); - p++; - cc = sjis2euc(cc); - } - } else if (file_code == SJ3_EUC) { - if (iseuc(c) && iseuc(*p)) { - cc = (c << 8) + (*p & MASK); - p++; - } else if (iseuckana(c) && iskana2(*p)) { - cc = *p++; - } - else if (IsEUCHojo(c) && iseuc(*p) && iseuc(p[1])) { - cc = WcSetX0212(*p, p[1]); - p += 2; - } - } else { - if (issjis1(c) && issjis2(*p)) { - file_code = SJ3_SJIS; - p--; - continue; - } - if ((iseuc(c) && iseuc(*p)) || (iseuckana(c) && - iskana2(*p)) || (IsEUCHojo(c) && iseuc(*p) && - iseuc(p[1]))) { - file_code = SJ3_EUC; - p--; - continue; - } - } - *ostr++ = (wchar16_t) cc; - if (++i > MAXWLEN) { - i = 0; - break; - } - } - *ostr = (wchar16_t) 0; - *len = i; - if (i > 0) - return((char *)p); - return(NULL); -} - - - -cltable() -{ - register int i; - - if (rkpp != NULL) { - for (i = 0; i < MAXCODE; i++) { - sj3_rcode_w16[i] = NULL; - sj3_rcode[i] = NULL; - } - rkpp = &rkpbuf; - rkhp = rkpp->rkbuf; - strpp = &strpbuf; - shp = strpp->strbuf; - ymipp = &ymipbuf; - yhp = ymipp->ymibuf; - } -} - - - -chk_rstr(rstr, rkey, rlen, klen) -wchar16_t *rstr, *rkey; -int rlen, klen; -{ - register int i; - register wchar16_t *p; - - if (rlen >= klen) - return(1); - p = rkey; - while (rlen <= klen) { - if (wsncmp(rstr, p, rlen) == 0) - return(0); - klen--; - p++; - } - return(1); -} - - - -RkTablW16 * -rkalloc() -{ - register RkTablW16 *rkp; - register RkbufRec *rkbrp; - - if (rkpp == NULL) { - rkp = (RkTablW16 *)malloc(RKSIZE * sizeof(RkTablW16)); - if (rkp == NULL) - return(NULL); - rkhp = rkp; - rkpp = &rkpbuf; - rkpp->rkbuf = rkp; - rkpp->rkend = rkp + RKSIZE; - } else if (rkhp >= rkpp->rkend) { - rkp = (RkTablW16 *)malloc(RKINCZ * sizeof(RkTablW16)); - rkbrp = (RkbufRec *)malloc(sizeof(RkbufRec)); - if (rkp == NULL || rkbrp == NULL) - return(NULL); - rkhp = rkp; - rkpp->rkbufp = rkbrp; - rkpp = rkbrp; - rkpp->rkbuf = rkp; - rkpp->rkend = rkp + RKINCZ; - } - rkp = rkhp++; - - rkp->r_key = NULL; - rkp->k_yomi = NULL; - rkp->r_str = NULL; - rkp->next = NULL; - return(rkp); -} - - - -stradd(cp, str, len) -wchar16_t **cp; -wchar16_t *str; -int len; -{ - register wchar16_t *strp; - register StrbufRec *sbrp; - - if (len <= 1) - return(0); - if (strpp == NULL) { - strp = (wchar16_t *)malloc(STRSIZE * sizeof(wchar16_t)); - if (strp == NULL) - return(-1); - shp = strp; - strpp = &strpbuf; - strpp->strbuf = strp; - strpp->strend = strp + STRSIZE; - } else if (shp + len >= strpp->strend) { - strp = (wchar16_t *)malloc(STRINCZ * sizeof(wchar16_t)); - sbrp = (StrbufRec *)malloc(sizeof(StrbufRec)); - if (strp == NULL || sbrp == NULL) - return(-1); - shp = strp; - strpp->strbufp = sbrp; - strpp = sbrp; - strpp->strbuf = strp; - strpp->strend = strp + STRINCZ; - } - *cp = shp; - wscpy(shp, str); - shp += len; - return(0); -} - - - -kstradd(cp, kstr, len) -wchar16_t **cp, *kstr; -int len; -{ - register int i; - register wchar16_t *usp; - register YmibufRec *ybrp; - - if (len <= 1) - return(0); - if (ymipp == NULL) { - usp = (wchar16_t *)malloc(YMISIZE * sizeof(wchar16_t)); - if (usp == NULL) - return(-1); - yhp = usp; - ymipp = &ymipbuf; - ymipp->ymibuf = usp; - ymipp->ymiend = usp + YMISIZE; - } else if (yhp + len >= ymipp->ymiend) { - usp = (wchar16_t *)malloc(YMIINCZ * sizeof(wchar16_t)); - ybrp = (YmibufRec *)malloc(sizeof(YmibufRec)); - if (usp == NULL || ybrp == NULL) - return(-1); - yhp = usp; - ymipp->ymibufp = ybrp; - ymipp = ybrp; - ymipp->ymibuf = usp; - ymipp->ymiend = usp + YMIINCZ; - } - *cp = yhp; - for (i = 0; i < len; i++) - *yhp++ = *kstr++; - return(0); -} - - - -RkTablW16 * -mktable(key, len) -wchar16_t *key; -int len; -{ - register int i; - register RkTablW16 *nrktp, *orktp; - RkTablW16 *rktp; - u_int code; - - nrktp = NULL; - orktp = NULL; - code = *key++ & MASK; - rktp = sj3_rcode_w16[code]; - while (rktp != NULL) { - if (rktp->r_key == NULL) { - if (*key == NSTR) - return(rktp); - nrktp = rktp; - break; - } - if ((i = wscmp(key, rktp->r_key)) == 0) - return(rktp); - if (i > 0 && (wslen(rktp->r_key) < len)) { - nrktp = rktp; - break; - } - orktp = rktp; - rktp = orktp->next; - } - if ((rktp = rkalloc()) == NULL) - return(NULL); - if (sj3_rcode_w16[code] == NULL) - sj3_rcode_w16[code] = rktp; - else { - if (nrktp != NULL) { - rktp->next = nrktp; - if (orktp == NULL) - sj3_rcode_w16[code] = rktp; - else - orktp->next = rktp; - } else - orktp->next = rktp; - } - return(rktp); -} - - - -sj3_rkebell(err) -int err; -{ - rk_errin = err; -} - - - -sj3_rkclear() -{ - rline[0] = NSTR; - lstr[0] = NSTR; - rktblp = NULL; - rk_klen = 0; - sj3_rkreset(); -} - -sj3_rkreset() -{ - rk_cflag = -1; -} - - - -sj3_rkconvc(c, rkstr) -wchar16_t c; -u_int *rkstr; -{ - register int i; - register wchar16_t *p, *q; - int len; - wchar16_t wstr[MAXLLEN]; - u_int kstr[MAXLLEN], *kp; - - len = wslen(rline); - if (c == rk_erase) { - if (rk_cflag == 0) { - for(i = 0; i < len; i++) - *rkstr++ = ERRCODE + rk_erase; - for (i = 0; i < rk_klen; i++) - *rkstr++ = rk_erase; - p = lstr; - q = rline; - while(*p != NSTR) { - *q++ = *p; - *rkstr++ = ERRCODE + *p++; - } - *q = NSTR; - rktblp = NULL; - rk_cflag = -1; - } else { - if (len <= 0) - *rkstr++ = rk_erase; - else - *rkstr++ = ERRCODE + rk_erase; - rk_cflag--; - if (len <= 1) { - rktblp = NULL; - rline[0] = NSTR; - } else - rline[--len] = NSTR; - } - } else { - rline[len] = c; - rline[len + 1] = NSTR; - wscpy(wstr, rline); - if ((i = sj3_rkconv2(wstr, kstr, len)) == CONTINUE) { - if (rk_cflag >= 0) - rk_cflag++; - *rkstr++ = ERRCODE + c; - } else if (i == NOMACH) { - rline[len] = NSTR; - *rkstr++ = ERRBEL; - } else { - rk_cflag = 0; - rk_klen = i; - for (i = 0; i < len; i++) - *rkstr++ = ERRCODE + rk_erase; - kp = kstr; - while (*kp != 0) - *rkstr++ = *kp++; - wscpy(lstr, rline); - lstr[len] = NSTR; - p = wstr; - q = rline; - while(*p != NSTR) { - *rkstr++ = ERRCODE + *p; - *q++ = *p++; - } - *q = NSTR; - } - } - *rkstr = RKEND; -} - - - -sj3_rkconv2(wstr, kstr, wlen) -wchar16_t *wstr; -u_int *kstr; -int wlen; -{ - - register int i; - register wchar16_t *p, *q, *s; - int rlen, len; - wchar16_t svstr[MAXLLEN]; - RkTablW16 *rktp; - u_short *kp; - - len = 0; - if ((rktp = rktblp) == NULL) - rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; - if (*wstr > (wchar16_t) 0xff) rktp = NULL; - while(1) { - while(rktp != NULL) { - rlen = rkmatch((wstr + 1), rktp->r_key, wlen); - if (rlen == CONTINUE) { - rktblp = rktp; - break; - } else if (rlen != NOMACH) { - kp = rktp->k_yomi; - if ((s = rktp->r_str) != NULL) - i = wslen(s); - else - i = 0; - *kstr++ = SetMojilen(rlen - i) + *kp++; - len++; - while(*kp != 0) { - *kstr++ = *kp++; - len++; - } - p = (wstr + rlen); - q = svstr; - if (i > 0) { - p -= i; - while (*s != NSTR) { - if (*s == WTOUPPER(*p)) - *q = *p; - else - *q = *s; - q++; - p++; - s++; - } - } - if (rlen <= wlen) { - while (*p != NSTR) { - *q++ = *p++; - } - *q = NSTR; - wscpy(wstr, svstr); - rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; - wlen = wslen(wstr); - wlen--; - continue; - } - *q = NSTR; - wscpy(wstr, svstr); - rktblp = NULL; - break; - } - rktp = rktp->next; - } - if (rktp == NULL) { - if (wlen <= 0) { - *kstr++ = SetMojilen(1) + *wstr; - *wstr = NSTR; - rktblp = NULL; - len++; - } else if (rk_errin) { - len = NOMACH; - } else { - *kstr++ = SetMojilen(1) + *wstr; - len++; - p = wstr; - for (i = 0; i < wlen; i++) { - *p = *(p + 1); - p++; - } - *p = NSTR; - rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; - if (*wstr > (wchar16_t) 0xff) rktp = NULL; - wlen--; - continue; - } - } - *kstr = 0; - break; - } - return(len); -} - - - - -extern int sj3_rkconv_w16(); - -sj3_rkconv(romaji, kana) -u_char *romaji; -u_char *kana; -{ - wchar16_t *wstr; - int len, mflag = 0, ret; - - len = strlen((char *)romaji) + 1; - if (len > (sizeof(intmp) / sizeof(wchar16_t))) { - wstr = (wchar16_t *) malloc(len * sizeof(wchar16_t)); - if (!wstr) return -1; - mflag = 1; - } else { - wstr = (wchar16_t *) intmp; - } - if (mbstowcs(wstr, (char *)romaji, len) == -1) { - if (mflag) free(wstr); - return -1; - } - ret = sj3_rkconv_w16(wstr, outtmp); - if (ret == 0 || ret == -1) { - if (mflag) free(wstr); - return ret; - } - if (wcstombs((char *)mtmp, outtmp, sizeof(outtmp)) == -1) { - if (mflag) free(wstr); - return -1; - } - if (wcstombs((char *)romaji, wstr, len) == -1) { - if (mflag) free(wstr); - return -1; - } - if (current_locale == LC_CTYPE_EUC) { - len = euctosjis(kana, MAXLLEN*2, mtmp, sizeof(mtmp)); - } else { - (void) memcpy(kana, mtmp, strlen((char *)mtmp) + 1); - } - - if (mflag) free(wstr); - if (len > 0) { - return ret; - } else { - return len; - } -} - -sj3_rkconv_euc(romaji, kana) -u_char *romaji; -u_char *kana; -{ - wchar16_t *wstr; - int len, mflag = 0, ret; - - len = strlen((char *)romaji) + 1; - if (len > sizeof(intmp)) { - wstr = (wchar16_t *) malloc(len * sizeof(wchar16_t)); - if (!wstr) return -1; - mflag = 1; - } else { - wstr = (wchar16_t *) intmp; - } - if (mbstowcs(wstr, (char *)romaji, len) == -1) { - if (mflag) free(wstr); - return -1; - } - ret = sj3_rkconv_w16(wstr, outtmp); - if (ret == 0 || ret == -1) { - if (mflag) free(wstr); - return ret; - } - if (wcstombs((char *)mtmp, outtmp, sizeof(outtmp)) == -1) { - if (mflag) free(wstr); - return -1; - } - if (wcstombs((char *)romaji, wstr, len) == -1) { - if (mflag) free(wstr); - return -1; - } - if (current_locale == LC_CTYPE_EUC) { - (void) memcpy(kana, mtmp, strlen((char *)mtmp) + 1); - } else { - len = sjistoeuc(kana, MAXLLEN*2, mtmp, sizeof(mtmp)); - } - - if (mflag) free(wstr); - if (len > 0) { - return ret; - } else { - return len; - } -} - -sj3_rkconv_mb(romaji, kana) -u_char *romaji; -u_char *kana; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_rkconv_euc(romaji, kana); - else - return sj3_rkconv(romaji, kana); -} - -sj3_rkconv_w16(wstr, kstr) -wchar16_t *wstr; -wchar16_t *kstr; -{ - - register int i; - register wchar16_t *p, *q, *s; - register u_short cc; - int rlen, len; - wchar16_t svstr[MAXLLEN]; - RkTablW16 *rktp; - u_short *kp; - - len = wslen(wstr); - rktp = sj3_rcode_w16[WTOUPPER(*wstr)]; - if (*wstr > (wchar16_t) 0xff) rktp = NULL; - while(rktp != NULL) { - rlen = rkmatch((wstr + 1), rktp->r_key, len - 1); - if (rlen == CONTINUE) { - break; - } else if (rlen != NOMACH) { - kp = rktp->k_yomi; - while((cc = *kp++) != 0) { - *kstr++ = cc; - } - wscpy(svstr, wstr); - q = wstr; - p = svstr; - if ((s = rktp->r_str) != NULL) { - p += rlen; - i = wslen(s); - p -= i; - while (*s != NSTR) { - if (*s == WTOUPPER(*p)) - *q = *p; - else - *q = *s; - q++; - p++; - s++; - } - } - if (rlen < len) { - p = svstr; - p += rlen; - while (*p != NSTR) - *q++ = *p++; - } - *q = NSTR; - break; - } - rktp = rktp->next; - } - if (rktp == NULL && len <= 1) { - *kstr++ = *wstr; - *wstr = NSTR; - rlen = 1; - } - *kstr = NSTR; - return(rlen); -} - - - -rkmatch(s1, s2, len) -wchar16_t *s1, *s2; -int len; -{ - register int i; - - i = 1; - if (s2 == NULL) - return(i); - for (; i < len + 1; i++) { - if (*s1 > (wchar16_t) 0xff) - return(NOMACH); - if (WTOUPPER(*s1) != *s2) { - if (*s2 != NSTR) - return(NOMACH); - break; - } - s1++; - s2++; - } - if (*s2 != NSTR) - i = CONTINUE; - return(i); -} diff --git a/sj3rkcv/sj3_rkcv.c b/sj3rkcv/sj3_rkcv.c deleted file mode 100644 index b7d6492..0000000 --- a/sj3rkcv/sj3_rkcv.c +++ /dev/null @@ -1,838 +0,0 @@ -/*- - * SPDX-License-Identifier: MIT-open-group - * - * Copyright (c) 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. - */ - - -#include - -#include "wchar16.h" -#include "sj.h" -#include "kana.h" -#include "rk.h" -#include "kctype.h" - -#if defined(__sony_news) && (SVR4) -#define wscmp sj3_wscmp16 -#define wsncmp sj3_wsncmp16 -#define wsncpy sj3_wsncpy16 -#define wscpy sj3_wscpy16 -#define wslen sj3_wslen16 -#define mbstowcs sj3_mbstowcs16 -#define wcstombs sj3_wcstombs16 -#endif - -extern int current_locale; - -#define sj_iskata(c) (c >= 0xa5a1 && c <= 0xa5f6) -#define sj_ishira(c) (c >= 0xa4a1 && c <= 0xa4f3) -static wchar16_t intmp[MAXLLEN]; -static wchar16_t outtmp[MAXLLEN]; -static u_char mtmp[MAXLLEN]; - -static u_short HKtable[ZKATAn] = { - KANA_XA, KANA_A, - KANA_XA + 1, KANA_A + 1, - KANA_XA + 2, KANA_A + 2, - KANA_XA + 3, KANA_A + 3, - KANA_XA + 4, KANA_A + 4, - - KANA_KA, KANA_GA, - KANA_KA + 1, KANA_GA + (1<<8), - KANA_KA + 2, KANA_GA + (2<<8), - KANA_KA + 3, KANA_GA + (3<<8), - KANA_KA + 4, KANA_GA + (4<<8), - - KANA_SA, KANA_ZA, - KANA_SA + 1, KANA_ZA + (1<<8), - KANA_SA + 2, KANA_ZA + (2<<8), - KANA_SA + 3, KANA_ZA + (3<<8), - KANA_SA + 4, KANA_ZA + (4<<8), - - KANA_TA, KANA_DA, - KANA_TA + 1, KANA_DA + (1<<8), - KANA_XTSU, KANA_TA + 2, KANA_DA + (2<<8), - KANA_TA + 3, KANA_DA + (3<<8), - KANA_TA + 4, KANA_DA + (4<<8), - - KANA_NA, - KANA_NA + 1, - KANA_NA + 2, - KANA_NA + 3, - KANA_NA + 4, - - KANA_HA, KANA_BA, KANA_PA, - KANA_HA + 1, KANA_BA + (1<<8), KANA_PA + (1<<8), - KANA_HA + 2, KANA_BA + (2<<8), KANA_PA + (2<<8), - KANA_HA + 3, KANA_BA + (3<<8), KANA_PA + (3<<8), - KANA_HA + 4, KANA_BA + (4<<8), KANA_PA + (4<<8), - - KANA_MA, - KANA_MA + 1, - KANA_MA + 2, - KANA_MA + 3, - KANA_MA + 4, - - KANA_XYA, KANA_YA, - KANA_XYA + 1, KANA_YA + 1, - KANA_XYA + 2, KANA_YA + 2, - - KANA_RA, - KANA_RA + 1, - KANA_RA + 2, - KANA_RA + 3, - KANA_RA + 4, - - KANA_WA, KANA_WA, - KANA_A + 1, - KANA_A + 3, - KANA_WO, - KANA_WA + 1, - - ((KANA_A+2)<<8) + KANA_DTEN, - KANA_KA, - KANA_KA + 3 -}; - -static struct ztohkktbl { - u_short zen; - u_short han; -} HKKtbl[8] = { - ZEN_KTEN, KANA_KTEN, - ZEN_FKAKKO, KANA_FKAKKO, - ZEN_EKAKKO, KANA_EKAKKO, - ZEN_TTEN, KANA_TTEN, - ZEN_CTEN, KANA_CTEN, - ZEN_CHOUON, KANA_CHOUON, - ZEN_DTEN, KANA_DTEN, - ZEN_HDTEN, KANA_HDTEN -}; - - -static struct hzkigoutbl { - wchar16_t han; - u_short zen; -} HZKtbl[6] = { - ',', ZEN_TTEN, - '.', ZEN_KTEN, - '-', ZEN_CHOUON, - '@', ZEN_CTEN, - '[', ZEN_FKAKKO, - ']', ZEN_EKAKKO -}; - -static u_short HZtbl[95] = { - 0xa1a1, 0xa1aa, 0xa1c9, 0xa1f4, 0xa1f0, 0xa1f3, 0xa1f5, 0xa1c7, - 0xa1ca, 0xa1cb, 0xa1f6, 0xa1dc, 0xa1a4, 0xa1dd, 0xa1a5, 0xa1bf, - 0xa3b0, 0xa3b1, 0xa3b2, 0xa3b3, 0xa3b4, 0xa3b5, 0xa3b6, 0xa3b7, - 0xa3b8, 0xa3b9, 0xa1a7, 0xa1a8, 0xa1e3, 0xa1e1, 0xa1e4, 0xa1a9, - 0xa1f7, 0xa3c1, 0xa3c2, 0xa3c3, 0xa3c4, 0xa3c5, 0xa3c6, 0xa3c7, - 0xa3c8, 0xa3c9, 0xa3ca, 0xa3cb, 0xa3cc, 0xa3cd, 0xa3ce, 0xa3cf, - 0xa3d0, 0xa3d1, 0xa3d2, 0xa3d3, 0xa3d4, 0xa3d5, 0xa3d6, 0xa3d7, - 0xa3d8, 0xa3d9, 0xa3da, 0xa1ce, 0xa1ef, 0xa1cf, 0xa1b0, 0xa1b2, - 0xa1c6, 0xa3e1, 0xa3e2, 0xa3e3, 0xa3e4, 0xa3e5, 0xa3e6, 0xa3e7, - 0xa3e8, 0xa3e9, 0xa3ea, 0xa3eb, 0xa3ec, 0xa3ed, 0xa3ee, 0xa3ef, - 0xa3f0, 0xa3f1, 0xa3f2, 0xa3f3, 0xa3f4, 0xa3f5, 0xa3f6, 0xa3f7, - 0xa3f8, 0xa3f9, 0xa3fa, 0xa1d0, 0xa1c3, 0xa1d1, 0xa1b1 -}; - -#ifdef ADDHK -setl_hktozh() -{ - register int i; - register u_short c, zen1; - wchar16_t rstr[2]; - wchar16_t kstr[2]; - RkTablW16 *rktp, *mktable(); - - zen1 = (ZHIRA1 << 8); - rstr[1] = '\0'; - kstr[1] = 0; - for(i = 0; i < ZKATAn - 3; i++) { - c = HKtable[i]; - if (!(c & RKZEN)) { - rstr[0] = c; - if ((rktp = mktable(rstr, 1)) == NULL) - break; - if (rktp->k_yomi != NULL) - continue; - kstr[0] = zen1 + (ZHIRAF2 + i); - if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) - break; - } - } - for (i = 0; i < 8; i++) { - rstr[0] = HKKtbl[i].han; - if ((rktp = mktable(rstr, 1)) == NULL) - break; - if (rktp->k_yomi != NULL) - continue; - kstr[0] = HKKtbl[i].zen; - if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) - break; - } -} -#endif - - -mkkigou() -{ - register int i; - wchar16_t rstr[2]; - wchar16_t kstr[2]; - RkTablW16 *rktp, *mktable(); - - rstr[1] = '\0'; - kstr[1] = 0; - for (i = 0; i < 6; i++) { - rstr[0] = HZKtbl[i].han; - if ((rktp = mktable(rstr, 1)) == NULL) - break; - if (rktp->k_yomi != NULL) - continue; - kstr[0] = HZKtbl[i].zen; - if (kstradd(&(rktp->k_yomi), kstr, 2) == -1) - break; - } -} - -sj_addten(prefix, c) -u_short prefix, c; -{ - register u_short c1, cc; - - cc = 0; - if ((c == ZEN_DTEN || c == ZEN_HDTEN) && - (sj_ishira(prefix) || sj_iskata(prefix))) { - c1 = sj_zen2han(prefix); - if ((c1 >= KANA_KA && c1 < KANA_NA) || - (c1 >= KANA_HA && c1 < KANA_MA)) { - if (c == ZEN_DTEN) - cc = prefix + 1; - else if (c == ZEN_HDTEN && c1 >= KANA_HA) - cc = prefix + 2; - } else if (c1 == KANA_A+2 && sj_iskata(prefix)&& c == ZEN_DTEN) - cc = ZEN_VU; - } - return(cc); -} - -sj_han2zen(c) -u_short c; -{ - register int i; - register u_short cc; - - if (WcIsHANKAKU(c) && iskana2(c)) { - for (i = 0; i < ZKATAn; i++) { - if (c == HKtable[i]) { - if (i >= ZKATAn - 3) { - cc = (ZKATA1 << 8) + (ZKATAF2 + i + 1); - } - else { - cc = (ZHIRA1 << 8) + (ZHIRAF2 + i); - if (c == KANA_WA) - cc++; - } - break; - } - } - if (i >= ZKATAn) { - for (i = 0; i < 8; i++) { - if (c == HKKtbl[i].han) { - cc = HKKtbl[i].zen; - break; - } - } - if (i >= 8) - cc = ZEN_SPACE; - } - } else { - if (c >= 0x20 && c <= 0x7e) - cc = HZtbl[c - 0x20]; - else - cc = c; - } - return(cc); -} - - -extern int sj3_hantozen_w16(); - -sj3_hantozen(out, in) -u_char *out, *in; -{ - wchar16_t *winstr, *woutstr; - u_char *mstr; - int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; - - inlen = strlen(in) + 1; - if (current_locale == LC_CTYPE_EUC) { - if (inlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(inlen); - mmflag = 1; - } else { - mstr = mtmp; - } - if (sjistoeuc(mstr, inlen, in, inlen) < 0) { - if (mmflag) free(mstr); - return -1; - } - } else { - mstr = in; - } - if ((inlen * sizeof(wchar16_t)) > sizeof(intmp)) { - winstr = (wchar16_t *) malloc(inlen * sizeof(wchar16_t)); - if (!winstr) { - if (mmflag) free(mstr); - return -1; - } - imflag = 1; - } else { - winstr = (wchar16_t *) intmp; - } - if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - outlen = inlen; - if ((outlen * sizeof(wchar16_t)) > sizeof(outtmp)) { - woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); - if (!woutstr) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - omflag = 1; - } else { - woutstr = (wchar16_t *) outtmp; - } - ret = sj3_hantozen_w16(woutstr, winstr); - if (mmflag) { - free(mstr); - mmflag = 0; - } - if (ret == 0 || ret == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return ret; - } - outlen = ret * 3; - if (outlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(outlen); - if (!mstr) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return -1; - } - mmflag = 1; - } else { - mstr = mtmp; - } - if (wcstombs((char *)mstr, woutstr, outlen) == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - return -1; - } - if (current_locale == LC_CTYPE_EUC) { - inlen = euctosjis(out, outlen, mstr, outlen); - } else { - (void) memcpy(out, mstr, strlen(mstr) + 1); - } - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - - if (inlen > 0) { - return ret; - } else { - return inlen; - } -} - -sj3_hantozen_euc(out, in) -u_char *out, *in; -{ - wchar16_t *winstr, *woutstr; - u_char *mstr; - int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; - - inlen = strlen(in) + 1; - if (current_locale == LC_CTYPE_EUC) { - mstr = in; - } else { - if (inlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(inlen); - mmflag = 1; - } else { - mstr = mtmp; - } - if (euctosjis(mstr, inlen, in, inlen) < 0) { - if (mmflag) free(mstr); - return -1; - } - } - if ((inlen * sizeof(wchar16_t)) > sizeof(intmp)) { - winstr = (wchar16_t *) malloc(inlen * sizeof(wchar16_t)); - if (!winstr) { - if (mmflag) free(mstr); - return -1; - } - imflag = 1; - } else { - winstr = (wchar16_t *) intmp; - } - if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - outlen = inlen; - if ((outlen * sizeof(wchar16_t)) > sizeof(outtmp)) { - woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); - if (!woutstr) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - omflag = 1; - } else { - woutstr = (wchar16_t *) outtmp; - } - ret = sj3_hantozen_w16(woutstr, winstr); - if (mmflag) { - free(mstr); - mmflag = 0; - } - if (ret == 0 || ret == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return ret; - } - outlen = ret * 3; - if (outlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(outlen); - if (!mstr) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return -1; - } - mmflag = 1; - } else { - mstr = mtmp; - } - if (wcstombs((char *)mstr, woutstr, outlen) == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - return -1; - } - if (current_locale == LC_CTYPE_EUC) { - (void) memcpy(out, mstr, strlen(mstr) + 1); - } else { - inlen = sjistoeuc(out, outlen, mstr, outlen); - } - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - - if (inlen > 0) { - return ret; - } else { - return inlen; - } -} - -sj3_hantozen_mb(s1, s2) -u_char *s1, *s2; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_hantozen_euc(s1, s2); - else - return sj3_hantozen(s1, s2); -} - -sj3_hantozen_w16(s1, s2) -wchar16_t *s1, *s2; -{ - return sj_hantozen(s1, s2, wslen(s2)); -} - - -sj_hantozen(s1, s2, len) -wchar16_t *s1, *s2; -int len; -{ - register u_short c1, cc, prefix; - register wchar16_t c; - register int i; - int rlen; - - prefix = 0; - rlen = 0; - for (i = 0; i < len && *s2 != '\0'; i++) { - c = *s2++; - cc = sj_han2zen(c); - if (cc & RKZEN) { - if (prefix != 0 && (c1 = sj_addten(prefix, cc)) != 0) { - s1 -= 1; - rlen -= 1; - cc = c1; - prefix = 0; - } else - prefix = cc; - *s1++ = cc; - rlen ++; - } else { - *s1++ = cc; - rlen++; - prefix = 0; - } - } - *s1 = '\0'; - return(rlen); -} - -sj_zen2han(c) -u_short c; -{ - register int i; - register u_short cc; - - i = ZKATAn; - cc = c & MASK; - if (sj_ishira(c)) - i = cc - ZHIRAF2; - else if (sj_iskata(c)) { - i = cc - ZKATAF2; - } - if (i < ZKATAn) - cc = HKtable[i]; - else { - for (i = 0; i < 8; i++) { - if (c == HKKtbl[i].zen) { - cc = HKKtbl[i].han; - break; - } - } - if (i >= 8) { - cc = c; - for (i = 0; i < 95; i++) { - if (c == HZtbl[i]) { - cc = i + 0x20; - break; - } - } - } - } - return(cc); -} - -extern int sj3_zentohan_w16(); - -sj3_zentohan(out, in) -u_char *out, *in; -{ - wchar16_t *winstr, *woutstr; - u_char *mstr; - int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; - - inlen = strlen(in) + 1; - if (inlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(inlen); - if (!mstr) { - return -1; - } - mmflag = 1; - } else { - mstr = mtmp; - } - if (current_locale == LC_CTYPE_EUC) { - (void) euctosjis(mstr, inlen, in, inlen); - } else { - (void) memcpy(mstr, in, inlen); - } - if (inlen > sizeof(intmp)) { - winstr = (wchar16_t *) malloc(((inlen / 2) + 1) * sizeof(wchar16_t)); - if (!winstr) { - if (mmflag) free(mstr); - return -1; - } - imflag = 1; - } else { - winstr = (wchar16_t *) intmp; - } - if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - if (mmflag) { - free(mstr); - mmflag = 0; - } - outlen = ((inlen - 1) / 2) + 1; - if (outlen * sizeof(wchar16_t) > sizeof(outtmp)) { - woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); - if (!woutstr) { - if (imflag) free(winstr); - return -1; - } - omflag = 1; - } else { - woutstr = (wchar16_t *) outtmp; - } - ret = sj3_zentohan_w16(woutstr, winstr); - if (ret == 0 || ret == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return ret; - } - outlen = ret * 3; - if (current_locale == LC_CTYPE_EUC) { - if (outlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(outlen); - mmflag = 1; - } else { - mstr = mtmp; - } - } else { - mstr = out; - } - if (wcstombs((char *)mstr, woutstr, outlen) == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return -1; - } - if (current_locale == LC_CTYPE_EUC) { - if (euctosjis(out, outlen, mstr, outlen) < 0) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - return -1; - } - } - - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - - return ret; -} - -sj3_zentohan_euc(out, in) -u_char *out, *in; -{ - wchar16_t *winstr, *woutstr; - u_char *mstr; - int inlen, outlen, imflag = 0, omflag = 0, mmflag = 0, ret; - - inlen = strlen(in) + 1; - if (inlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(inlen); - if (!mstr) { - return -1; - } - mmflag = 1; - } else { - mstr = mtmp; - } - if (current_locale == LC_CTYPE_EUC) { - (void) euctosjis(mstr, inlen, in, inlen); - } else { - (void) memcpy(mstr, in, inlen); - } - if (inlen > sizeof(intmp)) { - winstr = (wchar16_t *) malloc(((inlen / 2) + 1) * sizeof(wchar16_t)); - if (!winstr) { - if (mmflag) free(mstr); - return -1; - } - imflag = 1; - } else { - winstr = (wchar16_t *) intmp; - } - if (mbstowcs(winstr, (char *)mstr, inlen) == -1) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - if (mmflag) { - free(mstr); - mmflag = 0; - } - outlen = ((inlen - 1) / 2) + 1; - if (outlen * sizeof(wchar16_t) > sizeof(outtmp)) { - woutstr = (wchar16_t *) malloc(outlen * sizeof(wchar16_t)); - if (!woutstr) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - return -1; - } - omflag = 1; - } else { - woutstr = (wchar16_t *) outtmp; - } - ret = sj3_zentohan_w16(woutstr, winstr); - if (ret == 0 || ret == -1) { - if (mmflag) free(mstr); - if (imflag) free(winstr); - if (omflag) free(woutstr); - return ret; - } - outlen = ret * 3; - if (current_locale == LC_CTYPE_EUC) { - mstr = out; - } else { - if (outlen > sizeof(mtmp)) { - mstr = (u_char *) malloc(outlen); - mmflag = 1; - } else { - mstr = mtmp; - } - } - if (wcstombs((char *)mstr, woutstr, outlen) == -1) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - return -1; - } - if (current_locale == LC_CTYPE_SHIFTJIS) { - if (sjistoeuc(out, outlen, mstr, outlen) < 0) { - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - return -1; - } - } - if (imflag) free(winstr); - if (omflag) free(woutstr); - if (mmflag) free(mstr); - - return ret; -} - -sj3_zentohan_mb(s1, s2) -u_char *s1, *s2; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_zentohan_euc(s1, s2); - else - return sj3_zentohan(s1, s2); -} - -sj3_zentohan_w16 (s1, s2) -wchar16_t *s1, *s2; -{ - return sj_zentohan(s1, s2, wslen(s2)); -} - -sj_zentohan(s1, s2, len) -wchar16_t *s1, *s2; -int len; -{ - register u_short cc; - register wchar16_t c; - register int i, rlen; - - rlen = 0; - for (i = 0; i < len && *s2 != (wchar16_t) '\0'; i++) { - c = *s2++; - if (WcIsZENKAKU(c)) { - cc = sj_zen2han(c); - if ((cc >> 8) && (cc != c)) { - *s1++ = (cc >> 8); - rlen++; - *s1++ = cc & 0xff; - rlen++; - continue; - } - - } else - cc = c; - if (cc & RKZEN) { - *s1++ = (cc >> 8); - rlen++; - } - *s1++ = (wchar16_t)cc; - rlen++; - } - *s1 = (wchar16_t) '\0'; - return(rlen); -} - -sj_tokata(c) -wchar16_t c; -{ - if (sj_ishira(c)) { - c += 0x0100; - } - return(c); -} - -sj_tohira(c) -wchar16_t c; -{ - if (sj_iskata(c) && (short) c <= (short) 0xa5f3) { - c -= 0x0100; - } - return(c); -} - -sj_htok(s1, s2) -wchar16_t *s1, *s2; -{ - register wchar16_t cc; - register wchar16_t c; - - while ((c = *s2++) != (wchar16_t) '\0') { - if (WcIsX0208(c)) { - cc = sj_tokata(c); - *s1++ = cc; - } else - *s1++ = c; - } - *s1 = (wchar16_t) '\0'; -} - -sj_ktoh(s1, s2) -wchar16_t *s1, *s2; -{ - register wchar16_t cc; - register wchar16_t c; - - while ((c = *s2++) != (wchar16_t) '\0') { - if (WcIsX0208(c)) { - cc = sj_tohira(c); - *s1++ = cc; - } else - *s1++ = c; - } - *s1 = (wchar16_t) '\0'; -} diff --git a/sj3rkcv/wc16_str.c b/sj3rkcv/wc16_str.c deleted file mode 100644 index e45ebf4..0000000 --- a/sj3rkcv/wc16_str.c +++ /dev/null @@ -1,449 +0,0 @@ -/*- - * SPDX-License-Identifier: MIT-open-group - * - * Copyright (c) 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. - */ - - - -#include "sj_sysvdef.h" -#include -#include -#include "sj_euc.h" -#include "wchar16.h" -#if defined(__sony_news) && defined(SVR4) -#include -#endif - -#define MSB 0x80 - -#ifndef TRUE -#define TRUE (1) -#define FALSE (0) -#endif - -#ifndef __sony_news -#define sjis2euc sj3_sjis2euc -#define euc2sjis sj3_euc2sjis - -#define issjis1(c) (((0x81 <= (c)) && ((c) <= 0x9f)) || \ - ((0xe0 <= (c)) && ((c) <= 0xfc))) -#define iseuc(c) ((0xa1 <= (c)) && ((c) <= 0xfe)) -#define iskana(c) ((0xa1 <= (c)) && ((c) <= 0xdf)) -#endif - -extern int current_locale; - -int -sj3_iswcntrl16(wc) -wchar16_t wc; -{ - if ((wc < 0x20) || (wc == 0x7f)) return TRUE; - - return FALSE; -} - -int -sj3_iswupper16(wc) -wchar16_t wc; -{ - if (((0x40 < wc) && (wc < 0x5b)) || - ((0xa3c0 < wc) && (wc < 0xa3db))) return TRUE; - - return FALSE; -} - -int -sj3_iswdigit16(wc) -wchar16_t wc; -{ - if (((0x29 < wc) && (wc < 0x3a)) || - ((0xa3af < wc) && (wc < 0xa3ba))) return TRUE; - - return FALSE; -} - -int -sj3_iswxdigit16(wc) -wchar16_t wc; -{ - if (((0x29 < wc) && (wc < 0x3a)) || - ((0xa3af < wc) && (wc < 0xa3ba))) return TRUE; - - if (((0x60 < wc) && (wc < 0x67)) || - ((0x40 < wc) && (wc < 0x47))) return TRUE; - - if (((0xa3c0 < wc) && (wc < 0xa3c7)) || - ((0xa3e0 < wc) && (wc < 0xa3e6))) return TRUE; - - return FALSE; -} - -int -sj3_wslen16(ws) -wchar16_t *ws; -{ - register int i=0; - - if (!ws) return 0; - - while (*ws++) i++; - return i; -} - -int -sj3_wscmp16(ws1, ws2) -wchar16_t *ws1, *ws2; -{ - while ((*ws1 && *ws2) && (*ws1 == *ws2)) { - ws1++; - ws2++; - } - if (!*ws1 && !*ws2) return 0; - if (!*ws1) return -1; - if (!*ws2) return 1; - if (*ws1 < *ws2) return -1; - return 1; -} - -int -sj3_wsncmp16(ws1, ws2, n) -wchar16_t *ws1, *ws2; -int n; -{ - register int i=0; - - while ((*ws1 && *ws2) && (*ws1 == *ws2) && (i < n)) { - ws1++; - ws2++; - i++; - } - if (!*ws1 && !*ws2) return 0; - if (i == n) return 0; - if (!*ws1) return -1; - if (!*ws2) return 1; - if (*ws1 < *ws2) return -1; - return 1; -} - -wchar16_t * -sj3_wscpy16(ws1, ws2) -wchar16_t *ws1, *ws2; -{ - register wchar16_t *ws; - - if (!ws2) return NULL; - ws = ws1; - while (*ws2) { - *ws++ = *ws2++; - } - *ws = 0; - - return ws1; -} - -wchar16_t * -sj3_wsncpy16(ws1, ws2, n) -wchar16_t *ws1, *ws2; -int n; -{ - register wchar16_t *ws; - register int i=0; - - if (!ws2) return NULL; - ws = ws1; - while (*ws2 && (i < n)) { - *ws++ = *ws2++; - i++; - } - if (i < n) *ws = 0; - - return ws1; -} - -wchar16_t * -sj3_wscat16(ws1, ws2) -wchar16_t *ws1, *ws2; -{ - register wchar16_t *ws; - - if (!ws1) return NULL; - if (!ws2) return NULL; - - ws = ws1; - - while (*ws) ws++; - while (*ws2) { - *ws++ = *ws2++; - } - *ws = 0; - - return ws1; -} - - -wchar16_t -sj3_euc2wc16(code) -unsigned int code; -{ - register wchar16_t wc = 0; - - if (((code >> 16) & 0xff) == SS3) { - wc = code & 0xff7f; - } else if (((code >> 8) & 0xff) == SS2) { - wc = code & 0xff; - } else { - wc = code; - } - - return wc; -} - -wchar16_t -sj3_sjis2wc16(code) -unsigned int code; -{ - register unsigned short ch; - - if ((code >> 8) & 0xff) { - ch = sjis2euc(code); - } else if (code & MSB) { - ch = (SS2 << 8) + (code & 0xff); - } else { - return code; - } - return (sj3_euc2wc16(ch)); -} - -unsigned int -sj3_wc2euc16(wc) -wchar16_t wc; -{ - register unsigned int code = 0; - register unsigned char tmp; - - tmp = (wc >> 8) & 0xff; - if (tmp) { - if (wc & MSB) { - code = wc; - } else { - code = (SS3 << 16) + wc + MSB; - } - } else { - if (wc & MSB) { - code = (SS2 << 8) + wc; - } else { - code = wc; - } - } - - return code; -} - -unsigned int -sj3_wc2sjis16(wc) -wchar16_t wc; -{ - register unsigned int ch; - - ch = sj3_wc2euc16(wc); - if ((ch >> 16) == SS3) { - return 0; - } else if ((ch >> 8) == SS2) { - return (ch & 0xff); - } else if ((ch >> 8) & 0xff) { - return euc2sjis(ch); - } else { - return wc; - } -} - -int -sj3_wcs2eucs16(mb, ws, n) -unsigned char *mb; -wchar16_t *ws; -int n; -{ - register int i = 0; - register unsigned int code; - register unsigned char c; - - while (*ws && (i < n)) { - code = sj3_wc2euc16(*ws); - if (c = ((code >> 16) & 0xff)) { - *mb++ = c; - i++; - if (i == n) break; - *mb++ = ((code >> 8) & 0xff); - i++; - if (i == n) break; - *mb++ = code & 0xff; - i++; - if (i == n) break; - } else if (c = ((code >> 8) & 0xff)) { - *mb++ = c; - i++; - if (i == n) break; - *mb++ = code & 0xff; - i++; - if (i == n) break; - } else if (c = (code & 0xff)) { - *mb++ = c; - i++; - } else { - return -1; - } - ws++; - } - - if (!*ws) { - *mb = '\0'; - } - - return i; -} - -int -sj3_wcs2sjiss16(mb, ws, n) -unsigned char *mb; -wchar16_t *ws; -int n; -{ - register int i = 0; - register unsigned int code; - register unsigned char c; - - while (*ws && (i < n)) { - code = sj3_wc2sjis16(*ws); - if (c = ((code >> 8) & 0xff)) { - *mb++ = c; - i++; - if (i == n) break; - *mb++ = code & 0xff; - i++; - if (i == n) break; - } else if (c = (code & 0xff)) { - *mb++ = c; - i++; - } else { - return -1; - } - ws++; - } - - if (!*ws) { - *mb = '\0'; - } - - return i; -} - -int -sj3_eucs2wcs16(ws, mb, n) -wchar16_t *ws; -unsigned char *mb; -int n; -{ - register int i = 0; - register unsigned int code; - - while (*mb && (i < n)) { - if (*mb == SS3) { - code = *mb++ << 16; - code += *mb++ << 8; - code += *mb++; - } else if ((*mb == SS2) || (*mb & 0x80)) { - code = *mb++ << 8; - code += *mb++; - } else { - code = *mb++; - } - *ws = sj3_euc2wc16(code); - if (!*ws) return -1; - ws++; - i++; - } - if (!*mb) { - *ws = 0; - } - - return i; -} - -int -sj3_sjiss2wcs16(ws, mb, n) -wchar16_t *ws; -unsigned char *mb; -int n; -{ - register int i = 0; - register unsigned int code; - - while (*mb && (i < n)) { - if (issjis1(*mb)) { - code = *mb++ << 8; - code += *mb++; - } else { - code = *mb++; - } - *ws = sj3_sjis2wc16(code); - if (!*ws) return -1; - ws++; - i++; - } - if (!*mb) { - *ws = 0; - } - - return i; -} - -int -sj3_mbstowcs16(ws, mb, n) -wchar16_t *ws; -unsigned char *mb; -int n; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_eucs2wcs16(ws, mb, n); - else - return sj3_sjiss2wcs16(ws, mb, n); -} - -int -sj3_wcstombs16(mb, ws, n) -unsigned char *mb; -wchar16_t *ws; -int n; -{ - if (current_locale == LC_CTYPE_EUC) - return sj3_wcs2eucs16(mb, ws, n); - else - return sj3_wcs2sjiss16(mb, ws, n); -} - -