eventnames.lua (3421B)
- local duplicates = {
- EV_VERSION=true,
- BTN_MISC=true,
- BTN_MOUSE=true,
- BTN_JOYSTICK=true,
- BTN_GAMEPAD=true,
- BTN_DIGI=true,
- BTN_WHEEL=true,
- BTN_TRIGGER_HAPPY=true,
- SW_MAX=true,
- REP_MAX=true,
- FF_STATUS_MAX=true,
- }
- local skip = {
- BTN=true,
- EV=true,
- INPUT_PROP=true,
- MT_TOOL=true,
- }
- local prefixes = {
- 'EV',
- 'REL',
- 'ABS',
- 'KEY',
- 'BTN',
- 'LED',
- 'SND',
- 'MSC',
- 'SW',
- 'FF',
- 'SYN',
- 'REP',
- 'INPUT_PROP',
- 'MT_TOOL',
- }
- local bits = {}
- for _, prefix in ipairs(prefixes) do
- bits[prefix] = {}
- end
- bits.EV.map = {}
- local function lookuptable(prefix)
- local entries = {}
- for _, name in ipairs(bits[prefix]) do
- table.insert(entries, name)
- end
- local max = prefix..'_MAX'
- if duplicates[max] then
- table.insert(entries, max)
- end
- table.sort(entries)
- for _, name in ipairs(entries) do
- io.write(string.format(' { .name = "%s", .value = %s },\n', name, name))
- end
- end
- for i = 1, #arg do
- for line in io.lines(arg[i]) do
- local name, value = line:match('^#define%s+([%w_]+)%s+(%dx?%x*)')
- value = tonumber(value)
- if name and not duplicates[name] then
- for prefix, b in pairs(bits) do
- if name:sub(1, #prefix + 1) == prefix..'_' then
- if b.map then
- b.map[value] = name
- b.map[name] = value
- end
- table.insert(b, name)
- end
- end
- end
- end
- end
- io.write[[
- /* THIS FILE IS GENERATED, DO NOT EDIT */
- #ifndef EVENT_NAMES_H
- #define EVENT_NAMES_H
- ]]
- for _, prefix in ipairs(prefixes) do
- if prefix ~= 'BTN' then
- io.write(string.format('static const char * const %s_map[%s_MAX + 1] = {\n', prefix:lower(), prefix))
- for _, name in ipairs(bits[prefix]) do
- io.write(string.format(' [%s] = "%s",\n', name, name))
- end
- if prefix == 'KEY' then
- for _, name in ipairs(bits.BTN) do
- io.write(string.format(' [%s] = "%s",\n', name, name))
- end
- end
- io.write[[
- };
- ]]
- end
- end
- for _, name in ipairs{'BTN_A', 'BTN_B', 'BTN_X', 'BTN_Y'} do
- table.insert(bits.BTN, name)
- end
- io.write[[
- static const char * const * const event_type_map[EV_MAX + 1] = {
- ]]
- for _, prefix in ipairs(prefixes) do
- if not skip[prefix] then
- print(string.format(' [EV_%s] = %s_map,', prefix, prefix:lower()))
- end
- end
- io.write[[
- };
- #if __clang__
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Winitializer-overrides"
- #elif __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Woverride-init"
- #endif
- static const int ev_max[EV_MAX + 1] = {
- ]]
- for i = 0, bits.EV.map.EV_MAX do
- local name = bits.EV.map[i]
- if name and bits[name:sub(4)] then
- io.write(string.format(' %s_MAX,\n', name:sub(4)))
- else
- io.write(' -1,\n')
- end
- end
- io.write[[
- };
- #if __clang__
- #pragma clang diagnostic pop /* "-Winitializer-overrides" */
- #elif __GNUC__
- #pragma GCC diagnostic pop /* "-Woverride-init" */
- #endif
- struct name_entry {
- const char *name;
- unsigned int value;
- };
- static const struct name_entry tool_type_names[] = {
- ]]
- lookuptable('MT_TOOL')
- io.write[[
- };
- static const struct name_entry ev_names[] = {
- ]]
- lookuptable('EV')
- io.write[[
- };
- static const struct name_entry code_names[] = {
- ]]
- lookuptable('ABS')
- lookuptable('BTN')
- lookuptable('FF')
- lookuptable('KEY')
- lookuptable('LED')
- lookuptable('MSC')
- lookuptable('REL')
- lookuptable('REP')
- lookuptable('SND')
- lookuptable('SW')
- lookuptable('SYN')
- io.write[[
- };
- static const struct name_entry prop_names[] = {
- ]]
- lookuptable('INPUT_PROP')
- io.write[[
- };
- #endif /* EVENT_NAMES_H */
- ]]