 /*
 |  Defines the keymap
*/

#include <stdio.h>
#include <libraries/dos.h>

typedef struct
{
	int		rawkey;
	unsigned char	norm, shift, ctrl, alt, lam, ram, caps, lram;
} Key;


Key keymap[]=
{
/*	Rawkey	Normal	Shift	Control	Alt	LAmiga	RAmiga	Caps	LRAmiga	*/
{	45,	27,	27,	27,	27,	27,	27,	27,	27	},	/* ESC */
{	50,	1,	1,	1,	1,	1,	1,	1,	1	},	/* F1  */
{	51,	2,	2,	2,	2,	2,	2,	2,	2	},	/* F2  */
{	52,	3,	3,	3,	3,	3,	3,	3,	3	},	/* F3  */
{	53,	4,	4,	4,	4,	4,	4,	4,	4	},	/* F4  */
{	54,	5,	5,	5,	5,	5,	5,	5,	5	},	/* F5  */
{	55,	6,	6,	6,	6,	6,	6,	6,	6	},	/* F6  */
{	56,	7,	7,	7,	7,	7,	7,	7,	7	},	/* F7  */
{	57,	8,	8,	8,	8,	8,	8,	8,	8,	},	/* F8  */
{	58,	9,	9,	9,	9,	9,	9,	9,	9	},	/* F9  */
{	59,	10,	10,	10,	10,	10,	10,	10,	10	},	/* F10 */
{	0,	96,	'~',	96,	'`',	96,	96,	96,	96	},	/* Apo */
{	1,	'1',	'!',	'1',	'¹',	'1',	'1',	'1',	'1'	},	/* 1   */
{	2,	'2',	'\"',	'2',	'²',	'2',	'2',	'2',	'2'	},	/* 2   */
{	3,	'3',	'£',	'3',	'³',	'3',	'3',	'3',	'3'	},	/* 3   */
{	4,	'4',	'$',	'4',	'¢',	'4',	'4',	'4',	'4'	},	/* 4   */
{	5,	'5',	'%',	'5',	'¼',	'5',	'5',	'5',	'5'	},	/* 5   */
{	6,	'6',	'^',	'6',	'½',	'6',	'6',	'6',	'6'	},	/* 6   */
{	7,	'7',	'&',	'7',	'¾',	'7',	'7',	'7',	'7'	},	/* 7   */
{	8,	'8',	'*',	'8',	'·',	'8',	'8',	'8',	'8'	},	/* 8   */
{	9,	'9',	'(',	'9',	'«',	'9',	'9',	'9',	'9'	},	/* 9   */
{	10,	'0',	')',	'0',	'»',	'0',	'0',	'0',	'0'	},	/* 0   */
{	11,	'-',	'_',	'_',	'-',	'-',	'-',	'-',	'-'	},	/* -   */
{	12,	'=',	'+',	'=',	'=',	'=',	'=',	'=',	'='	},	/* =   */
{	13,	'\\',	'|',	'\\',	'\\',	'\\',	'\\',	'\\',	'\\'	},	/* \   */
{	65,	8,	8,	8,	8,	8,	8,	8,	8	},	/* <-  */
{	70,	127,	127,	127,	127,	127,	127,	127,	127	},	/* DEL */
{	95,	0,	0,	0,	0,	0,	0,	0,	0	},	/* HLP */
{	90,	'(',	'(',	'(',	'(',	'(',	'(',	'(',	'('	},	/* N ( */
{	91,	')',	')',	')',	')',	')',	')',	')',	')'	},	/* N ) */
{	92,	'/',	'/',	'/',	'/',	'/',	'/',	'/',	'/'	},	/* N / */
{	93,	'*',	'*',	'*',	'*',	'*',	'*',	'*',	'*'	},	/* N * */
{	66,	9,	9,	9,	9,	9,	9,	9,	9	},	/* TAB */
{	16,	'q',	'Q',	17,	'å',	'q',	'q',	'q',	'q'	},	/* q   */
{	17,	'w',	'W',	23,	'°',	'w',	'w',	'w',	'w'	},	/* w   */
{	18,	'e',	'E',	14,	'©',	'e',	'e',	'e',	'e'	},	/* e   */
{	19,	'r',	'R',	18,	'®',	'r',	'r',	'r',	'r'	},	/* r   */
{	20,	't',	'T',	20,	'þ',	't',	't',	't',	't'	},	/* t   */
{	21,	'y',	'Y',	25,	'¤',	'y',	'y',	'y',	'y'	},	/* y   */
{	22,	'u',	'U',	21,	'µ',	'u',	'u',	'u',	'y'	},	/* u   */
{	23,	'i',	'I',	9,	'¡',	'i',	'i',	'i',	'i'	},	/* i   */
{	24,	'o',	'O',	15,	'ø',	'o',	'o',	'o',	'o'	},	/* o   */
{	25,	'p',	'P',	16,	'¶',	'p',	'p',	'p',	'p'	},	/* p   */
{	26,	'[',	'{',	27,	'[',	'[',	'[',	'[',	'['	},	/* [   */
{	27,	']',	'}',	29,	']',	']',	']',	']',	']'	},	/* ]   */
{	68,	10,	13,	10,	10,	10,	10,	10,	10	},	/* RET */
{	61,	'7',	'7',	'7',	'7',	'7',	'7',	'7',	'7'	},	/* N 7 */
{	62,	'8',	'8',	'8',	'8',	'8',	'8',	'8',	'8'	},	/* N 8 */
{	63,	'9',	'9',	'9',	'9',	'9',	'9',	'9',	'9'	},	/* N 9 */
{	74,	'-',	'-',	'-',	'-',	'-',	'-',	'-',	'-'	},	/* N - */
{	32,	'a',	'A',	1,	'æ',	'a',	'a',	'a',	'a'	},	/* a   */
{	33,	's',	'S',	19,	'ß',	's',	's',	's',	's'	},	/* s   */
{	34,	'd',	'D',	4,	'ð',	'd',	'd',	'd',	'd'	},	/* d   */
{	35,	'f',	'F',	6,	0,	'f',	'f',	'f',	'f'	},	/* f   */
{	36,	'g',	'G',	7,	0,	'g',	'g',	'g',	'g'	},	/* g   */
{	37,	'h',	'H',	8,	0,	'h',	'h',	'h',	'h'	},	/* h   */
{	38,	'j',	'J',	10,	0,	'j',	'j',	'j',	'j'	},	/* j   */
{	39,	'k',	'K',	11,	0,	'k',	'k',	'k',	'k'	},	/* k   */
{	40,	'l',	'L',	12,	0,	'l',	'l',	'l',	'l'	},	/* l   */
{	41,	';',	':',	';',	';',	';',	';',	';',	';'	},	/* ;   */
{	42,	'#',	'@',	'#',	'#',	'#',	'#',	'#',	'#'	},	/* #   */
{	76,	30,	30,	30,	30,	30,	30,	30,	30,	},	/* UP  */
{	45,	'4',	'4',	'4',	'4',	'4',	'4',	'4',	'4'	},	/* N 4 */
{	46,	'5',	'5',	'5',	'5',	'5',	'5',	'5',	'5'	},	/* N 5 */
{	47,	'6',	'6',	'6',	'6',	'6',	'6',	'6',	'6'	},	/* N 6 */
{	94,	'+',	'+',	'+',	'+',	'+',	'+',	'+',	'+'	},	/* N + */
{	49,	'z',	'Z',	26,	'±',	'z',	'z',	'z',	'z'	},	/* z   */
{	50,	'x',	'X',	24,	'×',	'x',	'x',	'x',	'x'	},	/* x   */
{	51,	'c',	'C',	3,	'ç',	'c',	'c',	'c',	'c'	},	/* c   */
{	52,	'v',	'V',	22,	'ª',	'v',	'v',	'v',	'v'	},	/* v   */
{	53,	'b',	'B',	2,	'º',	'b',	'b',	'b',	'b'	},	/* b   */
{	54,	'n',	'N',	14,	'­',	'n',	'n',	'n',	'n'	},	/* n   */
{	55,	'm',	'M',	13,	'¸',	'm',	'm',	'm',	'm'	},	/* m   */
{	56,	',',	'<',	',',	',',	',',	',',	',',	','	},	/* ,   */
{	57,	'.',	'>',	'.',	'.',	'.',	'.',	'.',	'.'	},	/* .   */
{	58,	'/',	'?',	'/',	'/',	'/',	'/',	'/',	'/'	},	/* /   */
{	79,	29,	29,	29,	29,	29,	29,	29,	29	},	/* LFT */
{	77,	31,	31,	31,	31,	31,	31,	31,	31	},	/* DWN */
{	78,	28,	28,	28,	28,	28,	28,	28,	28	},	/* RHT */
{	29,	'1',	'1',	'1',	'1',	'1',	'1',	'1',	'1'	},	/* N 1 */
{	30,	'2',	'2',	'2',	'2',	'2',	'2',	'2',	'2'	},	/* N 2 */
{	31,	'3',	'3',	'3',	'3',	'3',	'3',	'3',	'3'	},	/* N 3 */
{	67,	13,	10,	13,	13,	13,	13,	13,	13	},	/* ENT */
{	64,	32,	32,	32,	32,	32,	32,	32,	32	},	/* SPC */
{	15,	'0',	'0',	'0',	'0',	'0',	'0',	'0',	'0'	},	/* N 0 */
{	60,	'.',	'.',	'.',	'.',	'.',	'.',	'.',	'.'	},	/* N . */
{	-1,	0,	0,	0,	0,	0,	0,	0,	0	}
};

main()
{
	unsigned char	map[96][8];
	Key		*this = keymap;
	int		i;
	int		outfile;

	while( this->rawkey != -1 )
	{
		for(i=0;i<8;i++)
			map[this->rawkey][i] = *((&this->norm)+i);
		printf("Raw %i => [%c]\n", this->rawkey, map[this->rawkey][0]>32 ? map[this->rawkey][0] : 32 );
		this++;
	}

	if( (outfile = Open( "kmap", MODE_NEWFILE )) >0 )
	{
		Write( outfile, map, sizeof( unsigned char ) * 96 * 8 );
		Close( outfile );
	}	
}
