/* $Id: wnnlib.h,v 10.8 1999/05/25 06:21:10 ishisone Exp $ */

/*
 *	wnnlib.h -- wnnlib 用ヘッダファイル (Wnn Version4/6 対応版)
 *		version 5.0
 *		ishisone@sra.co.jp
 */

/*
 * Copyright (c) 1989  Software Research Associates, Inc.
 * Copyright (c) 1998  MORIBE, Hideyuki
 *
 * Permission to use, copy, modify, and distribute this software and its
 * documentation for any purpose and without fee is hereby granted, provided
 * that the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Software Research Associates not be
 * used in advertising or publicity pertaining to distribution of the
 * software without specific, written prior permission.  Software Research
 * Associates makes no representations about the suitability of this software
 * for any purpose.  It is provided "as is" without express or implied
 * warranty.
 *
 * Author:  Makoto Ishisone, Software Research Associates, Inc., Japan
 *          MORIBE, Hideyuki
 */

#ifndef _wnnlib_h
#define _wnnlib_h

#include	<commonhd.h>
#include	<jllib.h>
#include	<wnnerror.h>

#ifndef WCHAR_DEFINED
#define WCHAR_DEFINED
#undef wchar
typedef unsigned short wchar;
#endif


/* 定数 */
#define JC_FORWARD	1
#define JC_BACKWARD	0
#define JC_NEXT		0
#define JC_PREV		1
#define JC_HIRAGANA	0
#define JC_KATAKANA	1

/* エラー番号 */
#define JE_NOERROR		0
#define JE_WNNERROR		1	/* jllib のエラー */
#define JE_NOCORE		2	/* メモリが確保できない */
#define JE_NOTCONVERTED		3	/* 対象文節がまだ変換されていない */
#define JE_CANTDELETE		4	/* バッファの先頭の前、あるいは
					 * 最後の次の文字を削除しようとした */
#define JE_NOSUCHCLAUSE		5	/* 指定された番号の文節が存在しない */
#define JE_CANTSHRINK		6	/* 1 文字の文節を縮めようとした */
#define JE_CANTEXPAND		7	/* 最後の文節を伸ばそうとした */
#define JE_NOCANDIDATE		8	/* 次候補がない */
#define JE_NOSUCHCANDIDATE	9	/* 指定された番号の候補が存在しない */
#define JE_CANTMOVE		10	/* バッファの先頭の前、あるいは
					 * 最後の次に移動しようとした */
#define JE_CLAUSEEMPTY		11	/* 空の文を変換しようとした */
#define JE_ALREADYFIXED		12	/* すでに確定されている文に対して
					 * 操作を行なった */

/* エラー番号 */
extern int	jcErrno;	/* エラー番号 */

/* データタイプ */

/* 各小文節の情報 */
typedef struct {
	wchar	*kanap;		/* 読み文字列 */
	wchar	*dispp;		/* 表示文字列 */
	char	conv;		/* 変換済みか */
				/* 0: 未変換 1: 変換済 -1: で疑似変換 */
	char	ltop;		/* 大文節の先頭か? */
} jcClause;


/* 作業域 */
typedef struct {
    /* public member */
	int		nClause;	/* 文節数 */
	int		curClause;	/* カレント文節番号 */
	int		curLCStart;	/* カレント大文節開始文節番号 */
	int		curLCEnd;	/* カレント大文節終了文節番号 */
	wchar		*kanaBuf;	/* かなバッファ */
	wchar		*kanaEnd;
	wchar		*displayBuf;	/* ディスプレイバッファ */
	wchar		*displayEnd;
	jcClause	*clauseInfo;	/* 文節情報 */
	struct wnn_buf	*wnn;
    /* private member */
	int		fixed;		/* 確定されたかどうか */
	wchar		*dot;		/* ドットの位置 */
	int		candKind;	/* 大文節の全候補か小文節の候補かを
					   表すフラグ */
	int		candClause;	/* 全候補をとっている文節番号 */
	int		candClauseEnd;	/* 大文節の全候補の時、終了文節番号 */
	int		bufferSize;	/* kanaBuf/displayBuf の大きさ */
	int		clauseSize;	/* clauseInfo の大きさ */
} jcConvBuf;

#ifdef __STDC__
extern struct wnn_buf *jcOpen(char *server, char *envname,
				int override, char *rcfile,
				void (*error)(), int (*confirm)(),
				int timeout);
extern struct wnn_buf *jcOpen2(char *server, char *envname,
				int override, char *rcfile4, char *rcfile6,
				void (*error)(), int (*confirm)(),
				int timeout);
extern int jcClose(struct wnn_buf *wnn);
extern int jcIsConnect(struct wnn_buf *wnn);
extern jcConvBuf *jcCreateBuffer(struct wnn_buf *wnn,
					int clause, int buffersize);
extern int jcDestroyBuffer(jcConvBuf *buf, int savedic);
extern int jcClear(jcConvBuf *buf);
extern int jcInsertChar(jcConvBuf *buf, int c);
extern int jcDeleteChar(jcConvBuf *buf, int prev);
extern int jcKillLine(jcConvBuf *buf);
extern int jcConvert(jcConvBuf *buf, int small, int tan, int jump);
extern int jcUnconvert(jcConvBuf *buf);
extern int jcCancel(jcConvBuf *buf);
extern int jcExpand(jcConvBuf *buf, int small, int convf);
extern int jcShrink(jcConvBuf *buf, int small, int convf);
extern int jcKana(jcConvBuf *buf, int small, int kind);
extern int jcFix(jcConvBuf *buf);
extern int jcFix1(jcConvBuf *buf);
extern int jcNext(jcConvBuf *buf, int small, int prev);
extern int jcCandidateInfo(jcConvBuf *buf, int small,
			   int *ncandp, int *curcandp);
extern int jcGetCandidate(jcConvBuf *buf, int n, wchar *candstr);
extern int jcSelect(jcConvBuf *buf, int n);
extern int jcDotOffset(jcConvBuf *buf);
extern int jcIsConverted(jcConvBuf *buf, int cl);
extern int jcMove(jcConvBuf *buf, int small, int dir);
extern int jcTop(jcConvBuf *buf);
extern int jcBottom(jcConvBuf *buf);
extern int jcChangeClause(jcConvBuf *buf, wchar *str);
extern int jcSaveDic(jcConvBuf *buf);
#else
extern struct wnn_buf *jcOpen();
extern struct wnn_buf *jcOpen2();
extern int jcClose();
extern int jcIsConnect();
extern jcConvBuf *jcCreateBuffer();
extern int jcDestroyBuffer();
extern int jcClear();
extern int jcInsertChar();
extern int jcDeleteChar();
extern int jcKillLine();
extern int jcConvert();
extern int jcUnconvert();
extern int jcCancel();
extern int jcExpand();
extern int jcShrink();
extern int jcKana();
extern int jcFix();
extern int jcNext();
extern int jcCandidateInfo();
extern int jcGetCandidate();
extern int jcSelect();
extern int jcDotOffset();
extern int jcIsConverted();
extern int jcMove();
extern int jcTop();
extern int jcBottom();
extern int jcChangeClause();
extern int jcSaveDic();
#endif

#endif /* _wnnlib_h */
