+def parseKeys(context, filename, actionmap, device, keys):
+ for x in keys.findall("key"):
+ get_attr = x.attrib.get
+ mapto = get_attr("mapto")
+ id = get_attr("id")
+ flags = get_attr("flags")
+
+ flag_ascii_to_id = lambda x: {'m':1,'b':2,'r':4,'l':8}[x]
+
+ flags = sum(map(flag_ascii_to_id, flags))
+
+ assert mapto, "%s: must specify mapto in context %s, id '%s'" % (filename, context, id)
+ assert id, "%s: must specify id in context %s, mapto '%s'" % (filename, context, mapto)
+ assert flags, "%s: must specify at least one flag in context %s, id '%s'" % (filename, context, id)
+
+ if len(id) == 1:
+ keyid = ord(id) | 0x8000
+ elif id[0] == '\\':
+ if id[1] == 'x':
+ keyid = int(id[2:], 0x10) | 0x8000
+ elif id[1] == 'd':
+ keyid = int(id[2:]) | 0x8000
+ else:
+ raise "key id '" + str(id) + "' is neither hex nor dec"
+ else:
+ try:
+ keyid = KEYIDS[id]
+ except:
+ raise "key id '" + str(id) + "' is illegal"
+# print context + "::" + mapto + " -> " + device + "." + hex(keyid)
+ actionmap.bindKey(filename, device, keyid, flags, context, mapto)
+ addKeyBinding(filename, keyid, context, mapto, flags)
+
+def readKeymap(filename):
+ p = enigma.eActionMap.getInstance()