#!/usr/bin/perl -w

%atascii = (
	0 => "♥",
	1 => "┣",
	2 => "┃",
	3 => "┛",
	4 => "┫",
	5 => "┓",
	6 => "╱",
	7 => "╲",
	8 => "◢",
	9 => "▗",
	10 => "◣",
	11 => "▝",
	12 => "▘",
	13 => "▔",
	14 => "▁",
	15 => "▖",
	16 => "♣",
	17 => "┏",
	18 => "━",
	19 => "╋",
	20 => "●",
	21 => "▄",
	22 => "▎",
	23 => "┳",
	24 => "┻",
	25 => "▌",
	26 => "┗",
	27 => "Ę",
	28 => "↑",
	29 => "↓",
	30 => "←",
	31 => "→",
	34 => "\\\"",
	92 => "\\\\",
	96 => "◆",
	123 => "♠",
	125 => "↰",
	126 => "◀",
	127 => "▶",
);

%xl = (
	0 => "á",
	1 => "ù",
	2 => "Ñ",
	3 => "É",
	4 => "ç",
	5 => "ô",
	6 => "ò",
	7 => "ì",
	8 => "£",
	9 => "ï",
	10 => "ü",
	11 => "ä",
	12 => "Ö",
	13 => "ú",
	14 => "ó",
	15 => "ö",
	16 => "Ü",
	17 => "â",
	18 => "û",
	19 => "î",
	20 => "é",
	21 => "è",
	22 => "ñ",
	23 => "ê",
	24 => "ȧ",
	25 => "à",
	26 => "Ȧ",
	27 => "Ę",
	28 => "↑",
	29 => "↓",
	30 => "←",
	31 => "→",
	34 => "\\\"",
	92 => "\\\\",
	96 => "¡",
	123 => "Ä",
	125 => "↰",
	126 => "◀",
	127 => "▶",
);

%magazine = (
	0 => "{ctrl-,}",
	1 => "{ctrl-A}",
	2 => "{ctrl-B}",
	3 => "{ctrl-C}",
	4 => "{ctrl-D}",
	5 => "{ctrl-E}",
	6 => "{ctrl-F}",
	7 => "{ctrl-G}",
	8 => "{ctrl-H}",
	9 => "{ctrl-I}",
	10 => "{ctrl-J}",
	11 => "{ctrl-K}",
	12 => "{ctrl-L}",
	13 => "{ctrl-M}",
	14 => "{ctrl-N}",
	15 => "{ctrl-O}",
	16 => "{ctrl-P}",
	17 => "{ctrl-Q}",
	18 => "{ctrl-R}",
	19 => "{ctrl-S}",
	20 => "{ctrl-T}",
	21 => "{ctrl-U}",
	22 => "{ctrl-V}",
	23 => "{ctrl-W}",
	24 => "{ctrl-X}",
	25 => "{ctrl-Y}",
	26 => "{ctrl-Z}",
	27 => "{esc}",
	28 => "{up}",
	29 => "{down}",
	30 => "{left}",
	31 => "{right}",
	34 => "\\\"",
	92 => "\\\\",
	96 => "{ctrl-.}",
	123 => "{ctrl-;}",
	125 => "{clear}",
	126 => "{bksp}",
	127 => "{tab}",
	# the remaining control characters (with high bit set)
	# are special-cased in a8cat.c
);

sub getcharname {
	my $c = shift;
	if($c == 127) {
		return "[del]";
	} elsif($c < 32) {
		return "^" . chr($c + 64);
	} else {
		return chr($c);
	}
}

sub mktable {
	my ($name, $hash) = @_;

	print "const char *$name\[\] = {\n";
	for (0..127) {
		my $cmt = sprintf("/* %3d \$%02x %5s */", $_, $_, getcharname($_));
		print "\t\"" . ($hash->{$_} || chr($_)), "\",  $cmt\n";
	}
	print "};\n\n";
}

print <<EOF;
/* ATASCII to UTF-8 tables. Generated by mkatables.pl.
   Do not edit this file; edit mkatables.pl instead. */

EOF

mktable("ata2utf", \%atascii);
mktable("ics2utf", \%xl);
mktable("ata2mag", \%magazine);