#include <stdio.h>
#include <wchar.h>
#include <errno.h>
#include <locale.h>

main() {
	char *fname = ",getwc-test";
	wchar_t obuf[16];
	wint_t c, c1;
	FILE *fp;
	char *locales[] = {
		"C",
		"en_US.UTF-8",
		"ja_JP.eucJP",
		0,
	}, **locale;
	int i;
	
	obuf[0] = 0xa440;
	obuf[1] = 0xac4f;
	obuf[2] = 0xb36f;
	obuf[3] = 0xcf20;
	obuf[4] = L'\0';

	setlocale(LC_CTYPE, "zh_TW.Big5");
	fp = fopen(fname, "w");
	fwprintf(fp, L"%ls\n", obuf);
	fclose(fp);

	for (locale = locales; *locale; locale++) {
		setlocale(LC_CTYPE, *locale);
		fp = fopen(fname, "r");
		for (i = 0; i < wcslen(obuf); i++) {
			c = getwc(fp);
			if (c == WEOF && errno == EILSEQ)
				c = (wint_t) getc(fp);
			if ((c & 0xff00) == 0) {
				c1 = getc(fp);
				c = (c << 8) | c1;
			}
			if (c == obuf[i])
				wprintf(L"%-12.12s %d wrote 0x%x read 0x%x ok\n", *locale, i, obuf[i], c);
			else
				wprintf(L"%-12.12s %d wrote 0x%x read 0x%x getwc error\n", *locale, i, obuf[i], c);
		}
		fclose(fp);
	}

	unlink(fname);
}