Rename to Sj4

This commit is contained in:
Nishi 2026-06-20 02:12:04 +09:00
commit 0a2839610b
121 changed files with 1471 additions and 1461 deletions

1130
lib/sj4rkcv/rk_conv.c Normal file

File diff suppressed because it is too large Load diff

793
lib/sj4rkcv/sj4_rkcv.c Normal file
View file

@ -0,0 +1,793 @@
/*
* 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.
*
*/
/*
* $SonyRCSfile: sj4_rkcv.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1995/02/10 06:02:25 $
*/
#include <stdlib.h>
#include <string.h>
#include "wchar16.h"
#include "kana.h"
#include "rk.h"
#include "kctype.h"
#include "sj4rkcv.h"
#if defined(__sony_news) && (SVR4)
#define wscmp sj4_wscmp16
#define wsncmp sj4_wsncmp16
#define wsncpy sj4_wsncpy16
#define wscpy sj4_wscpy16
#define wslen sj4_wslen16
#define mbstowcs sj4_mbstowcs16
#define wcstombs sj4_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
void setl_hktozh() {
int i;
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
void mkkigou() {
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;
}
}
int sj_addten(u_short prefix, u_short c) {
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);
}
int sj_han2zen(u_short c) {
int i;
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);
}
int sj4_hantozen(u_char* out, u_char* 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 = sj4_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;
}
}
int sj4_hantozen_euc(u_char* out, u_char* 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 = sj4_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;
}
}
int sj4_hantozen_mb(u_char* s1, u_char* s2) {
if(current_locale == LC_CTYPE_EUC)
return sj4_hantozen_euc(s1, s2);
else
return sj4_hantozen(s1, s2);
}
int sj4_hantozen_w16(wchar16_t* s1, wchar16_t* s2) {
return sj_hantozen(s1, s2, wslen(s2));
}
int sj_hantozen(wchar16_t* s1, wchar16_t* s2, int len) {
u_short c1, cc, prefix;
wchar16_t c;
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);
}
int sj_zen2han(u_short c) {
int i;
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);
}
int sj4_zentohan(u_char* out, u_char* 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 = sj4_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;
}
int sj4_zentohan_euc(u_char* out, u_char* 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 = sj4_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;
}
int sj4_zentohan_mb(u_char* s1, u_char* s2) {
if(current_locale == LC_CTYPE_EUC)
return sj4_zentohan_euc(s1, s2);
else
return sj4_zentohan(s1, s2);
}
int sj4_zentohan_w16(wchar16_t* s1, wchar16_t* s2) {
return sj_zentohan(s1, s2, wslen(s2));
}
int sj_zentohan(wchar16_t* s1, wchar16_t* s2, int len) {
u_short cc;
wchar16_t c;
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);
}
int sj_tokata(wchar16_t c) {
if(sj_ishira(c)) {
c += 0x0100;
}
return (c);
}
int sj_tohira(wchar16_t c) {
if(sj_iskata(c) && (short)c <= (short)0xa5f3) {
c -= 0x0100;
}
return (c);
}
int sj_htok(wchar16_t* s1, wchar16_t* s2) {
wchar16_t cc;
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';
}
int sj_ktoh(wchar16_t* s1, wchar16_t* s2) {
wchar16_t cc;
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';
}

332
lib/sj4rkcv/sjrk Normal file
View file

@ -0,0 +1,332 @@
##
## 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.
##
##
## $SonyRCSfile: Sjrk,v $
## $SonyRevision: 1.1 $
## $SonyDate: 1994/06/03 08:03:07 $
##
#
# ローマ字かな変換規則定義ファイル
# デフォルトファイル
#
#フォーマット(区切りはスペースもしくはタブ)
#[in_romaji] [out_kana] [out_romaji]
A あ
I い
U う
E え
O お
KA か
KI き
KU く
KE け
KO こ
CA か
CI き
CU く
CE け
CO こ
KYA きゃ
KYI き
KYU きゅ
KYE きぇ
KYO きょ
QYA きゃ
QYI き
QYU きゅ
QYE きぇ
QYO きょ
SA さ
SI し
SU す
SE せ
SO そ
SYA しゃ
SYI し
SYU しゅ
SYE しぇ
SYO しょ
SHA しゃ
SHI し
SHU しゅ
SHE しぇ
SHO しょ
TA た
TI ち
TU つ
TE て
TO と
TSA た
TSI ち
TSU つ
TSE て
TSO と
THA たぁ
THI てぃ
THU とぅ
TYA ちゃ
TYI ち
TYU ちゅ
TYE ちぇ
TYO ちょ
TSYA ちゃ
TSYI ち
TSYU ちゅ
TSYE ちぇ
TSYO ちょ
CHA ちゃ
CHI ち
CHU ちゅ
CHE ちぇ
CHO ちょ
CYA ちゃ
CYI ち
CYU ちゅ
CYE ちぇ
CYO ちょ
NA な
NI に
NU ぬ
NE ね
NO の
NYA にゃ
NYI に
NYU にゅ
NYE にぇ
NYO にょ
HA は
HI ひ
HU ふ
HE へ
HO ほ
HYA ひゃ
HYI ひ
HYU ひゅ
HYE ひぇ
HYO ひょ
FA ふぁ
FI ふぃ
FU ふ
FE ふぇ
FO ふぉ
FYA ふゃ
FYI ふぃ
FYU ふゅ
FYE ふぇ
FYO ふょ
MA ま
MI み
MU む
ME め
MO も
MYA みゃ
MYI み
MYU みゅ
MYE みぇ
MYO みょ
YA や
YI い
YU ゆ
YE いぇ
YO よ
RA ら
RI り
RU る
RE れ
RO ろ
LA ら
LI り
LU る
LE れ
LO ろ
RYA りゃ
RYI り
RYU りゅ
RYE りぇ
RYO りょ
LYA りゃ
LYI り
LYU りゅ
LYE りぇ
LYO りょ
WA わ
WI うぃ
WU う
WE うぇ
WO を
GA が
GI ぎ
GU ぐ
GE げ
GO ご
GYA ぎゃ
GYI ぎ
GYU ぎゅ
GYE ぎぇ
GYO ぎょ
ZA ざ
ZI じ
ZU ず
ZE ぜ
ZO ぞ
ZYA じゃ
ZYI じ
ZYU じゅ
ZYE じぇ
ZYO じょ
JA じゃ
JI じ
JU じゅ
JE じぇ
JO じょ
JYA じゃ
JYI じ
JYU じゅ
JYE じぇ
JYO じょ
DA だ
DI ぢ
DU づ
DE で
DO ど
DYA ぢゃ
DYI ぢ
DYU ぢゅ
DYE ぢぇ
DYO ぢょ
DHA だぁ
DHI でぃ
DHU どぅ
DHYU でゅ
BA ば
BI び
BU ぶ
BE べ
BO ぼ
BYA びゃ
BYI び
BYU びゅ
BYE びぇ
BYO びょ
VA ヴぁ
VI ヴぃ
VU ヴ
VE ヴぇ
VO ヴぉ
VYA びゃ
VYI び
VYU びゅ
VYE びぇ
VYO びょ
PA ぱ
PI ぴ
PU ぷ
PE ぺ
PO ぽ
PYA ぴゃ
PYI ぴ
PYU ぴゅ
PYE ぴぇ
PYO ぴょ
QA くぁ
QI くぃ
QU くぅ
QE くぇ
QO くぉ
N ん
NN ん
#MB ん B
#MM ん M
#MP ん P
KK っ K
SS っ S
TT っ T
HH っ H
MM っ M
YY っ Y
RR っ R
LL っ L
WW っ W
GG っ G
ZZ っ Z
DD っ D
BB っ B
PP っ P
CC っ C
FF っ F
JJ っ J
VV っ V
QQ っ Q
XX っ X
#TCH っ CH
XA ぁ
XI ぃ
XU ぅ
XE ぇ
XO ぉ
XYA ゃ
XYI ぃ
XYU ゅ
XYE ぇ
XYO ょ
XTU っ
XTSU っ
XWA ゎ
XKA ヵ
XKE ヶ
X, ゛
X. ゜
~
#- ー
#, 、
#. 。
#@ ・
#[ 「
#] 」
#Z. …
#SONY ソニー

377
lib/sj4rkcv/wc16_str.c Normal file
View file

@ -0,0 +1,377 @@
/*
* 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.
*
*/
/*
* $SonyRCSfile: wc16_str.c,v $
* $SonyRevision: 1.3 $
* $SonyDate: 1994/11/17 06:49:21 $
*/
#include <stdio.h>
#include <locale.h>
#include "wchar16.h"
#include "sj4rkcv.h"
#define MSB 0x80
#ifndef TRUE
#define TRUE (1)
#define FALSE (0)
#endif
#define sjis2euc sj4_sjis2euc
#define euc2sjis sj4_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))
extern int current_locale;
int sj4_iswcntrl16(wchar16_t wc) {
if((wc < 0x20) || (wc == 0x7f)) return TRUE;
return FALSE;
}
int sj4_iswupper16(wchar16_t wc) {
if(((0x40 < wc) && (wc < 0x5b)) ||
((0xa3c0 < wc) && (wc < 0xa3db))) return TRUE;
return FALSE;
}
int sj4_iswdigit16(wchar16_t wc) {
if(((0x29 < wc) && (wc < 0x3a)) ||
((0xa3af < wc) && (wc < 0xa3ba))) return TRUE;
return FALSE;
}
int sj4_iswxdigit16(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 sj4_wslen16(wchar16_t* ws) {
int i = 0;
if(!ws) return 0;
while(*ws++) i++;
return i;
}
int sj4_wscmp16(wchar16_t* ws1, wchar16_t* 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 sj4_wsncmp16(wchar16_t* ws1, wchar16_t* ws2, int n) {
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*
sj4_wscpy16(wchar16_t* ws1, wchar16_t* ws2) {
wchar16_t* ws;
if(!ws2) return NULL;
ws = ws1;
while(*ws2) {
*ws++ = *ws2++;
}
*ws = 0;
return ws1;
}
wchar16_t*
sj4_wsncpy16(wchar16_t* ws1, wchar16_t* ws2, int n) {
wchar16_t* ws;
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*
sj4_wscat16(wchar16_t* ws1, wchar16_t* ws2) {
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
sj4_euc2wc16(unsigned int code) {
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
sj4_sjis2wc16(unsigned int code) {
unsigned short ch;
if((code >> 8) & 0xff) {
ch = sjis2euc(code);
} else if(code & MSB) {
ch = (SS2 << 8) + (code & 0xff);
} else {
return code;
}
return (sj4_euc2wc16(ch));
}
unsigned int
sj4_wc2euc16(wchar16_t wc) {
unsigned int code = 0;
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
sj4_wc2sjis16(wchar16_t wc) {
unsigned int ch;
ch = sj4_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 sj4_wcs2eucs16(unsigned char* mb, wchar16_t* ws, int n) {
int i = 0;
unsigned int code;
unsigned char c;
while(*ws && (i < n)) {
code = sj4_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 sj4_wcs2sjiss16(unsigned char* mb, wchar16_t* ws, int n) {
int i = 0;
unsigned int code;
unsigned char c;
while(*ws && (i < n)) {
code = sj4_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 sj4_eucs2wcs16(wchar16_t* ws, unsigned char* mb, int n) {
int i = 0;
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 = sj4_euc2wc16(code);
if(!*ws) return -1;
ws++;
i++;
}
if(!*mb) {
*ws = 0;
}
return i;
}
int sj4_sjiss2wcs16(wchar16_t* ws, unsigned char* mb, int n) {
int i = 0;
unsigned int code;
while(*mb && (i < n)) {
if(issjis1(*mb)) {
code = *mb++ << 8;
code += *mb++;
} else {
code = *mb++;
}
*ws = sj4_sjis2wc16(code);
if(!*ws) return -1;
ws++;
i++;
}
if(!*mb) {
*ws = 0;
}
return i;
}
int sj4_mbstowcs16(wchar16_t* ws, unsigned char* mb, int n) {
if(current_locale == LC_CTYPE_EUC)
return sj4_eucs2wcs16(ws, mb, n);
else
return sj4_sjiss2wcs16(ws, mb, n);
}
int sj4_wcstombs16(unsigned char* mb, unsigned char* ws, int n) {
if(current_locale == LC_CTYPE_EUC)
return sj4_wcs2eucs16(mb, ws, n);
else
return sj4_wcs2sjiss16(mb, ws, n);
}