#!/usr/bin/env python

import re, sys, operator, os

code_line = re.compile("^\s*\d+:/")
frame_line = re.compile("^\s*\d+\s+/\* frame size = (\d+) \*/")

class frame(object):
    def __init__(self, code, frame_size):
        self.code = code
        self.frame_size = int(frame_size)

frames = []

def process_lst(filename):
    '''process one lst file'''
    last_code = ''
    h = open(filename, mode='r')
    for line in h:
        if code_line.match(line):
            last_code = line.strip()
        elif frame_line.match(line):
            frames.append(frame(last_code, frame_line.match(line).group(1)))
    h.close()

if len(sys.argv) > 1:
    dname = sys.argv[1]
else:
    dname = '.'

for root, dirs, files in os.walk(dname):
    for f in files:
        if f.endswith(".lst"):
            process_lst(os.path.join(root, f))

sorted_frames =  sorted(frames,
                        key=operator.attrgetter('frame_size'),
                        reverse=True)

print("FrameSize   Code")
for frame in sorted_frames:
    if frame.frame_size > 0:
        print("%9u   %s" % (frame.frame_size, frame.code))