sj3lib: KNF

Formatter: knfmt 4.2.0
Signed-off-by: Masanori Ogino <mogino@acm.org>
This commit is contained in:
Masanori Ogino 2023-11-30 08:48:00 +09:00
commit e00547f414
4 changed files with 1182 additions and 1097 deletions

View file

@ -130,13 +130,13 @@ put_cmd(int cmd)
static u_char *
put_ndata(u_char *p, int n)
{
while (n-- > 0) put_byte(p ? *p++ : 0);
while (n-- > 0)
put_byte(p ? *p++ : 0);
return p;
}
static int
put_over(
int buflen,
put_over(int buflen,
int n,
u_char *(*func1)(), u_char *str1, int len1,
u_char *(*func2)(), u_char *str2, int len2,
@ -149,10 +149,18 @@ put_over(
int len[ARGNUM];
int i;
func[0] = func1; data[0] = str1; len[0] = len1;
func[1] = func2; data[1] = str2; len[1] = len2;
func[2] = func3; data[2] = str3; len[2] = len3;
func[3] = func4; data[3] = str4; len[3] = len4;
func[0] = func1;
data[0] = str1;
len[0] = len1;
func[1] = func2;
data[1] = str2;
len[1] = len2;
func[2] = func3;
data[2] = str3;
len[2] = len3;
func[3] = func4;
data[3] = str4;
len[3] = len4;
for (i = 0; i < n; i++) {
if (len[i] < buflen) {
@ -160,8 +168,10 @@ put_over(
buflen -= len[i];
} else {
while (len[i] > 0) {
data[i] = (*func[i])(data[i], (len[i] < buflen) ? len[i] : buflen);
if (put_flush() == ERROR) return ERROR;
data[i] = (*func[i])(data[i],
(len[i] < buflen) ? len[i] : buflen);
if (put_flush() == ERROR)
return ERROR;
len[i] -= buflen;
buflen = BUFFER_SIZE;
}
@ -176,7 +186,8 @@ put_over(
static int
get_buffer(void)
{
if (ReadErrorFlag) return ERROR;
if (ReadErrorFlag)
return ERROR;
getpos = getlen = 0;
getlen = read(server_fd, getbuf, sizeof(getbuf));
@ -241,30 +252,37 @@ get_nstring(u_char* p, int n)
c = get_byte();
while (c) {
if (n > 1) { *p++ = c; n--; }
if (n > 1) {
*p++ = c;
n--;
}
c = get_byte();
}
if (n > 0) *p++ = 0;
if (n > 0)
*p++ = 0;
return n;
}
static u_char *
get_ndata(u_char *p, int n)
{
while (n-- > 0) *p++ = get_byte();
while (n-- > 0)
*p++ = get_byte();
return p;
}
static void
skip_string(void)
{
while (get_byte()) ;
while (get_byte())
;
}
static void
skip_ndata(int n)
{
while (n-- > 0) get_byte();
while (n-- > 0)
get_byte();
}
static int
@ -285,8 +303,8 @@ open_unix(void)
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__DragonFly__)
len += sizeof(sunix.sun_len);
#endif
if (connect(fd, (struct sockaddr *)&sunix, len)
== ERROR) {
if (connect(fd, (struct sockaddr *)&sunix, len) ==
ERROR) {
sj3_error_number = SJ3_ConnectSocket;
return ERROR;
}
@ -351,13 +369,8 @@ open_inet(char* host)
return fd;
}
int
sj3_make_connection(
SJ3_CLIENT_ENV* client,
char* serv,
char* user,
char* prog)
sj3_make_connection(SJ3_CLIENT_ENV *client, char *serv, char *user, char *prog)
{
char host[MAXHOSTNAMELEN];
int tmp;
@ -367,13 +380,13 @@ sj3_make_connection(
client->fd = -1;
if (!serv || *serv == '\0' || !strcmp(serv, af_unix_str))
{
if ((server_fd = open_unix()) == ERROR) return ERROR;
if (!serv || *serv == '\0' || !strcmp(serv, af_unix_str)) {
if ((server_fd = open_unix()) == ERROR)
return ERROR;
strcpy(host, af_unix_str);
}
else {
if ((server_fd = open_inet(serv)) == ERROR) return ERROR;
} else {
if ((server_fd = open_inet(serv)) == ERROR)
return ERROR;
gethostname(host, sizeof(host));
}
client->fd = server_fd;
@ -390,25 +403,30 @@ sj3_make_connection(
put_string(host, hostlen);
put_string(user, userlen);
put_string(prog, proglen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 3, put_string, host, hostlen, put_string, user,
userlen, put_string, prog, proglen, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 3, put_string, host, hostlen, put_string,
user, userlen, put_string, prog, proglen, NULL, NULL, 0) ==
ERROR)
return ERROR;
}
if ((tmp = get_int()) == SJ3_DifferentVersion) {
if (ReadErrorFlag) return ERROR;
if (ReadErrorFlag)
return ERROR;
put_cmd(SJ3_CONNECT);
put_int(1);
if (datalen <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) {
put_string(host, hostlen);
put_string(user, userlen);
put_string(prog, proglen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 3, put_string, host, hostlen, put_string, user,
userlen, put_string, prog, proglen, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 3, put_string, host, hostlen,
put_string, user, userlen, put_string, prog,
proglen, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((tmp = get_int())) {
@ -427,9 +445,11 @@ sj3_make_connection(
cliptr->default_char[1] = 0x40;
sj3_error_number = 0;
if (ReadErrorFlag) return ERROR;
if (ReadErrorFlag)
return ERROR;
put_cmd(SJ3_STDYSIZE);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((tmp = get_int())) {
sj3_erase_connection(client);
@ -449,19 +469,19 @@ sj3_erase_connection(SJ3_CLIENT_ENV* client)
client_init(client);
put_cmd(SJ3_DISCONNECT);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
sj3_error_number = get_int();
close(server_fd);
cliptr->fd = -1;
if (ReadErrorFlag) return ERROR;
if (ReadErrorFlag)
return ERROR;
return sj3_error_number ? ERROR : 0;
}
long
sj3_open_dictionary(
SJ3_CLIENT_ENV* client,
sj3_open_dictionary(SJ3_CLIENT_ENV *client,
char *dictname, char *password)
{
int res;
@ -478,14 +498,17 @@ sj3_open_dictionary(
if (datalen < (buflen = BUFFER_SIZE - CMDLEN)) {
put_string(dictname, dictlen);
put_string(password, passlen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_string, dictname, dictlen, put_string,
password, passlen, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 2, put_string, dictname, dictlen,
put_string, password, passlen, NULL, NULL, 0, NULL, NULL,
0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return 0;
if ((sj3_error_number = get_int()))
return 0;
res = get_int();
return ReadErrorFlag ? ERROR : res;
}
@ -497,17 +520,16 @@ sj3_close_dictionary(SJ3_CLIENT_ENV* client, long dicid)
put_cmd(SJ3_CLOSEDICT);
put_int(dicid);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_open_study_file(
SJ3_CLIENT_ENV* client,
char* stdyname, char* password)
sj3_open_study_file(SJ3_CLIENT_ENV *client, char *stdyname, char *password)
{
int stdylen, passlen;
int datalen, buflen;
@ -522,14 +544,17 @@ sj3_open_study_file(
if (datalen < (buflen = BUFFER_SIZE - CMDLEN)) {
put_string(stdyname, stdylen);
put_string(password, passlen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_string, stdyname, stdylen, put_string,
password, passlen, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 2, put_string, stdyname, stdylen,
put_string, password, passlen, NULL, NULL, 0, NULL, NULL,
0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
@ -539,36 +564,40 @@ sj3_close_study_file(SJ3_CLIENT_ENV* client)
client_init(client);
put_cmd(SJ3_CLOSESTDY);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_get_id_size(SJ3_CLIENT_ENV *client)
{
client_init(client);
put_cmd(SJ3_STDYSIZE);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
cliptr->stdy_size = get_int();
return ReadErrorFlag ? ERROR : cliptr->stdy_size;
}
int
sj3_lock_server(SJ3_CLIENT_ENV *client)
{
client_init(client);
put_cmd(SJ3_LOCK);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
@ -578,19 +607,16 @@ sj3_unlock_server(SJ3_CLIENT_ENV *client)
client_init(client);
put_cmd(SJ3_UNLOCK);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_ikkatu_henkan(
SJ3_CLIENT_ENV* client,
u_char* src,
u_char* dst,
int dstsiz,
sj3_ikkatu_henkan(SJ3_CLIENT_ENV *client, u_char *src, u_char *dst, int dstsiz,
int mb_flag)
{
int c;
@ -613,32 +639,34 @@ sj3_ikkatu_henkan(
put_cmd(SJ3_PH2KNJ_EUC);
if (srclen < (buflen = BUFFER_SIZE - CMDLEN)) {
put_string(src, srclen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 1, put_string, src, srclen, NULL, NULL, 0,
NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
result = get_int();
result = 0;
stysiz = cliptr->stdy_size;
len1 = 1 + stysiz + 1 + 1;
while ((c = get_byte())) {
top = dst;
if (dstsiz < len1) goto error1;
if (dstsiz < len1)
goto error1;
*dst++ = len = c;
dst = get_ndata(dst, stysiz);
dstsiz -= (stysiz + 1);
while ((c = get_byte())) {
if (dstsiz-- < 3) goto error2;
if (dstsiz-- < 3)
goto error2;
*dst++ = c;
}
*dst++ = 0;
@ -649,26 +677,21 @@ sj3_ikkatu_henkan(
*dst = 0;
return ReadErrorFlag ? ERROR : result;
error1:
do {
skip_ndata(stysiz);
error2:
while (get_byte()) ;
while (get_byte())
;
} while (get_byte());
*top = 0;
return ReadErrorFlag ? ERROR : result;
}
int
sj3_bunsetu_henkan(
SJ3_CLIENT_ENV* client,
u_char* yomi,
int len,
u_char* kanji,
int mb_flag)
sj3_bunsetu_henkan(SJ3_CLIENT_ENV *client, u_char *yomi, int len,
u_char *kanji, int mb_flag)
{
int result;
int buflen;
@ -683,15 +706,16 @@ sj3_bunsetu_henkan(
if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) {
put_ndata(yomi, len);
put_byte(0);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1,
NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL,
1, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
result = get_int();
get_string(get_ndata(kanji, cliptr->stdy_size));
@ -699,10 +723,7 @@ sj3_bunsetu_henkan(
}
int
sj3_bunsetu_jikouho(
SJ3_CLIENT_ENV* client,
u_char* kanji,
int mode,
sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode,
int mb_flag)
{
int result;
@ -714,9 +735,11 @@ sj3_bunsetu_jikouho(
else
put_cmd(SJ3_NEXTCL_EUC);
put_int(mode);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
result = get_int();
get_string(get_ndata(kanji, cliptr->stdy_size));
@ -724,9 +747,8 @@ sj3_bunsetu_jikouho(
}
int
sj3_bunsetu_maekouho(
SJ3_CLIENT_ENV* client,
u_char* kanji, int mode, int mb_flag)
sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode,
int mb_flag)
{
int result;
@ -737,22 +759,19 @@ sj3_bunsetu_maekouho(
else
put_cmd(SJ3_PREVCL_EUC);
put_int(mode);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
result = get_int();
get_string(get_ndata(kanji, cliptr->stdy_size));
return ReadErrorFlag ? ERROR : result;
}
int
sj3_bunsetu_kouhosuu(
SJ3_CLIENT_ENV* client,
u_char* yomi,
int len,
int mb_flag)
sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *client, u_char *yomi, int len, int mb_flag)
{
int result;
int buflen;
@ -767,27 +786,24 @@ sj3_bunsetu_kouhosuu(
if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) {
put_ndata(yomi, len);
put_byte(0);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1,
NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL,
1, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
result = get_int();
return ReadErrorFlag ? ERROR : result;
}
int
sj3_bunsetu_zenkouho(
SJ3_CLIENT_ENV* client,
u_char* yomi,
int len,
SJ3_DOUON* douon,
int mb_flag)
sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *client, u_char *yomi, int len,
SJ3_DOUON *douon, int mb_flag)
{
int cnt = 0;
int buflen;
@ -802,15 +818,16 @@ sj3_bunsetu_zenkouho(
if ((len + 1) <= (buflen = BUFFER_SIZE - CMDLEN - INTLEN)) {
put_ndata(yomi, len);
put_byte(0);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL, 1,
NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 2, put_ndata, yomi, len, put_ndata, NULL,
1, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
while (get_int()) {
get_ndata(&(douon->dcid), cliptr->stdy_size);
@ -823,7 +840,6 @@ sj3_bunsetu_zenkouho(
return ReadErrorFlag ? ERROR : cnt;
}
int
sj3_tango_gakusyuu(SJ3_CLIENT_ENV *client, SJ3_STUDYREC *stdy)
{
@ -834,26 +850,22 @@ sj3_tango_gakusyuu(SJ3_CLIENT_ENV* client, SJ3_STUDYREC* stdy)
put_cmd(SJ3_STUDY);
if (cliptr->stdy_size <= (buflen = BUFFER_SIZE - CMDLEN)) {
put_ndata(stdy, cliptr->stdy_size);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 1, put_ndata, stdy, cliptr -> stdy_size, NULL,
NULL, 0, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 1, put_ndata, stdy, cliptr->stdy_size,
NULL, NULL, 0, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_bunsetu_gakusyuu(
SJ3_CLIENT_ENV* client,
u_char* yomi1,
u_char* yomi2,
SJ3_STUDYREC* stdy,
int mb_flag)
sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *client, u_char *yomi1, u_char *yomi2,
SJ3_STUDYREC *stdy, int mb_flag)
{
int yomilen1, yomilen2;
int datalen, buflen;
@ -872,7 +884,8 @@ sj3_bunsetu_gakusyuu(
put_string(yomi1, yomilen1);
put_string(yomi2, yomilen2);
put_ndata(stdy, cliptr->stdy_size);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 3, put_string, yomi1, yomilen1, put_string,
yomi2, yomilen2, put_ndata, stdy, cliptr->stdy_size,
@ -880,19 +893,14 @@ sj3_bunsetu_gakusyuu(
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_tango_touroku(
SJ3_CLIENT_ENV* client,
long dicid,
u_char* yomi,
u_char* kanji,
int code,
int mb_flag)
sj3_tango_touroku(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi,
u_char *kanji, int code, int mb_flag)
{
int yomilen, kanjilen;
int datalen, buflen;
@ -912,25 +920,23 @@ sj3_tango_touroku(
put_string(yomi, yomilen);
put_string(kanji, kanjilen);
put_int(code);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 3, put_string, yomi, yomilen, put_string, kanji,
kanjilen, put_ndata, &code, INTLEN, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 3, put_string, yomi, yomilen, put_string,
kanji, kanjilen, put_ndata, &code, INTLEN, NULL, NULL, 0) ==
ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_tango_sakujo(
SJ3_CLIENT_ENV* client,
long dicid,
u_char* yomi,
u_char* kanji,
int code,
int mb_flag)
sj3_tango_sakujo(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi,
u_char *kanji, int code, int mb_flag)
{
int yomilen, kanjilen;
int datalen, buflen;
@ -950,24 +956,22 @@ sj3_tango_sakujo(
put_string(yomi, yomilen);
put_string(kanji, kanjilen);
put_int(code);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 3, put_string, yomi, yomilen, put_string, kanji,
kanjilen, put_ndata, &code, INTLEN, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 3, put_string, yomi, yomilen, put_string,
kanji, kanjilen, put_ndata, &code, INTLEN, NULL, NULL, 0) ==
ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_tango_syutoku(
SJ3_CLIENT_ENV* client,
int dicid,
u_char* buf,
int mb_flag)
sj3_tango_syutoku(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag)
{
u_char *p;
@ -978,9 +982,11 @@ sj3_tango_syutoku(
else
put_cmd(SJ3_GETDICT_EUC);
put_int(dicid);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
p = get_string(buf);
p = get_string(p);
@ -989,11 +995,7 @@ sj3_tango_syutoku(
}
int
sj3_tango_jikouho(
SJ3_CLIENT_ENV* client,
int dicid,
u_char* buf,
int mb_flag)
sj3_tango_jikouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag)
{
u_char *p;
@ -1004,9 +1006,11 @@ sj3_tango_jikouho(
else
put_cmd(SJ3_NEXTDICT_EUC);
put_int(dicid);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
p = get_string(buf);
p = get_string(p);
@ -1015,11 +1019,7 @@ sj3_tango_jikouho(
}
int
sj3_tango_maekouho(
SJ3_CLIENT_ENV* client,
int dicid,
u_char* buf,
int mb_flag)
sj3_tango_maekouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag)
{
u_char *p;
@ -1030,9 +1030,11 @@ sj3_tango_maekouho(
else
put_cmd(SJ3_PREVDICT_EUC);
put_int(dicid);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
p = get_string(buf);
p = get_string(p);
@ -1040,13 +1042,8 @@ sj3_tango_maekouho(
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_make_dict_file(
SJ3_CLIENT_ENV* client,
char* path,
int idxlen,
int seglen,
sj3_make_dict_file(SJ3_CLIENT_ENV *client, char *path, int idxlen, int seglen,
int segnum)
{
int pathlen;
@ -1063,7 +1060,8 @@ sj3_make_dict_file(
put_int(idxlen);
put_int(seglen);
put_int(segnum);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 4, put_string, path, pathlen, put_ndata,
&idxlen, INTLEN, put_ndata, &seglen, INTLEN,
@ -1071,17 +1069,13 @@ sj3_make_dict_file(
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_make_study_file(
SJ3_CLIENT_ENV* client,
char* path,
int stynum,
int clstep,
sj3_make_study_file(SJ3_CLIENT_ENV *client, char *path, int stynum, int clstep,
int cllen)
{
int pathlen;
@ -1098,7 +1092,8 @@ sj3_make_study_file(
put_int(stynum);
put_int(clstep);
put_int(cllen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 4, put_string, path, pathlen, put_ndata,
&stynum, INTLEN, put_ndata, &clstep, INTLEN,
@ -1106,11 +1101,11 @@ sj3_make_study_file(
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_make_directory(SJ3_CLIENT_ENV *client, char *path)
{
@ -1124,19 +1119,19 @@ sj3_make_directory(SJ3_CLIENT_ENV* client, char* path)
put_cmd(SJ3_MAKEDIR);
if (pathlen <= (buflen = BUFFER_SIZE - CMDLEN)) {
put_string(path, pathlen);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 1, put_string, path, pathlen, NULL, NULL, 0,
NULL, NULL, 0, NULL, NULL, 0) == ERROR)
if (put_over(buflen, 1, put_string, path, pathlen, NULL, NULL,
0, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
return ERROR;
}
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_access(SJ3_CLIENT_ENV *client, char *path, int mode)
{
@ -1153,7 +1148,8 @@ sj3_access(SJ3_CLIENT_ENV* client, char* path, int mode)
if (datalen <= (buflen = BUFFER_SIZE - CMDLEN)) {
put_string(path, pathlen);
put_int(mode);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
} else {
if (put_over(buflen, 2, put_string, path, pathlen, put_ndata,
&mode, INTLEN, NULL, NULL, 0, NULL, NULL, 0) == ERROR)
@ -1165,7 +1161,6 @@ sj3_access(SJ3_CLIENT_ENV* client, char* path, int mode)
return ReadErrorFlag ? ERROR : result;
}
int
sj3_who(SJ3_CLIENT_ENV *client, SJ3_WHO_STRUCT *ret, int num)
{
@ -1174,7 +1169,8 @@ sj3_who(SJ3_CLIENT_ENV* client, SJ3_WHO_STRUCT* ret, int num)
client_init(client);
put_cmd(SJ3_WHO);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((i = get_int()) < 0) {
sj3_error_number = SJ3_InternalError;
@ -1189,8 +1185,7 @@ sj3_who(SJ3_CLIENT_ENV* client, SJ3_WHO_STRUCT* ret, int num)
get_nstring(ret->username, SJ3_NAME_LENGTH);
get_nstring(ret->progname, SJ3_NAME_LENGTH);
ret++;
}
else {
} else {
get_int();
skip_string();
skip_string();
@ -1201,16 +1196,17 @@ sj3_who(SJ3_CLIENT_ENV* client, SJ3_WHO_STRUCT* ret, int num)
return ReadErrorFlag ? ERROR : ((i < num) ? i : num);
}
int
sj3_quit(SJ3_CLIENT_ENV *client)
{
client_init(client);
put_cmd(SJ3_QUIT);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
@ -1220,13 +1216,14 @@ sj3_kill(SJ3_CLIENT_ENV* client)
client_init(client);
put_cmd(SJ3_KILL);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
if ((sj3_error_number = get_int())) return ERROR;
if ((sj3_error_number = get_int()))
return ERROR;
return ReadErrorFlag ? ERROR : 0;
}
int
sj3_version(SJ3_CLIENT_ENV *client, char *dst, int dstsiz)
{
@ -1235,18 +1232,28 @@ sj3_version(SJ3_CLIENT_ENV* client, char* dst, int dstsiz)
client_init(client);
put_cmd(SJ3_VERSION);
if (put_flush() == ERROR) return ERROR;
if (put_flush() == ERROR)
return ERROR;
sj3_error_number = get_int();
c = get_byte();
while (c) {
while (c) {
if (dstsiz > 2) { *dst++ = c; dstsiz--; }
if (dstsiz > 2) {
*dst++ = c;
dstsiz--;
}
c = get_byte();
}
if (dstsiz > 1) { *dst++ = 0; dstsiz--; }
if (dstsiz > 1) {
*dst++ = 0;
dstsiz--;
}
c = get_byte();
}
if (dstsiz > 0) { *dst++ = 0; dstsiz--; }
if (dstsiz > 0) {
*dst++ = 0;
dstsiz--;
}
return ReadErrorFlag ? ERROR : 0;
}

View file

@ -48,6 +48,7 @@
#include "sj_string.h"
extern int sj3_error_number;
#define SYS_SJIS 0
#define SYS_EUC 1
#define SYS_NOTDEF -1
@ -86,19 +87,22 @@ make_dirs(char* path)
int i;
for (p = path; *p; p++) {
if (*p != *path_delimiter) continue;
if (*p != *path_delimiter)
continue;
strncpy(tmp, path, (i = p - path));
tmp[i] = '\0';
if (sj3_access(&client, tmp, F_OK) != ERROR) continue;
if (sj3_error_number == SJ3_ServerDown) return ERROR;
if (sj3_access(&client, tmp, F_OK) != ERROR)
continue;
if (sj3_error_number == SJ3_ServerDown)
return ERROR;
if (sj3_make_directory(&client, tmp) == ERROR) return ERROR;
if (sj3_make_directory(&client, tmp) == ERROR)
return ERROR;
}
return 0;
}
int
sj3_open(char *host, char *user)
{
@ -106,12 +110,15 @@ sj3_open(char* host, char* user)
char *p;
int err = SJ3_NORMAL_END;
if (client.fd != -1) return SJ3_ALREADY_CONNECTED;
if (client.fd != -1)
return SJ3_ALREADY_CONNECTED;
sprintf(tmp, "%d.sj3lib", getpid());
if (sj3_make_connection(&client, host, user, tmp) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
client.fd = -1; return SJ3_CONNECT_ERROR;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
client.fd = -1;
return SJ3_CONNECT_ERROR;
}
if (client.stdy_size > SJ3_WORD_ID_SIZE) {
@ -121,7 +128,8 @@ sj3_open(char* host, char* user)
mdicid = sj3_open_dictionary(&client, MainDictionary, NULL);
if (mdicid == 0) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CANNOT_OPEN_MDICT;
}
@ -131,14 +139,17 @@ sj3_open(char* host, char* user)
strcat(tmp, user);
strcat(tmp, path_delimiter);
if (make_dirs(tmp) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
return (err | SJ3_CANNOT_MAKE_UDIR);
}
for (p = tmp ; *p ; p++) ;
for (p = tmp; *p; p++)
;
strcpy(p, UserDictionary);
if (sj3_access(&client, tmp, F_OK) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
if (sj3_make_dict_file(&client, tmp, DefIdxLen,
DefSegLen, DefSegNum) == ERROR) {
if (sj3_error_number == SJ3_ServerDown)
@ -148,13 +159,15 @@ sj3_open(char* host, char* user)
}
udicid = sj3_open_dictionary(&client, tmp, "");
if (udicid == 0) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CANNOT_OPEN_UDICT;
}
strcpy(p, StudyFile);
if (sj3_access(&client, tmp, F_OK) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
if (sj3_make_study_file(&client, tmp, DefStyNum, DefClStep,
DefClLen) == ERROR) {
if (sj3_error_number == SJ3_ServerDown)
@ -163,7 +176,8 @@ sj3_open(char* host, char* user)
}
}
if (sj3_open_study_file(&client, tmp, "") == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CANNOT_OPEN_STUDY;
}
@ -174,11 +188,9 @@ server_dead:
return SJ3_SERVER_DEAD;
}
int
sj3_open_with_list(
char* host, char* user, int dicts_num,
char** dicts, int* error_num, int** error_index)
sj3_open_with_list(char *host, char *user, int dicts_num, char **dicts,
int *error_num, int **error_index)
{
char tmp[PathNameLen];
char *p;
@ -186,12 +198,15 @@ sj3_open_with_list(
int i, err_id_num = 0;
long *dict_idx = NULL;
if (client.fd != -1) return SJ3_ALREADY_CONNECTED;
if (client.fd != -1)
return SJ3_ALREADY_CONNECTED;
sprintf(tmp, "%d.sj3lib", getpid());
if (sj3_make_connection(&client, host, user, tmp) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
client.fd = -1; return SJ3_CONNECT_ERROR;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
client.fd = -1;
return SJ3_CONNECT_ERROR;
}
if (client.stdy_size > SJ3_WORD_ID_SIZE) {
@ -200,7 +215,8 @@ sj3_open_with_list(
}
if ((dicts_num > 0) && dicts) {
if (!(dict_idx = (long *)malloc(sizeof(long) * dicts_num * 2))) {
if (!(dict_idx = (long *)malloc(sizeof(long) * dicts_num *
2))) {
return SJ3_CONNECT_ERROR;
}
memset(dict_idx, 0, sizeof(long) * dicts_num * 2);
@ -208,9 +224,11 @@ sj3_open_with_list(
dicid_list = dict_idx;
err_id_num = 0;
for (i = 0; i < dicts_num; i++) {
dict_idx[i] = sj3_open_dictionary(&client, dicts[i], NULL);
dict_idx[i] = sj3_open_dictionary(&client, dicts[i],
NULL);
if (dict_idx[i] == 0) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
dict_idx[dicts_num + err_id_num] = i;
err_id_num++;
} else if (mdicid == 0) {
@ -222,8 +240,10 @@ sj3_open_with_list(
err |= SJ3_CANNOT_OPEN_MDICT;
mdicid = 0;
}
if (error_num) *error_num = err_id_num;
if (error_index) *error_index = (int *) &(dict_idx[dicts_num]);
if (error_num)
*error_num = err_id_num;
if (error_index)
*error_index = (int *)&(dict_idx[dicts_num]);
}
strcpy(tmp, sj3_user_dir);
@ -232,14 +252,17 @@ sj3_open_with_list(
strcat(tmp, user);
strcat(tmp, path_delimiter);
if (make_dirs(tmp) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
return (err | SJ3_CANNOT_MAKE_UDIR);
}
for (p = tmp ; *p ; p++) ;
for (p = tmp; *p; p++)
;
strcpy(p, UserDictionary);
if (sj3_access(&client, tmp, F_OK) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
if (sj3_make_dict_file(&client, tmp, DefIdxLen,
DefSegLen, DefSegNum) == ERROR) {
if (sj3_error_number == SJ3_ServerDown)
@ -250,13 +273,15 @@ sj3_open_with_list(
udicid = sj3_open_dictionary(&client, tmp, "");
if (udicid == 0) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CANNOT_OPEN_UDICT;
}
strcpy(p, StudyFile);
if (sj3_access(&client, tmp, F_OK) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
if (sj3_make_study_file(&client, tmp, DefStyNum, DefClStep,
DefClLen) == ERROR) {
if (sj3_error_number == SJ3_ServerDown)
@ -265,7 +290,8 @@ sj3_open_with_list(
}
}
if (sj3_open_study_file(&client, tmp, "") == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CANNOT_OPEN_STUDY;
}
@ -275,28 +301,32 @@ server_dead:
if (dict_idx) {
free(dict_idx);
dict_idx = NULL;
if (error_num) *error_num = 0;
if (error_index) *error_index = NULL;
if (error_num)
*error_num = 0;
if (error_index)
*error_index = NULL;
}
mdicid = udicid = 0;
return SJ3_SERVER_DEAD;
}
int
sj3_close(void)
{
int err = SJ3_NORMAL_END;
int i;
if (client.fd == -1) return SJ3_NOT_CONNECTED;
if (client.fd == -1)
return SJ3_NOT_CONNECTED;
if (mdicid == 0)
err |= SJ3_NOT_OPENED_MDICT;
else if (dicid_list) {
for (i = 0; i < dicid_num; i++) {
if (sj3_close_dictionary(&client, dicid_list[i]) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_close_dictionary(&client, dicid_list[i]) ==
ERROR) {
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CLOSE_MDICT_ERROR;
}
}
@ -304,7 +334,8 @@ sj3_close(void)
dicid_list = NULL;
dicid_num = 0;
} else if (sj3_close_dictionary(&client, mdicid) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CLOSE_MDICT_ERROR;
}
mdicid = 0;
@ -312,7 +343,8 @@ sj3_close(void)
if (udicid == 0)
err |= SJ3_NOT_OPENED_UDICT;
else if (sj3_close_dictionary(&client, udicid) == ERROR) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_CLOSE_UDICT_ERROR;
}
udicid = 0;
@ -323,15 +355,18 @@ sj3_close(void)
goto server_dead;
case SJ3_StdyFileNotOpened:
err |= SJ3_NOT_OPENED_STUDY; break;
err |= SJ3_NOT_OPENED_STUDY;
break;
default:
err |= SJ3_CLOSE_STUDY_ERROR; break;
err |= SJ3_CLOSE_STUDY_ERROR;
break;
}
}
if (sj3_erase_connection(&client)) {
if (sj3_error_number == SJ3_ServerDown) goto server_dead;
if (sj3_error_number == SJ3_ServerDown)
goto server_dead;
err |= SJ3_DISCONNECT_ERROR;
}
@ -347,7 +382,6 @@ server_dead:
return SJ3_SERVER_DEAD;
}
int
sj3_getkan(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz)
{
@ -356,10 +390,12 @@ sj3_getkan(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
int len;
int stysiz = client.stdy_size;
if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI) return 0;
if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI)
return 0;
while (*yomi) {
len = sj3_ikkatu_henkan(&client, yomi, knj, knjsiz, MBCODE_SJIS);
len = sj3_ikkatu_henkan(&client, yomi, knj, knjsiz,
MBCODE_SJIS);
if (len == ERROR) {
if (client.fd < 0) {
mdicid = udicid = 0;
@ -367,8 +403,7 @@ sj3_getkan(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
}
return 0;
}
else if (len == 0)
} else if (len == 0)
break;
src = knj;
@ -379,7 +414,8 @@ sj3_getkan(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
bun->destlen = strlen(src);
bun->srcstr = yomi;
bun->deststr = knj;
while (*src) *knj++ = *src++;
while (*src)
*knj++ = *src++;
knjsiz -= bun->destlen;
src++;
yomi += bun->srclen;
@ -401,7 +437,6 @@ sj3_getkan(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
return buncnt;
}
int
sj3_getkan_euc(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz)
{
@ -413,11 +448,14 @@ sj3_getkan_euc(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
int knjorg = knjsiz;
SJ3_BUNSETU *hbun = bun;
if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI) return 0;
if ((len = strlen(yomi)) > SJ3_IKKATU_YOMI)
return 0;
if (client.svr_version == 1) {
defuse = 0;
len = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse);
if ((len < 0) || defuse) return 0;
len = sj3_str_euctosjis(buf1, sizeof(buf1), yomi,
client.default_char, &defuse);
if ((len < 0) || defuse)
return 0;
yp = buf1;
if (knjsiz > sizeof(kbuf)) {
mflag = 1;
@ -441,8 +479,7 @@ sj3_getkan_euc(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
}
return 0;
}
else if (len == 0)
} else if (len == 0)
break;
src = kp;
@ -453,7 +490,8 @@ sj3_getkan_euc(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
bun->destlen = strlen(src);
bun->srcstr = yp;
bun->deststr = kp;
while (*src) *kp++ = *src++;
while (*src)
*kp++ = *src++;
knjsiz -= bun->destlen;
src++;
yp += bun->srclen;
@ -477,15 +515,18 @@ sj3_getkan_euc(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
yp = buf1;
bun = hbun;
defuse = 0;
len = sj3_str_sjistoeuc(knj, knjorg, kp, client.default_char, &defuse);
if ((len < 0) || defuse) return 0;
len = sj3_str_sjistoeuc(knj, knjorg, kp, client.default_char,
&defuse);
if ((len < 0) || defuse)
return 0;
for (i = 0; i < buncnt; i++) {
sentou = sj3_sjistoeuclen(yp, bun[i].srcstr - yp);
saigo = sj3_sjistoeuclen(bun[i].srcstr, bun[i].srclen);
bun[i].srclen = saigo;
bun[i].srcstr = yomi + sentou;
sentou = sj3_sjistoeuclen(kp, bun[i].deststr - kp);
saigo = sj3_sjistoeuclen(bun[i].deststr, bun[i].destlen);
saigo = sj3_sjistoeuclen(bun[i].deststr,
bun[i].destlen);
bun[i].destlen = saigo;
bun[i].deststr = knj + sentou;
}
@ -498,7 +539,6 @@ sj3_getkan_euc(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
return buncnt;
}
int
sj3_getkan_mb(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz)
{
@ -510,13 +550,13 @@ sj3_getkan_mb(u_char* yomi, SJ3_BUNSETU* bun, u_char* knj, int knjsiz)
return sj3_getkan(yomi, bun, knj, knjsiz);
}
int
sj3_douoncnt(u_char *yomi)
{
int i;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI)
return 0;
i = sj3_bunsetu_kouhosuu(&client, yomi, i, MBCODE_SJIS);
if (i == ERROR) {
@ -531,19 +571,21 @@ sj3_douoncnt(u_char* yomi)
return i;
}
int
sj3_douoncnt_euc(u_char *yomi)
{
int i, l, flag;
u_char *yp;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI)
return 0;
if (client.svr_version == 1) {
defuse = 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse);
if ((l < 0) || defuse) return 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi,
client.default_char, &defuse);
if ((l < 0) || defuse)
return 0;
yp = buf1;
flag = MBCODE_SJIS;
} else {
@ -563,7 +605,6 @@ sj3_douoncnt_euc(u_char* yomi)
return i;
}
int
sj3_douoncnt_mb(u_char *yomi)
{
@ -575,13 +616,13 @@ sj3_douoncnt_mb(u_char* yomi)
return sj3_douoncnt(yomi);
}
int
sj3_getdouon(u_char *yomi, SJ3_DOUON *dou)
{
int i;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI)
return 0;
i = sj3_bunsetu_zenkouho(&client, yomi, i, dou, MBCODE_SJIS);
if (i == ERROR) {
@ -595,18 +636,20 @@ sj3_getdouon(u_char* yomi, SJ3_DOUON* dou)
return i;
}
int
sj3_getdouon_euc(u_char *yomi, SJ3_DOUON *dou)
{
int i, j, l;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI) return 0;
if ((i = strlen(yomi)) > SJ3_BUNSETU_YOMI)
return 0;
if (client.svr_version == 1) {
defuse = 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse);
if ((l < 0) || defuse) return 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi,
client.default_char, &defuse);
if ((l < 0) || defuse)
return 0;
i = sj3_bunsetu_zenkouho(&client, buf1, i, dou, MBCODE_SJIS);
if (i == ERROR) {
if (client.fd < 0) {
@ -619,7 +662,8 @@ sj3_getdouon_euc(u_char* yomi, SJ3_DOUON* dou)
defuse = 0;
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf),
dou[j].ddata, client.default_char, &defuse);
if ((l < 0) || defuse) return 0;
if ((l < 0) || defuse)
return 0;
(void)memcpy(dou[j].ddata, kbuf, l + 1);
dou[j].dlen = l;
}
@ -636,7 +680,6 @@ sj3_getdouon_euc(u_char* yomi, SJ3_DOUON* dou)
return i;
}
int
sj3_getdouon_mb(u_char *yomi, SJ3_DOUON *dou)
{
@ -648,7 +691,6 @@ sj3_getdouon_mb(u_char* yomi, SJ3_DOUON* dou)
return sj3_getdouon(yomi, dou);
}
int
sj3_gakusyuu(SJ3_STUDYREC *dcid)
{
@ -662,11 +704,11 @@ sj3_gakusyuu(SJ3_STUDYREC* dcid)
return 0;
}
int
sj3_gakusyuu2(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid)
{
if (sj3_bunsetu_gakusyuu(&client, yomi1, yomi2, dcid, MBCODE_SJIS) == ERROR) {
if (sj3_bunsetu_gakusyuu(&client, yomi1, yomi2, dcid, MBCODE_SJIS) ==
ERROR) {
if (client.fd < 0) {
mdicid = udicid = 0;
return -1;
@ -676,7 +718,6 @@ sj3_gakusyuu2(u_char* yomi1, u_char* yomi2, SJ3_STUDYREC* dcid)
return 0;
}
int
sj3_gakusyuu2_euc(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid)
{
@ -685,11 +726,15 @@ sj3_gakusyuu2_euc(u_char* yomi1, u_char* yomi2, SJ3_STUDYREC* dcid)
if (client.svr_version == 1) {
defuse = 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi1, client.default_char, &defuse);
if ((l < 0) || defuse) return 1;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi1,
client.default_char, &defuse);
if ((l < 0) || defuse)
return 1;
defuse = 0;
l = sj3_str_euctosjis(buf2, sizeof(buf2), yomi2, client.default_char, &defuse);
if ((l < 0) || defuse) return 1;
l = sj3_str_euctosjis(buf2, sizeof(buf2), yomi2,
client.default_char, &defuse);
if ((l < 0) || defuse)
return 1;
y1p = buf1;
y2p = buf2;
flag = MBCODE_SJIS;
@ -708,7 +753,6 @@ sj3_gakusyuu2_euc(u_char* yomi1, u_char* yomi2, SJ3_STUDYREC* dcid)
return 0;
}
int
sj3_gakusyuu2_mb(u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *dcid)
{
@ -720,47 +764,61 @@ sj3_gakusyuu2_mb(u_char* yomi1, u_char* yomi2, SJ3_STUDYREC* dcid)
return sj3_gakusyuu2(yomi1, yomi2, dcid);
}
int
sj3_touroku(u_char *yomi, u_char *kanji, int code)
{
if (sj3_tango_touroku(&client, udicid, yomi, kanji, code, MBCODE_SJIS)) {
if (sj3_tango_touroku(&client, udicid, yomi, kanji, code,
MBCODE_SJIS)) {
if (client.fd < 0) {
mdicid = udicid = 0;
return -1;
}
switch (sj3_error_number) {
case SJ3_NoSuchDict:
case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR;
case SJ3_DictLocked: return SJ3_DICT_LOCKED;
case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE;
case SJ3_AlreadyExistWord: return SJ3_WORD_EXIST;
case SJ3_NoMoreDouonWord: return SJ3_DOUON_FULL;
case SJ3_NoMoreUserDict: return SJ3_DICT_FULL;
case SJ3_NoMoreIndexBlock: return SJ3_INDEX_FULL;
default: return SJ3_TOUROKU_FAILED;
case SJ3_ReadOnlyDict:
return SJ3_DICT_ERROR;
case SJ3_DictLocked:
return SJ3_DICT_LOCKED;
case SJ3_BadYomiString:
return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString:
return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode:
return SJ3_BAD_HINSI_CODE;
case SJ3_AlreadyExistWord:
return SJ3_WORD_EXIST;
case SJ3_NoMoreDouonWord:
return SJ3_DOUON_FULL;
case SJ3_NoMoreUserDict:
return SJ3_DICT_FULL;
case SJ3_NoMoreIndexBlock:
return SJ3_INDEX_FULL;
default:
return SJ3_TOUROKU_FAILED;
}
}
return 0;
}
int
sj3_touroku_euc(u_char *yomi, u_char *kanji, int code)
{
int l, flag;
u_char *yp;
u_char *kp;
if (client.svr_version == 1) {
defuse = 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse);
if ((l < 0) || defuse) return SJ3_BAD_YOMI_STR;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi,
client.default_char, &defuse);
if ((l < 0) || defuse)
return SJ3_BAD_YOMI_STR;
defuse = 0;
l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji, client.default_char, &defuse);
if ((l < 0) || defuse) return SJ3_BAD_KANJI_STR;
l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji,
client.default_char, &defuse);
if ((l < 0) || defuse)
return SJ3_BAD_KANJI_STR;
yp = buf1;
kp = kbuf;
flag = MBCODE_SJIS;
@ -776,23 +834,32 @@ sj3_touroku_euc(u_char* yomi, u_char* kanji, int code)
}
switch (sj3_error_number) {
case SJ3_NoSuchDict:
case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR;
case SJ3_DictLocked: return SJ3_DICT_LOCKED;
case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE;
case SJ3_AlreadyExistWord: return SJ3_WORD_EXIST;
case SJ3_NoMoreDouonWord: return SJ3_DOUON_FULL;
case SJ3_NoMoreUserDict: return SJ3_DICT_FULL;
case SJ3_NoMoreIndexBlock: return SJ3_INDEX_FULL;
default: return SJ3_TOUROKU_FAILED;
case SJ3_ReadOnlyDict:
return SJ3_DICT_ERROR;
case SJ3_DictLocked:
return SJ3_DICT_LOCKED;
case SJ3_BadYomiString:
return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString:
return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode:
return SJ3_BAD_HINSI_CODE;
case SJ3_AlreadyExistWord:
return SJ3_WORD_EXIST;
case SJ3_NoMoreDouonWord:
return SJ3_DOUON_FULL;
case SJ3_NoMoreUserDict:
return SJ3_DICT_FULL;
case SJ3_NoMoreIndexBlock:
return SJ3_INDEX_FULL;
default:
return SJ3_TOUROKU_FAILED;
}
}
return 0;
}
int
sj3_touroku_mb(u_char *yomi, u_char *kanji, int code)
{
@ -804,7 +871,6 @@ sj3_touroku_mb(u_char* yomi, u_char* kanji, int code)
return sj3_touroku(yomi, kanji, code);
}
int
sj3_syoukyo(u_char *yomi, u_char *kanji, int code)
{
@ -815,32 +881,43 @@ sj3_syoukyo(u_char* yomi, u_char* kanji, int code)
}
switch (sj3_error_number) {
case SJ3_NoSuchDict:
case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR;
case SJ3_DictLocked: return SJ3_DICT_LOCKED;
case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE;
case SJ3_NoSuchWord: return SJ3_WORD_NOT_EXIST;
default: return SJ3_SYOUKYO_FAILED;
case SJ3_ReadOnlyDict:
return SJ3_DICT_ERROR;
case SJ3_DictLocked:
return SJ3_DICT_LOCKED;
case SJ3_BadYomiString:
return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString:
return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode:
return SJ3_BAD_HINSI_CODE;
case SJ3_NoSuchWord:
return SJ3_WORD_NOT_EXIST;
default:
return SJ3_SYOUKYO_FAILED;
}
}
return 0;
}
int
sj3_syoukyo_euc(u_char *yomi, u_char *kanji, int code)
{
int l, flag;
u_char *yp;
u_char *kp;
if (client.svr_version == 1) {
defuse = 0;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi, client.default_char, &defuse);
if ((l < 0) || defuse) return SJ3_BAD_YOMI_STR;
l = sj3_str_euctosjis(buf1, sizeof(buf1), yomi,
client.default_char, &defuse);
if ((l < 0) || defuse)
return SJ3_BAD_YOMI_STR;
defuse = 0;
l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji, client.default_char, &defuse);
if ((l < 0) || defuse) return SJ3_BAD_KANJI_STR;
l = sj3_str_euctosjis(kbuf, sizeof(kbuf), kanji,
client.default_char, &defuse);
if ((l < 0) || defuse)
return SJ3_BAD_KANJI_STR;
yp = buf1;
kp = kbuf;
flag = MBCODE_SJIS;
@ -856,19 +933,25 @@ sj3_syoukyo_euc(u_char* yomi, u_char* kanji, int code)
}
switch (sj3_error_number) {
case SJ3_NoSuchDict:
case SJ3_ReadOnlyDict: return SJ3_DICT_ERROR;
case SJ3_DictLocked: return SJ3_DICT_LOCKED;
case SJ3_BadYomiString: return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString: return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode: return SJ3_BAD_HINSI_CODE;
case SJ3_NoSuchWord: return SJ3_WORD_NOT_EXIST;
default: return SJ3_SYOUKYO_FAILED;
case SJ3_ReadOnlyDict:
return SJ3_DICT_ERROR;
case SJ3_DictLocked:
return SJ3_DICT_LOCKED;
case SJ3_BadYomiString:
return SJ3_BAD_YOMI_STR;
case SJ3_BadKanjiString:
return SJ3_BAD_KANJI_STR;
case SJ3_BadHinsiCode:
return SJ3_BAD_HINSI_CODE;
case SJ3_NoSuchWord:
return SJ3_WORD_NOT_EXIST;
default:
return SJ3_SYOUKYO_FAILED;
}
}
return 0;
}
int
sj3_syoukyo_mb(u_char *yomi, u_char *kanji, int code)
{
@ -880,7 +963,6 @@ sj3_syoukyo_mb(u_char* yomi, u_char* kanji, int code)
return sj3_syoukyo(yomi, kanji, code);
}
int
sj3_getdict(u_char *buf)
{
@ -894,7 +976,6 @@ sj3_getdict(u_char* buf)
return 0;
}
int
sj3_getdict_euc(u_char *buf)
{
@ -910,12 +991,15 @@ sj3_getdict_euc(u_char* buf)
}
defuse = 0;
slen = strlen(buf) + 1;
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse);
if ((l < 0) || defuse) return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]),
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf,
client.default_char, &defuse);
if ((ll < 0) || defuse) return 1;
if ((l < 0) || defuse)
return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l,
&(buf[slen]), client.default_char, &defuse);
if ((ll < 0) || defuse)
return 1;
ll++;
slen += strlen(&(buf[slen])) + 1;
l = l + ll;
@ -934,7 +1018,6 @@ sj3_getdict_euc(u_char* buf)
return 0;
}
int
sj3_getdict_mb(u_char *buf)
{
@ -959,7 +1042,6 @@ sj3_nextdict(u_char* buf)
return 0;
}
int
sj3_nextdict_euc(u_char *buf)
{
@ -975,12 +1057,15 @@ sj3_nextdict_euc(u_char* buf)
}
defuse = 0;
slen = strlen(buf) + 1;
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse);
if ((l < 0) || defuse) return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]),
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf,
client.default_char, &defuse);
if ((ll < 0) || defuse) return 1;
if ((l < 0) || defuse)
return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l,
&(buf[slen]), client.default_char, &defuse);
if ((ll < 0) || defuse)
return 1;
ll++;
slen += strlen(&(buf[slen])) + 1;
l = l + ll;
@ -999,7 +1084,6 @@ sj3_nextdict_euc(u_char* buf)
return 0;
}
int
sj3_nextdict_mb(u_char *buf)
{
@ -1024,7 +1108,6 @@ sj3_prevdict(u_char* buf)
return 0;
}
int
sj3_prevdict_euc(u_char *buf)
{
@ -1040,12 +1123,15 @@ sj3_prevdict_euc(u_char* buf)
}
defuse = 0;
slen = strlen(buf) + 1;
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf, client.default_char, &defuse);
if ((l < 0) || defuse) return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l, &(buf[slen]),
l = sj3_str_sjistoeuc(kbuf, sizeof(kbuf), buf,
client.default_char, &defuse);
if ((ll < 0) || defuse) return 1;
if ((l < 0) || defuse)
return 1;
l++;
ll = sj3_str_sjistoeuc(&(kbuf[l]), sizeof(kbuf) - l,
&(buf[slen]), client.default_char, &defuse);
if ((ll < 0) || defuse)
return 1;
ll++;
slen += strlen(&(buf[slen])) + 1;
l = l + ll;
@ -1064,7 +1150,6 @@ sj3_prevdict_euc(u_char* buf)
return 0;
}
int
sj3_prevdict_mb(u_char *buf)
{
@ -1089,7 +1174,6 @@ sj3_lockserv(void)
return 0;
}
int
sj3_unlockserv(void)
{

View file

@ -28,7 +28,6 @@
* from Sony Corporation.
*/
#ifndef _SJ3LIB_H_
#define _SJ3LIB_H_ 1
@ -37,8 +36,6 @@
#define SJ3_NORMAL_END 0
#define SJ3_SERVER_DEAD (1 << 0)
#define SJ3_CONNECT_ERROR (1 << 1)
#define SJ3_ALREADY_CONNECTED (1 << 2)
#define SJ3_CANNOT_OPEN_MDICT (1 << 3)
@ -48,8 +45,6 @@
#define SJ3_CANNOT_MAKE_UDICT (1 << 7)
#define SJ3_CANNOT_MAKE_STUDY (1 << 8)
#define SJ3_DISCONNECT_ERROR (1 << 1)
#define SJ3_NOT_CONNECTED (1 << 2)
#define SJ3_NOT_OPENED_MDICT (1 << 3)
@ -59,8 +54,6 @@
#define SJ3_CLOSE_UDICT_ERROR (1 << 7)
#define SJ3_CLOSE_STUDY_ERROR (1 << 8)
#define SJ3_DICT_ERROR 1
#define SJ3_DICT_LOCKED 2
#define SJ3_BAD_YOMI_STR 3
@ -76,20 +69,11 @@
#define SJ3_WORD_NOT_EXIST 6
#define SJ3_SYOUKYO_FAILED 10
#define SJ3_IKKATU_YOMI 512
#define SJ3_BUNSETU_YOMI 128
#define SJ3_BUNSETU_KANJI 512
#ifndef SJ3_WORD_ID_SIZE
# define SJ3_WORD_ID_SIZE 32
#endif
@ -98,9 +82,6 @@ typedef struct studyrec {
unsigned char dummy[SJ3_WORD_ID_SIZE];
} SJ3_STUDYREC;
typedef struct bunsetu {
int srclen;
int destlen;
@ -109,16 +90,12 @@ typedef struct bunsetu {
struct studyrec dcid;
} SJ3_BUNSETU;
typedef struct douon {
unsigned char ddata[SJ3_BUNSETU_KANJI];
int dlen;
SJ3_STUDYREC dcid;
} SJ3_DOUON;
#define SJ3_H_NRMNOUN 1
#define SJ3_H_PRONOUN 12
#define SJ3_H_LNAME 21
@ -148,13 +125,6 @@ typedef struct douon {
#define SJ3_H_WAVERB 99
#define SJ3_H_SINGLE 189
/* moved from include/sj3lowlib.h for function prototypes.
* $SonyRCSfile: sj3lowlib.h,v $
* $SonyRevision: 1.1 $
* $SonyDate: 1994/06/03 08:00:59 $
*/
typedef struct sj3_client_env {
int fd;
int serv_dead_flg;
@ -174,36 +144,51 @@ typedef struct sj3_who_struct {
char progname[SJ3_NAME_LENGTH];
} SJ3_WHO_STRUCT;
#define MBCODE_SJIS 1
#define MBCODE_EUC 2
/* level1.c */
void sj3_set_timeout(int timeout);
int sj3_make_connection(SJ3_CLIENT_ENV *client, char *serv, char *user, char *prog);
int sj3_make_connection(SJ3_CLIENT_ENV *client, char *serv, char *user,
char *prog);
int sj3_erase_connection(SJ3_CLIENT_ENV *client);
long sj3_open_dictionary(SJ3_CLIENT_ENV *client, char *dictname, char *password);
long sj3_open_dictionary(SJ3_CLIENT_ENV *client, char *dictname,
char *password);
int sj3_close_dictionary(SJ3_CLIENT_ENV *client, long dicid);
int sj3_open_study_file(SJ3_CLIENT_ENV *client, char *stdyname, char *password);
int sj3_close_study_file(SJ3_CLIENT_ENV *client);
int sj3_get_id_size(SJ3_CLIENT_ENV *client);
int sj3_lock_server(SJ3_CLIENT_ENV *client);
int sj3_unlock_server(SJ3_CLIENT_ENV *client);
int sj3_ikkatu_henkan(SJ3_CLIENT_ENV *client, u_char *src, u_char *dst, int dstsiz, int mb_flag);
int sj3_bunsetu_henkan(SJ3_CLIENT_ENV *client, u_char *yomi, int len, u_char *kanji, int mb_flag);
int sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode, int mb_flag);
int sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode, int mb_flag);
int sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *client, u_char *yomi, int len, int mb_flag);
int sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *client, u_char *yomi, int len, SJ3_DOUON *douon, int mb_flag);
int sj3_ikkatu_henkan(SJ3_CLIENT_ENV *client, u_char *src, u_char *dst,
int dstsiz, int mb_flag);
int sj3_bunsetu_henkan(SJ3_CLIENT_ENV *client, u_char *yomi, int len,
u_char *kanji, int mb_flag);
int sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode,
int mb_flag);
int sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *client, u_char *kanji, int mode,
int mb_flag);
int sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *client, u_char *yomi, int len,
int mb_flag);
int sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *client, u_char *yomi, int len,
SJ3_DOUON *douon, int mb_flag);
int sj3_tango_gakusyuu(SJ3_CLIENT_ENV *client, SJ3_STUDYREC *stdy);
int sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *client, u_char *yomi1, u_char *yomi2, SJ3_STUDYREC *stdy, int mb_flag);
int sj3_tango_touroku(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi, u_char *kanji, int code, int mb_flag);
int sj3_tango_sakujo(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi, u_char *kanji, int code, int mb_flag);
int sj3_tango_syutoku(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag);
int sj3_tango_jikouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag);
int sj3_tango_maekouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf, int mb_flag);
int sj3_make_dict_file(SJ3_CLIENT_ENV *client, char *path, int idxlen, int seglen, int segnum);
int sj3_make_study_file(SJ3_CLIENT_ENV *client, char *path, int stynum, int clstep, int cllen);
int sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *client, u_char *yomi1, u_char *yomi2,
SJ3_STUDYREC *stdy, int mb_flag);
int sj3_tango_touroku(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi,
u_char *kanji, int code, int mb_flag);
int sj3_tango_sakujo(SJ3_CLIENT_ENV *client, long dicid, u_char *yomi,
u_char *kanji, int code, int mb_flag);
int sj3_tango_syutoku(SJ3_CLIENT_ENV *client, int dicid, u_char *buf,
int mb_flag);
int sj3_tango_jikouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf,
int mb_flag);
int sj3_tango_maekouho(SJ3_CLIENT_ENV *client, int dicid, u_char *buf,
int mb_flag);
int sj3_make_dict_file(SJ3_CLIENT_ENV *client, char *path, int idxlen,
int seglen, int segnum);
int sj3_make_study_file(SJ3_CLIENT_ENV *client, char *path, int stynum,
int clstep, int cllen);
int sj3_make_directory(SJ3_CLIENT_ENV *client, char *path);
int sj3_access(SJ3_CLIENT_ENV *client, char *path, int mode);
int sj3_who(SJ3_CLIENT_ENV *client, SJ3_WHO_STRUCT *ret, int num);
@ -213,7 +198,8 @@ int sj3_version(SJ3_CLIENT_ENV *client, char *dst, int dstsiz);
/* sj.c */
int sj3_open(char *host, char *user);
int sj3_open_with_list(char *host, char *user, int dicts_num, char **dicts, int *error_num, int **error_index);
int sj3_open_with_list(char *host, char *user, int dicts_num, char **dicts,
int *error_num, int **error_index);
int sj3_close(void);
int sj3_getkan(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz);
int sj3_getkan_euc(u_char *yomi, SJ3_BUNSETU *bun, u_char *knj, int knjsiz);

View file

@ -51,7 +51,8 @@
#define iskana(c) ((0xa1 <= (c)) && ((c) <= 0xdf))
int
sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag)
sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in,
unsigned char *sjis_default, int *useflag)
{
unsigned char *sjis = in, *euc = out;
int n = 0;
@ -60,15 +61,17 @@ sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in, unsigned ch
euc[0] = '\0';
*useflag = 0;
if (!sjis) return 0;
if (!sjis)
return 0;
while (*sjis && n < outlen) {
if (issjis1(*sjis)) {
code = sjis2euc((*sjis << 8) | *(sjis + 1));
if (n + 2 > outlen) return -1;
if (n + 2 > outlen)
return -1;
if (code == 0) {
default_code = sjis2euc((sjis_default[0] << 8)
| sjis_default[1]);
default_code = sjis2euc((sjis_default[0] << 8) |
sjis_default[1]);
euc[n++] = default_code >> 8;
euc[n++] = default_code & 0xff;
(*useflag)++;
@ -79,23 +82,24 @@ sj3_str_sjistoeuc(unsigned char *out, int outlen, unsigned char *in, unsigned ch
sjis += 2;
} else {
if (*sjis >= 0xa1 && *sjis <= 0xdf) {
if (n + 2 > outlen) return -1;
if (n + 2 > outlen)
return -1;
euc[n++] = SS2;
}
euc[n++] = *sjis;
sjis++;
}
}
if (n > outlen) return -1;
if (n > outlen)
return -1;
euc[n] = '\0';
return n;
}
int
sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned char *sjis_default, int *useflag)
sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in,
unsigned char *sjis_default, int *useflag)
{
unsigned char *euc = in, *sjis = out;
int n = 0;
@ -104,12 +108,14 @@ sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned ch
sjis[0] = '\0';
*useflag = 0;
if (!euc) return 0;
if (!euc)
return 0;
while (*euc && n < outlen) {
if (iseuc(*euc)) {
code = euc2sjis((*euc << 8) | *(euc + 1));
if (n + 2 > outlen) return -1;
if (n + 2 > outlen)
return -1;
if (code == 0) {
sjis[n++] = sjis_default[0];
sjis[n++] = sjis_default[1];
@ -120,7 +126,8 @@ sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned ch
}
euc += 2;
} else if (*euc == SS3) {
if (n + 2 > outlen) return -1;
if (n + 2 > outlen)
return -1;
sjis[n++] = sjis_default[0];
sjis[n++] = sjis_default[1];
euc += 3;
@ -133,7 +140,8 @@ sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned ch
euc++;
}
}
if (n > outlen) return -1;
if (n > outlen)
return -1;
sjis[n] = '\0';
return n;
@ -142,14 +150,16 @@ sj3_str_euctosjis(unsigned char *out, int outlen, unsigned char *in, unsigned ch
int
sj3_sjistoeuclen(unsigned char *str, int max)
{
register int len = 0, bytes = 1;
int len = 0, bytes = 1;
if (!max) return 0;
if (!max)
return 0;
while ((bytes <= max) && *str) {
if (issjis1(*str)) {
str++;
bytes++;
if (!*str) break;
if (!*str)
break;
len += 2;
} else if (*str & 0x80) {
len += 2;
@ -194,8 +204,8 @@ sj_euc2sjis (unsigned char *s)
void
sj_jis2sjis(unsigned char *s)
{
register int high, low;
register int nh, nl;
int high, low;
int nh, nl;
high = s[0];
low = s[1];
@ -206,8 +216,7 @@ sj_jis2sjis (unsigned char *s)
nl = low + 0x1f;
if (low > 0x5f)
nl++;
}
else
} else
nl = low + 0x7e;
s[0] = nh;
s[1] = nl;
@ -224,16 +233,16 @@ sj_sjis2euc (unsigned char *s)
void
sj_sjis2jis(unsigned char *s)
{
register int byte1, byte2;
register unsigned char *sp;
int byte1, byte2;
unsigned char *sp;
sp = s;
byte1 = *sp++;
byte2 = *sp--;
if (byte1 <= 0x80 || byte1 >= 0xf0
|| ( byte1>=0xa0 && byte1<=0xdf )
|| byte2 <= 0x3f || byte2 >= 0xfe || byte2==0x7f ) {
if (byte1 <= 0x80 || byte1 >= 0xf0 ||
(byte1 >= 0xa0 && byte1 <= 0xdf) ||
byte2 <= 0x3f || byte2 >= 0xfe || byte2 == 0x7f) {
byte1 = 0x81;
byte2 = 0x40;
}
@ -241,8 +250,7 @@ sj_sjis2jis (unsigned char *s)
if (byte2 >= 0x9f) {
*sp++ = (byte1 << 1) + 0x22;
*sp = byte2 - 0x7e;
}
else {
} else {
*sp++ = (byte1 << 1) + 0x21;
*sp = byte2 - ((byte2 <= 0x7e) ? 0x1f : 0x20);
}