diff options
author | Jack Jansen <jack.jansen@cwi.nl> | 2003-02-05 22:52:16 (GMT) |
---|---|---|
committer | Jack Jansen <jack.jansen@cwi.nl> | 2003-02-05 22:52:16 (GMT) |
commit | 6d8bca8cb6496a6493fbb976926b369ccc627383 (patch) | |
tree | 8e835730ac846ea998a92f0aed2bbc568eca5399 /Mac/Unsupported | |
parent | ce8bcd8405593371ae7f16fbfefae3ef0db274a0 (diff) | |
download | cpython-6d8bca8cb6496a6493fbb976926b369ccc627383.zip cpython-6d8bca8cb6496a6493fbb976926b369ccc627383.tar.gz cpython-6d8bca8cb6496a6493fbb976926b369ccc627383.tar.bz2 |
I don't think this script serves a useful purpose anymore, and I can't
be bothered to fix it.
Diffstat (limited to 'Mac/Unsupported')
-rw-r--r-- | Mac/Unsupported/unshar.py | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/Mac/Unsupported/unshar.py b/Mac/Unsupported/unshar.py new file mode 100644 index 0000000..ec14f2e --- /dev/null +++ b/Mac/Unsupported/unshar.py @@ -0,0 +1,97 @@ +# Extract files from a SHAR archive. +# Run this on the Mac. +# Usage: +# >>> import unshar +# >>> f = open('SHAR') +# >>> unshar.unshar(f) + +import string +import EasyDialogs + +def unshar(fp, verbose=0, overwrite=0): + ofp = None + file = None + while 1: + line = fp.readline() + if verbose > 3: print 'Got:', `line` + if line[:1] == 'X': + # Most common case first + if ofp: ofp.write(line[1:]) + continue + if not line: + if verbose: print 'EOF' + if ofp: + print 'Unterminated file -- closing' + ofp.close() + ofp = None + break + if line[0] == '#': + if verbose: print line, + continue + if line[:14] == 'sed "s/^X//" >': + if verbose: print "!!!", `line` + i = string.find(line, "'") + j = string.find(line, "'", i+1) + if i >= 0 and j > i: + file = line[i+1:j] + if '/' in file: + words = string.splitfields(file, '/') + for funny in '', '.': + while funny in words: words.remove(funny) + for i in range(len(words)): + if words[i] == '..': words[i] = '' + words.insert(0, '') + file = string.joinfields(words, ':') + try: + ofp = open(file, 'r') + ofp.close() + ofp = None + over = 1 + except IOError: + over = 0 + if over and not overwrite: + print 'Skipping', file, '(already exists) ...' + continue + ofp = open(file, 'w') + if over: + print 'Overwriting', file, '...' + else: + print 'Writing', file, '...' + continue + if line == 'END_OF_FILE\n': + if not file: + print 'Unexpected END_OF_FILE marker' + if ofp: + print 'done' + ofp.close() + ofp = None + else: + print 'done skipping' + file = None + continue + if verbose: print "...", `line` + +def main(): + import sys + import os + if len(sys.argv) > 1: + for fname in sys.argv[1:]: + fp = open(fname, 'r') + dir, fn = os.path.split(fname) + if dir: + os.chdir(dir) + unshar(fp) + else: + import macfs + fname = EasyDialogs.AskFileForOpen() + if not fname: + sys.exit(0) + fp = open(fname, 'r') + dirname = EasyDialogs.AskFolder(message='Folder to save files in:') + if not dirname: + sys.exit(0) + os.chdir(dirname) + unshar(fp) + +if __name__ == '__main__': + main() |