 3.3 使用する構造体

#include"jslib.h" で定義されている構造体は以下の通り。

/* 前端ベクタ(品詞番号)の定義 */
#define	WNN_BUN_SENTOU		/* 大文節の先頭になれる */
#define	WNN_ALL_HINSI		/* すべての品詞 */
/* 終端ベクタの定義 */
#define	WNN_VECT_KANREN		/* 連文節変換の終端ベクター */
#define	WNN_VECT_KANTAN		/* 単文節変換の終端ベクター */
#define WNN_VECT_KANZEN		/* 全候補取出しの終端ベクター */
#define WNN_VECT_BUNSETSU	/* 連文節変換時の、各文節の終端ベクター*/
#define WNN_VECT_NO		/* 終端ベクタ1 無し */
/* 文節の前端の接続情報 */
#define	WNN_CONNECT		/* 指定された(品詞、付属語)に接続できた。*/
#define	WNN_SENTOU		/* 大文節の先頭 */
#define	WNN_NOT_CONNECT		/* 先頭になれないし、前に接続できない */
#define	WNN_GIJI		/* 疑似文節を作った。*/

/* 疑似文節の直前に選択した候補 */
#define WNN_HIRAGANA		/* ひらがな *//* 読みのまま */
#define WNN_KATAKANA		/* カタカナ */
/* 数字 */
#define	WNN_NUM_HAN		/* 半角数字 *//* 読みのまま */
#define	WNN_NUM_ZEN		/* 全角数字 *//* １２３ */
#define	WNN_NUM_KAN		/* 漢数字 *//* 一二三 */
#define	WNN_NUM_KANSUUJI 	/* 漢数字 *//* 百二十三 */
#define	WNN_NUM_KANOLD		/* 漢数字 *//* 壱百弐拾参 */
#define	WNN_NUM_HANCAN		/* 半角数字 *//* 1,234 */
#define	WNN_NUM_ZENCAN		/* 全角数字 *//* １，２３４ */
/* 英数 */
#define	WNN_ALP_HAN		/* 半角 *//* 読みのまま */
#define	WNN_ALP_ZEN		/* 全角 */
/* 記号 */
#define	WNN_KIG_HAN		/* 半角 *//* 読みのまま */
#define	WNN_KIG_JIS		/* 全角(JIS) */
#define	WNN_KIG_ASC		/* 全角(ASC) */

#define WNN_FT_DICT_FILE
#define WNN_FT_HINDO_FILE
#define WNN_FT_FUZOKUGO_FILE

#define WNN_STATIC_DICT 	/* 固定形式辞書 */
#define WNN_UD_DICT 		/* 登録可能形式辞書 */

#define	WNN_DIC_RDONLY
#define	WNN_DIC_RW


/* header file for dic_syurui */
#define WNN_FILE_NOT_EXIST
#define WNN_NOT_A_JISHO
#define WNN_HINDO_FILE
#define WNN_FUZOKUGO_FILE

/* set_hindo operation */
#define WNN_HINDO_NOP
#define WNN_IMA_ON
#define WNN_IMA_OFF
#define WNN_HINDO_INC
#define WNN_HINDO_DECL
#define WNN_ENTRY_NO_USE

/*	Wnn constant
*/
#define WNN_HOSTLEN
#define WNN_ENVNAME_LEN

/*	js_who	*/
#define WNN_MAX_ENV_OF_A_CLIENT

struct wnn_jwho {
	int sd;   /* jserver 内のソケットディスクリプタ*/
	char user_name[64];   /* ユーザ名 */
	char host_name[64];   /* ホスト名 */
	int  env[WNN_MAX_ENV_OF_A_CLIENT];  /* このクライアントが使用している
				環境番号の列。空いているところには、-1 が入る */
};
typedef struct wnn_jwho WNN_JWHO;

/*	js_env_list	*/
#define WNN_MAX_JISHO_OF_AN_ENV 15
#define WNN_MAX_FILE_OF_AN_ENV 30

 struct wnn_env_info {
        int	env_id;				/* 環境番号 */
	char	env_name[WNN_ENVNAME_LEN]; 	/* 環境名 */
	int	ref_count;			/* 参照数 */
	/* struct wnn_param; */
	int	fzk_fid;			/* 付属語のファイル番号 */
	int jishomax;				/* 使用している辞書の個数 */
	int	jisho[WNN_MAX_JISHO_OF_AN_ENV];	/* 使用している辞書の辞書番号。
					   最初のjishomax個だけ意味がある */
	int	file[WNN_MAX_FILE_OF_AN_ENV];   /* この環境につながっている
				 ファイル番号(空いているところには、-1 が入る) */
};
typedef struct wnn_env_info WNN_ENV_INFO;

#define WNN_COMMENT_LEN 512     /* 辞書のコメントの長さ */
#define WNN_F_NAMELEN 100
#define WNN_PASSWD_LEN 16  	/* パスワードの長さ */


struct wnn_dic_info {
	int dic_no;		/* 辞書番号 */
	int body;		/* 辞書本体のファイル番号 */
	int hindo;		/* 頻度のファイル番号 */
	int rw;			/* 辞書が登録可能かどうか
				   (WNN_DIC_RW, WNN_DIC_RDONLY) */
	int hindo_rw;		/* 頻度が更新可能かどうか
				   (WNN_DIC_RW, WNN_DIC_RDONLY) */
	int enablef;		/* 辞書が使用中かどうか
				   (1 = 使用中, 0 = 使用中断) */
	int nice;		/* 辞書の変換時の優先度 */
	wchar comment[WNN_COMMENT_LEN];	/* 辞書のコメント */
	char fname[WNN_F_NAMELEN]; /* 辞書のファイル名 */
	char hfname[WNN_F_NAMELEN]; /* 頻度のファイル名 */
	char passwd[WNN_PASSWD_LEN]; /* 辞書のパスワード */
	char hpasswd[WNN_PASSWD_LEN]; /* 頻度のパスワード */
	int type;		/* 辞書の種類(WNN_UD_DICT,WNN_STATIC_DICT) */
	int gosuu;		/* 辞書の語数 */
};

typedef struct wnn_dic_info WNN_DIC_INFO;

struct wnn_file_stat {
    int type;			/* ファイルの種類
		WNN_STATIC_DICT		固定形式辞書
		WNN_UD_DICT		登録可能形式辞書
		WNN_HINDO_FILE		頻度ファイル
		WNN_FUZOKUGO_FILE	付属語ファイル
		WNN_NOT_A_JISHO		その他   */
    wchar comment[WNN_COMMENT_LEN]; /* ファイルのコメント */
};

typedef struct wnn_file_stat WNN_FILE_STAT;

extern	int	wnn_errorno;		/* Wnnのエラーはこの変数に報告される */

#define FILE_ALREADY_READ -2

/* この構造体は、ライブラリ内部で用いられる */
struct wnn_jserver_id {
	int	sd;
	char	js_name[40];
	int	js_dead;
	jmp_buf js_dead_env;	/* サーバが死んだ時に飛んでいくenv */
	int	js_dead_env_flg; /* jd_server_dead_envが有効か否か  */
};

typedef struct wnn_jserver_id WNN_JSERVER_ID;

/* この構造体は、ライブラリ内部で用いられる */
struct wnn_env {
	int		env_id;
	WNN_JSERVER_ID	*js_id;
};

typedef struct wnn_env WNN_ENV;

struct wnn_param {
	int	n;	/* Ｎ(大)文節解析のＮ */
	int	nsho;	/* 大文節中の小文節の最大数 */
	int 	p1;	/* 自立語の頻度のパラメータ */
	int 	p2;	/* 小文節長のパラメータ */
	int 	p3;	/* 自立語長のパラメータ */
	int 	p4;	/* 今使ったよビットのパラメータ */
	int 	p5;	/* 辞書のパラメータ */
	int	p6;	/* 小文節の評価値のパラメータ */
	int	p7;	/* 大文節長のパラメータ */
	int	p8;	/* 小文節数のパラメータ */
	int	p9;	/* 疑似品詞 数字の頻度のパラメータ */
	int	p10;	/* 疑似品詞 カナの頻度のパラメータ */
	int	p11;	/* 疑似品詞 英数の頻度のパラメータ */
	int	p12;	/* 疑似品詞 記号の頻度のパラメータ */
	int	p13;	/* 疑似品詞 閉括弧の頻度のパラメータ */
	int	p14;	/* 疑似品詞 付属語の頻度のパラメータ */
	int	p15;	/* 疑似品詞 開括弧の頻度のパラメータ */
};


struct wnn_file_info_struct {
	int	fid;		/* ファイル番号 */
	char	name[WNN_F_NAMELEN]; /* ファイル名 */
	int	localf;		/* サーバ・サイトのファイルかどうか
				   1: サーバ・サイト
				   0: クライアント・サイト   */
	int	type;		/* ファイルの種類 */
	int	ref_count;	/* (環境からの)参照数 */
};

typedef struct wnn_file_info_struct WNN_FILE_INFO_STRUCT;

#define WNN_VECT_L	((256+8*4-1)/(8*4) + 5)	/***** !!!!! ****/

struct	wnn_sho_bunsetsu {
	int	end;		/* 候補文節の end char index */
	int	start;		/* 候補文節の top char index */
	int	jiriend;	/* 候補文節の自立語 end char index */
	int	dic_no;		/* 自立語の辞書内のエントリ番号 */
	int	entry;		/* 候補文節の自立語辞書 entry */

	int	hinsi;		/* 自立語品詞 */
	int     status;		/* 大文節の先頭か */
	int 	hindo;		/* 候補自立語の頻度 */ 
	int 	ima;		/* 候補自立語の今使ったよビット */ 
	int	kangovect;	/* 接続ベクトルテーブルへのポインタ */
	int 	hyoka;		/* 小文節評価値 */
	wchar	*kanji;		/* 自立語文字列 */
	wchar	*yomi;		/* 自立語の読み文字列 */
	wchar	*fuzoku;	/* 付属語文字列 */
/*
 *頻度については、頻度ファイルが指定されている時は、
 *hindo = 頻度ファイルの(実)頻度値 + 辞書内の(実)頻度値
 *ima = 頻度ファイルの今使ったよビット
 *
 *頻度ファイルが指定されていない時には、
 *hindo = 辞書内の(実)頻度値、ima = 辞書内の今使ったよビット
 *である。ここで、実頻度値とは、計算機内で7ビットに圧縮された値である。
 *仮想頻度値ではなく実頻度値を返すのは、変換結果のデバッグのためである。
 */
};

struct	wnn_dai_bunsetsu {
	int	end;		/* 候補文節の end char index */
	int	start;		/* 候補文節の top char index */
	struct	wnn_sho_bunsetsu	*sbn;	/* 小文節解析結果へのポインタ */
	int 	hyoka;		/* 大文節評価値 */
	int	sbncnt;		/* 小文節数 (次候補の場合は、次候補数)
				   DSD_SBNは、*sbn から sbncnt だけある */
};

struct	wnn_jdata {
	int	dic_no;		/* 辞書番号 */
	int	serial;		/* 辞書内のエントリ番号 */
	int	hinshi;		/* 品詞番号(品詞番号と品詞名の対応は、manual/etc
				   の下を参照) */
	int	hindo;		/* 頻度 */
	int	ima;		/* 今使ったよビット */
	int	int_hindo;	/* 辞書内頻度 */
	int	int_ima;	/* 辞書内、今使ったよビット */
	wchar   *yomi;		/* 読みの文字列 */
	wchar	*kanji;		/* 漢字文字列 */
	wchar	*com;		/* エントリのコメント文字列 */
/*
 *頻度については、頻度ファイルが指定されている時は、
 *hindo = 頻度ファイルの(仮想)頻度値、ima = 頻度ファイルの今使ったよビット
 *int_hindo = 辞書内の(仮想)頻度値、int_ima = 辞書内の今使ったよビット
 *
 *頻度ファイルが指定されていない時には、
 *hindo = 辞書内の(仮想)頻度値、ima = 辞書内の今使ったよビット
 *int_hindo = -1、int_ima = -1
 *
 *ただし、どちらの場合でも、エントリが使用中止の状態の時には、
 *hindo = -1, ima = 0 あるいは、
 *int_hindo = -1, int_ima = 0 となる。
 *ここで、(仮想)頻度値とは、計算機内で7ビットに圧縮された頻度値から、
 *実際の値を想定した値である。
 */
};

struct	wnn_ret_buf {
	int	size;		/* buf から alloc されている大きさ */
	char	*buf;		/* malloc などでとられた領域 */
};


#define	WNN_F_UNIQ_LEN	(sizeof(struct wnn_file_uniq))

/* この構造体は、ライブラリ内部で用いられる */
struct wnn_file_head {
  struct wnn_file_uniq{
    int time;
    int dev;
    int inode;
    char createhost[WNN_HOSTLEN];
  } file_uniq;
  struct wnn_file_uniq file_uniq_org;
  int not_used1;
  int not_used2;
  int file_type;
  char file_passwd[WNN_PASSWD_LEN];
};

struct wnn_fukugou{
    unsigned char *name;	/* 複合品詞の名前 */
/* fukugou hinsi is held as a string */
    unsigned short *component;	/* 複合品詞の構成要素となる品詞の番号の配列
				   (最後は 0xffff で終る)
				 */
};

struct wnn_hinsi_node{
    unsigned char *name;	/* 品詞ノードの名前 */
    int kosuu;			/* 子どもの数 */
    unsigned char *son;		/* 最初の子どもへのポインタ */
};


#define	WNN_FILE_HEADER_LEN	(WNN_PASSWD_LEN + 8 + WNN_FILE_STRING_LEN + \
				 sizeof(struct wnn_file_uniq) * 2 + 4)
				/*
				  8 is for future use 
				  4 is for file_type.
				 */

