#define MAX 20000 // 6763 * 2 and newlines
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <iconv.h>
void printgb(char *buf);
int main(void)
{
    char    buf[MAX], *p_buf = buf;
    char buf_out[MAX * 3 / 2], *p_buf_out = buf_out;

	memset(buf_out, 0, MAX * 3 / 2);

  	printgb(buf);
	iconv_t cd = iconv_open("UTF-8", "GBK");
	size_t out_left = MAX * 3 / 2;
	size_t len = strlen(buf);
	iconv(cd, &p_buf, &len, &p_buf_out, &out_left);
	iconv_close(cd);
	write(STDOUT_FILENO, buf_out, strlen(buf_out));
	return 0;
}


void printgb(char *buf)
{
	for (int i = 0xb0; i <= 0xf7; ++i, sprintf(buf++, "\n"))
	{
		sprintf(buf, "%2d", i - 0xa0); buf += 2;
		for (int j = 0xa1; j <= 0xfe; ++j)
		{
			if (i == 0xd7 && j > 0xf9) sprintf(buf, "%c%c", 0xa1, 0xa1); // using space replace unassigned codepoint
			else sprintf(buf, "%c%c", i, j);
			buf += 2;
		}
	}
	*buf = '\0';
}