""" Map keystrokes as we see them to keystrokes as PyFCEU / PyMAME see them internally! """ import wx import traceback import Utils import Config import xml.dom.minidom class JoystickButtons: Up = 256 Down = 257 Left = 258 Right = 259 Button1 = 260 Button2 = 261 Button3 = 262 Button4 = 263 Button5 = 264 Button6 = 265 Button7 = 266 Button8 = 267 VBAKeyMapping = \ { JoystickButtons.Up: 0x1002, JoystickButtons.Down: 0x1003, JoystickButtons.Left: 0x1000, JoystickButtons.Right: 0x1001, JoystickButtons.Button1: 0x1080, JoystickButtons.Button2: 0x1081, JoystickButtons.Button3: 0x1082, JoystickButtons.Button4: 0x1083, JoystickButtons.Button5: 0x1084, JoystickButtons.Button6: 0x1085, JoystickButtons.Button7: 0x1086, JoystickButtons.Button8: 0x1087, wx.WXK_CONTROL: 306, # right-ctrl 305 wx.WXK_ALT: 308, # right-alt 307 wx.WXK_NUMPAD_UP: 264, wx.WXK_NUMPAD_DOWN: 258, wx.WXK_NUMPAD_LEFT: 260, wx.WXK_NUMPAD_RIGHT: 262, wx.WXK_UP: 273, wx.WXK_DOWN: 274, wx.WXK_LEFT: 276, wx.WXK_RIGHT: 275, wx.WXK_RETURN: 13, wx.WXK_TAB: 9, wx.WXK_BACK:8, wx.WXK_F1: 282, wx.WXK_F2: 283, wx.WXK_F3: 284, wx.WXK_F4: 285, wx.WXK_F5: 286, wx.WXK_F6: 287, wx.WXK_F7: 288, wx.WXK_F8: 289, wx.WXK_F9: 290, wx.WXK_F10: 291, wx.WXK_F11: 292, wx.WXK_F12: 293, wx.WXK_SCROLL: 302, wx.WXK_PAUSE: 19, wx.WXK_NUMLOCK: 300, wx.WXK_SPACE: 32, wx.WXK_SHIFT: 304, # 303 rshift wx.WXK_CAPITAL: 301, wx.WXK_NUMPAD_HOME:263, wx.WXK_NUMPAD_END:257, wx.WXK_NUMPAD_PAGEUP:265, wx.WXK_NUMPAD_PAGEDOWN:259, ord("A"): ord("a"), ord("B"): ord("b"), ord("C"): ord("c"), ord("D"): ord("d"), ord("E"): ord("e"), ord("F"): ord("f"), ord("G"): ord("g"), ord("H"): ord("h"), ord("I"): ord("i"), ord("J"): ord("j"), ord("K"): ord("k"), ord("L"): ord("l"), ord("M"): ord("m"), ord("N"): ord("n"), ord("O"): ord("o"), ord("P"): ord("p"), ord("Q"): ord("q"), ord("R"): ord("r"), ord("S"): ord("s"), ord("T"): ord("t"), ord("U"): ord("u"), ord("V"): ord("v"), ord("W"): ord("w"), ord("X"): ord("x"), ord("Y"): ord("y"), ord("Z"): ord("z"), ord("0"): ord("0"), ord("1"): ord("1"), ord("2"): ord("2"), ord("3"): ord("3"), ord("4"): ord("4"), ord("5"): ord("5"), ord("6"): ord("6"), ord("7"): ord("7"), ord("8"): ord("8"), ord("9"): ord("9"), ord(","): ord(","), ord("."): ord("."), } MAMEKeyMapping = \ { JoystickButtons.Up:67194991, JoystickButtons.Down:67199087, JoystickButtons.Left:67186798, JoystickButtons.Right:67190894, JoystickButtons.Button1:67174518, JoystickButtons.Button2:67174519, JoystickButtons.Button3:67174520, JoystickButtons.Button4:67174521, JoystickButtons.Button5:67174522, JoystickButtons.Button6:67174523, JoystickButtons.Button7:67174524, JoystickButtons.Button8:67174525, wx.WXK_CONTROL: 16842851, wx.WXK_ALT: 16842853, wx.WXK_NUMPAD_UP: 16842839, wx.WXK_NUMPAD_DOWN: 16842833, wx.WXK_NUMPAD_LEFT: 16842835, wx.WXK_NUMPAD_RIGHT: 16842837, wx.WXK_UP: 16842829, wx.WXK_ESCAPE: 16842804, wx.WXK_DOWN: 16842830, wx.WXK_LEFT: 16842827, wx.WXK_RIGHT: 16842828, wx.WXK_RETURN:16842812, wx.WXK_TAB: 16842809, wx.WXK_BACK:16842808, wx.WXK_F1: 16842789, wx.WXK_F2: 16842790, wx.WXK_F3: 16842791, wx.WXK_F4: 16842792, wx.WXK_F5: 16842793, wx.WXK_F6: 16842794, wx.WXK_F7: 16842795, wx.WXK_F8: 16842796, wx.WXK_F9: 16842797, wx.WXK_F10: 16842798, wx.WXK_F11: 16842799, wx.WXK_F12: 16842800, wx.WXK_SCROLL: 16842855, wx.WXK_PAUSE: 16842848, wx.WXK_NUMLOCK: 16842856, wx.WXK_SPACE: 16842820, wx.WXK_SHIFT: 16842849, # 16842850 rshift wx.WXK_CAPITAL: 16842857, wx.WXK_NUMPAD_HOME:16842838, wx.WXK_NUMPAD_END:16842832, wx.WXK_NUMPAD_PAGEUP:16842840, wx.WXK_NUMPAD_PAGEDOWN:16842834, ord("A"): 16842753, ord("B"): 16842754, ord("C"): 16842755, ord("D"): 16842756, ord("E"): 16842757, ord("F"): 16842758, ord("G"): 16842759, ord("H"): 16842760, ord("I"): 16842761, ord("J"): 16842762, ord("K"): 16842763, ord("L"): 16842764, ord("M"): 16842765, ord("N"): 16842766, ord("O"): 16842767, ord("P"): 16842768, ord("Q"): 16842769, ord("R"): 16842770, ord("S"): 16842771, ord("T"): 16842772, ord("U"): 16842773, ord("V"): 16842774, ord("W"): 16842775, ord("X"): 16842776, ord("Y"): 16842777, ord("Z"): 16842778, ord("0"): 16842779, ord("1"): 16842780, ord("2"): 16842781, ord("3"): 16842782, ord("4"): 16842783, ord("5"): 16842784, ord("6"): 16842785, ord("7"): 16842786, ord("8"): 16842787, ord("9"): 16842788, ord(","): 16842817, ord("."): 16842818 } PyFCEUKeyMapping = \ { wx.WXK_CONTROL: 29, wx.WXK_ALT: 56, wx.WXK_NUMPAD_UP: 72, wx.WXK_NUMPAD_DOWN: 80, wx.WXK_NUMPAD_LEFT: 75, wx.WXK_NUMPAD_RIGHT: 77, wx.WXK_UP: 200, wx.WXK_DOWN: 208, wx.WXK_LEFT: 203, wx.WXK_RIGHT: 205, wx.WXK_RETURN: 28, wx.WXK_TAB: 15, wx.WXK_BACK: 14, wx.WXK_F1: 59, wx.WXK_F2: 60, wx.WXK_F3: 61, wx.WXK_F4: 62, wx.WXK_F5: 63, wx.WXK_F6: 64, wx.WXK_F7: 65, wx.WXK_F8: 66, wx.WXK_F9: 67, wx.WXK_F10: 68, wx.WXK_SCROLL: 70, wx.WXK_PAUSE: 197, wx.WXK_NUMLOCK: 69, wx.WXK_SPACE: 57, wx.WXK_SHIFT: 42, # 42 lshift 54 rshift wx.WXK_CAPITAL: 58, wx.WXK_NUMPAD_HOME: 71, wx.WXK_NUMPAD_END: 79, wx.WXK_NUMPAD_PAGEUP: 73, wx.WXK_NUMPAD_PAGEDOWN: 81, ord("A"):30, ord("B"):48, ord("C"):46, ord("D"):32, ord("E"):18, ord("F"):33, ord("G"):34, ord("H"):35, ord("I"):23, ord("J"):36, ord("K"):37, ord("L"):38, ord("M"):50, ord("N"):49, ord("O"):24, ord("P"):25, ord("R"):16, ord("S"):31, ord("T"):20, ord("U"):22, ord("V"):47, ord("W"):17, ord("X"):45, ord("Y"):21, ord("Z"):44, ord("0"):11, ord("1"):1, ord("2"):2, ord("3"):3, ord("4"):4, ord("5"):5, ord("6"):6, ord("7"):7, ord("8"):8, ord("9"):9, } KeystrokeNames = \ { wx.WXK_ESCAPE: "Escape", wx.WXK_CONTROL: "Ctrl", wx.WXK_ALT: "Alt", wx.WXK_NUMPAD_ENTER: "Numpad Enter", wx.WXK_NUMPAD_UP: "Numpad Up", wx.WXK_NUMPAD_DOWN: "Numpad Down", wx.WXK_NUMPAD_LEFT: "Numpad Left", wx.WXK_NUMPAD_RIGHT: "Numpad Right", wx.WXK_UP: "Arrow Up", wx.WXK_DOWN: "Arrow Down", wx.WXK_LEFT: "Arrow Left", wx.WXK_RIGHT: "Arrow Right", wx.WXK_RETURN: "Enter", wx.WXK_TAB: "Tab", wx.WXK_BACK: "Backspace", wx.WXK_F1: "F1", wx.WXK_F2: "F2", wx.WXK_F3: "F3", wx.WXK_F4: "F4", wx.WXK_F5: "F5", wx.WXK_F6: "F6", wx.WXK_F7: "F7", wx.WXK_F8: "F8", wx.WXK_F9: "F9", wx.WXK_F10: "F10", wx.WXK_F11: "F11", wx.WXK_F12: "F12", wx.WXK_SCROLL: "ScrollLock", wx.WXK_PAUSE: "Pause", wx.WXK_NUMLOCK: "Numlock", wx.WXK_SPACE: "Space", wx.WXK_SHIFT: "Shift", wx.WXK_CAPITAL: "CapsLock", wx.WXK_NUMPAD_HOME: "Numpad-HOME", wx.WXK_NUMPAD_END: "Numpad-END", wx.WXK_NUMPAD_PAGEUP: "Numpad-PgUp", wx.WXK_NUMPAD_PAGEDOWN: "Numpad-PgDown", } PyNESKeystrokeNames = { wx.WXK_CONTROL: "Ctrl", wx.WXK_ALT: "Alt", wx.WXK_NUMPAD_UP: "Num 8", wx.WXK_NUMPAD_DOWN: "Num 2", wx.WXK_NUMPAD_LEFT: "Num 4", wx.WXK_NUMPAD_RIGHT: "Num 6", wx.WXK_UP: "Up", wx.WXK_DOWN: "Down", wx.WXK_LEFT: "Left", wx.WXK_RIGHT: "Right", wx.WXK_RETURN: "Enter", wx.WXK_TAB: "Tab", wx.WXK_BACK: "Backspace", wx.WXK_F1: "F1", wx.WXK_F2: "F2", wx.WXK_F3: "F3", wx.WXK_F4: "F4", wx.WXK_F5: "F5", wx.WXK_F6: "F6", wx.WXK_F7: "F7", wx.WXK_F8: "F8", wx.WXK_F9: "F9", wx.WXK_F10: "F10", wx.WXK_F11: "F11", wx.WXK_F12: "F12", wx.WXK_SCROLL: "ScrollLock", wx.WXK_PAUSE: "Pause", wx.WXK_NUMLOCK: "Numlock", wx.WXK_SPACE: "Space", wx.WXK_SHIFT: "Shift", wx.WXK_CAPITAL: "CapsLock", wx.WXK_NUMPAD_HOME: "Numpad-HOME", wx.WXK_NUMPAD_END: "Numpad-END", wx.WXK_NUMPAD_PAGEUP: "Numpad-PgUp", wx.WXK_NUMPAD_PAGEDOWN: "Numpad-PgDown", JoystickButtons.Up: "(joy 0) -y", JoystickButtons.Down: "(joy 0) +y", JoystickButtons.Left: "(joy 0) -x", JoystickButtons.Right: "(joy 0) +x", JoystickButtons.Button1: "(joy 0) 0", JoystickButtons.Button2: "(joy 0) 1", JoystickButtons.Button3: "(joy 0) 2", JoystickButtons.Button4: "(joy 0) 3", JoystickButtons.Button5: "(joy 0) 4", JoystickButtons.Button6: "(joy 0) 5", JoystickButtons.Button7: "(joy 0) 6", JoystickButtons.Button8: "(joy 0) 7", } for X in range(32, 97): KeystrokeNames[X] = chr(X) PyNESKeystrokeNames[X] = chr(X) for X in (126, ): KeystrokeNames[X] = chr(X) PyNESKeystrokeNames[X] = chr(X) # Special 'keys' for joysticks: KeystrokeNames[JoystickButtons.Up] = "Joystick-Up" KeystrokeNames[JoystickButtons.Down] = "Joystick-Down" KeystrokeNames[JoystickButtons.Left] = "Joystick-Left" KeystrokeNames[JoystickButtons.Right] = "Joystick-Right" KeystrokeNames[JoystickButtons.Button1] = "Joystick-Button1" KeystrokeNames[JoystickButtons.Button2] = "Joystick-Button2" KeystrokeNames[JoystickButtons.Button3] = "Joystick-Button3" KeystrokeNames[JoystickButtons.Button4] = "Joystick-Button4" KeystrokeNames[JoystickButtons.Button5] = "Joystick-Button5" KeystrokeNames[JoystickButtons.Button6] = "Joystick-Button6" KeystrokeNames[JoystickButtons.Button7] = "Joystick-Button7" KeystrokeNames[JoystickButtons.Button8] = "Joystick-Button8" def SetPyNESKeyConfig(KeyConfig): NESConfigFileName = "PyNESConfig.xml" File = open(NESConfigFileName, "rb") Text = File.read() File.close() try: DOMRoot = xml.dom.minidom.parseString(Text) except: traceback.print_exc() return Pad1Node = DOMRoot.getElementsByTagName("pad-1")[0] KeyNode = Pad1Node.getElementsByTagName("a")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.ButtonA]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("b")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.ButtonB]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("up")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Up]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("down")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Down]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("left")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Left]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("right")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Right]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("start")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Start]]) KeyNode.appendChild(TextNode) KeyNode = Pad1Node.getElementsByTagName("select")[0] KeyNode.childNodes = [] TextNode = DOMRoot.createTextNode(PyNESKeystrokeNames[KeyConfig[Config.KeyConfig.Select]]) KeyNode.appendChild(TextNode) File = open(NESConfigFileName, "wb") XML = Utils.GeneratePrettyXML(DOMRoot) File.write(XML) File.close()