Updates for THINK C 6.0.  Moved the necessary UNIX emulation routines here.
diff --git a/Mac/scripts/unshar.py b/Mac/scripts/unshar.py
new file mode 100644
index 0000000..fa60e5a
--- /dev/null
+++ b/Mac/scripts/unshar.py
@@ -0,0 +1,71 @@
+# Extract files from a SHAR archive.
+# Run this on the Mac.
+# Usage:
+# >>> import unshar
+# >>> f = open('SHAR')
+# >>> unshar.unshar(f)
+
+import string
+
+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`