|
|
#!/usr/bin/python |
|
|
|
|
|
import sys |
|
|
import re |
|
|
|
|
|
header = '''// This file was extracted from the TCG Published |
|
|
// Trusted Platform Module Library |
|
|
// Part 3: Commands |
|
|
// Family "2.0" |
|
|
// Level 00 Revision 01.16 |
|
|
// October 30, 2014 |
|
|
|
|
|
''' |
|
|
|
|
|
head_spaces = re.compile('^\s*[0-9]+\s{0,4}') |
|
|
source_lines = open(sys.argv[1], 'r').read().splitlines() |
|
|
|
|
|
def strip_line_num(line): |
|
|
line = head_spaces.sub('', line) |
|
|
return line |
|
|
|
|
|
def postprocess_lines(buffer): |
|
|
# get rid of heading line numbers and spaces. |
|
|
buffer = [head_spaces.sub('', x) for x in buffer] |
|
|
|
|
|
# Drop the file level conditional compilation statement. |
|
|
for i in range(len(buffer)): |
|
|
if buffer[i].startswith('#include'): |
|
|
continue |
|
|
if buffer[i].startswith( |
|
|
'#ifdef TPM_CC') and buffer[-1].startswith( |
|
|
'#endif // CC_'): |
|
|
buffer = buffer[:i] + buffer[i + 1:-1] |
|
|
break |
|
|
return header + '\n'.join(buffer) + '\n' |
|
|
|
|
|
text = [] |
|
|
for line in source_lines: |
|
|
text.append(line) |
|
|
if line == '' and text[-2].startswith('') and text[-5] == '': |
|
|
text = text[:-5] |
|
|
|
|
|
func_file = None |
|
|
func_name = '' |
|
|
prev_num = 0 |
|
|
line_buffer = [] |
|
|
output_buffer = [] |
|
|
for line in text: |
|
|
f = re.match('^\s*[0-9]+\.[0-9]+\s+(\S+)$', line) |
|
|
if f: |
|
|
func_name = re.sub('^TPM2_', '', f.groups(0)[0]) |
|
|
|
|
|
num = re.match('^\s*([0-9]+)[$ ]', line + ' ') |
|
|
if num: |
|
|
line_num = int(num.groups(0)[0]) |
|
|
if line_num == 1: |
|
|
# this is the first line of a file |
|
|
if func_file: |
|
|
func_file.write(postprocess_lines(output_buffer)) |
|
|
func_file.close() |
|
|
func_file = open('%s.c' % func_name, 'w') |
|
|
output_buffer = [line,] |
|
|
prev_num = 1 |
|
|
line_buffer = [] |
|
|
continue |
|
|
if line_num == prev_num + 1: |
|
|
if line_buffer: |
|
|
output_buffer.append('\n'.join(line_buffer)) |
|
|
line_buffer = [] |
|
|
output_buffer.append(line) |
|
|
prev_num = line_num |
|
|
continue |
|
|
line_buffer.append('//' + line) |
|
|
|
|
|
func_file.write(postprocess_lines(output_buffer)) |
|
|
func_file.close()
|
|
|
|