mirror of
https://github.com/python/cpython.git
synced 2025-08-31 22:18:28 +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
|
@ -21,7 +21,6 @@ findlinksto.py Recursively find symbolic links to a given path prefix
|
||||||
fixps.py Fix Python scripts' first line (if #!)
|
fixps.py Fix Python scripts' first line (if #!)
|
||||||
fixcid.py Massive identifier substitution on C source files
|
fixcid.py Massive identifier substitution on C source files
|
||||||
fixheader.py Add some cpp magic to a C include file
|
fixheader.py Add some cpp magic to a C include file
|
||||||
freeze.py Convert a Python script into a free-standing binary
|
|
||||||
from.py Summarize mailbox
|
from.py Summarize mailbox
|
||||||
ftpstats.py Summarize ftp daemon log file
|
ftpstats.py Summarize ftp daemon log file
|
||||||
ifdef.py Remove #if(n)def groups from C sources
|
ifdef.py Remove #if(n)def groups from C sources
|
||||||
|
@ -31,6 +30,7 @@ lpwatch.py Watch BSD line printer queues
|
||||||
markov.py Markov chain simulation of words or characters
|
markov.py Markov chain simulation of words or characters
|
||||||
mboxconvvert.py Convert MH or MMDF mailboxes to unix mailbox format
|
mboxconvvert.py Convert MH or MMDF mailboxes to unix mailbox format
|
||||||
methfix.py Fix old method syntax def f(self, (a1, ..., aN)):
|
methfix.py Fix old method syntax def f(self, (a1, ..., aN)):
|
||||||
|
morse.py Produce morse code (audible or on AIFF file)
|
||||||
mkreal.py Turn a symbolic link into a real file or directory
|
mkreal.py Turn a symbolic link into a real file or directory
|
||||||
mpzpi.py test mpz -- print digits of pi (compare pi.py)
|
mpzpi.py test mpz -- print digits of pi (compare pi.py)
|
||||||
objgraph.py Print object graph from nm output on a library
|
objgraph.py Print object graph from nm output on a library
|
||||||
|
@ -41,7 +41,9 @@ pindent.py Indent Python code, giving block-closing comments
|
||||||
pp.py Emulate some Perl command line options
|
pp.py Emulate some Perl command line options
|
||||||
primes.py Print prime numbers
|
primes.py Print prime numbers
|
||||||
ptags.py Create vi tags file for Python modules
|
ptags.py Create vi tags file for Python modules
|
||||||
|
script.py Equivalent to BSD script(1) -- by Steen Lumholt
|
||||||
suff.py Sort a list of files by suffix
|
suff.py Sort a list of files by suffix
|
||||||
|
sum5.py Print md5 checksums of files
|
||||||
unbirthday.py Print unbirthday count
|
unbirthday.py Print unbirthday count
|
||||||
which.py Find a program in $PATH
|
which.py Find a program in $PATH
|
||||||
xxci.py Wrapper for rcsdiff and ci
|
xxci.py Wrapper for rcsdiff and ci
|
||||||
|
|
149
Demo/scripts/morse.py
Executable file
149
Demo/scripts/morse.py
Executable file
|
@ -0,0 +1,149 @@
|
||||||
|
# DAH should be three DOTs.
|
||||||
|
# Space between DOTs and DAHs should be one DOT.
|
||||||
|
# Space between two letters should be one DAH.
|
||||||
|
# Space between two words should be DOT DAH DAH.
|
||||||
|
|
||||||
|
import sys, math, audiodev
|
||||||
|
|
||||||
|
DOT = 30
|
||||||
|
DAH = 3 * DOT
|
||||||
|
OCTAVE = 2 # 1 == 441 Hz, 2 == 882 Hz, ...
|
||||||
|
|
||||||
|
morsetab = {
|
||||||
|
'A': '.-', 'a': '.-',
|
||||||
|
'B': '-...', 'b': '-...',
|
||||||
|
'C': '-.-.', 'c': '-.-.',
|
||||||
|
'D': '-..', 'd': '-..',
|
||||||
|
'E': '.', 'e': '.',
|
||||||
|
'F': '..-.', 'f': '..-.',
|
||||||
|
'G': '--.', 'g': '--.',
|
||||||
|
'H': '....', 'h': '....',
|
||||||
|
'I': '..', 'i': '..',
|
||||||
|
'J': '.---', 'j': '.---',
|
||||||
|
'K': '-.-', 'k': '-.-',
|
||||||
|
'L': '.-..', 'l': '.-..',
|
||||||
|
'M': '--', 'm': '--',
|
||||||
|
'N': '-.', 'n': '-.',
|
||||||
|
'O': '---', 'o': '---',
|
||||||
|
'P': '.--.', 'p': '.--.',
|
||||||
|
'Q': '--.-', 'q': '--.-',
|
||||||
|
'R': '.-.', 'r': '.-.',
|
||||||
|
'S': '...', 's': '...',
|
||||||
|
'T': '-', 't': '-',
|
||||||
|
'U': '..-', 'u': '..-',
|
||||||
|
'V': '...-', 'v': '...-',
|
||||||
|
'W': '.--', 'w': '.--',
|
||||||
|
'X': '-..-', 'x': '-..-',
|
||||||
|
'Y': '-.--', 'y': '-.--',
|
||||||
|
'Z': '--..', 'z': '--..',
|
||||||
|
'0': '-----',
|
||||||
|
'1': '.----',
|
||||||
|
'2': '..---',
|
||||||
|
'3': '...--',
|
||||||
|
'4': '....-',
|
||||||
|
'5': '.....',
|
||||||
|
'6': '-....',
|
||||||
|
'7': '--...',
|
||||||
|
'8': '---..',
|
||||||
|
'9': '----.',
|
||||||
|
',': '--..--',
|
||||||
|
'.': '.-.-.-',
|
||||||
|
'?': '..--..',
|
||||||
|
';': '-.-.-.',
|
||||||
|
':': '---...',
|
||||||
|
"'": '.----.',
|
||||||
|
'-': '-....-',
|
||||||
|
'/': '-..-.',
|
||||||
|
'(': '-.--.-',
|
||||||
|
')': '-.--.-',
|
||||||
|
'_': '..--.-',
|
||||||
|
' ': ' '
|
||||||
|
}
|
||||||
|
|
||||||
|
# If we play at 44.1 kHz (which we do), then if we produce one sine
|
||||||
|
# wave in 100 samples, we get a tone of 441 Hz. If we produce two
|
||||||
|
# sine waves in these 100 samples, we get a tone of 882 Hz. 882 Hz
|
||||||
|
# appears to be a nice one for playing morse code.
|
||||||
|
def mkwave(octave):
|
||||||
|
global sinewave, nowave
|
||||||
|
sinewave = ''
|
||||||
|
for i in range(100):
|
||||||
|
val = int(math.sin(math.pi * float(i) * octave / 50.0) * 30000)
|
||||||
|
sinewave = sinewave + chr((val >> 8) & 255) + chr(val & 255)
|
||||||
|
nowave = '\0' * 200
|
||||||
|
|
||||||
|
mkwave(OCTAVE)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
import getopt, string
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(sys.argv[1:], 'o:p:')
|
||||||
|
except getopt.error:
|
||||||
|
sys.stderr.write('Usage ' + sys.argv[0] +
|
||||||
|
' [ -o outfile ] [ args ] ...\n')
|
||||||
|
sys.exit(1)
|
||||||
|
dev = None
|
||||||
|
for o, a in opts:
|
||||||
|
if o == '-o':
|
||||||
|
import aifc
|
||||||
|
dev = aifc.open(a, 'w')
|
||||||
|
dev.setframerate(44100)
|
||||||
|
dev.setsampwidth(2)
|
||||||
|
dev.setnchannels(1)
|
||||||
|
if o == '-p':
|
||||||
|
mkwave(string.atoi(a))
|
||||||
|
if not dev:
|
||||||
|
import audiodev
|
||||||
|
dev = audiodev.AudioDev()
|
||||||
|
dev.setoutrate(44100)
|
||||||
|
dev.setsampwidth(2)
|
||||||
|
dev.setnchannels(1)
|
||||||
|
dev.close = dev.stop
|
||||||
|
dev.writeframesraw = dev.writeframes
|
||||||
|
if args:
|
||||||
|
line = string.join(args)
|
||||||
|
else:
|
||||||
|
line = sys.stdin.readline()
|
||||||
|
while line:
|
||||||
|
mline = morse(line)
|
||||||
|
play(mline, dev)
|
||||||
|
if hasattr(dev, 'wait'):
|
||||||
|
dev.wait()
|
||||||
|
if not args:
|
||||||
|
line = sys.stdin.readline()
|
||||||
|
else:
|
||||||
|
line = ''
|
||||||
|
dev.close()
|
||||||
|
|
||||||
|
# Convert a string to morse code with \001 between the characters in
|
||||||
|
# the string.
|
||||||
|
def morse(line):
|
||||||
|
res = ''
|
||||||
|
for c in line:
|
||||||
|
try:
|
||||||
|
res = res + morsetab[c] + '\001'
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
return res
|
||||||
|
|
||||||
|
# Play a line of morse code.
|
||||||
|
def play(line, dev):
|
||||||
|
for c in line:
|
||||||
|
if c == '.':
|
||||||
|
sine(dev, DOT)
|
||||||
|
elif c == '-':
|
||||||
|
sine(dev, DAH)
|
||||||
|
else: # space
|
||||||
|
pause(dev, DAH + DOT)
|
||||||
|
pause(dev, DOT)
|
||||||
|
|
||||||
|
def sine(dev, length):
|
||||||
|
for i in range(length):
|
||||||
|
dev.writeframesraw(sinewave)
|
||||||
|
|
||||||
|
def pause(dev, length):
|
||||||
|
for i in range(length):
|
||||||
|
dev.writeframesraw(nowave)
|
||||||
|
|
||||||
|
if __name__ == '__main__' or sys.argv[0] == __name__:
|
||||||
|
main()
|
33
Demo/scripts/script.py
Executable file
33
Demo/scripts/script.py
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
#! /usr/local/bin/python
|
||||||
|
# script.py -- Make typescript of terminal session.
|
||||||
|
# Usage:
|
||||||
|
# -a Append to typescript.
|
||||||
|
# -p Use Python as shell.
|
||||||
|
# Author: Steen Lumholt.
|
||||||
|
|
||||||
|
|
||||||
|
import os, time, sys
|
||||||
|
import pty
|
||||||
|
|
||||||
|
def read(fd):
|
||||||
|
data = os.read(fd, 1024)
|
||||||
|
file.write(data)
|
||||||
|
return data
|
||||||
|
|
||||||
|
shell = 'sh'
|
||||||
|
filename = 'typescript'
|
||||||
|
mode = 'w'
|
||||||
|
if os.environ.has_key('SHELL'):
|
||||||
|
shell = os.environ['SHELL']
|
||||||
|
if '-a' in sys.argv:
|
||||||
|
mode = 'a'
|
||||||
|
if '-p' in sys.argv:
|
||||||
|
shell = 'python'
|
||||||
|
|
||||||
|
file = open(filename, mode)
|
||||||
|
|
||||||
|
sys.stdout.write('Script started, file is %s\n' % filename)
|
||||||
|
file.write('Script started on %s\n' % time.ctime(time.time()))
|
||||||
|
pty.spawn(shell, read)
|
||||||
|
file.write('Script done on %s\n' % time.ctime(time.time()))
|
||||||
|
sys.stdout.write('Script done, file is %s\n' % filename)
|
|
@ -194,7 +194,7 @@ def fix(filename):
|
||||||
|
|
||||||
# Tokenizing ANSI C (partly)
|
# Tokenizing ANSI C (partly)
|
||||||
|
|
||||||
Identifier = '[a-zA-Z_][a-zA-Z0-9_]+'
|
Identifier = '\(struct \)?[a-zA-Z_][a-zA-Z0-9_]+'
|
||||||
String = '"\([^\n\\"]\|\\\\.\)*"'
|
String = '"\([^\n\\"]\|\\\\.\)*"'
|
||||||
Char = '\'\([^\n\\\']\|\\\\.\)*\''
|
Char = '\'\([^\n\\\']\|\\\\.\)*\''
|
||||||
CommentStart = '/\*'
|
CommentStart = '/\*'
|
||||||
|
@ -246,6 +246,7 @@ def fixline(line):
|
||||||
if Program is InsideCommentProgram:
|
if Program is InsideCommentProgram:
|
||||||
if not Docomments:
|
if not Docomments:
|
||||||
print 'Found in comment:', found
|
print 'Found in comment:', found
|
||||||
|
i = i + n
|
||||||
continue
|
continue
|
||||||
if NotInComment.has_key(found):
|
if NotInComment.has_key(found):
|
||||||
## print 'Ignored in comment:',
|
## print 'Ignored in comment:',
|
||||||
|
@ -290,7 +291,9 @@ def addsubst(substfile):
|
||||||
i = -1 # Happens to delete trailing \n
|
i = -1 # Happens to delete trailing \n
|
||||||
words = string.split(line[:i])
|
words = string.split(line[:i])
|
||||||
if not words: continue
|
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` +
|
err(substfile + ':' + `lineno` +
|
||||||
': warning: bad line: ' + line)
|
': warning: bad line: ' + line)
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -1,32 +1,43 @@
|
||||||
#! /usr/local/bin/python
|
#! /usr/local/bin/python
|
||||||
|
|
||||||
# Read #define's from stdin and translate to Python code on stdout.
|
# Read #define's and translate to Python code.
|
||||||
# Very primitive: non-#define's are ignored, as is anything that isn't
|
# Handle #include statements.
|
||||||
# valid Python as it stands.
|
# 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
|
# If one or more filenames are given, output is written to corresponding
|
||||||
# filenames in the local directory, translated to all uppercase, with
|
# filenames in the local directory, translated to all uppercase, with
|
||||||
# the extension replaced by ".py".
|
# the extension replaced by ".py".
|
||||||
|
|
||||||
# By passing one or more options of the form "-i regular_expression"
|
# By passing one or more options of the form "-i regular_expression"
|
||||||
# you can specify additional strings to be ignored. This is useful
|
# you can specify additional strings to be ignored. This is useful
|
||||||
# e.g. to ignore casts to u_long: simply specify "-i '(u_long)'".
|
# e.g. to ignore casts to u_long: simply specify "-i '(u_long)'".
|
||||||
|
|
||||||
# XXX To do:
|
# XXX To do:
|
||||||
# - turn trailing C comments into Python comments
|
# - turn trailing C comments into Python comments
|
||||||
# - turn C string quotes into Python comments
|
|
||||||
# - turn C Boolean operators "&& || !" into Python "and or not"
|
# - turn C Boolean operators "&& || !" into Python "and or not"
|
||||||
# - what to do about #if(def)?
|
# - what to do about #if(def)?
|
||||||
# - what to do about #include?
|
# - what to do about macros with multiple parameters?
|
||||||
# - what to do about macros with parameters?
|
|
||||||
# - reject definitions with semicolons in them
|
|
||||||
|
|
||||||
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_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('/\*\([^*]+\|\*+[^/]\)*\(\*+/\)?')
|
p_comment = regex.compile('/\*\([^*]+\|\*+[^/]\)*\(\*+/\)?')
|
||||||
|
|
||||||
ignores = [p_comment]
|
ignores = [p_comment]
|
||||||
|
|
||||||
|
p_char = regex.compile("'\(\\\\.[^\\\\]*\|[^\\\\]\)'")
|
||||||
|
|
||||||
|
filedict = {}
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
opts, args = getopt.getopt(sys.argv[1:], 'i:')
|
opts, args = getopt.getopt(sys.argv[1:], 'i:')
|
||||||
for o, a in opts:
|
for o, a in opts:
|
||||||
|
@ -47,40 +58,65 @@ def main():
|
||||||
outfile = outfile + '.py'
|
outfile = outfile + '.py'
|
||||||
outfp = open(outfile, 'w')
|
outfp = open(outfile, 'w')
|
||||||
outfp.write('# Generated by h2py from %s\n' % filename)
|
outfp.write('# Generated by h2py from %s\n' % filename)
|
||||||
|
filedict = {}
|
||||||
|
if filename[:13] == '/usr/include/':
|
||||||
|
filedict[filename[13:]] = None
|
||||||
process(fp, outfp)
|
process(fp, outfp)
|
||||||
outfp.close()
|
outfp.close()
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
def process(fp, outfp):
|
def process(fp, outfp, env = {}):
|
||||||
env = {}
|
|
||||||
lineno = 0
|
lineno = 0
|
||||||
while 1:
|
while 1:
|
||||||
line = fp.readline()
|
line = fp.readline()
|
||||||
if not line: break
|
if not line: break
|
||||||
lineno = lineno + 1
|
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)
|
n = p_define.match(line)
|
||||||
if n >= 0:
|
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)
|
name = p_define.group(1)
|
||||||
body = line[n:]
|
body = line[n:]
|
||||||
# replace ignored patterns by spaces
|
# replace ignored patterns by spaces
|
||||||
for p in ignores:
|
for p in ignores:
|
||||||
while p.search(body) >= 0:
|
body = regsub.gsub(p, ' ', body)
|
||||||
a, b = p.regs[0]
|
# replace char literals by ord(...)
|
||||||
body = body[:a] + ' ' + body[b:]
|
body = regsub.gsub(p_char, 'ord(\\0)', body)
|
||||||
stmt = '%s = %s\n' % (name, string.strip(body))
|
stmt = '%s = %s\n' % (name, string.strip(body))
|
||||||
ok = 0
|
ok = 0
|
||||||
try:
|
try:
|
||||||
exec stmt in env
|
exec stmt in env
|
||||||
ok = 1
|
|
||||||
except:
|
except:
|
||||||
sys.stderr.write('Skipping: %s' % stmt)
|
sys.stderr.write('Skipping: %s' % stmt)
|
||||||
if ok:
|
else:
|
||||||
outfp.write(stmt)
|
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()
|
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