#! /bin/sh

charmap=`basename $1 .map`

name=`echo $charmap | sed -e "s,\..*,," -e "s,-,_,g" -e "s,^cjk_,,"`

case $name in
gb*)	split=splitgb;;
*)	split=split;;
esac

(
cat <</eoc
#include "charmaps.h"
struct {unsigned int cjk; unsigned int unicode;} raw_table [] = {
#include "$charmap.map"
};

void
split (cjk, unicode)
	unsigned int cjk;
	unsigned int unicode;
{
	printf ("	{0x%02X, 0x%02X, 0x%04X, 0x%04X},\n",
		(cjk >> 16) & 0xFF, unicode >> 16, 
		cjk & 0xFFFF, unicode & 0xFFFF);
}

void
splitgb (cjk, unicode)
	unsigned int cjk;
	unsigned int unicode;
{
    if (cjk < 0x10000) {
	printf ("	{0x%02X, 0x%02X, 0x%04X, 0x%04X},\n",
		0xFF, unicode >> 16, cjk, unicode & 0xFFFF);
    } else {
	printf ("	{0x%02X, 0x%02X, 0x%04X, 0x%04X},\n",
		((cjk >> 12) & 0xF0) | (cjk & 0x0F), (unicode) >> 16, 
		(cjk & 0xFF00) | (cjk >> 24), (unicode) & 0xFFFF);
    }
}

int
main () {
	unsigned int i;
	for (i = 0; i < arrlen (raw_table); i ++) {
		$split (raw_table [i].cjk, raw_table [i].unicode);
	}
}
/eoc
) > charmaps/$charmap-gen.c

if cc -I. -o charmaps/$charmap-gen.exe charmaps/$charmap-gen.c
then	(
	echo '#include "charmaps.h"'
	echo "struct cjk_table_entry ${name}_table [] = {"
	charmaps/$charmap-gen.exe
	echo "};"
	echo "unsigned int ${name}_table_len = arrlen (${name}_table);"
	) > charmaps/$charmap.c

	cc -I. -c charmaps/$charmap.c -o charmaps/$charmap.o

	rm -f charmaps/$charmap-gen.* charmaps/$charmap.c
fi
