xref: /openbsd/sbin/wsconsctl/mkkeysym.sh (revision 3d8817e4)
1#! /bin/sh
2#
3#	$OpenBSD: mkkeysym.sh,v 1.2 2010/06/28 20:40:39 maja Exp $
4#	$NetBSD: mkkeysym.sh 1.1 1998/12/28 14:01:17 hannken Exp $
5#
6#	Build a table of keysyms from a file describing keysyms as:
7#
8#	/*BEGINKEYSYMDECL*/
9#	#define KS_name 0xval
10#	...
11#	/*ENDKEYSYMDECL*/
12#
13
14AWK=${AWK:-awk}
15
16${AWK} '
17BEGIN {
18	in_decl = 0;
19	printf("/* DO  NOT EDIT: AUTOMATICALLY GENERATED FROM '$1' */\n\n");
20	printf("#define\tKEYSYM_ENC_ISO\t0\n");
21	printf("#define\tKEYSYM_ENC_L2\t1\n");
22	printf("#define\tKEYSYM_ENC_L5\t2\n");
23	printf("#define\tKEYSYM_ENC_L7\t3\n");
24	printf("#define\tKEYSYM_ENC_KOI\t4\n\n");
25	printf("struct ksym {\n\tchar *name;\n\tint value;\n\tint enc;\n};\n\n");
26	printf("struct ksym ksym_tab_by_name[] = {\n");
27}
28
29END {
30	printf("};\n");
31}
32
33$1 == "/*BEGINKEYSYMDECL*/" {
34	in_decl = 1;
35}
36
37$1 == "/*ENDKEYSYMDECL*/" {
38	in_decl = 0;
39}
40
41$1 ~ /^#[ 	]*define/ && $2 ~ /^KS_/ && $3 ~ /^0x[0-9a-f]*/ {
42	if (in_decl) {
43		enc="KEYSYM_ENC_ISO"
44		if ($2 ~ /^KS_L2_/) { enc="KEYSYM_ENC_L2" }
45		if ($2 ~ /^KS_L5_/) { enc="KEYSYM_ENC_L5" }
46		if ($2 ~ /^KS_L7_/) { enc="KEYSYM_ENC_L7" }
47		if ($2 ~ /^KS_Cyrillic_/) { enc="KEYSYM_ENC_KOI" }
48		printf("\t{ \"%s\", %s, %s },\n", substr($2, 4), $3, enc);
49	}
50}' $1
51