/*
 * Copyright (c) 1991-1994  Sony Corporation
 * 
 * Permission is hereby granted, free of charge, to any person obtaining
 * a copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be
 * included in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL SONY CORPORATION BE LIABLE FOR ANY CLAIM,
 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
 * THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 * 
 * Except as contained in this notice, the name of Sony Corporation
 * shall not be used in advertising or otherwise to promote the sale, use
 * or other dealings in this Software without prior written authorization
 * from Sony Corporation.
 *
 */

/*
 * $SonyRCSfile: sj3lib.h,v $  
 * $SonyRevision: 1.1 $ 
 * $SonyDate: 1994/06/03 08:03:57 $
 */


#ifndef SJ3LIB_H
#define SJ3LIB_H

#include <sys/types.h>

#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)
#define SJ3_CANNOT_OPEN_UDICT  (1 << 4)
#define SJ3_CANNOT_OPEN_STUDY  (1 << 5)
#define SJ3_CANNOT_MAKE_UDIR   (1 << 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)
#define SJ3_NOT_OPENED_UDICT   (1 << 4)
#define SJ3_NOT_OPENED_STUDY   (1 << 5)
#define SJ3_CLOSE_MDICT_ERROR  (1 << 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
#define SJ3_BAD_KANJI_STR   4
#define SJ3_BAD_HINSI_CODE  5

#define SJ3_WORD_EXIST      6
#define SJ3_DOUON_FULL      7
#define SJ3_DICT_FULL       8
#define SJ3_INDEX_FULL      9
#define SJ3_TOUROKU_FAILED  10

#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

typedef struct studyrec {
 unsigned char dummy[SJ3_WORD_ID_SIZE];
} SJ3_STUDYREC;




typedef struct bunsetu {
 int srclen;
 int destlen;
 unsigned char *srcstr;
 unsigned char *deststr;
 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
#define SJ3_H_FNAME   22
#define SJ3_H_LOCNAME 24
#define SJ3_H_PREFIC  25
#define SJ3_H_RENTAI  26
#define SJ3_H_CONJUNC 27
#define SJ3_H_SUBNUM  29
#define SJ3_H_NUMERAL 30
#define SJ3_H_PREFIX  31
#define SJ3_H_POSTFIX 36
#define SJ3_H_ADVERB  45
#define SJ3_H_ADJECT  60
#define SJ3_H_ADJVERB 71
#define SJ3_H_SILVERB 80
#define SJ3_H_ZILVERB 81
#define SJ3_H_ONEVERB 90
#define SJ3_H_KAVERB  91
#define SJ3_H_GAVERB  92
#define SJ3_H_SAVERB  93
#define SJ3_H_TAVERB  94
#define SJ3_H_NAVERB  95
#define SJ3_H_BAVERB  96
#define SJ3_H_MAVERB  97
#define SJ3_H_RAVERB  98
#define SJ3_H_WAVERB  99
#define SJ3_H_SINGLE  189

/* sj3.c */
int sj3_open(char *, char *);

int sj3_open_with_list(char *, char *, int, char **, int *, int **);

int sj3_close();

int sj3_getkan(u_char *, SJ3_BUNSETU *, u_char *, int);
int sj3_getkan_euc(u_char *, SJ3_BUNSETU *, u_char *, int);
int sj3_getkan_mb(u_char *, SJ3_BUNSETU *, u_char *, int);

int sj3_douoncnt(u_char *);
int sj3_douoncnt_euc(u_char *);
int sj3_douoncnt_mb(u_char *);

int sj3_getdouon(u_char *, SJ3_DOUON *);
int sj3_getdouon_euc(u_char *, SJ3_DOUON *);
int sj3_getdouon_mb(u_char *, SJ3_DOUON *);

int sj3_gakusyuu(SJ3_STUDYREC *);

int sj3_gakusyuu2(u_char *, u_char *, SJ3_STUDYREC *);
int sj3_gakusyuu2_euc(u_char *, u_char *, SJ3_STUDYREC *);
int sj3_gakusyuu2_mb(u_char *, u_char *, SJ3_STUDYREC *);

int sj3_touroku(u_char *, u_char *, int);
int sj3_touroku_euc(u_char *, u_char *, int);
int sj3_touroku_mb(u_char *, u_char *, int);

int sj3_syoukyo(u_char *, u_char *, int);
int sj3_syoukyo_euc(u_char *, u_char *, int);
int sj3_syoukyo_mb(u_char *, u_char *, int);

int sj3_getdict(u_char *);
int sj3_getdict_euc(u_char *);
int sj3_getdict_mb(u_char *);

int sj3_nextdict(u_char *);
int sj3_nextdict_euc(u_char *);
int sj3_nextdict_mb(u_char *);

int sj3_prevdict(u_char *);
int sj3_prevdict_euc(u_char *);
int sj3_prevdict_mb(u_char *);

int sj3_lockserv();

int sj3_unlockserv();

extern int sj3_error_number;

#ifdef SJ3LIB_INTERNAL

#include "sj3lowlib.h"
#include "sjcompat.h"

/* level1.c */
int sj3_set_timeout(int);
int sj3_make_connection(SJ3_CLIENT_ENV *, char *, char *, char *);
int sj3_erase_connection(SJ3_CLIENT_ENV *);
long sj3_open_dictionary(SJ3_CLIENT_ENV *, char *, char *);
int sj3_close_dictionary(SJ3_CLIENT_ENV *, long);
int sj3_open_study_file(SJ3_CLIENT_ENV *, char *, char *);
int sj3_close_study_file(SJ3_CLIENT_ENV *);
int sj3_get_id_size(SJ3_CLIENT_ENV *);
int sj3_lock_server(SJ3_CLIENT_ENV *);
int sj3_unlock_server(SJ3_CLIENT_ENV *);
int sj3_ikkatu_henkan(SJ3_CLIENT_ENV *, u_char *, u_char *, int, int);
int sj3_bunsetu_henkan(SJ3_CLIENT_ENV *, u_char *, int, u_char *, int);
int sj3_bunsetu_jikouho(SJ3_CLIENT_ENV *, u_char *, int, int);
int sj3_bunsetu_maekouho(SJ3_CLIENT_ENV *, u_char *, int, int);
int sj3_bunsetu_kouhosuu(SJ3_CLIENT_ENV *, u_char *, int, int);
int sj3_bunsetu_zenkouho(SJ3_CLIENT_ENV *, u_char *, int, SJ3_DOUON *, int);
int sj3_tango_gakusyuu(SJ3_CLIENT_ENV *, SJ3_STUDYREC *);
int sj3_bunsetu_gakusyuu(SJ3_CLIENT_ENV *, u_char *, u_char *, SJ3_STUDYREC *, int);
int sj3_tango_touroku(SJ3_CLIENT_ENV *, long, u_char *, u_char *, int, int);
int sj3_tango_sakujo(SJ3_CLIENT_ENV *, long, u_char *, u_char *, int, int);
int sj3_tango_syutoku(SJ3_CLIENT_ENV *, int, u_char *, int);
int sj3_tango_jikouho(SJ3_CLIENT_ENV *, int, u_char *, int);
int sj3_tango_maekouho(SJ3_CLIENT_ENV *, int, u_char *, int);
int sj3_make_dict_file(SJ3_CLIENT_ENV *, char *, int, int, int);
int sj3_make_study_file(SJ3_CLIENT_ENV *, char *, int, int, int);
int sj3_make_directory(SJ3_CLIENT_ENV *, char *);
int sj3_access(SJ3_CLIENT_ENV *, char *, int);
int sj3_who(SJ3_CLIENT_ENV *, SJ3_WHO_STRUCT *, int);
int sj3_quit(SJ3_CLIENT_ENV *);
int sj3_kill(SJ3_CLIENT_ENV *);
int sj3_version(SJ3_CLIENT_ENV *, char *, int);

/* string.c */
int sj3_str_sjistoeuc(unsigned char *, int, unsigned char *, unsigned char *, int *);
int sj3_str_euctosjis(unsigned char *, int, unsigned char *, unsigned char *, int *);
int sj3_sjistoeuclen(unsigned char *, int);
#if !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4))
int sj3_sjistoeuc(unsigned char *s, int, unsigned char *, int);
int sj3_euctosjis(unsigned char *s, int, unsigned char *, int);
void sj_euc2sjis(unsigned char *);
void sj_jis2sjis(unsigned char *);
void sj_sjis2euc(unsigned char *);
void sj_sjis2jis(unsigned char *);
unsigned short sj3_jis2sjis(unsigned short);
unsigned short sj3_jis2euc(unsigned short);
unsigned short sj3_sjis2jis(unsigned short);
unsigned short sj3_euc2sjis(unsigned short);
unsigned short sj3_sjis2euc(unsigned short);
#ifndef SVR4
int sj3_sjistoeuc(unsigned char *, int, unsigned char *, int);
int sj3_euctosjis(unsigned char *, int, unsigned char *, int);
#endif
#endif /* !defined(__sony_news) || (defined(__sony_news) && !defined(SVR4)) */

#endif /* SJ3LIB_INTERNAL */

#endif /* SJ3LIB_H */
