/*
 * epw.h - 電子ブック/EPWINGユーティリティー ヘッダーファイル
 *
 *	Written by Junn Ohta (ohta@src.ricoh.co.jp). Public Domain.
 */

typedef	unsigned char	uchr;
typedef	unsigned long	ulng;
typedef	unsigned char	byte;
typedef	unsigned int	word;
typedef	unsigned long	dword;

#define	OK		0
#define	ERR		(-1)

#define	FALSE		0
#define	TRUE		1

/*
 * 書籍ブロックサイズ
 */
#define	BLKSIZ		2048

/*
 * 複合書籍管理情報識別子
 */
#define	ID_CINFO	0xff

/*
 * 書籍管理情報ブロックの構造
 */
#define	ITEMS_LEN	 2	/* 書籍構成要素数		*/
#define	RESV1_LEN	 2	/* 予備領域1(書籍種別/保護情報)	*/
#define	IDXHNDL_LEN	 1	/* インデックス作成情報の取扱法	*/
#define	RESV2_LEN	11	/* 予備領域2			*/
				/* (以下構成要素数だけくり返し)	*/
#define	ITEMID_LEN	 1	/*   書籍構成要素識別子		*/
#define	RESV3_LEN	 1	/*   予備領域3			*/
#define	TOPBLK_LEN	 4	/*   先頭アドレス(ブロック番号)	*/
#define	BLKS_LEN	 4	/*   領域サイズ(ブロック数)	*/
#define	IDXVALID_LEN	 1	/*   インデックス作成情報有効性	*/
#define	IDXINFO_LEN	 3	/*   インデックス作成情報	*/
#define	RESV4_LEN	 2	/*   予備領域4			*/
				/* (くり返し終わり)		*/
#define	DSPVALID_LEN	 1	/* 表示方法初期値情報有効無効フラグ */
#define	RESV5_LEN	 3	/* 予備領域5			*/
#define	DSPLIST_LEN	 1	/* 一覧表表示			*/
#define	DSPSTYLE_LEN	 1	/* 本文表示法			*/
#define	RESV6_LEN	10	/* 予備領域6			*/

/*
 * 複合検索管理情報ブロックの構造
 */
#define	CENTS_LEN	 2	/* 複合エントリ数		*/
#define	CRESV1_LEN	14	/* 予備領域1			*/
				/* (以下エントリ数だけくり返し)	*/
#define	CITEMS_LEN	 1	/*   書籍構成要素数		*/
#define	CRESV2_LEN	 1	/*   予備領域2			*/
#define	CNAME_LEN	30	/*   検索名称			*/
				/*   (以下要素数だけくり返し)	*/
#define	CITEMID_LEN	 1	/*     書籍構成要素識別子	*/
#define	CRESV3_LEN	 1	/*     予備領域3		*/
#define	CTOPBLK_LEN	 4	/*     先頭アドレス(ブロック番号)*/
#define	CBLKS_LEN	 4	/*     領域サイズ(ブロック数)	*/
#define	CRESV4_LEN	 6	/*     予備領域4		*/
				/*   (くり返し終わり)		*/
				/* (くり返し終わり)		*/
/*
 * CRESV4_LENはJIS X4081(平成8年11月30日発行の第1刷)によれば5だが、
 * 実際の書籍では6になっている。
 */

/*
 * 前方参照定義
 */
typedef	struct info_t	INFO_T;		/* 書籍管理情報		*/
typedef	struct item_t	ITEM_T;		/* 書籍構成要素		*/
typedef	struct cinfo_t	CINFO_T;	/* 複合検索管理情報	*/
typedef	struct cent_t	CENT_T;		/* 複合エントリ		*/
typedef	struct citem_t	CITEM_T;	/* 複合検索書籍構成要素	*/

/*
 * 書籍管理情報
 */
struct info_t {
    word	items;			/* 登録書籍数		*/
    byte	resv1[RESV1_LEN];	/* 予備領域1		*/
    byte	idxhndl;		/* インデックス作成情報の取扱法 */
    byte	resv2[RESV2_LEN];	/* 予備領域2		*/
    ITEM_T	*item;			/* 書籍構成要素		*/
    byte	dspvalid;		/* 有効無効フラグ	*/
    byte	resv5[RESV5_LEN];	/* 予備領域5		*/
    byte	dsplist;		/* 一覧表表示		*/
    byte	dspstyle;		/* 本文表示法		*/
    byte	resv6[RESV6_LEN];	/* 予備領域6		*/
};

/*
 * 書籍構成要素
 */
struct item_t {
    byte	itemid;			/* 書籍構成要素識別子	*/
    byte	resv3[RESV3_LEN];	/* 予備領域3		*/
    dword	topblk;			/* 先頭アドレス		*/
    dword	blks;			/* 領域サイズ		*/
    byte	idxvalid;		/* インデックス作成情報有効性 */
    dword	idxinfo;		/* インデックス作成情報 */
    byte	resv4[RESV4_LEN];	/* 予備領域4		*/
    CINFO_T	*cinfo;			/* 複合検索管理情報	*/
};

/*
 * 複合検索管理情報
 */
struct cinfo_t {
    word	cents;			/* 複合エントリ数	*/
    byte	cresv1[CRESV1_LEN];	/* 予備領域1		*/
    CENT_T	*cent;			/* 複合エントリ		*/
};

/*
 * 複合エントリ
 */
struct cent_t {
    byte	citems;			/* 書籍構成要素数	*/
    byte	cresv2[CRESV2_LEN];	/* 予備領域2		*/
    byte	cname[CNAME_LEN];	/* 検索名称		*/
    CITEM_T	*citem;			/* 複合書籍構成要素	*/
};

/*
 * 複合書籍構成要素
 */
struct citem_t {
    uchr	citemid;		/* 書籍構成要素識別子	*/
    uchr	cresv3[CRESV3_LEN];	/* 予備領域3		*/
    dword	ctopblk;		/* 先頭アドレス		*/
    dword	cblks;			/* 領域サイズ		*/
    uchr	cresv4[CRESV4_LEN];	/* 予備領域4		*/
};

/*
 * bread.c
 */
int	open_book();
int	close_book();
int	locate_block();
int	read_block();
long	cur_block();
int	cur_off();
byte	getbyte();
word	getword();
dword	getdword();
long	getbcd();
byte	*getbytes();
INFO_T	*getinfo();
void	freeinfo();

/*
 * bwrite.c
 */
int	open_newbook();
int	close_newbook();
int	locate_newblock();
int	write_newblock();
long	cur_newblock();
int	cur_newoff();
int	get_error();
void	reset_error();
int	putbyte();
int	putword();
int	putdword();
int	putbcd();
int	putbytes();
int	putinfo();
