| #!/usr/bin/env python3 | 
 | # -*- coding: utf-8 -*- | 
 | # | 
 | # Copyright (C) 2017-2020  The Project X-Ray Authors. | 
 | # | 
 | # Use of this source code is governed by a ISC-style | 
 | # license that can be found in the LICENSE file or at | 
 | # https://opensource.org/licenses/ISC | 
 | # | 
 | # SPDX-License-Identifier: ISC | 
 | ''' | 
 | Extract the frames from the output of the prjxray bitread tool. | 
 | ''' | 
 |  | 
 | import sys | 
 | import re | 
 |  | 
 |  | 
 | def extract_frames(args): | 
 |     """ Extract the frame addresses and the corresponding content """ | 
 |     frames_dict = dict() | 
 |     with open(args[1], 'r') as f: | 
 |         parse_frames = False | 
 |         for cnt, line in enumerate(f): | 
 |             if line.startswith("\n"): | 
 |                 parse_frames = False | 
 |                 continue | 
 |             line = line.strip() | 
 |             if not parse_frames and not line.startswith("Frame"): | 
 |                 continue | 
 |             if line.startswith("Frame"): | 
 |                 match = re.match("Frame 0x([0-9a-fA-F]+) ", line) | 
 |                 frame_addr = "0x" + match.group(1).upper() | 
 |                 parse_frames = True | 
 |                 frames_dict[frame_addr] = list() | 
 |                 continue | 
 |             for frame in line.split(): | 
 |                 frames_dict[frame_addr].append("0x" + frame.upper()) | 
 |     for addr, words in frames_dict.items(): | 
 |         print("{addr} {words}".format(addr=addr, words=",".join(words))) | 
 |  | 
 |  | 
 | if __name__ == "__main__": | 
 |     extract_frames(sys.argv) |