summaryrefslogtreecommitdiffstats
path: root/Mac/Unsupported
diff options
context:
space:
mode:
authorJack Jansen <jack.jansen@cwi.nl>2003-02-05 22:52:16 (GMT)
committerJack Jansen <jack.jansen@cwi.nl>2003-02-05 22:52:16 (GMT)
commit6d8bca8cb6496a6493fbb976926b369ccc627383 (patch)
tree8e835730ac846ea998a92f0aed2bbc568eca5399 /Mac/Unsupported
parentce8bcd8405593371ae7f16fbfefae3ef0db274a0 (diff)
downloadcpython-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.py97
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()