mirror of
https://github.com/python/cpython.git
synced 2025-07-23 19:25:40 +00:00
Get rid of freeze (now its own directory).
Added some new demos. Fixed a few others.
This commit is contained in:
parent
011813444c
commit
07c9645413
6 changed files with 345 additions and 25 deletions
|
@ -194,7 +194,7 @@ def fix(filename):
|
|||
|
||||
# Tokenizing ANSI C (partly)
|
||||
|
||||
Identifier = '[a-zA-Z_][a-zA-Z0-9_]+'
|
||||
Identifier = '\(struct \)?[a-zA-Z_][a-zA-Z0-9_]+'
|
||||
String = '"\([^\n\\"]\|\\\\.\)*"'
|
||||
Char = '\'\([^\n\\\']\|\\\\.\)*\''
|
||||
CommentStart = '/\*'
|
||||
|
@ -246,6 +246,7 @@ def fixline(line):
|
|||
if Program is InsideCommentProgram:
|
||||
if not Docomments:
|
||||
print 'Found in comment:', found
|
||||
i = i + n
|
||||
continue
|
||||
if NotInComment.has_key(found):
|
||||
## print 'Ignored in comment:',
|
||||
|
@ -290,7 +291,9 @@ def addsubst(substfile):
|
|||
i = -1 # Happens to delete trailing \n
|
||||
words = string.split(line[:i])
|
||||
if not words: continue
|
||||
if len(words) <> 2:
|
||||
if len(words) == 3 and words[0] == 'struct':
|
||||
words[:2] == [words[0] + ' ' + words[1]]
|
||||
elif len(words) <> 2:
|
||||
err(substfile + ':' + `lineno` +
|
||||
': warning: bad line: ' + line)
|
||||
continue
|
||||
|
|
|
@ -1,32 +1,43 @@
|
|||
#! /usr/local/bin/python
|
||||
|
||||
# Read #define's from stdin and translate to Python code on stdout.
|
||||
# Very primitive: non-#define's are ignored, as is anything that isn't
|
||||
# valid Python as it stands.
|
||||
# Read #define's and translate to Python code.
|
||||
# Handle #include statements.
|
||||
# Handle #define macros with one argument.
|
||||
# Anything that isn't recognized or doesn't translate into valid
|
||||
# Python is ignored.
|
||||
|
||||
# Without filename arguments, acts as a filter.
|
||||
# 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".
|
||||
|
||||
# By passing one or more options of the form "-i regular_expression"
|
||||
# you can specify additional strings to be ignored. This is useful
|
||||
# e.g. to ignore casts to u_long: simply specify "-i '(u_long)'".
|
||||
|
||||
# XXX To do:
|
||||
# - 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 #if(def)?
|
||||
# - what to do about #include?
|
||||
# - what to do about macros with parameters?
|
||||
# - reject definitions with semicolons in them
|
||||
# - what to do about macros with multiple parameters?
|
||||
|
||||
import sys, regex, string, getopt, os
|
||||
import sys, regex, regsub, string, getopt, os
|
||||
|
||||
p_define = regex.compile('^#[\t ]*define[\t ]+\([a-zA-Z0-9_]+\)[\t ]+')
|
||||
|
||||
p_macro = regex.compile(
|
||||
'^#[\t ]*define[\t ]+\([a-zA-Z0-9_]+\)(\([_a-zA-Z][_a-zA-Z0-9]*\))[\t ]+')
|
||||
|
||||
p_include = regex.compile('^#[\t ]*include[\t ]+<\([a-zA-Z0-9_/\.]+\)')
|
||||
|
||||
p_comment = regex.compile('/\*\([^*]+\|\*+[^/]\)*\(\*+/\)?')
|
||||
|
||||
ignores = [p_comment]
|
||||
|
||||
p_char = regex.compile("'\(\\\\.[^\\\\]*\|[^\\\\]\)'")
|
||||
|
||||
filedict = {}
|
||||
|
||||
def main():
|
||||
opts, args = getopt.getopt(sys.argv[1:], 'i:')
|
||||
for o, a in opts:
|
||||
|
@ -47,40 +58,65 @@ def main():
|
|||
outfile = outfile + '.py'
|
||||
outfp = open(outfile, 'w')
|
||||
outfp.write('# Generated by h2py from %s\n' % filename)
|
||||
filedict = {}
|
||||
if filename[:13] == '/usr/include/':
|
||||
filedict[filename[13:]] = None
|
||||
process(fp, outfp)
|
||||
outfp.close()
|
||||
fp.close()
|
||||
|
||||
def process(fp, outfp):
|
||||
env = {}
|
||||
def process(fp, outfp, env = {}):
|
||||
lineno = 0
|
||||
while 1:
|
||||
line = fp.readline()
|
||||
if not line: break
|
||||
lineno = lineno + 1
|
||||
# gobble up continuation lines
|
||||
while line[-2:] == '\\\n':
|
||||
nextline = fp.readline()
|
||||
if not nextline: break
|
||||
lineno = lineno + 1
|
||||
line = line + nextline
|
||||
n = p_define.match(line)
|
||||
if n >= 0:
|
||||
# gobble up continuation lines
|
||||
while line[-2:] == '\\\n':
|
||||
nextline = fp.readline()
|
||||
if not nextline: break
|
||||
lineno = lineno + 1
|
||||
line = line + nextline
|
||||
name = p_define.group(1)
|
||||
body = line[n:]
|
||||
# replace ignored patterns by spaces
|
||||
for p in ignores:
|
||||
while p.search(body) >= 0:
|
||||
a, b = p.regs[0]
|
||||
body = body[:a] + ' ' + body[b:]
|
||||
body = regsub.gsub(p, ' ', body)
|
||||
# replace char literals by ord(...)
|
||||
body = regsub.gsub(p_char, 'ord(\\0)', 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:
|
||||
else:
|
||||
outfp.write(stmt)
|
||||
|
||||
n =p_macro.match(line)
|
||||
if n >= 0:
|
||||
macro, arg = p_macro.group(1, 2)
|
||||
body = line[n:]
|
||||
for p in ignores:
|
||||
body = regsub.gsub(p, ' ', body)
|
||||
body = regsub.gsub(p_char, 'ord(\\0)', body)
|
||||
stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
|
||||
try:
|
||||
exec stmt in env
|
||||
except:
|
||||
sys.stderr.write('Skipping: %s' % stmt)
|
||||
else:
|
||||
outfp.write(stmt)
|
||||
if p_include.match(line) >= 0:
|
||||
regs = p_include.regs
|
||||
a, b = regs[1]
|
||||
filename = line[a:b]
|
||||
if not filedict.has_key(filename):
|
||||
filedict[filename] = None
|
||||
outfp.write(
|
||||
'\n# Included from %s\n' % filename)
|
||||
inclfp = open('/usr/include/' + filename, 'r')
|
||||
process(inclfp, outfp, env)
|
||||
main()
|
||||
|
||||
|
|
97
Tools/scripts/sum5.py
Executable file
97
Tools/scripts/sum5.py
Executable file
|
@ -0,0 +1,97 @@
|
|||
#! /usr/local/bin/python
|
||||
|
||||
# print md5 checksum for files
|
||||
|
||||
bufsize = 8096
|
||||
fnfilter = None
|
||||
rmode = 'r'
|
||||
|
||||
usage = """
|
||||
usage: sum5 [-b] [-t] [-l] [-s bufsize] [file ...]
|
||||
-b : read files in binary mode
|
||||
-t : read files in text mode (default)
|
||||
-l : print last pathname component only
|
||||
-s bufsize: read buffer size (default %d)
|
||||
file ... : files to sum; '-' or no files means stdin
|
||||
""" % bufsize
|
||||
|
||||
import sys
|
||||
import string
|
||||
import os
|
||||
import md5
|
||||
import regsub
|
||||
|
||||
StringType = type('')
|
||||
FileType = type(sys.stdin)
|
||||
|
||||
def sum(*files):
|
||||
sts = 0
|
||||
if files and type(files[-1]) == FileType:
|
||||
out, files = files[-1], files[:-1]
|
||||
else:
|
||||
out = sys.stdout
|
||||
if len(files) == 1 and type(files[0]) != StringType:
|
||||
files = files[0]
|
||||
for f in files:
|
||||
if type(f) == StringType:
|
||||
if f == '-':
|
||||
sts = printsumfp(sys.stdin, '<stdin>', out) or sts
|
||||
else:
|
||||
sts = printsum(f, out) or sts
|
||||
else:
|
||||
sts = sum(f, out) or sts
|
||||
return sts
|
||||
|
||||
def printsum(file, out = sys.stdout):
|
||||
try:
|
||||
fp = open(file, rmode)
|
||||
except IOError, msg:
|
||||
sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
|
||||
return 1
|
||||
if fnfilter:
|
||||
file = fnfilter(file)
|
||||
sts = printsumfp(fp, file, out)
|
||||
fp.close()
|
||||
return sts
|
||||
|
||||
def printsumfp(fp, file, out = sys.stdout):
|
||||
m = md5.md5()
|
||||
try:
|
||||
while 1:
|
||||
data = fp.read(bufsize)
|
||||
if not data: break
|
||||
m.update(data)
|
||||
except IOError, msg:
|
||||
sys.stderr.write('%s: I/O error: %s\n' % (file, msg))
|
||||
return 1
|
||||
out.write('%s %s\n' % (hexify(m.digest()), file))
|
||||
return 0
|
||||
|
||||
def hexify(s):
|
||||
res = ''
|
||||
for c in s:
|
||||
res = res + '%02x' % ord(c)
|
||||
return res
|
||||
|
||||
def main(args = sys.argv[1:], out = sys.stdout):
|
||||
global fnfilter, rmode, bufsize
|
||||
import getopt
|
||||
try:
|
||||
opts, args = getopt.getopt(args, 'blts:')
|
||||
except getopt.error, msg:
|
||||
sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
|
||||
return 2
|
||||
for o, a in opts:
|
||||
if o == '-l':
|
||||
fnfilter = os.path.basename
|
||||
if o == '-b':
|
||||
rmode = 'rb'
|
||||
if o == '-t':
|
||||
rmode = 'r'
|
||||
if o == '-s':
|
||||
bufsize = string.atoi(a)
|
||||
if not args: args = ['-']
|
||||
return sum(args, out)
|
||||
|
||||
if __name__ == '__main__' or __name__ == sys.argv[0]:
|
||||
sys.exit(main(sys.argv[1:], sys.stdout))
|
Loading…
Add table
Add a link
Reference in a new issue