diff options
Diffstat (limited to 'Demo/scripts')
-rw-r--r-- | Demo/scripts/README | 4 | ||||
-rwxr-xr-x | Demo/scripts/morse.py | 149 | ||||
-rwxr-xr-x | Demo/scripts/script.py | 33 |
3 files changed, 185 insertions, 1 deletions
diff --git a/Demo/scripts/README b/Demo/scripts/README index 5b5e88d..e7443da 100644 --- a/Demo/scripts/README +++ b/Demo/scripts/README @@ -21,7 +21,6 @@ findlinksto.py Recursively find symbolic links to a given path prefix fixps.py Fix Python scripts' first line (if #!) fixcid.py Massive identifier substitution on C source files fixheader.py Add some cpp magic to a C include file -freeze.py Convert a Python script into a free-standing binary from.py Summarize mailbox ftpstats.py Summarize ftp daemon log file ifdef.py Remove #if(n)def groups from C sources @@ -31,6 +30,7 @@ lpwatch.py Watch BSD line printer queues markov.py Markov chain simulation of words or characters mboxconvvert.py Convert MH or MMDF mailboxes to unix mailbox format methfix.py Fix old method syntax def f(self, (a1, ..., aN)): +morse.py Produce morse code (audible or on AIFF file) mkreal.py Turn a symbolic link into a real file or directory mpzpi.py test mpz -- print digits of pi (compare pi.py) objgraph.py Print object graph from nm output on a library @@ -41,7 +41,9 @@ pindent.py Indent Python code, giving block-closing comments pp.py Emulate some Perl command line options primes.py Print prime numbers ptags.py Create vi tags file for Python modules +script.py Equivalent to BSD script(1) -- by Steen Lumholt suff.py Sort a list of files by suffix +sum5.py Print md5 checksums of files unbirthday.py Print unbirthday count which.py Find a program in $PATH xxci.py Wrapper for rcsdiff and ci diff --git a/Demo/scripts/morse.py b/Demo/scripts/morse.py new file mode 100755 index 0000000..2cea83e --- /dev/null +++ b/Demo/scripts/morse.py @@ -0,0 +1,149 @@ +# DAH should be three DOTs. +# Space between DOTs and DAHs should be one DOT. +# Space between two letters should be one DAH. +# Space between two words should be DOT DAH DAH. + +import sys, math, audiodev + +DOT = 30 +DAH = 3 * DOT +OCTAVE = 2 # 1 == 441 Hz, 2 == 882 Hz, ... + +morsetab = { + 'A': '.-', 'a': '.-', + 'B': '-...', 'b': '-...', + 'C': '-.-.', 'c': '-.-.', + 'D': '-..', 'd': '-..', + 'E': '.', 'e': '.', + 'F': '..-.', 'f': '..-.', + 'G': '--.', 'g': '--.', + 'H': '....', 'h': '....', + 'I': '..', 'i': '..', + 'J': '.---', 'j': '.---', + 'K': '-.-', 'k': '-.-', + 'L': '.-..', 'l': '.-..', + 'M': '--', 'm': '--', + 'N': '-.', 'n': '-.', + 'O': '---', 'o': '---', + 'P': '.--.', 'p': '.--.', + 'Q': '--.-', 'q': '--.-', + 'R': '.-.', 'r': '.-.', + 'S': '...', 's': '...', + 'T': '-', 't': '-', + 'U': '..-', 'u': '..-', + 'V': '...-', 'v': '...-', + 'W': '.--', 'w': '.--', + 'X': '-..-', 'x': '-..-', + 'Y': '-.--', 'y': '-.--', + 'Z': '--..', 'z': '--..', + '0': '-----', + '1': '.----', + '2': '..---', + '3': '...--', + '4': '....-', + '5': '.....', + '6': '-....', + '7': '--...', + '8': '---..', + '9': '----.', + ',': '--..--', + '.': '.-.-.-', + '?': '..--..', + ';': '-.-.-.', + ':': '---...', + "'": '.----.', + '-': '-....-', + '/': '-..-.', + '(': '-.--.-', + ')': '-.--.-', + '_': '..--.-', + ' ': ' ' +} + +# 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) + sinewave = sinewave + chr((val >> 8) & 255) + chr(val & 255) + nowave = '\0' * 200 + +mkwave(OCTAVE) + +def main(): + import getopt, string + try: + opts, args = getopt.getopt(sys.argv[1:], 'o:p:') + except getopt.error: + sys.stderr.write('Usage ' + sys.argv[0] + + ' [ -o outfile ] [ args ] ...\n') + sys.exit(1) + dev = None + for o, a in opts: + if o == '-o': + import aifc + dev = aifc.open(a, 'w') + dev.setframerate(44100) + dev.setsampwidth(2) + dev.setnchannels(1) + if o == '-p': + mkwave(string.atoi(a)) + if not dev: + import audiodev + dev = audiodev.AudioDev() + dev.setoutrate(44100) + dev.setsampwidth(2) + dev.setnchannels(1) + dev.close = dev.stop + dev.writeframesraw = dev.writeframes + if args: + line = string.join(args) + else: + line = sys.stdin.readline() + while line: + mline = morse(line) + play(mline, dev) + 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 +# the string. +def morse(line): + res = '' + for c in line: + try: + res = res + morsetab[c] + '\001' + except KeyError: + pass + return res + +# Play a line of morse code. +def play(line, dev): + for c in line: + if c == '.': + sine(dev, DOT) + elif c == '-': + sine(dev, DAH) + else: # space + pause(dev, DAH + DOT) + pause(dev, DOT) + +def sine(dev, length): + for i in range(length): + dev.writeframesraw(sinewave) + +def pause(dev, length): + for i in range(length): + dev.writeframesraw(nowave) + +if __name__ == '__main__' or sys.argv[0] == __name__: + main() diff --git a/Demo/scripts/script.py b/Demo/scripts/script.py new file mode 100755 index 0000000..04e7ecb --- /dev/null +++ b/Demo/scripts/script.py @@ -0,0 +1,33 @@ +#! /usr/local/bin/python +# script.py -- Make typescript of terminal session. +# Usage: +# -a Append to typescript. +# -p Use Python as shell. +# Author: Steen Lumholt. + + +import os, time, sys +import pty + +def read(fd): + data = os.read(fd, 1024) + file.write(data) + return data + +shell = 'sh' +filename = 'typescript' +mode = 'w' +if os.environ.has_key('SHELL'): + shell = os.environ['SHELL'] +if '-a' in sys.argv: + mode = 'a' +if '-p' in sys.argv: + shell = 'python' + +file = open(filename, mode) + +sys.stdout.write('Script started, file is %s\n' % filename) +file.write('Script started on %s\n' % time.ctime(time.time())) +pty.spawn(shell, read) +file.write('Script done on %s\n' % time.ctime(time.time())) +sys.stdout.write('Script done, file is %s\n' % filename) |