]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Process command line arguments; skip #defines that generate invalid
authorGuido van Rossum <guido@python.org>
Tue, 3 May 1994 14:37:30 +0000 (14:37 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 3 May 1994 14:37:30 +0000 (14:37 +0000)
Python

Tools/scripts/h2py.py

index 015cd3434203bb68bb675ac721807181a7fb4300..0b260c1f2cdf13ced68c061cf0878c8342434293 100755 (executable)
@@ -1,11 +1,13 @@
 #! /usr/local/bin/python
 
 # Read #define's from stdin and translate to Python code on stdout.
-# Very primitive: non-#define's are ignored, no check for valid Python
-# syntax is made -- you will have to edit the output in most cases.
+# Very primitive: non-#define's are ignored.
+# You will have to edit the output in some cases.
+# If one or more filenames are given, output is written to corresponding
+# filenames in the local directory, translated to all uppercase, with
+# the extension replaced by ".py".
 
 # XXX To do:
-# - accept filename arguments
 # - turn trailing C comments into Python comments
 # - turn C string quotes into Python comments
 # - turn C Boolean operators "&& || !" into Python "and or not"
 # - what to do about macros with parameters?
 # - reject definitions with semicolons in them
 
-import sys, regex, string
+import sys, regex, string, getopt, os
 
 p_define = regex.compile('^#[\t ]*define[\t ]+\([a-zA-Z0-9_]+\)[\t ]+')
 
 p_comment = regex.compile('/\*\([^*]+\|\*+[^/]\)*\(\*+/\)?')
 
 def main():
-       process(sys.stdin)
+       opts, args = getopt.getopt(sys.argv[1:], '')
+       if not args:
+               args = ['-']
+       for filename in args:
+               if filename == '-':
+                       sys.stdout.write('# Generated by h2py from stdin\n')
+                       process(sys.stdin, sys.stdout)
+               else:
+                       fp = open(filename, 'r')
+                       outfile = os.path.basename(filename)
+                       i = string.rfind(outfile, '.')
+                       if i > 0: outfile = outfile[:i]
+                       outfile = string.upper(outfile)
+                       outfile = outfile + '.py'
+                       outfp = open(outfile, 'w')
+                       outfp.write('# Generated by h2py from %s\n' % filename)
+                       process(fp, outfp)
+                       outfp.close()
+                       fp.close()
 
-def process(fp):
+def process(fp, outfp):
+       env = {}
        lineno = 0
        while 1:
                line = fp.readline()
@@ -44,6 +65,14 @@ def process(fp):
                        while p_comment.search(body) >= 0:
                                a, b = p_comment.regs[0]
                                body = body[:a] + ' ' + body[b:]
-                       print name, '=', string.strip(body)
+                       stmt = '%s = %s\n' % (name, string.strip(body))
+                       ok = 0
+                       try:
+                               exec stmt in env
+                               ok = 1
+                       except:
+                               sys.stderr.write('Skipping: %s' % stmt)
+                       if ok:
+                               outfp.write(stmt)
 
 main()