Edit

kc3-lang/SDL/src/joystick/sort_controllers.py

Branch :

  • Show log

    Commit

  • Author : Sam Lantinga
    Date : 2013-08-11 19:56:43
    Hash : 1ad936eb
    Message : Fixed bug 2027 - Full-screen appears to be broken - hang in SDL_DestroyWindow() Rainer Deyke I'm running Linux Mint 15 with the Cinnamon window manager. SDL_DestroyWindow consistently locks up for me when the window if fullscreen.

  • src/joystick/sort_controllers.py
  • #!/usr/bin/env python
    #
    # Script to sort the game controller database entries in SDL_gamecontroller.c
    
    import re
    
    
    filename = "SDL_gamecontrollerdb.h"
    input = open(filename)
    output = open(filename + ".new", "w")
    parsing_controllers = False
    controllers = []
    controller_guids = {}
    split_pattern = re.compile(r'([^"]*")([^,]*,)([^,]*,)([^"]*)(".*)')
    
    def save_controller(line):
        global controllers
        match = split_pattern.match(line)
        entry = [ match.group(1), match.group(2), match.group(3) ]
        bindings = sorted(match.group(4).split(","))
        if (bindings[0] == ""):
            bindings.pop(0)
        entry.extend(",".join(bindings) + ",")
        entry.append(match.group(5))
        controllers.append(entry)
    
    def write_controllers():
        global controllers
        global controller_guids
        for entry in sorted(controllers, key=lambda entry: entry[2]):
            line = "".join(entry) + "\n"
            if (entry[1] in controller_guids):
                print "Warning: entry '%s' is duplicate of entry '%s'" % (entry[2], controller_guids[entry[1]][2])
            controller_guids[entry[1]] = entry
    
            output.write(line)
        controllers = []
        controller_guids = {}
    
    for line in input:
        if ( parsing_controllers ):
            if (line.startswith("{")):
                output.write(line)
            elif (line.startswith("#endif")):
                parsing_controllers = False
                write_controllers()
                output.write(line)
            elif (line.startswith("#")):
                print "Parsing " + line.strip()
                write_controllers()
                output.write(line)
            else:
                save_controller(line)
        else:
            if (line.startswith("static const char *s_ControllerMappings")):
                parsing_controllers = True
    
            output.write(line)
    
    output.close()
    print "Finished writing %s.new" % filename