/*--------------------------------------------------------------------------
                          FAX encoder/decoder
                         --------------------*/

/* プログラムのサイズを小さくするオプション */
#define SMALL_DATA		0

/*---------------------------------------------------------------------------
							   FAX decoder
                             --------------*/

/* run length の値は通常 1791 まで可能だが、拡張コードを使って 2623 まで
   のばす */
#define	EXTENDED		0

/* 反対色の run length 0 を挟むことにより、run length の値の制限をなくす */
#define	BIG_DATA		0

/* 元のデータの末尾の次の 1byte の値を保つ */
#define	RECOVER			0


/* 元のデータの先頭が byte 境界から始まらない */
#define	TOP_BIT_SKIP	0

/* fax_writeheader() の mode の設定値 */
#define NORMAL_MODE		0
#define FINE_MODE		1

void fax_writeheader(FILE *fp, int mode);
void fax_writertc(FILE *fp);
size_t fax_encode_line(char *dast, char *src, int left, int right);
size_t fax_encode_tline(char *dast, char *src, int left, int right, int top);


/*---------------------------------------------------------------------------
								FAX encoder
                              ---------------*/

/* BUF_SIZE は、0x1800 以上確保することが望ましい(0x600 に比べて十分大に) */

#define	BUF_SIZE 		0x4000
#define	BUF_READ_SIZE	(BUF_SIZE - 0x600)
#define	BUF_BACK		0x10


/* integer が、メモリー上で下位バイトから先に格納されているとき 1 に、逆の時に
   0 と定義する(80*86 系では 1) */

#define	LOW_TO_HIGH		1


/*  Definitions of return values of fax_decode_line() 		*/

#define	TOP_IS_EOL		 0
#define	END_OF_DATA		-1
#define	BAD_DATA		-2
#define	DOUBLE_MAKE		-3
#define	TOO_LONG_LINE	-4
#define	OUT_OF_DATA		-5


struct FAX_POS {
	long pos;		/* 先頭からの位置(byte単位)						*/
	int skip;		/* 現byte中の位置(skip する bit数 --- 0,...,7)	*/
};

int initialize_decode(FILE *fp);
int fax_decode_line(char *dast);
int count_eol(void);
int next_eol(void);
int next_rtc(void);
void get_file_pos(struct FAX_POS *faxpos);
void move_bitget_buf(int move);

/*-------------------------------------------------------------------------*/

#define MAX_A4X			1728
#define MAX_A4Y			2290

extern int	MAX_X;
