b424953120112d0fecf4144d7e4a42ca938e93be
1 #! /usr/bin/env python2.7
3 # A. V. Shiryaev, 2012.09
4 # simple *.h '#define' macro translator
10 _p1
= re
.compile('^#define\s+([^\s]+)\s+([A-Za-z0-9]+)\s*$')
11 _p2
= re
.compile('^#define\s+([^\s]+)\s+([^\s]+)\s+\/\*([^\*]+)\*\/\s*$')
30 s
.append("%s,%s" % (si
, si
+1))
32 s
.append("%s..%s" % (si
, si
+ sn
- 1))
41 s
.append("%s,%s" % (si
, si
+1))
43 s
.append("%s..%s" % (si
, si
+ sn
- 1))
44 return '{' + ','.join(s
) + '}'
49 if x
.startswith('(') and x
.endswith(')') and (x
.count('(') == 1) and (x
.count(')') == 1):
52 if x
.startswith('0x'): # fix HEX
54 if x
[2] in ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'):
55 return x
[2:].upper() + "H"
57 return "0" + x
[2:].upper() + "H"
59 return mkset(int(x
, 16))
60 elif x
[0] == '0': # fix OCT
64 return mkset(int(x
, 8))
76 def p (nIndents
, sym
, val
, comment
, val1
):
77 r
= [ "%s%s* = %s;" % (INDENT
*nIndents
, sym
, val
) ]
78 if (val1
!= None) and (val
!= val1
):
79 r
.append( "(* %s *)" % (val1
,) )
81 r
.append( "(* %s *)" % (comment
,) )
85 return (len(s
) > 1) and s
.startswith('0') # HEX or OCT
88 if len(sys
.argv
) == 5:
89 nIndents
= int(sys
.argv
[1])
90 if sys
.argv
[2] == '*':
93 level
= int(sys
.argv
[2])
95 assert tip
in ('i', 's')
97 fh
= open(sys
.argv
[4], 'r')
99 for line
in fh
.readlines():
100 if line
.startswith("#if"):
103 elif line
.startswith("#endif"):
106 elif (level
== None) or (st
== level
):
110 val
= fixVal(r
.group(2), tip
)
111 if isBits(r
.group(2)):
112 val1
= fixVal(r
.group(2), 's')
115 comment
= r
.group(3).strip()
116 p(nIndents
, sym
, val
, comment
, val1
)
121 val
= fixVal(r
.group(2), tip
)
122 if isBits(r
.group(2)):
123 val1
= fixVal(r
.group(2), 's')
127 p(nIndents
, sym
, val
, comment
, val1
)
129 print "usage: %s nIndents level type file.h" % (sys
.argv
[0],)
131 print " number: selected level"
132 print " *: all levels"
137 if __name__
== '__main__':