#ifndef _ICONV_INTERNAL_H_
#define _ICONV_INTERNAL_H_

#ifndef DEBUG
#define LOG(x)
#else
#define LOG(x) (printf(__FILE__ " %s %i: ", __func__, __LINE__), printf x, fputc('\n', stdout))
#endif

#define UNUSED(x) ((x) = (x))

struct encoding_context {
	Encoding *in;
	Encoding *out;
	unsigned short *intab, *outtab;
	char **outbuf;
	size_t *outbytesleft;
	struct encoding_context *prev, *next;
};

int iconv_eightbit_number_from_name(const char *name);
const char *iconv_eightbit_name_from_number(int number);
unsigned iconv_eightbit_read(struct encoding_context *e,
		int (*callback)(void *handle, UCS4 c), const char *s,
		unsigned int n, void *handle);
int iconv_eightbit_write(struct encoding_context *e, UCS4 c,
		char **buf, int *bufsize);
unsigned short *iconv_eightbit_new(int enc_num);
void iconv_eightbit_delete(struct encoding_context *e);

int iconv_encoding_number_from_name(const char *name);
const char *iconv_encoding_name_from_number(int number);

size_t iconv_createmenu(size_t flags, char *buf, size_t buflen,
		const char *selected);
size_t iconv_decodemenu(size_t flags, void *menu, int *selections,
		char *buf, size_t buflen);

#endif
