allwinner_a64/android/external/tpm2/parsep3
2018-08-08 16:14:42 +08:00

76 lines
2.1 KiB
Python
Executable file
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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()