#ifndef _POBOXLIB_H_
#define _POBOXLIB_H_

typedef int POBOX_INT;
// 初期化
POBOX_INT pobox_init(void);
// 終了
void pobox_finish(void);
typedef enum {
	POBOXDICT_STANDARD,	// 標準辞書
	POBOXDICT_LOCATION,	// 地名辞書
	POBOXDICT_PERSONNAME	// 人名辞書
} POBoxDictKind;

typedef enum {
	POBOXDICT_TEXT,		// テキスト型式(非圧縮/交換型式)
	POBOXDICT_SARY,		// SARY型式
	POBOXDICT_LOOKUP,	// トライ型式
	POBOXDICT_PDB,		// PalmのPDB型式
	POBOXDICT_PDB_VFS	// PalmのVFS(MSなど)のPDB型式
} POBoxDictType;

typedef struct {
	char *name;
	POBoxDictKind kind;
	POBoxDictType type;
	int readonly;
	int backup;		// Palm用: HotSyncでBackupするかどうか
} POBoxDict;

// 使用可能な辞書リストの取得
POBOX_INT pobox_getdictlist(POBoxDict *dictlist[], POBOX_INT limit);
// 使用する辞書の指定
POBOX_INT pobox_usedict(POBoxDict *dict);
// 辞書の属性を設定
POBOX_INT pobox_setattr(POBoxDict *dict, POBoxDict *newdict);
// 辞書に単語を登録
POBOX_INT pobox_regword(POBoxDict *dict, unsigned char *word,
        unsigned char *pattern, unsigned char *context);
// 辞書から単語を削除
POBOX_INT pobox_delword(POBoxDict *dict, unsigned char *word,
        unsigned char *pattern);
// 登録単語数の取得
POBOX_INT pobox_entries(POBoxDict *dict);
// n番目の登録単語の取得
POBOX_INT pobox_getent(POBoxDict *dict, POBOX_INT nth,
	unsigned char *word, unsigned char *pattern);
// n番目のエントリに単語を登録
POBOX_INT pobox_regent(POBoxDict *dict, POBOX_INT nth,
	unsigned char *word, unsigned char *pattern, unsigned char *context);
// n番目の登録単語の削除
POBOX_INT pobox_delent(POBoxDict *dict, POBOX_INT nth);
// 辞書検索の実行
POBOX_INT pobox_search(unsigned char *pattern);
// インデクスを指定して検索結果の単語を得る
POBOX_INT pobox_getcands(unsigned char **cands,
        unsigned char **patterns, POBOX_INT first, POBOX_INT n);
// 検索モードの指定
void pobox_searchmode(POBOX_INT mode);
#define POBOX_EXACT 1
#define POBOX_APPROXIMATE 2
// コンテクストの指定
void pobox_context(unsigned char *context, POBOX_INT contextlen);
// 選択単語の指定 / 単語学習処理
void pobox_select(POBOX_INT selindex);
#endif
