about summary refs log tree commit diff
path: root/scripts/gen_keys.py
blob: e8f206c32ff3c7be12d1467d8996f719ca56f41e (plain)
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import sys, os

# load header
glfw = "src/engine/external/glfw/include/GL/glfw.h"
lines = [line.strip() for line in file(glfw).readlines()]

# genereate keys.h file
f = file("src/engine/e_keys.h", "w")

keynames_sdl = []
for i in range(0, 512):
	keynames_sdl += ["&%d"%i]
	
keynames = {}
KEY_MOUSE_FIRST = 256+128
KEY_MOUSE_WHEEL_DOWN = KEY_MOUSE_FIRST-2
KEY_MOUSE_WHEEL_UP = KEY_MOUSE_FIRST-1

print >>f, "#ifndef ENGINE_KEYS_H"
print >>f, "#define ENGINE_KEYS_H"
print >>f, '/* AUTO GENERATED! DO NOT EDIT MANUALLY! */'
print >>f, "enum"
print >>f, "{"
print >>f, "#ifdef CONFIG_NO_SDL"

# do keys
for line in lines:
	if "GLFW_KEY" in line:
		l = line.split()
		key = l[1].replace("GLFW_", "").strip()
		value = l[2].replace("GLFW_","").strip()

		# ignore special last key
		if key == "KEY_LAST":
			continue

		# print to file					
		print >>f, "\t%s = %s," % (key.upper(), value)
		
		# add to keynames
		exec("%s = %s" % (key, value))
		exec("keynames[%s] = '%s'" % (value, key))

# do mouse buttons
print >>f, "\tKEY_MOUSE_WHEEL_DOWN = %d," % (KEY_MOUSE_WHEEL_DOWN)
print >>f, "\tKEY_MOUSE_WHEEL_UP = %d," % (KEY_MOUSE_WHEEL_UP)
keynames[KEY_MOUSE_WHEEL_DOWN] = 'KEY_MOUSE_WHEEL_DOWN'
keynames[KEY_MOUSE_WHEEL_UP] = 'KEY_MOUSE_WHEEL_UP'

print >>f, "\tKEY_MOUSE_FIRST = %d," % KEY_MOUSE_FIRST
for line in lines:
	if "GLFW_MOUSE" in line and not "CURSOR" in line:
		l = line.split()
		key = l[1].replace("GLFW_", "").strip()
		value = l[2].replace("GLFW_","").strip()
		
		if len(key) == len("MOUSE_BUTTON_X"): # only match MOUSE_X
			key = "KEY_MOUSE_" + key[-1]
			value = "KEY_MOUSE_FIRST+%s"% (int(key[-1])-1)
			
			# print to file
			print >>f, "\t%s = %s," % (key, value)
			
			# add to keynames
			exec("%s = %s" % (key, value))
			exec("keynames[%s] = '%s'" % (value, key))
print >>f, "\tKEY_LAST"

print >>f, "#else"

highestid = 0
for line in open("scripts/SDL_keysym.h"):
	l = line.strip().split("=")
	if len(l) == 2 and "SDLK_" in line:
		key = l[0].strip().replace("SDLK_", "KEY_")
		value = int(l[1].split(",")[0].strip())
		print >>f, "\t%s = %d,"%(key, value)
		
		keynames_sdl[value] = key.replace("KEY_", "").lower()
		
		if value > highestid:
			highestid =value

print >>f, "\tKEY_MOUSE_1 = %d,"%(highestid+1); keynames_sdl[highestid+1] = "mouse1"
print >>f, "\tKEY_MOUSE_2 = %d,"%(highestid+2); keynames_sdl[highestid+2] = "mouse2"
print >>f, "\tKEY_MOUSE_3 = %d,"%(highestid+3); keynames_sdl[highestid+3] = "mouse3"
print >>f, "\tKEY_MOUSE_4 = %d,"%(highestid+4); keynames_sdl[highestid+4] = "mouse4"
print >>f, "\tKEY_MOUSE_5 = %d,"%(highestid+5); keynames_sdl[highestid+5] = "mouse5"
print >>f, "\tKEY_MOUSE_6 = %d,"%(highestid+6); keynames_sdl[highestid+6] = "mouse6"
print >>f, "\tKEY_MOUSE_7 = %d,"%(highestid+7); keynames_sdl[highestid+7] = "mouse7"
print >>f, "\tKEY_MOUSE_8 = %d,"%(highestid+8); keynames_sdl[highestid+8] = "mouse8"
print >>f, "\tKEY_MOUSE_WHEEL_UP = %d,"%(highestid+9); keynames_sdl[highestid+9] = "mousewheelup"
print >>f, "\tKEY_MOUSE_WHEEL_DOWN = %d,"%(highestid+10); keynames_sdl[highestid+10] = "mousewheeldown"
print >>f, "\tKEY_LAST,"

print >>f, "\tKEY_DEL=KEY_DELETE,"
print >>f, "\tKEY_ENTER=KEY_RETURN,"
print >>f, "\tKEY_KP_SUBTRACT=KEY_KP_MINUS,"
print >>f, "\tKEY_KP_ADD=KEY_KP_PLUS,"
print >>f, "\tKEY_ESC=KEY_ESCAPE"

print >>f, "#endif"
print >>f, "};"
print >>f, ""
print >>f, "#endif"


# generate keynames.c file
f = file("src/engine/e_keynames.c", "w")
print >>f, '/* AUTO GENERATED! DO NOT EDIT MANUALLY! */'
print >>f, ''
print >>f, "#include <string.h>"
print >>f, ""
print >>f, "static const char key_strings[512][16] ="
print >>f, "{"
print >>f, "#ifdef CONFIG_NO_SDL"
for i in range(0, 512):
	n = "&%d"%i
	if i >= 48 and i <= 57 or i >= 65 and i <= 90:
		n = chr(i).lower()
	elif i in keynames:
		n = keynames[i][4:].lower().replace("_", "")
	print >>f, "\t\"%s\"," % n
print >>f, "#else"
print >>f, ""
for n in keynames_sdl:
	print >>f, '\t"%s",'%n

print >>f, "#endif"
print >>f, "};"
print >>f, ""
print >>f, "const char *inp_key_name(int k) { if (k >= 0 && k < 512) return key_strings[k]; else return key_strings[0]; }"
print >>f, "int inp_key_code(const char *key_name) { int i; if (!strcmp(key_name, \"-?-\")) return -1; else for (i = 0; i < 512; i++) if (!strcmp(key_strings[i], key_name)) return i; return -1; }"
print >>f, ""

f.close()