diff --git a/Demo/scripts/morse.py b/Demo/scripts/morse.py
index 3da49da..e939b2d 100755
--- a/Demo/scripts/morse.py
+++ b/Demo/scripts/morse.py
@@ -1,3 +1,5 @@
+#! /usr/bin/env python
+
 # DAH should be three DOTs.
 # Space between DOTs and DAHs should be one DOT.
 # Space between two letters should be one DAH.
@@ -36,53 +38,44 @@
         'X': '-..-',            'x': '-..-',
         'Y': '-.--',            'y': '-.--',
         'Z': '--..',            'z': '--..',
-        '0': '-----',
-        '1': '.----',
-        '2': '..---',
-        '3': '...--',
-        '4': '....-',
-        '5': '.....',
-        '6': '-....',
-        '7': '--...',
-        '8': '---..',
-        '9': '----.',
-        ',': '--..--',
-        '.': '.-.-.-',
-        '?': '..--..',
-        ';': '-.-.-.',
-        ':': '---...',
-        "'": '.----.',
-        '-': '-....-',
-        '/': '-..-.',
-        '(': '-.--.-',
-        ')': '-.--.-',
-        '_': '..--.-',
-        ' ': ' '
+        '0': '-----',           ',': '--..--',
+        '1': '.----',           '.': '.-.-.-',
+        '2': '..---',           '?': '..--..',
+        '3': '...--',           ';': '-.-.-.',
+        '4': '....-',           ':': '---...',
+        '5': '.....',           "'": '.----.',
+        '6': '-....',           '-': '-....-',
+        '7': '--...',           '/': '-..-.',
+        '8': '---..',           '(': '-.--.-',
+        '9': '----.',           ')': '-.--.-',
+        ' ': ' ',               '_': '..--.-',
 }
 
+nowave = '\0' * 200
+
 # 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)
+        val = int(math.sin(math.pi * i * octave / 50.0) * 30000)
         sinewave = sinewave + chr((val >> 8) & 255) + chr(val & 255)
-    nowave = '\0' * 200
+    return sinewave
 
-mkwave(OCTAVE)
+defaultwave = mkwave(OCTAVE)
 
 def main():
-    import getopt, string
+    import getopt
     try:
         opts, args = getopt.getopt(sys.argv[1:], 'o:p:')
     except getopt.error:
         sys.stderr.write('Usage ' + sys.argv[0] +
-                         ' [ -o outfile ] [ args ] ...\n')
+                         ' [ -o outfile ] [ -p octave ] [ words ] ...\n')
         sys.exit(1)
     dev = None
+    wave = defaultwave
     for o, a in opts:
         if o == '-o':
             import aifc
@@ -91,7 +84,7 @@
             dev.setsampwidth(2)
             dev.setnchannels(1)
         if o == '-p':
-            mkwave(string.atoi(a))
+            wave = mkwave(int(a))
     if not dev:
         import audiodev
         dev = audiodev.AudioDev()
@@ -101,18 +94,14 @@
         dev.close = dev.stop
         dev.writeframesraw = dev.writeframes
     if args:
-        line = string.join(args)
+        source = [' '.join(args)]
     else:
-        line = sys.stdin.readline()
-    while line:
+        source = iter(sys.stdin.readline, '')
+    for line in source:
         mline = morse(line)
-        play(mline, dev)
+        play(mline, dev, wave)
         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
@@ -121,29 +110,29 @@
     res = ''
     for c in line:
         try:
-            res = res + morsetab[c] + '\001'
+            res += morsetab[c] + '\001'
         except KeyError:
             pass
     return res
 
 # Play a line of morse code.
-def play(line, dev):
+def play(line, dev, wave):
     for c in line:
         if c == '.':
-            sine(dev, DOT)
+            sine(dev, DOT, wave)
         elif c == '-':
-            sine(dev, DAH)
+            sine(dev, DAH, wave)
         else:                   # space
             pause(dev, DAH + DOT)
         pause(dev, DOT)
 
-def sine(dev, length):
+def sine(dev, length, wave):
     for i in range(length):
-        dev.writeframesraw(sinewave)
+        dev.writeframesraw(wave)
 
 def pause(dev, length):
     for i in range(length):
         dev.writeframesraw(nowave)
 
-if __name__ == '__main__' or sys.argv[0] == __name__:
+if __name__ == '__main__':
     main()
