Hi! Some to be discussed. I found the SND_PCI_QUIRK group (lines with this macro under one structure) is unsorted. Almost in all cases no sense to make so. I wrote python script to keep lists sorted. Please, comment this. P.S. Known bug is a deletion of the empty lines under group. #!/usr/bin/python # -*- coding: UTF-8 -*- # vim: ts=4 sw=4 et: """ The sript sorts SND_PCI_QUIRK groups by vendor and product id pair. """ __author__ = "Andy Shevchenko <andy@xxxxxxxxxxxx>" __revision__ = "$Id$" import sys import os import re def read_file(fname): """ Read given file """ fdes = open(fname, 'rt') result = fdes.readlines() fdes.close() return result def save_file(fname, lines): """ Write lines to the given file """ fdes = open(fname, 'wt') fdes.writelines(lines) fdes.flush() fdes.close() def parse_quirks(quirks): """ Parse buffer as SND_PCI_QUIRK group """ rexp_begin = re.compile("^\s*[/\*]*\s*SND_PCI_QUIRK\((?P<vid>[^,]+),\s*(?P<pid>[^,]+)") rexp_end = re.compile("\),\s*(/\*.+\*/)?\s*$") xbuffer = {} # vendor, product: prefix lines, line, postfix lines flag = False vpid = 0 prefix = [] postfix = [] for line in quirks: if line.strip() == '': continue rmatch = rexp_begin.match(line) if rmatch: if flag == True: xbuffer[vpid][2].extend(postfix) postfix = [] flag = False vpid = (int(rmatch.group('vid'), 16) << 16) + int(rmatch.group('pid'), 16) if xbuffer.has_key(vpid): print "Warning: the line '%s' is duplicate!" % line.strip() xbuffer[vpid][2].append(line) else: xbuffer[vpid] = [prefix, line, []] prefix = [] if not rexp_end.search(line): flag = True else: if flag == False: prefix.append(line) else: postfix.append(line) return xbuffer def sort_quirks(quirks): """ Sort SND_PCI_QUIRK group by vendor and product id pair """ xbuffer = [] keys = quirks.keys() keys.sort() for key in keys: quirk = quirks[key] xbuffer.extend(quirk[0]) xbuffer.append(quirk[1]) xbuffer.extend(quirk[2]) return xbuffer def catch_quirk_lines(lines): """ Catch SND_PCI_QUIRK group from lines and sort it """ rexp_begin = re.compile("\s*struct\s+snd_pci_quirk\s+.+\s*=\s*{\s*$") flag = False xbuffer = [] quirks = [] for line in lines: if flag == False and rexp_begin.search(line): xbuffer.append(line) quirks.extend(xbuffer) flag = True xbuffer = [] continue if flag == True and line.strip() == '{}': quirks.extend(sort_quirks(parse_quirks(xbuffer))) flag = False xbuffer = [] xbuffer.append(line) quirks.extend(xbuffer) return quirks def main(): """ MAIN """ try: fname = sys.argv[1] except IndexError: print "Usage: %s <input file>" % os.path.basename(sys.argv[0]) sys.exit(1) lines = read_file(fname) quirks = catch_quirk_lines(lines) save_file('%s.sorted' % fname, quirks) if __name__ == '__main__': main() # End of file -- With best regards, Andy Shevchenko. mailto: andy@xxxxxxxxxxxx _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel