Initial revision
diff --git a/Demo/scripts/pp.py b/Demo/scripts/pp.py
new file mode 100755
index 0000000..c3be091
--- /dev/null
+++ b/Demo/scripts/pp.py
@@ -0,0 +1,48 @@
+#! /usr/local/python
+
+# Wrapper around Python to emulate the Perl -ae options:
+# (1) first argument is a Python command
+# (2) rest of arguments are input to the command in an implied loop
+# (3) each line is put into the string L with trailing '\n' stripped
+# (4) the fields of the line are put in the list F
+# (5) also: FILE: full filename; LINE: full line; FP: open file object
+# The command line option "-f FS" sets the field separator;
+# this is available to the program as FS.
+
+import sys
+import string
+import getopt
+
+FS = ''
+
+optlist, args = getopt.getopt(sys.argv[1:], 'f:')
+for option, optarg in optlist:
+	if option == '-f': FS = optarg
+
+command = args[0]
+
+if not args[1:]: args.append('-')
+
+prologue = [ \
+	'for FILE in args[1:]:', \
+	'\tif FILE == \'-\':', \
+	'\t\tFP = sys.stdin', \
+	'\telse:', \
+	'\t\tFP = open(FILE, \'r\')', \
+	'\twhile 1:', \
+	'\t\tLINE = FP.readline()', \
+	'\t\tif not LINE: break', \
+	'\t\tL = LINE[:-1]', \
+	'\t\tif FS: F = string.splitfields(L, FS)', \
+	'\t\telse: F = string.split(L)' \
+	]
+
+# Note that we indent using tabs only, so that any indentation style
+# used in 'command' will come out right after re-indentation.
+
+program = string.joinfields(prologue, '\n')
+for line in string.splitfields(command, '\n'):
+	program = program + ('\n\t\t' + line)
+program = program + '\n'
+
+exec(program)