blob: 592d84ffd2415eca5c93dd534ddcfd3299b24bb3 [file] [log] [blame]
#!/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()