Deleting zombies
diff --git a/Demo/pdist/new b/Demo/pdist/new
deleted file mode 100755
index 9daeafb..0000000
--- a/Demo/pdist/new
+++ /dev/null
@@ -1 +0,0 @@
-test
diff --git a/Demo/sgi/video/IN.py b/Demo/sgi/video/IN.py
deleted file mode 100755
index ffc2852..0000000
--- a/Demo/sgi/video/IN.py
+++ /dev/null
@@ -1,54 +0,0 @@
-IPPROTO_IP = 0
-IPPROTO_ICMP = 1
-IPPROTO_IGMP = 2
-IPPROTO_GGP = 3
-IPPROTO_TCP = 6
-IPPROTO_EGP = 8
-IPPROTO_PUP = 12
-IPPROTO_UDP = 17
-IPPROTO_IDP = 22
-IPPROTO_TP = 29
-IPPROTO_XTP = 36
-IPPROTO_EON = 80
-IPPROTO_RAW = 255
-IPPROTO_MAX = 256
-IPPORT_RESERVED = 1024
-IPPORT_USERRESERVED = 5000
-IN_CLASSA_NET = 0xff000000
-IN_CLASSA_NSHIFT = 24
-IN_CLASSA_HOST = 0x00ffffff
-IN_CLASSA_MAX = 128
-IN_CLASSB_NET = 0xffff0000
-IN_CLASSB_NSHIFT = 16
-IN_CLASSB_HOST = 0x0000ffff
-IN_CLASSB_MAX = 65536
-IN_CLASSC_NET = 0xffffff00
-IN_CLASSC_NSHIFT = 8
-IN_CLASSC_HOST = 0x000000ff
-IN_CLASSD_NET = 0xf0000000
-IN_CLASSD_NSHIFT = 28
-IN_CLASSD_HOST = 0x0fffffff
-INADDR_ANY = 0x00000000
-INADDR_BROADCAST = 0xffffffff
-INADDR_LOOPBACK = 0x7F000001
-INADDR_UNSPEC_GROUP = 0xe0000000
-INADDR_ALLHOSTS_GROUP = 0xe0000001
-INADDR_MAX_LOCAL_GROUP = 0xe00000ff
-INADDR_NONE = 0xffffffff
-IN_LOOPBACKNET = 127
-IP_OPTIONS = 1
-IP_HDRINCL = 7
-IP_TOS = 8
-IP_TTL = 9
-IP_RECVOPTS = 10
-IP_RECVRETOPTS = 11
-IP_RECVDSTADDR = 12
-IP_RETOPTS = 13
-IP_MULTICAST_IF = 2
-IP_MULTICAST_TTL = 3
-IP_MULTICAST_LOOP = 4
-IP_ADD_MEMBERSHIP = 5
-IP_DROP_MEMBERSHIP = 6
-IP_DEFAULT_MULTICAST_TTL = 1
-IP_DEFAULT_MULTICAST_LOOP = 1
-IP_MAX_MEMBERSHIPS = 20
diff --git a/Demo/sgi/video/Makefile b/Demo/sgi/video/Makefile
deleted file mode 100755
index 266ea52..0000000
--- a/Demo/sgi/video/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-all:	v2i i2v
-
-v2i:	v2i.o
-	$(CC) v2i.o -limage -o v2i
-
-i2v:	i2v.o
-	$(CC) i2v.o -limage -o i2v
diff --git a/Demo/sgi/video/Vrecc.py b/Demo/sgi/video/Vrecc.py
deleted file mode 100755
index 6a539f8..0000000
--- a/Demo/sgi/video/Vrecc.py
+++ /dev/null
@@ -1,281 +0,0 @@
-#! /ufs/guido/bin/sgi/python-405
-#! /ufs/guido/bin/sgi/python
-
-# Capture a continuous CMIF movie using the Indigo video library and board
-
-
-# Usage:
-#
-# makemovie [-r rate] [-w width] [moviefile]
-
-
-# Options:
-#
-# -r rate       : capture 1 out of every 'rate' frames (default 1)
-# -w width      : initial window width (default interactive placement)
-# -d		: drop fields if needed
-# -g bits	: greyscale (2, 4 or 8 bits)
-# -G            : 2-bit greyscale dithered
-# -m		: monochrome dithered
-# -M value	: monochrome tresholded with value
-# -f		: Capture fields (in stead of frames)
-# -n number     : Capture 'number' fields (default 60)
-# 
-# moviefile     : here goes the movie data (default film.video);
-#                 the format is documented in cmif-film.ms
-
-
-# User interface:
-#
-# Start the application.  Resize the window to the desired movie size.
-# Press the left mouse button to start recording, release it to end
-# recording.  You can record as many times as you wish, but each time
-# you overwrite the output file(s), so only the last recording is
-# kept.
-#
-# Press ESC or select the window manager Quit or Close window option
-# to quit.  If you quit before recording anything, the output file(s)
-# are not touched.
-
-
-import sys
-sys.path.append('/ufs/guido/src/video')
-import sv, SV
-import VFile
-import gl, GL, DEVICE
-import al, AL
-import time
-import posix
-import getopt
-import string
-import imageop
-import sgi
-
-# Main program
-
-def main():
-	format = SV.RGB8_FRAMES
-	rate = 1
-	width = 0
-	drop = 0
-	mono = 0
-	grey = 0
-	greybits = 0
-	monotreshold = -1
-	fields = 0
-	number = 60
-
-	opts, args = getopt.getopt(sys.argv[1:], 'r:w:dg:mM:Gfn:')
-	for opt, arg in opts:
-		if opt == '-r':
-			rate = string.atoi(arg)
-			if rate < 2:
-				sys.stderr.write('-r rate must be >= 2\n')
-				sys.exit(2)
-		elif opt == '-w':
-			width = string.atoi(arg)
-		elif opt == '-d':
-			drop = 1
-		elif opt == '-g':
-			grey = 1
-			greybits = string.atoi(arg)
-			if not greybits in (2,4,8):
-				print 'Only 2, 4 or 8 bit greyscale supported'
-		elif opt == '-G':
-			grey = 1
-			greybits = -2
-		elif opt == '-m':
-			mono = 1
-		elif opt == '-M':
-			mono = 1
-			monotreshold = string.atoi(arg)
-		elif opt == '-f':
-			fields = 1
-		elif opt == '-n':
-			number = string.atoi(arg)
-
-	if args[2:]:
-		sys.stderr.write('usage: Vrec [options] [file]\n')
-		sys.exit(2)
-
-	if args:
-		filename = args[0]
-	else:
-		filename = 'film.video'
-
-	v = sv.OpenVideo()
-	# Determine maximum window size based on signal standard
-	param = [SV.BROADCAST, 0]
-	v.GetParam(param)
-	if param[1] == SV.PAL:
-		x = SV.PAL_XMAX
-		y = SV.PAL_YMAX
-	elif param[1] == SV.NTSC:
-		x = SV.NTSC_XMAX
-		y = SV.NTSC_YMAX
-	else:
-		print 'Unknown video standard', param[1]
-		sys.exit(1)
-
-	gl.foreground()
-	gl.maxsize(x, y)
-	gl.keepaspect(x, y)
-	gl.stepunit(8, 6)
-	if width:
-		gl.prefsize(width, width*3/4)
-	win = gl.winopen(filename)
-	if width:
-		gl.maxsize(x, y)
-		gl.keepaspect(x, y)
-		gl.stepunit(8, 6)
-		gl.winconstraints()
-	x, y = gl.getsize()
-	print x, 'x', y
-
-	v.SetSize(x, y)
-
-	if drop:
-		param = [SV.FIELDDROP, 1, SV.GENLOCK, SV.GENLOCK_OFF]
-	else:
-		param = [SV.FIELDDROP, 0, SV.GENLOCK, SV.GENLOCK_ON]
-	if mono or grey:
-		param = param+[SV.COLOR, SV.MONO, SV.INPUT_BYPASS, 1]
-	else:
-		param = param+[SV.COLOR, SV.DEFAULT_COLOR, SV.INPUT_BYPASS, 0]
-	v.SetParam(param)
-
-	v.BindGLWindow(win, SV.IN_REPLACE)
-
-	gl.qdevice(DEVICE.LEFTMOUSE)
-	gl.qdevice(DEVICE.WINQUIT)
-	gl.qdevice(DEVICE.WINSHUT)
-	gl.qdevice(DEVICE.ESCKEY)
-
-	print 'Press left mouse to start recording'
-
-	while 1:
-		dev, val = gl.qread()
-		if dev == DEVICE.LEFTMOUSE:
-			if val == 1:
-				info = format, x, y, number, rate
-				record(v, info, filename, mono, grey, \
-					  greybits, monotreshold, fields)
-		elif dev == DEVICE.REDRAW:
-			# Window resize (or move)
-			x, y = gl.getsize()
-			print x, 'x', y
-			v.SetSize(x, y)
-			v.BindGLWindow(win, SV.IN_REPLACE)
-		elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
-			# Quit
-			v.CloseVideo()
-			gl.winclose(win)
-			break
-
-
-# Record until the mouse is released (or any other GL event)
-# XXX audio not yet supported
-
-def record(v, info, filename, mono, grey, greybits, monotreshold, fields):
-	import thread
-	format, x, y, number, rate = info
-	fps = 59.64 # Fields per second
-	# XXX (Strange: need fps of Indigo monitor, not of PAL or NTSC!)
-	tpf = 1000.0 / fps # Time per field in msec
-	#
-	# Go grab
-	#
-	gl.wintitle('(rec) ' + filename)
-	try:
-		ninfo, data, bitvec = v.CaptureBurst(info)
-	except sv.error, arg:
-		print 'CaptureBurst failed:', arg
-		print 'info:', info
-		gl.wintitle(filename)
-		return
-	gl.wintitle('(save) '+ filename)
-	#
-	# Check results
-	#
-	if info <> ninfo:
-		print 'Sorry, format changed.'
-		print 'Wanted:',info
-		print 'Got   :',ninfo
-		gl.wintitle(filename)
-		return
-	# print bitvec
-	if x*y*number <> len(data):
-		print 'Funny data length: wanted',x,'*',y,'*', number,'=',\
-			  x*y*number,'got',len(data)
-		gl.wintitle(filename)
-		return
-	#
-	# Save
-	#
-	if filename:
-		#
-		# Construct header and write it
-		#
-		vout = VFile.VoutFile().init(filename)
-		if mono:
-			vout.format = 'mono'
-		elif grey and greybits == 8:
-			vout.format = 'grey'
-		elif grey:
-			vout.format = 'grey'+`abs(greybits)`
-		else:
-			vout.format = 'rgb8'
-		vout.width = x
-		vout.height = y
-		if fields:
-			vout.packfactor = (1,-2)
-		else:
-			print 'Sorry, can only save fields at the moment'
-			gl.wintitle(filename)
-			return
-		vout.writeheader()
-		#
-		# Compute convertor, if needed
-		#
-		convertor = None
-		if grey:
-			if greybits == 2:
-				convertor = imageop.grey2grey2
-			elif greybits == 4:
-				convertor = imageop.grey2grey4
-			elif greybits == -2:
-				convertor = imageop.dither2grey2
-		fieldsize = x*y/2
-		nskipped = 0
-		realframeno = 0
-		tpf = 1000 / 50.0     #XXXX
-		for frameno in range(0, number*2):
-			if frameno <> 0 and \
-				  bitvec[frameno] == bitvec[frameno-1]:
-				nskipped = nskipped + 1
-				continue
-			#
-			# Save field.
-			# XXXX Works only for fields and top-to-bottom
-			#
-			start = frameno*fieldsize
-			field = data[start:start+fieldsize]
-			if convertor:
-				field = convertor(field, x, y)
-			elif mono and monotreshold >= 0:
-				field = imageop.grey2mono(field, x, y, \
-					  1, monotreshold)
-			elif mono:
-				field = imageop.dither2mono(field, x, y)
-			vout.writeframe(int(realframeno*tpf), field, None)
-		print 'Skipped',nskipped,'duplicate frames'
-		vout.close()
-			
-	gl.wintitle('(done) ' + filename)
-
-# Don't forget to call the main program
-
-try:
-	main()
-except KeyboardInterrupt:
-	print '[Interrupt]'
diff --git a/Demo/sgi/video/cam.py b/Demo/sgi/video/cam.py
deleted file mode 100755
index fa8966f..0000000
--- a/Demo/sgi/video/cam.py
+++ /dev/null
@@ -1,129 +0,0 @@
-import sys
-from socket import *
-from gl import *
-from GL import *
-from DEVICE import *
-from time import millitimer
-
-HS = 40 # Header size (must be same as in tv.py)
-
-# Rely on UDP packet (de)fragmentation for smoother images
-# (Changed for broadcast)
-MAX = 16000
-
-PF = 2 # Default packfactor
-
-# Default receiver station is voorn.
-# Kwik has no yellow pages, so...
-HOST = '192.16.201.121'
-PORT = 5555
-
-if sys.argv[1:]:
-	PF = eval(sys.argv[1])
-
-if sys.argv[2:]:
-	HOST = sys.argv[2]
-	if HOST == 'all':
-		HOST = '<broadcast>'
-		MAX = 1400
-
-PF2 = PF*PF
-
-def main():
-	centerx, centery = 400, 300
-
-	foreground()
-	wid = winopen('cam')
-	RGBmode()
-	doublebuffer()
-	gconfig()
-	qdevice(ESCKEY)
-
-	w, h = getsize()
-	ortho2(0, w, 0, h)
-	w = w/PF*PF
-	h = h/PF*PF
-
-	readsource(SRC_FRAMEGRABBER)
-
-	s = socket(AF_INET, SOCK_DGRAM)
-	if HOST == '<broadcast>':
-		s.allowbroadcast(1)
-	addr = HOST, PORT
-
-	bytesperline = w/PF2
-	linesperchunk = MAX/bytesperline
-	linesperchunk = linesperchunk/PF*PF
-	nchunks = (h+linesperchunk-1)/linesperchunk
-
-	print 'MAX=', MAX,
-	print 'linesperchunk=', linesperchunk,
-	print 'nchunks=', nchunks,
-	print 'w=', w, 'h=', h
-
-	x1, x2 = 0, w-1
-
-	t1 = millitimer()
-	nframes = 0
-	fps = 0
-
-	msg = ''
-
-	while 1:
-		while qtest():
-			dev, val = qread()
-			if dev == REDRAW:
-				reshapeviewport()
-				w, h = getsize()
-				ortho2(0, w, 0, h)
-				w = w/PF*PF
-				h = h/PF*PF
-
-				bytesperline = w/PF2
-				linesperchunk = MAX/bytesperline
-				linesperchunk = linesperchunk/PF*PF
-				nchunks = (h+linesperchunk-1)/linesperchunk
-
-				print 'MAX=', MAX,
-				print 'linesperchunk=', linesperchunk,
-				print 'nchunks=', nchunks,
-				print 'w=', w, 'h=', h
-
-				x1, x2 = 0, w-1
-
-				fps = 0
-
-			elif dev == ESCKEY:
-				winclose(wid)
-				return
-
-		readsource(SRC_FRAMEGRABBER)
-
-		nframes = nframes+1
-		if nframes >= fps:
-			t2 = millitimer()
-			if t2 <> t1:
-				fps = int(10000.0*nframes/(t2-t1)) * 0.1
-				msg = `fps` +  ' frames/sec'
-				t1 = t2
-				nframes = 0
-
-		RGBcolor(255,255,255)
-		cmov2i(9,9)
-		charstr(msg)
-
-		swapbuffers()
-		rectcopy(centerx-w/2, centery-w/2, centerx+w/2, centery+w/2, 0, 0)
-
-		for i in range(nchunks):
-			y1 = i*linesperchunk
-			y2 = y1 + linesperchunk-1
-			if y2 >= h: y2 = h-1
-			data = lrectread(x1, y1, x2, y2)
-			data2 = packrect(x2-x1+1, y2-y1+1, PF, data)
-			prefix = `w, h, PF, x1, y1, x2, y2`
-			prefix = prefix + ' ' * (HS-len(prefix))
-			data3 = prefix + data2
-			s.sendto(data3, addr)
-
-main()
diff --git a/Demo/sgi/video/camcorder.py b/Demo/sgi/video/camcorder.py
deleted file mode 100755
index 9b7618c..0000000
--- a/Demo/sgi/video/camcorder.py
+++ /dev/null
@@ -1,266 +0,0 @@
-from gl import *
-from GL import *
-from DEVICE import *
-import time
-import sys
-import getopt
-import socket
-import posix
-import vtime
-
-# Preallocation parameter
-PREALLOC = 4 # Megabyte
-
-# Sync audio parameters
-SYNCPORT = 10000
-CTLPORT = 10001
-
-from vpregs import *
-
-class Struct(): pass
-epoch = Struct()
-
-def getvideosize():
-    w = getvideo(VP_WIDTH)
-    h = getvideo(VP_HEIGHT)
-    print 'WIDTH,HEIGHT:', w, h
-    print 'GB{X,Y}ORG:', getvideo(VP_GBXORG), getvideo(VP_GBYORG)
-    print 'FB{X,Y}ORG:',  getvideo(VP_FBXORG), getvideo(VP_FBYORG)
-    x = 0
-    y = 0
-    return x,y,w,h
-
-framelist = []
-
-def prealloc(w, h):
-	nbytes = w*h*4
-	limit = PREALLOC*1024*1024
-	total = 0
-	list = []
-	print 'Prealloc to', PREALLOC, 'Megabytes...'
-	while total+nbytes <=  limit:
-		list.append('x'*nbytes)
-		total = total + nbytes
-	print 'Done.'
-
-def grabframe(f,x,y,w,h,pf):
-    readsource(SRC_FRONT)
-    if pf:
-    	w = w/pf*pf
-    	h = h/pf*pf
-    data = lrectread(x,y,x+w-1,y+h-1)
-    t = time.millitimer()-epoch.epoch
-    framelist.append(data, t)
-    readsource(SRC_FRAMEGRABBER)
-
-def saveframes(f, w, h, pf):
-	for data, t in framelist:
-		if pf:
-		    	w = w/pf*pf
-		    	h = h/pf*pf
-			data = packrect(w,h,pf,data)
-		f.write(`t` + ',' + `len(data)` + '\n')
-		f.write(data)
-	framelist[:] = []
-
-def saveframe(f,x,y,w,h,pf, notime):
-    readsource(SRC_FRONT)
-    if pf:
-    	w = w/pf*pf
-    	h = h/pf*pf
-    data = lrectread(x,y,x+w-1,y+h-1)
-    if pf: data = packrect(w,h,pf,data)
-    if notime: t = 0
-    else: t = time.millitimer()-epoch.epoch
-    f.write(`t` + ',' + `len(data)` + '\n')
-    f.write(data)
-    readsource(SRC_FRAMEGRABBER)
-
-def drawframe(x,y,w,h,col):
-    drawmode(OVERDRAW)
-    color(col)
-    bgnline()
-    v2i(x-1,y-1) ; v2i(x+w,y-1); v2i(x+w,y+h); v2i(x-1,y+h); v2i(x-1,y-1)
-    endline()
-    drawmode(NORMALDRAW)
-
-def usage():
-    sys.stderr.write('Usage: camcorder ' + \
-	'[-c] [-p packfactor] [-a audiomachine [-s]] [outputfile]\n')
-    sys.exit(2)
-
-def wrheader(f, w, h, pf):
-    	f.write('CMIF video 1.0\n')
-	f.write(`w,h,pf` + '\n')
-	print 'width,height,pf:', w, h, pf,
-	if pf == 0: pf = 4
-	print '(i.e.,', w*h*pf, 'bytes/frame)'
-
-def main():
-    foreground()
-    pf = 2
-    ausync = 0
-    austart = 0
-    optlist, args = getopt.getopt(sys.argv[1:],'ca:sp:')
-    for opt, arg in optlist:
-	if opt == '-c':
-	    pf = 0
-	elif opt == '-a':
-	    ausync = 1
-	    aumachine = arg
-	elif opt == '-s':
-	    austart = 1
-	elif opt == '-p':
-	    pf = int(eval(arg))
-	else:
-	    usage()
-    if args:
-    	if len(args) > 1:
-    	    print 'Too many arguments'
-    	    usage()
-    	filename = args[0]
-    else:
-    	filename = 'film.video'
-    if austart:
-	if not ausync:
-	    print 'Cannot use -s without -a'
-	    usage()
-	print 'Starting audio recorder...'
-	posix.system('rsh '+aumachine+' syncrecord '+socket.gethostname()+' &')
-    if ausync:
-	print 'Syncing to audio recorder...'
-	globtime = vtime.VTime().init(1,aumachine,SYNCPORT)
-	ctl = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
-	ctl.bind((socket.gethostname(),CTLPORT))
-	aua = (socket.gethostbyname(aumachine), CTLPORT)
-	print 'Done.'
-    vidx, vidy, w, h = getvideosize()
-    #prefsize(w,h)
-    winx, winy = 1280-w-10, 1024-h-30
-    prefposition(winx,winx+w-1,winy,winy+h-1)
-    win = winopen(filename)
-    f = open(filename, 'w')
-    w, h = getsize()
-    realw, realh = w, h
-    ####doublebuffer()
-    RGBmode()
-    gconfig()
-    qdevice(LEFTMOUSE)
-    qdevice(RKEY)
-    qdevice(SKEY)
-    qdevice(CKEY)
-    qdevice(PKEY)
-    qdevice(ESCKEY)
-    qdevice(WINQUIT)
-    qdevice(WINSHUT)
-    inrunning = 1
-    outrunning = 0
-    stop = 'stop'
-    readsource(SRC_FRAMEGRABBER)
-    mousing = 0
-    epoch.epoch = time.millitimer()
-    stoptime = epoch.epoch
-    sizewritten = 0
-    x, y = realw/4, realh/4
-    w, h = w/2, h/2
-    prealloc(w, h)
-    try:
-	drawframe(x,y,w,h,1)
-	nframe = 0
-	num = 0
-	while 1:
-	    insingle = 0
-	    outsingle = 0
-	    if mousing:
-		drawframe(x,y,w,h,0)
-		ox, oy = getorigin()
-		if sizewritten:
-		    x = getvaluator(MOUSEX)-ox
-		    y = getvaluator(MOUSEY)-oy
-		else:
-		    w = getvaluator(MOUSEX)-x-ox
-		    h = getvaluator(MOUSEY)-y-oy
-		drawframe(x,y,w,h,1)
-	    if qtest() or \
-	    not (mousing or inrunning or insingle or outrunning or outsingle):
-		ev, val = qread()
-		if ev == LEFTMOUSE and val == 1:
-		    drawframe(x,y,w,h,0)
-		    mousing = 1
-		    ox, oy = getorigin()
-		    x = getvaluator(MOUSEX)-ox
-		    y = getvaluator(MOUSEY)-oy
-		elif ev == LEFTMOUSE and val == 0:
-		    if h < 0:
-		    	y, h = y+h, -h
-		    if w < 0:
-		    	x, w = x+w, -w
-		    mousing = 0
-		    if not sizewritten:
-		    	wrheader(f, w, h, pf)
-			sizewritten = 1
-			prealloc(w, h)
-		elif ev == RKEY and val == 1:
-		    if not inrunning:
-			ringbell()
-		    else:
-			outrunning = 1
-			wasstopped = time.millitimer() - stoptime
-			epoch.epoch = epoch.epoch + wasstopped
-			nframe = 0
-			starttime = time.millitimer()
-			if ausync:
-			    ctl.sendto(`(1,starttime)`, aua)
-		elif ev == PKEY and val == 1 and outrunning:
-		    outrunning = 0
-		    stoptime = time.millitimer()
-		    if ausync:
-			ctl.sendto(`(0,stoptime)`, aua)
-		    fps =  nframe * 1000.0 / (time.millitimer()-starttime)
-		    print 'Recorded', nframe,
-		    print 'frames at', 0.1*int(fps*10),'frames/sec'
-		    print 'Saving...'
-		    saveframes(f, w, h, pf)
-		    print 'Done.'
-		elif ev == PKEY and val == 1 and not outrunning:
-			outsingle = 1
-		elif ev == CKEY and val == 1:
-			inrunning = 1
-		elif ev == SKEY and val == 1:
-			if outrunning:
-			    ringbell()
-			elif inrunning:
-			    inrunning = 0
-			else:
-			    insingle = 1
-		elif ev in (ESCKEY, WINQUIT, WINSHUT):
-		    if ausync:
-			ctl.sendto(`(2,time.millitimer())`, aua)
-		    raise stop
-		elif ev == REDRAW:
-			drawframe(x,y,w,h,0)
-			reshapeviewport()
-			drawframe(x,y,w,h,1)
-	    if inrunning or insingle:
-	    	if outrunning:
-			rectcopy(vidx+x,vidy+y,vidx+x+w-1,vidy+y+h-1,x,y)
-	    	else:
-			rectcopy(vidx,vidy,vidx+realw-1,vidx+realh-1,0,0)
-	        ####swapbuffers()
-	    if outrunning or outsingle:
-		nframe = nframe + 1
-		if not sizewritten:
-		    wrheader(f, w, h, pf)
-		    sizewritten = 1
-		if outrunning:
-			grabframe(f, x, y, w, h, pf)
-		else:
-			saveframe(f, x, y, w, h, pf, outsingle)
-    except stop:
-	pass
-    finally:
-        drawmode(OVERDRAW)
-        color(0)
-        clear()
-
-main()
diff --git a/Demo/sgi/video/colorsys.py b/Demo/sgi/video/colorsys.py
deleted file mode 100755
index dd3a033..0000000
--- a/Demo/sgi/video/colorsys.py
+++ /dev/null
@@ -1,106 +0,0 @@
-#
-# Module color - do color conversions
-#
-
-ONE_THIRD=1.0/3.0
-ONE_SIXTH=1.0/6.0
-TWO_THIRD=2.0/3.0
-
-def rgb_to_yiq(r,g,b):
-    y = 0.3*r + 0.59*g + 0.11*b
-    i = 0.6*r - 0.28*g - 0.32*b
-    q = 0.21*r- 0.52*g + 0.31*b
-    return (y,i,q)
-def yiq_to_rgb(y,i,q):
-    r = y + 0.948262*i + 0.624013*q
-    g = y - 0.276066*i - 0.639810*q
-    b = y - 1.105450*i + 1.729860*q
-    if r < 0.0: r = 0.0
-    if g < 0.0: g = 0.0
-    if b < 0.0: b = 0.0
-    if r > 1.0: r = 1.0
-    if g > 1.0: g = 1.0
-    if b > 1.0: b = 1.0
-    return (r,g,b)
-
-def _v(m1,m2,hue):
-    if hue >= 1.0: hue = hue - 1.0
-    if hue <  0.0: hue = hue + 1.0
-    if hue < ONE_SIXTH:
-	return m1 + (m2-m1)*hue*6.0
-    if hue < 0.5:
-	return m2
-    if hue < TWO_THIRD:
-	return m1 + (m2-m1)*(TWO_THIRD-hue)*6.0
-    return m1
-
-def rgb_to_hls(r,g,b):
-    maxc = max(r,g,b)
-    minc = min(r,g,b)
-    l = (minc+maxc)/2.0
-    if minc == maxc:
-	return 0.0, l, 0.0
-    if l <= 0.5:
-	s = (maxc-minc)/(maxc+minc)
-    else:
-	s = (maxc-minc)/(2-maxc-minc)
-    rc = (maxc-r)/(maxc-minc)
-    gc = (maxc-g)/(maxc-minc)
-    bc = (maxc-b)/(maxc-minc)
-    if r == maxc:
-	h = bc-gc
-    elif g == maxc:
-	h = 2.0+rc-bc
-    else:
-	h = 4.0+gc-rc
-    h = h/6.0
-    if h < 0.0:
-	h = h + 1.0
-    return h,l,s
-def hls_to_rgb(h,l,s):
-    if s == 0.0:
-	return l,l,l
-    if l <= 0.5:
-	m2 = l * (1.0+s)
-    else:
-	m2 = l+s-(l*s)
-    m1 = 2.0*l - m2
-    return (_v(m1,m2,h+ONE_THIRD), _v(m1,m2,h), _v(m1,m2,h-ONE_THIRD))
-
-def rgb_to_hsv(r,g,b):
-    maxc = max(r,g,b)
-    minc = min(r,g,b)
-    v = maxc
-    if minc == maxc:
-	return 0.0, 0.0, v
-    s = (maxc-minc)/maxc
-    rc = (maxc-r)/(maxc-minc)
-    gc = (maxc-g)/(maxc-minc)
-    bc = (maxc-b)/(maxc-minc)
-    if r == maxc:
-	h = bc-gc
-    elif g == maxc:
-	h = 2.0+rc-bc
-    else:
-	h = 4.0+gc-rc
-    h = h/6.0
-    if h < 0.0:
-	h = h + 1.0
-    return h,s,v
-def hsv_to_rgb(h,s,v):
-    if s == 0.0:
-	return v,v,v
-    i = int(h*6.0)
-    f = (h*6.0)-i
-    p = v*(1.0-s)
-    q = v*(1.0-s*f)
-    t = v*(1.0-s*(1.0-f))
-    if i in (0,6): return v,t,p
-    if i == 1: return q,v,p
-    if i == 2: return p,v,t
-    if i == 3: return p,q,v
-    if i == 4: return t,p,v
-    if i == 5: return v,p,q
-    print i, h, f
-    print h, s, v
-    raise 'Bad color'
diff --git a/Demo/sgi/video/i2v.c b/Demo/sgi/video/i2v.c
deleted file mode 100755
index 21dfabe..0000000
--- a/Demo/sgi/video/i2v.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * i2v -- image-to-video.
- * Convert an SGI image file to a format that is immediately usable
- * by lrectwrite.
- * The header of the file contains a description (in ASCII)
- * padded to 8196 byte for fast access of the rest of the file.
- *
- * Based upon "showimg.c" by Paul Haeberli.
- * --Guido van Rossum, CWI, Amsterdam
- */
-#include <stdio.h>
-#include <gl/gl.h>
-#include <gl/device.h>
-#include <gl/image.h>
-
-unsigned short rs[8192];
-unsigned short gs[8192];
-unsigned short bs[8192];
-
-IMAGE *image;
-int xsize, ysize, zsize;
-FILE *fp;
-
-char header[100];
-char *progname = "i2v";
-
-main(argc,argv)
-int argc;
-char **argv;
-{
-    int y;
-    if (argc > 0) progname = argv[0];
-    if( argc != 3 ) {
-	fprintf(stderr, "usage: %s infile outfile\n", progname);
-	exit(2);
-    } 
-    if( (image=iopen(argv[1],"r")) == NULL ) {
-	fprintf(stderr, "%s: can't open input file %s\n",progname, argv[1]);
-	exit(1);
-    }
-    xsize = image->xsize;
-    ysize = image->ysize;
-    zsize = image->zsize;
-    if ((fp = fopen(argv[2], "w")) == NULL) {
-	fprintf(stderr,"%s: can't open output file %s\n", progname, argv[2]);
-	exit(1);
-    }
-    fprintf(fp, "CMIF video 1.0\n");
-    fprintf(fp, "(%d, %d, %d)\n", xsize, ysize, 0);
-    fprintf(fp, "0, %ld\n", (long)xsize * (long)ysize * sizeof(long));
-    fflush(fp);
-    for(y = 0; y < ysize; y++) {
-		if(zsize<3) {
-			getrow(image, rs, y, 0);
-			writepacked(xsize, rs, rs, rs);
-		} else {
-			getrow(image, rs, y, 0);
-			getrow(image, gs, y, 1);
-			getrow(image, bs, y, 2);
-			writepacked(xsize, rs, gs, bs);
-		}
-    }
-    exit(0);
-}
-
-writepacked(n, rsptr, gsptr, bsptr)
-	int n;
-	short *rsptr, *gsptr, *bsptr;
-{
-	long parray[8192];
-	long *pptr = parray;
-	int i = n;
-	while (--i >= 0) {
-		*pptr++ = *rsptr++ | (*gsptr++<<8) | (*bsptr++<<16);
-	}
-	if (fwrite((char *) parray, sizeof(long), n, fp) != n) {
-		perror("fwrite");
-		exit(1);
-	}
-}
diff --git a/Demo/sgi/video/makemovie.py b/Demo/sgi/video/makemovie.py
deleted file mode 100755
index 5cb41cd..0000000
--- a/Demo/sgi/video/makemovie.py
+++ /dev/null
@@ -1,218 +0,0 @@
-#! /ufs/guido/bin/sgi/python
-#! /ufs/guido/src/video/py
-
-# Capture a CMIF movie using the Indigo video library and board
-
-
-# Usage:
-#
-# makemovie [-q queuesize] [-t recordtime] [-a] [moviefile [audiofile]]
-
-
-# Options:
-#
-# -q queuesize  : set the capture queue size (default and max 16)
-# -t recordtime : set the record time in seconds (default 5 seconds)
-# -a            : record audio as well
-# moviefile     : here goes the movie data (default film.video);
-#                 the format is documented in cmif-film.ms
-# audiofile     : with -a, here goes the audio data (default film.aiff);
-#                 audio data is recorded in AIFF format, using the
-#                 input sampling rate, source and volume set by the
-#                 audio panel, in mono, 8 bits/sample
-
-
-# User interface:
-#
-# Start the application.  Resize the window to the desired movie size.
-# Click the left mouse button to start recording (recording starts
-# when you release the mouse button).  Recording time is specified by
-# the -t option (XXX this should change).
-#
-# Press ESC or select the window manager Quit or Close window option
-# to quit.  (You can do this without recording -- then the output
-# files are untouched.)
-#
-# (It is possible to record more than once; but this doesn't set the
-# time stamps correctly yet, and doesn't work at all with audio.  So
-# don't use.)
-
-
-# XXX To do:
-#
-# fix timestamps for second and further recordings
-# fix audio      "   "      "   "       "
-# flush audio buffer when recording starts
-# make code more readable
-
-
-import sys
-sys.path.append('/ufs/guido/src/video')
-import sv, SV
-import VFile
-import gl, GL, DEVICE
-import al, AL
-import time
-import posix
-import getopt
-import string
-
-
-def main():
-	QSIZE = 16
-	TIME = 5
-	audio = 0
-
-	opts, args = getopt.getopt(sys.argv[1:], 'aq:t:')
-	for opt, arg in opts:
-		if opt == '-a':
-			audio = 1
-		elif opt == '-q':
-			QSIZE = string.atoi(arg)
-		elif opt == '-t':
-			TIME = string.atoi(arg)
-
-	if args:
-		filename = args[0]
-	else:
-		filename = 'film.video'
-
-	if audio:
-		if args[1:]:
-			audiofilename = args[1]
-		else:
-			audiofilename = 'film.aiff'
-
-	gl.foreground()
-
-	x, y = SV.PAL_XMAX / 4, SV.PAL_YMAX / 4
-	print x, 'x', y
-
-	gl.minsize(40, 30)
-	gl.stepunit(8, 6)
-	gl.maxsize(SV.PAL_XMAX, SV.PAL_YMAX)
-	gl.keepaspect(SV.PAL_XMAX, SV.PAL_YMAX)
-	win = gl.winopen(filename)
-	x, y = gl.getsize()
-	print x, 'x', y
-
-	v = sv.OpenVideo()
-	v.BindGLWindow(win, SV.IN_REPLACE)
-	v.SetSize(x, y)
-	v.BindGLWindow(win, SV.IN_REPLACE)
-
-	v.SetCaptureFormat(SV.RGB_FRAMES)
-	v.SetCaptureMode(SV.BLOCKING_CAPTURE)
-	v.SetQueueSize(QSIZE)
-	v.InitCapture()
-	if v.GetQueueSize() != QSIZE:
-		QSIZE = v.GetQueueSize()
-		print 'Warning: QSIZE reduced to', QSIZE
-
-	gl.qdevice(DEVICE.LEFTMOUSE)
-	gl.qdevice(DEVICE.WINQUIT)
-	gl.qdevice(DEVICE.WINSHUT)
-	gl.qdevice(DEVICE.ESCKEY)
-
-	print 'Click left mouse to start recording', TIME, 'seconds'
-	ofile = None
-	afile = None
-	# Mouse down opens the file & freezes window
-	# Mouse up starts recording frames
-
-	while 1:
-		dev, val = gl.qread()
-		if dev == DEVICE.LEFTMOUSE:
-			# Start recording
-			if val == 1:
-				# Mouse down -- preparations
-				if ofile == None:
-					ofile = VFile.VoutFile().init(filename)
-					ofile.format = 'rgb8'
-					ofile.width = x
-					ofile.height = y
-					ofile.writeheader()
-					# XXX other format bits?
-				# The window can't be resized from now
-				gl.prefsize(x, y)
-				gl.winconstraints()
-				gl.wintitle('* ' + filename)
-				if audio:
-					afile = initaudio(audiofilename)
-				continue
-			# Mouse up -- start actual recording
-			global recording, stop_recording
-			if audio:
-				stop_recording = 0
-				recording.release()
-			t0 = time.millitimer()
-			v.StartCapture()
-			while 1:
-				t = time.millitimer() - t0
-				if t >= TIME*1000:
-					break
-				if v.GetCaptured() > 2:
-					doframe(v, ofile, x, y, t)
-			v.StopCapture()
-			stop_recording = 1
-			while v.GetCaptured() > 0:
-				doframe(v, ofile, x, y, t)
-				t = time.millitimer() - t0
-			gl.wintitle(filename)
-		elif dev == DEVICE.REDRAW:
-			# Window resize (or move)
-			x, y = gl.getsize()
-			print x, 'x', y
-			v.SetSize(x, y)
-			v.BindGLWindow(win, SV.IN_REPLACE)
-		elif dev in (DEVICE.ESCKEY, DEVICE.WINQUIT, DEVICE.WINSHUT):
-			# Quit
-			if ofile:
-				ofile.close()
-			if afile:
-				afile.destroy()
-			posix._exit(0)
-			# EndCapture dumps core...
-			v.EndCapture()
-			v.CloseVideo()
-			gl.winclose(win)
-
-def doframe(v, ofile, x, y, t):
-	cd, start = v.GetCaptureData()
-	data = cd.interleave(x, y)
-	cd.UnlockCaptureData()
-	ofile.writeframe(t, data, None)
-
-AQSIZE = 16000
-
-def initaudio(filename):
-	import thread, aiff
-	global recording, stop_recording
-	afile = aiff.Aiff().init(filename, 'w')
-	afile.nchannels = AL.MONO
-	afile.sampwidth = AL.SAMPLE_8
-	params = [AL.INPUT_RATE, 0]
-	al.getparams(AL.DEFAULT_DEVICE, params)
-	print 'rate =', params[1]
-	afile.samprate = params[1]
-	c = al.newconfig()
-	c.setchannels(AL.MONO)
-	c.setqueuesize(AQSIZE)
-	c.setwidth(AL.SAMPLE_8)
-	aport = al.openport(filename, 'r', c)
-	recording = thread.allocate_lock()
-	recording.acquire()
-	stop_recording = 0
-	thread.start_new_thread(recorder, (afile, aport))
-	return afile
-
-def recorder(afile, aport):
-	# XXX recording more than one fragment doesn't work
-	# XXX (the thread never dies)
-	recording.acquire()
-	while not stop_recording:
-		data = aport.readsamps(AQSIZE/2)
-		afile.writesampsraw(data)
-		del data
-
-main()
diff --git a/Demo/sgi/video/squash.c b/Demo/sgi/video/squash.c
deleted file mode 100755
index d5ea946..0000000
--- a/Demo/sgi/video/squash.c
+++ /dev/null
@@ -1,130 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long h, w;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
-    char **argv;
-{
-    char lbuf[100];
-    int nh, nw;
-    int x, y, xi, yi;
-    int num;
-    int r, g, b;
-    long data;
-    long *nbm, *nbmp;
-    int i;
-    int bits, mask, roundbit, addbit;
-    int pf;
-    int newfmt = 0;
-
-    if( argc != 2 && argc != 3) {
-       fprintf(stderr, "Usage: squash factor [bits]\n");
-       exit(1);
-    }
-    factor = atoi(argv[1]);
-    if ( argc > 2 ) {
-	bits = atoi(argv[2]);
-	mask = (1 << bits) - 1;
-	mask <<= (8-bits);
-	roundbit = 1 << (7-bits);
-	addbit = 1 << (8-bits);
-	fprintf(stderr, "%x %x %x\n", mask, roundbit, addbit);
-    } else {
-	mask = 0xff;
-	roundbit = 0;
-	addbit = 0;
-    }
-    gets(lbuf);
-    if ( strncmp( lbuf, "CMIF", 4) == 0 ) {
-	newfmt = 1;
-	gets(lbuf);
-	if( sscanf(lbuf, "(%d,%d,%d)", &w, &h, &pf) != 3) {
-	    fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
-	    exit(1);
-	}
-	if ( pf != 0 ) {
-	    fprintf(stderr, "%s: packed file\n", argv[0]);
-	    exit(1);
-	}
-    } else {
-	if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
-	    fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
-	    exit(1);
-	}
-    }
-    nh = h / factor;
-    nw = w / factor;
-    if ( newfmt )
-	printf("CMIF video 1.0\n(%d,%d,%d)\n", nw, nh, 0);
-    else
-	printf("(%d,%d)\n", nw, nh);
-    if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    while( !feof(stdin) ) {
-	{   int t, s;
-	    gets(lbuf);
-	    if ( feof(stdin) ) break;
-	    if ( sscanf(lbuf, "%d,%d", &t,&s) == 2) {
-		if ( s != h*w*4 ) {
-		    fprintf(stderr, "Size changed from %d to %d: %s\n",4*h*w,s, lbuf);
-		    exit(1);
-		}
-		printf("%d, %d\n", t, nh*nw*4);
-	    } else {
-		puts(lbuf);
-	    }
-	}
-	fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
-	if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
-	    fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
-		i, h*w*sizeof(long));
-	    exit(1);
-	}
-	nbmp = nbm;
-	for( y=0; y<nh; y++) {
-	    for ( x=0; x<nw; x++) {
-		r = g = b = 0;
-		num = 0;
-		for( xi=0; xi<factor; xi++ ) {
-		    for(yi=0; yi<factor; yi++) {
-			if ( y*factor+yi < h && x*factor+xi < w ) {
-			    num++;
-			    data = BM(x,xi,y,yi);
-			    r += R(data);
-			    g += G(data);
-			    b += B(data);
-			}
-			else fprintf(stderr, "skip %d %d %d %d\n", x, xi, y, yi);
-		    }
-		}
-		r = r/num; g = g/num; b = b/num;
-		if ( (r & mask) != mask && ( r & roundbit) ) r += addbit;
-		if ( (g & mask) != mask && ( g & roundbit) ) g += addbit;
-		if ( (b & mask) != mask && ( b & roundbit) ) b += addbit;
-		data = COMP(r, g, b);
-		*nbmp++ = data;
-	    }
-	}
-	if (nbmp - nbm != nh * nw ) fprintf(stderr, "%d %d\n", nbmp-nbm, nh*nw);
-	fprintf(stderr, "Writing %d\n", (nbmp-nbm)*sizeof(long));
-	fwrite(nbm, 1, (nbmp-nbm)*sizeof(long), stdout);
-    }
-    exit(0);
-}
diff --git a/Demo/sgi/video/squash2.c b/Demo/sgi/video/squash2.c
deleted file mode 100755
index c4d03e9..0000000
--- a/Demo/sgi/video/squash2.c
+++ /dev/null
@@ -1,72 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long h, w;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
-    char **argv;
-{
-    char lbuf[100];
-    int nh, nw;
-    int x, y, xi, yi;
-    int num;
-    int r, g, b;
-    long data;
-    long *nbm, *nbmp;
-    int i;
-
-    if( argc != 2) {
-       fprintf(stderr, "Usage: squash factor\n");
-       exit(1);
-    }
-    factor = atoi(argv[1]);
-    gets(lbuf);
-    if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
-	fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
-	exit(1);
-    }
-    nh = h / factor;
-    nw = w / factor;
-    printf("(%d,%d)\n", nw, nh);
-    if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    while( !feof(stdin) ) {
-	gets(lbuf);
-	if ( feof(stdin) ) break;
-	puts(lbuf);
-	fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
-	if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
-	    fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
-		i, h*w*sizeof(long));
-	    exit(1);
-	}
-	nbmp = nbm;
-	for( y=0; y<nh; y++) {
-	    for ( x=0; x<nw; x++) {
-		r = g = b = 0;
-		num = 0;
-		*nbmp++ = BM(x,0,y,0);
-	    }
-	}
-	if (nbmp - nbm != nh * nw ) fprintf(stderr, "%d %d\n", nbmp-nbm, nh*nw);
-	fprintf(stderr, "Writing %d\n", (nbmp-nbm)*sizeof(long));
-	fwrite(nbm, 1, (nbmp-nbm)*sizeof(long), stdout);
-    }
-    exit(0);
-}
diff --git a/Demo/sgi/video/statit.py b/Demo/sgi/video/statit.py
deleted file mode 100755
index b0c1782..0000000
--- a/Demo/sgi/video/statit.py
+++ /dev/null
@@ -1,115 +0,0 @@
-import sys
-from time import millitimer
-
-def main():
-	filename = 'film2.video'
-	if sys.argv[1:]: filename = sys.argv[1]
-	f = open(filename, 'r')
-
-	line = f.readline()
-	w, h = eval(line[:-1])
-	w2, h2 = w/2, h/2
-	size = w2 * h2
-
-	data = data2 = t = t0 = t1 = None
-	nframes = 0
-	t0 = millitimer()
-	while 1:
-		line = f.readline()
-		if not line: break
-		t = eval(line[:-1])
-		data = None
-		data = f.read(size)
-		if len(data) <> size:
-			raise EOFError
-		dostat(w2, h2, data)
-		nframes = nframes+1
-	t1 = millitimer()
-	
-	t = 0.001 * (t1-t0)
-	fps = 0.1 * int(10*nframes/t)
-	print nframes, 'frames in', t, 'sec. =', fps, 'frames/sec.'
-
-def dostat(w, h, data):
-	print
-	stat3(w, h, data)
-
-# Statistic op 1: frequencies of byte values
-def stat1(w, h, data):
-	bins = [0]*256
-	for c in data:
-		i = ord(c)
-		bins[i] = bins[i]+1
-	prbins(bins)
-
-def prbins(bins):
-	import string
-	s = ''
-	tot = 0
-	for i in range(256):
-		tot = tot + bins[i]
-		s = s + string.rjust(`bins[i]`, 4)
-		if len(s) >= 4*16:
-			print s, string.rjust(`tot`, 7)
-			s = ''
-			tot = 0
-
-# Statistic op 2: run lengths
-def stat2(w, h, data):
-	runs = []
-	for y in range(h):
-		count, value = 0, ord(data[y*w])
-		for c in data[y*w : y*w+w]:
-			i = ord(c)
-			if i <> value:
-				runs.append(count, value)
-				count, value = 0, i
-			count = count+1
-		runs.append(count, value)
-	print len(runs), 'runs =', 0.1 * (10*w*h/len(runs)), 'bytes/run'
-
-# Statistic op 3: frequencies of byte differences
-def stat3(w, h, data):
-	bins = [0]*256
-	prev = 0
-	for c in data:
-		i = ord(c)
-		delta = divmod(i-prev, 256)[1]
-		prev = i
-		bins[delta] = bins[delta]+1
-	prbins(bins)
-
-# Try packing
-def packblock(w, h, data):
-	res = ''
-	for y in range(h):
-		res = res + packline(data[y*w : y*w+w])
-	return res
-
-def packline(line):
-	bytes = []
-	for c in line:
-		bytes.append(ord(c))
-	prev = bytes[0]
-	i, n = 1, len(bytes)
-	while i < n:
-		for pack in (0, 2, 4, 8):
-			if pack == 0:
-				lo, hi = 0, 0
-			else:
-				hi = pow(2, pack-1)-1
-				lo = -hi-1
-			p = prev
-			j = i
-			count = 0
-			while j < n:
-				x = bytes[j]
-				delta = byte(x-p)
-				if not lo <= delta <= hi:
-					break
-				p = x
-				j = j+1
-
-def byte(x): return divmod(x, 256)[1]
-
-main()
diff --git a/Demo/sgi/video/syncaudio.py b/Demo/sgi/video/syncaudio.py
deleted file mode 100755
index fd09d28..0000000
--- a/Demo/sgi/video/syncaudio.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import AL
-import al
-import sys
-import vtime
-import socket
-import time
-
-
-SLEEPTIME = 500		# 500 ms sleeps
-SAMPLEFREQ = 16000	# 16Khz samples
-SAMPLERATE = AL.RATE_16000
-NEEDBUFFERED = SAMPLEFREQ	# Buffer 1 second of sound
-BUFFERSIZE = NEEDBUFFERED*4	# setqueuesize() par for 2 second sound
-
-AVSYNCPORT = 10000	# Port for time syncing
-AVCTLPORT = 10001	# Port for record start/stop
-
-def main():
-    if len(sys.argv) <> 3:
-	print 'Usage: ', sys.argv[0], 'videohostname soundfile'
-	sys.exit(1)
-    #
-    ofile = open(sys.argv[2], 'w')
-    #
-    globaltime = vtime.VTime().init(0,sys.argv[1],AVSYNCPORT)
-    #
-    ctl = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
-    ctl.bind((socket.gethostname(),AVCTLPORT))
-    #
-    inp = openmic()
-    #
-    out = 0		# Open aiff file
-    #
-    while 1:
-	if mainloop(None, ctl, inp, out, globaltime):
-	    break
-	if mainloop(ofile, ctl, inp, out, globaltime):
-	    break
-    pass	# Close aiff file
-    sys.exit(0)
-#
-def openmic():
-    conf = al.newconfig()
-    conf.setqueuesize(BUFFERSIZE)
-    conf.setwidth(AL.SAMPLE_16)
-    conf.setchannels(AL.MONO)
-    return al.openport('micr','r',conf)
-#
-def mainloop(ofile, ctl, inp, out, globaltime):
-    #
-    # Wait for sync packet, keeping 1-2 seconds of sound in the
-    # buffer
-    #
-    totsamps = 0
-    totbytes = 0
-    starttime = time.millitimer()
-    while 1:
-	time.millisleep(SLEEPTIME)
-	if ctl.avail():
-	    break
-	nsamples = inp.getfilled()-NEEDBUFFERED
-	if nsamples>0:
-	    data = inp.readsamps(nsamples)
-	    totsamps = totsamps + nsamples
-	    totbytes = totbytes + len(data)
-	    if ofile <> None:
-		ofile.write(data)
-    #
-    # Compute his starttime and the timestamp of the first byte in the
-    # buffer. Discard all buffered data upto his starttime
-    #
-    startstop,histime = eval(ctl.recv(100))
-    if (ofile == None and startstop == 0) or \
-			   (ofile <> None and startstop == 1):
-	print 'Sync error: saving=',save,' request=',startstop
-	sys.exit(1)
-    filllevel = inp.getfilled()
-    filltime = time.millitimer()
-    filltime = filltime - filllevel / (SAMPLEFREQ/1000)
-    starttime = globaltime.his2mine(histime)
-    nsamples = starttime - filltime
-    if nsamples < 0:
-	print 'Start/stop signal came too late'
-	sys.exit(1)
-    nsamples = nsamples * (SAMPLEFREQ / 1000)
-    data = inp.readsamps(nsamples)
-    totsamps = totsamps + nsamples
-    totbytes = totbytes + len(data)
-    print 'Time: ', time.millitimer()-starttime, ', Bytes: ', totbytes, ', Samples: ', totsamps
-    if ofile <> None:
-	ofile.write(data)
-    return (startstop == 2)
-
-main()
diff --git a/Demo/sgi/video/tomono.c b/Demo/sgi/video/tomono.c
deleted file mode 100755
index 546af68..0000000
--- a/Demo/sgi/video/tomono.c
+++ /dev/null
@@ -1,165 +0,0 @@
-#include <stdio.h>
-
-long *bm;
-long *nbm;
-long h, w;
-int nh, nw;
-long factor;
-
-#define OC(x,xi) ((x)*factor+(xi))
-#define BM(x,xi,y,yi) bm[OC(y,yi)*w+OC(x,xi)]
-
-#define COMP(r,g,b) ((r) | ((g)<<8) | ((b) << 16))
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-#define CHOICEFUNC(np1, np2) ( random() & 1 )
-
-int inlevels = 3*255;
-int outlevels = 1;
-
-main(argc, argv)
-    char **argv;
-{
-    char lbuf[100];
-    int x, y, xi, yi;
-    int num;
-    int r, g, b;
-    long data;
-    int i;
-    double greyness;
-    int inpixels, outpixels;
-    int resid;
-
-    setvbuf(stdout, 0, _IOFBF, 1024*128);
-    if( argc != 2) {
-       fprintf(stderr, "Usage: tomono factor\n");
-       exit(1);
-    }
-    factor = atoi(argv[1]);
-    gets(lbuf);
-    if ( sscanf(lbuf, "(%d,%d)", &w, &h) != 2) {
-	fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
-	exit(1);
-    }
-    nh = h / factor;
-    nw = w / factor;
-    printf("(%d,%d)\n", nw, nh);
-    if ( (bm = (long *)malloc(h*w*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    if ( (nbm = (long *)malloc(nh*nw*sizeof(long))) == 0) {
-	fprintf(stderr, "%s: No memory\n", argv[0]);
-	exit(1);
-    }
-    while( !feof(stdin) ) {
-	gets(lbuf);
-	if ( feof(stdin) ) break;
-	puts(lbuf);
-	fprintf(stderr, "Reading %d\n", h*w*sizeof(long));
-	if ( (i=fread(bm, 1, h*w*sizeof(long), stdin)) != h*w*sizeof(long)) {
-	    fprintf(stderr, "%s: short read, %d wanted %d\n", argv[0],
-		i, h*w*sizeof(long));
-	    exit(1);
-	}
-	/*
-	** Compute picture blackness.
-	*/
-	inpixels = 0;
-	inpixels = countpixels(0,0,w,h);
-	greyness = (double)inpixels/(h*w*inlevels);
-	fprintf(stderr, "%3.1f%% grey\n", 100.0*greyness);
-	outpixels = (int)(greyness*outlevels*nh*nw);
-	fprintf(stderr, "Inpixels: %d (%d) Outpixels %d\n", inpixels, inpixels/inlevels, outpixels);
-	resid = fillpixels(0,0,nw,nh,0,0,w,h,outpixels);
-	if ( resid > 1 ) fprintf(stderr, "Residue: %d pixels\n", resid);
-	fprintf(stderr, "Writing %d\n", (nh*nw)*sizeof(long));
-	fwrite(nbm, 1, (nh*nw)*sizeof(long), stdout);
-    }
-    exit(0);
-}
-
-countpixels(x0,y0,x1,y1)
-{
-    int x, y, tot, data;
-
-    tot = 0;
-    for( y=y0; y<y1; y++)
-	for(x=x0; x<x1; x++) {
-	    data = bm[y*w+x];
-	    tot += R(data);
-	    tot += G(data);
-	    tot += B(data);
-    }
-    return tot;
-}
-
-fillpixels(x0,y0,x1,y1,ox0,oy0,ox1,oy1,npixels)
-{
-    int m, om, p1, p2, np1, np2, rp, resid;
-
-    if ( npixels == 0 ) return 0;
-    if ( x0+1 >= x1 && y0+1 >= y1 ) {
-	if ( npixels ) {
-	    nbm[y0*nw+x0] = 0xffffff;
-/* 	    fprintf(stderr, "->%d,%d\n", x0,y0); */
-	    return npixels - 1;
-	}
-	return 0;
-    }
-    if ( x1-x0 < y1-y0 ) {
-	if ( y1 - y0 <= 2 )
-	    m = y0 + 1;
-	else
-	    m = y0+1+(random()%(y1-y0-1));
-/* 	fprintf(stderr,"%d,%d %d,%d Y %d\n", x0, x1, y0, y1, m); */
-	/* om = (oy0+oy1)/2; */ om = m;
-	p1 = countpixels(ox0,oy0,ox1,om);
-	p2 = countpixels(ox0,om,ox1,oy1);
-	np1 = (int)(((float)p1/(p1+p2))*npixels);
-	np2 = (int)(((float)p2/(p1+p2))*npixels);
-	rp = npixels - np1 - np2;
-	if ( rp ) {
-	    np1 += rp/2;
-	    rp = rp - rp/2;
-	    np2 += rp;
-	}
-	resid = 0;
-	if ( CHOICEFUNC(np1, np2) ) {
-	    resid = fillpixels(x0,y0,x1,m,ox0,oy0,ox1,om,np1+resid);
-	    resid = fillpixels(x0,m,x1,y1,ox0,om,ox1,oy1,np2+resid);
-	} else {
-	    resid = fillpixels(x0,m,x1,y1,ox0,om,ox1,oy1,np2+resid);
-	    resid = fillpixels(x0,y0,x1,m,ox0,oy0,ox1,om,np1+resid);
-	}
-    } else {
-	if ( x1 - x0 <= 2 )
-	    m = x0 + 1;
-	else
-	    m = x0+1+(random()%(x1-x0-1));
-/* 	fprintf(stderr,"%d,%d %d,%d X %d\n", x0, x1, y0, y1, m); */
-	/* om = (ox0+ox1)/2; */ om = m;
-	p1 = countpixels(ox0,oy0,om,oy1);
-	p2 = countpixels(om,oy0,ox1,oy1);
-	np1 = (int)(((float)p1/(p1+p2))*npixels);
-	np2 = (int)(((float)p2/(p1+p2))*npixels);
-	rp = npixels - np1 - np2;
-	if ( rp ) {
-	    np1 += rp/2;
-	    rp = rp - rp/2;
-	    np2 += rp;
-	}
-	resid = 0;
-	if ( CHOICEFUNC(np1, np2) ) {
-	    resid = fillpixels(x0,y0,m,y1,ox0,oy0,om,oy1,np1+resid);
-	    resid = fillpixels(m,y0,x1,y1,om,oy0,ox1,oy1,np2+resid);
-	} else {
-	    resid = fillpixels(m,y0,x1,y1,om,oy0,ox1,oy1,np2+resid);
-	    resid = fillpixels(x0,y0,m,y1,ox0,oy0,om,oy1,np1+resid);
-	}
-    }
-    return resid;
-}
diff --git a/Demo/sgi/video/tv.py b/Demo/sgi/video/tv.py
deleted file mode 100755
index da4bacb..0000000
--- a/Demo/sgi/video/tv.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import string
-
-from socket import *
-from gl import *
-from GL import *
-from DEVICE import *
-from time import millisleep, millitimer
-
-PORT = 5555
-
-PF = 2 # packfactor
-HS = 40 # Header size
-
-def testimage():
-	RGBcolor(0, 0, 0)
-	clear()
-	RGBcolor(0, 255, 0)
-	cmov2i(10, 10)
-	charstr('Waiting...')
-
-def reshape():
-	reshapeviewport()
-	w, h = getsize()
-	ortho2(0, w, 0, h)
-	testimage()
-	return w, h
-
-def main():
-	s = socket(AF_INET, SOCK_DGRAM)
-	s.bind('', PORT)
-
-	foreground()
-	wid = winopen('tv')
-	RGBmode()
-	gconfig()
-	qdevice(ESCKEY)
-
-	oldw, oldh = getsize()
-	ortho2(0, oldw, 0, oldh)
-	testimage()
-
-	t1 = millitimer()
-
-	while 1:
-		if qtest():
-			dev, val = qread()
-			if dev == ESCKEY:
-				winclose(wid)
-				return
-			elif dev == REDRAW:
-				oldw, oldh = reshape()
-		elif s.avail():
-			data = s.recv(17000)
-			header = string.strip(data[:HS])
-			w, h, pf, x1, y1, x2, y2 = eval(header)
-			if (w, h) <> (oldw, oldh):
-				x, y = getorigin()
-				x, y = x-1, y+21 # TWM correction
-				winposition(x, x+w-1, y+oldh-h, y+oldh-1)
-				oldw, oldh = reshape()
-			data2 = data[HS:]
-			dx = (x2-x1+1)/pf
-			dy = (y2-y1+1)/pf
-			data3 = unpackrect(dx, dy, 1, data2)
-			rectzoom(pf, pf)
-			lrectwrite(x1, y1, x1+dx-1, y1+dy-1, data3)
-			t1 = millitimer()
-		else:
-			t2 = millitimer()
-			if t2-t1 >= 5000:
-				testimage()
-				t1 = t2
-			else:
-				millisleep(10)
-
-	winclose(wid)
-	return data
-
-main()
diff --git a/Demo/sgi/video/v2i.c b/Demo/sgi/video/v2i.c
deleted file mode 100755
index 5f8f3b5..0000000
--- a/Demo/sgi/video/v2i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* Convert the first image of a CMIF video movie file to SGI .rgb format.
-   usage: v2i videofile imagefile [planemask]
-   link with -limage
-*/
-
-#include <stdio.h>
-#include <gl/image.h>
-
-long bm[1280];
-short rb[1280], gb[1280], bb[1280];
-long w, h, pf;
-
-#define R(comp) ((comp) & 0xff)
-#define G(comp) (((comp)>>8) & 0xff)
-#define B(comp) (((comp)>>16) & 0xff)
-
-main(argc, argv)
-    char **argv;
-{
-    char lbuf[100];
-    int x, y;
-    int i;
-    IMAGE * of;
-    int pmask;
-
-    if( argc != 3 && argc != 4) {
-       fprintf(stderr, "Usage: v2i videofile imgfile [planemask]\n");
-       exit(2);
-    }
-    if ( argc == 4)
-	pmask = atoi(argv[3]);
-    else
-	pmask = 7;
-    if ( freopen(argv[1], "r", stdin) == NULL ) {
-	perror(argv[1]);
-	exit(1);
-    }
-    if (fgets(lbuf, sizeof lbuf, stdin) == NULL) {
-	    fprintf(stderr, "Immediate EOF\n");
-	    exit(1);
-    }
-    if (strncmp(lbuf, "CMIF", 4) == 0) {
-	    /* Skip optional header line */
-	    if (fgets(lbuf, sizeof lbuf, stdin) == NULL) {
-		    fprintf(stderr, "Immediate EOF after header\n");
-		    exit(1);
-	    }
-    }
-    pf = 2; /* Default */
-    if ( sscanf(lbuf, "(%d,%d,%d)", &w, &h, &pf) < 2) {
-	fprintf(stderr, "%s: bad size spec: %s\n", argv[0], lbuf);
-	exit(1);
-    }
-    fgets(lbuf, sizeof lbuf, stdin); /* Skip time info */
-    if ( w > 1280 ) {
-	fprintf(stderr, "%s: Sorry, too wide\n", argv[0]);
-	exit(1);
-    }
-    if ( (of=iopen(argv[2], "w", RLE(1), 3, w, h, 3)) == 0) {
-	perror(argv[2]);
-	exit(1);
-    }
-    for( y=0; y<h; y++) {
-	if( fread(bm, sizeof(long), w, stdin) != w) {
-	    fprintf(stderr, "%s: short read\n", argv[0]);
-	    exit(1);
-	}
-	for( x=0; x<w; x++) {
-	    if ( pmask & 1) rb[x] = R(bm[x]);
-	    if ( pmask & 2) gb[x] = G(bm[x]);
-	    if ( pmask & 4) bb[x] = B(bm[x]);
-	}
-	putrow(of, rb, y, 0);
-	putrow(of, gb, y, 1);
-	putrow(of, bb, y, 2);
-    }
-    iclose(of);
-    exit(0);
-}
diff --git a/Demo/sgi/video/video.py b/Demo/sgi/video/video.py
deleted file mode 100755
index 1b81bd8..0000000
--- a/Demo/sgi/video/video.py
+++ /dev/null
@@ -1,218 +0,0 @@
-import getopt
-from gl import *
-from GL import *
-from DEVICE import *
-import time
-import sys
-import al
-import AL
-
-sys.path.append('/ufs/guido/src/video') # Increase chance to find colorsys
-import colorsys
-
-BUFFERSIZE = 32000
-
-class Struct(): pass
-epoch = Struct()
-epoch.correcttiming = 1
-EndOfFile = 'End of file'
-bye = 'bye'
-
-def openspkr():
-    conf = al.newconfig()
-    conf.setqueuesize(BUFFERSIZE)
-    conf.setwidth(AL.SAMPLE_16)
-    conf.setchannels(AL.MONO)
-    return al.openport('spkr','w',conf)
-
-def openvideo(name):
-    try:
-        f = open(name, 'r')
-    except:
-        sys.stderr.write(name + ': cannot open\n')
-        sys.exit(1)
-    line = f.readline()
-    if not line: raise EndOfFile
-    colorinfo = (8, 0, 0, 0)
-    if line[:4] == 'CMIF':
-	if line[:14] == 'CMIF video 2.0':
-	    line = f.readline()
-	    colorinfo = eval(line[:-1])
-	line = f.readline()
-    x = eval(line[:-1])
-    if len(x) == 3: w, h, pf = x
-    else: w, h = x; pf = 2
-    if pf and w/pf % 4 <> 0:
-        sys.stderr.write( \
-	'warning: stride not a multiple of 4 -- may not work on Indigo XS\n')
-    return f, w, h, pf, colorinfo
-
-def loadframe(f,w,h,pf,af,spkr, (ybits,ibits,qbits,chrompack),mf):
-    line = f.readline()
-    if line == '':
-	raise EndOfFile
-    x = eval(line[:-1])
-    if type(x) == type(0) or type(x) == type(0.0):
-    	tijd = x
-    	if pf == 0:
-    		size = w*h*4
-    	else:
-    		size = (w/pf) * (h/pf)
-    else:
-    	tijd, size = x
-    data = f.read(size)
-    if len(data) <> size:
-	raise EndOfFile
-    if pf:
-    	w = w/pf
-    	h = h/pf
-    if chrompack:
-	cw = (w+chrompack-1)/chrompack
-	ch = (h+chrompack-1)/chrompack
-	chromdata = f.read(2*cw*ch)
-	rectzoom(pf*chrompack*mf,pf*chrompack*mf)
-	pixmode(PM_SIZE,16)
-	writemask(0x7ff - ((1<<ybits)-1))
-	lrectwrite(0,0,cw-1,ch-1,chromdata)
-	writemask((1<<ybits)-1)
-	pixmode(PM_SIZE,8)
-    if pf:
-    	rectzoom(pf*mf, pf*mf)
-    elif mf <> 1:
-	rectzoom(mf,mf)
-    lrectwrite(0,0,w-1,h-1,data)
-    # This is ugly here, but the only way to get the two
-    # channels started in sync
-    #if af <> None:
-    #	playsound(af,spkr)
-    ct = time.millitimer() - epoch.epoch
-    if epoch.correcttiming and tijd > 0 and ct < tijd:
-    	time.millisleep(tijd-ct)
-    #swapbuffers()
-    return tijd
-
-def initcmap(ybits,ibits,qbits,chrompack):
-    if ybits+ibits+qbits > 11:
-	raise 'Sorry, 11 bits max'
-    maxy = pow(2,ybits)
-    maxi = pow(2,ibits)
-    maxq = pow(2,qbits)
-    for i in range(2048,4096-256):
-	mapcolor(i, 0, 255, 0)
-    for y in range(maxy):
-      yv = float(y)/float(maxy-1)
-      for i in range(maxi):
-      	if maxi == 1: iv = 0
-	else: iv = (float(i)/float(maxi-1))-0.5
-	for q in range(maxq):
-	  if maxq == 1: qv = 0
-	  else: qv = (float(q)/float(maxq-1))-0.5
-	  index = 2048 + y + (i << ybits) + (q << (ybits+ibits))
-	  rv,gv,bv = colorsys.yiq_to_rgb(yv,iv,qv)
-	  r,g,b = int(rv*255.0), int(gv*255.0), int(bv*255.0)
-	  if index < 4096 - 256:
-	      mapcolor(index, r,g,b)
-
-def playsound(af, spkr):
-    nsamp = spkr.getfillable()
-    data = af.read(nsamp*2)
-    spkr.writesamps(data)
-
-def main():
-	looping = 0
-	packfactor = 0
-	magfactor = 1
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'm:p:lF')
-	except getopt.error:
-		sys.stderr.write('usage: video ' + \
-	'[-l] [-p pf] [-m mag] [-F] [moviefile [soundfile [skipbytes]]]\n')
-		sys.exit(2)
-	for opt, arg in opts:
-		if opt == '-m':
-			magfactor = int(eval(arg))
-		elif opt == '-p':
-			packfactor = int(eval(arg))
-		elif opt == '-l':
-			looping = 1
-		elif opt == '-F':
-			epoch.correcttiming = 0
-	if args:
-		filename = args[0]
-	else:
-		filename = 'film.video'
-	f, w, h, pf, cinfo = openvideo(filename)
-	if 0 < packfactor <> pf:
-		w = w/pf*packfactor
-		h = h/pf*packfactor
-		pf = packfactor
-	if args[1:]:
-		audiofilename = args[1]
-		af = open(audiofilename, 'r')
-		spkr = openspkr()
-		afskip = 0
-		if args[2:]:
-			afskip = eval(args[2])
-		af.seek(afskip)
-	else:
-		af, spkr = None, None
-	foreground()
-	prefsize(w*magfactor,h*magfactor)
-	win = winopen(filename)
-	if pf:
-	    #doublebuffer()
-	    cmode()
-	else:
-	    RGBmode()
-	#doublebuffer()
-	gconfig()
-	if pf:
-	    initcmap(cinfo)
-	    color(2048)
-	    clear()
-	    writemask(2047)
-	    pixmode(PM_SIZE,8)	# 8 bit pixels
-	qdevice(ESCKEY)
-	qdevice(WINSHUT)
-	qdevice(WINQUIT)
-	running = 1
-	epoch.epoch = time.millitimer()
-	nframe = 0
-	tijd = 1
-	if looping:
-		looping = f.tell()
-	try:
-	    while 1:
-		if running:
-		    try:
-			tijd = loadframe(f, w, h, pf, af, spkr, cinfo,magfactor)
-			nframe = nframe + 1
-		    except EndOfFile:
-			running = 0
-			t = time.millitimer()
-			if tijd > 0:
-				print 'Recorded at',
-				print 0.1 * int(nframe * 10000.0 / tijd),
-				print 'frames/sec'
-			print 'Played', nframe, 'frames at',
-			print 0.1 * int(nframe * 10000.0 / (t-epoch.epoch)),
-			print 'frames/sec'
-			if looping:
-				f.seek(looping)
-				epoch.epoch = time.millitimer()
-				nframe = 0
-				running = 1
-				if af <> None:
-					af.seek(afskip)
-		if af <> None:
-			playsound(af,spkr)
-		if not running or qtest():
-		    dev, val = qread()
-		    if dev in (ESCKEY, WINSHUT, WINQUIT):
-			raise bye
-		    elif dev == REDRAW:
-		    	reshapeviewport()
-	except bye:
-	    pass
-
-main()
diff --git a/Demo/sgi/video/vpregs.py b/Demo/sgi/video/vpregs.py
deleted file mode 100755
index d33f1fe..0000000
--- a/Demo/sgi/video/vpregs.py
+++ /dev/null
@@ -1,28 +0,0 @@
-VID_VP = 0x1000000
-
-# Set vp1 register tokens
-VP_GBXORG =       		(VID_VP +0x01)
-VP_GBYORG =       		(VID_VP +0x02)
-VP_FBXORG =       		(VID_VP +0x03)
-VP_FBYORG =       		(VID_VP +0x04)
-VP_WIDTH =        		(VID_VP +0x05)
-VP_HEIGHT =       		(VID_VP +0x06)
-VP_PIXCNT =      		(VID_VP +0x07)
-VP_HBLANK =       		(VID_VP +0x08)
-VP_VBLANK =      		(VID_VP +0x09)
-VP_BRITE =      		(VID_VP +0x0A)
-VP_CONT =      			(VID_VP +0x0B)
-VP_HUE =      			(VID_VP +0x0C)
-VP_SAT =      			(VID_VP +0x0D)
-VP_ALPHA =      		(VID_VP +0X0E)
-VP_FGMODE =      		(VID_VP +0x0F)
-VP_MAPSRC =      		(VID_VP +0x10)
-VP_MAPADD =      		(VID_VP +0x11)
-VP_MAPRED =      		(VID_VP +0x12)
-VP_MAPGREEN =      		(VID_VP +0x13)
-VP_MAPBLUE =      		(VID_VP +0x14)
-VP_MAPSTROBE =      		(VID_VP +0x15)
-VP_DIGVAL =      		(VID_VP +0x16)
-VP_STATUS0 =      		(VID_VP +0x17)
-VP_STATUS1 =      		(VID_VP +0x18)
-VP_CMD =      			(VID_VP +0x19)
diff --git a/Lib/builtin.py b/Lib/builtin.py
deleted file mode 100755
index 710d825..0000000
--- a/Lib/builtin.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# B/W compat hack so code that says "import builtin" won't break after
-# name change from builtin to __builtin__.
-from __builtin__ import *
diff --git a/Lib/macstat.py b/Lib/macstat.py
deleted file mode 100755
index 4b53953..0000000
--- a/Lib/macstat.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# Module 'stat'
-#
-# Defines constants and functions for interpreting stat/lstat struct
-# as returned by os.stat() and os.lstat() (if it exists).
-#
-# Suggested usage: from stat import *
-#
-# XXX Strictly spoken, this module may have to be adapted for each POSIX
-# implementation; in practice, however, the numeric constants used by
-# stat() are almost universal (even for stat() emulations on non-UNIX
-# systems like MS-DOS).
-
-# Indices for stat struct members in tuple returned by os.stat()
-
-ST_MODE  = 0
-ST_INO   = 1
-ST_DEV   = 2
-ST_NLINK = 3
-ST_UID   = 4
-ST_GID   = 5
-ST_SIZE  = 6
-ST_ATIME = 7
-ST_MTIME = 8
-ST_CTIME = 9
-
-# Extract bits from the mode
-
-def S_IMODE(mode):
-	return 0
-
-def S_IFMT(mode):
-	return mode & 0xFFFF
-
-# Constants used as S_IFMT() for various file types
-# (not all are implemented on all systems)
-
-S_IFDIR  = 0x0000
-S_IFREG  = 0x0003
-
-# Functions to test for each file type
-
-def S_ISDIR(mode):
-	return S_IFMT(mode) == S_IFDIR
-
-def S_ISCHR(mode):
-	return 0
-
-def S_ISBLK(mode):
-	return 0
-
-def S_ISREG(mode):
-	return S_IFMT(mode) == S_IFREG
-
-def S_ISFIFO(mode):
-	return 0
-
-def S_ISLNK(mode):
-	return 0
-
-def S_ISSOCK(mode):
-	return 0
-
-# Names for permission bits
-
-S_ISUID = 04000
-S_ISGID = 02000
-S_ENFMT = S_ISGID
-S_ISVTX = 01000
-S_IREAD = 00400
-S_IWRITE = 00200
-S_IEXEC = 00100
-S_IRWXU = 00700
-S_IRUSR = 00400
-S_IWUSR = 00200
-S_IXUSR = 00100
-S_IRWXG = 00070
-S_IRGRP = 00040
-S_IWGRP = 00020
-S_IXGRP = 00010
-S_IRWXO = 00007
-S_IROTH = 00004
-S_IWOTH = 00002
-S_IXOTH = 00001
diff --git a/Lib/persist.py b/Lib/persist.py
deleted file mode 100755
index 8f0f164..0000000
--- a/Lib/persist.py
+++ /dev/null
@@ -1,297 +0,0 @@
-# persist.py
-#
-# Implement limited persistence.
-#
-# Simple interface:
-#	persist.save()		save __main__ module on file (overwrite)
-#	persist.load()		load __main__ module from file (merge)
-#
-# These use the filename persist.defaultfile, initialized to 'wsrestore.py'.
-#
-# A raw interface also exists:
-#	persist.writedict(dict, fp)	save dictionary to open file
-#	persist.readdict(dict, fp)	read (merge) dictionary from open file
-#
-# Internally, the function dump() and a whole bunch of support of functions
-# traverse a graph of objects and print them in a restorable form
-# (which happens to be a Python module).
-#
-# XXX Limitations:
-# - Volatile objects are dumped as strings:
-#   - open files, windows etc.
-# - Other 'obscure' objects are dumped as strings:
-#   - classes, instances and methods
-#   - compiled regular expressions
-#   - anything else reasonably obscure (e.g., capabilities)
-#   - type objects for obscure objects
-# - It's slow when there are many of lists or dictionaries
-#   (This could be fixed if there were a quick way to compute a hash
-#   function of any object, even if recursive)
-
-defaultfile = 'wsrestore.py'
-
-def save():
-	import __main__
-	import os
-	# XXX On SYSV, if len(defaultfile) >= 14, this is wrong!
-	backup = defaultfile + '~'
-	try:
-		os.unlink(backup)
-	except os.error:
-		pass
-	try:
-		os.rename(defaultfile, backup)
-	except os.error:
-		pass
-	fp = open(defaultfile, 'w')
-	writedict(__main__.__dict__, fp)
-	fp.close()
-
-def load():
-	import __main__
-	fp = open(defaultfile, 'r')
-	readdict(__main__.__dict__, fp)
-
-def writedict(dict, fp):
-	import sys
-	savestdout = sys.stdout
-	try:
-		sys.stdout = fp
-		dump(dict)	# Writes to sys.stdout
-	finally:
-		sys.stdout = savestdout
-
-def readdict(dict, fp):
-	contents = fp.read()
-	globals = {}
-	exec(contents, globals)
-	top = globals['top']
-	for key in top.keys():
-		if dict.has_key(key):
-			print 'warning:', key, 'not overwritten'
-		else:
-			dict[key] = top[key]
-
-
-# Function dump(x) prints (on sys.stdout!) a sequence of Python statements
-# that, when executed in an empty environment, will reconstruct the
-# contents of an arbitrary dictionary.
-
-import sys
-
-# Name used for objects dict on output.
-#
-FUNNYNAME = FN = 'A'
-
-# Top-level function.  Call with the object you want to dump.
-#
-def dump(x):
-	types = {}
-	stack = []			# Used by test for recursive objects
-	print FN, '= {}'
-	topuid = dumpobject(x, types, stack)
-	print 'top =', FN, '[', `topuid`, ']'
-
-# Generic function to dump any object.
-#
-dumpswitch = {}
-#
-def dumpobject(x, types, stack):
-	typerepr = `type(x)`
-	if not types.has_key(typerepr):
-		types[typerepr] = {}
-	typedict = types[typerepr]
-	if dumpswitch.has_key(typerepr):
-		return dumpswitch[typerepr](x, typedict, types, stack)
-	else:
-		return dumpbadvalue(x, typedict, types, stack)
-
-# Generic function to dump unknown values.
-# This assumes that the Python interpreter prints such values as
-# <foo object at xxxxxxxx>.
-# The object will be read back as a string: '<foo object at xxxxxxxx>'.
-# In some cases it may be possible to fix the dump manually;
-# to ease the editing, these cases are labeled with an XXX comment.
-#
-def dumpbadvalue(x, typedict, types, stack):
-	xrepr = `x`
-	if typedict.has_key(xrepr):
-		return typedict[xrepr]
-	uid = genuid()
-	typedict[xrepr] = uid
-	print FN, '[', `uid`, '] =', `xrepr`, '# XXX'
-	return uid
-
-# Generic function to dump pure, simple values, except strings
-#
-def dumpvalue(x, typedict, types, stack):
-	xrepr = `x`
-	if typedict.has_key(xrepr):
-		return typedict[xrepr]
-	uid = genuid()
-	typedict[xrepr] = uid
-	print FN, '[', `uid`, '] =', `x`
-	return uid
-
-# Functions to dump string objects
-#
-def dumpstring(x, typedict, types, stack):
-	# XXX This can break if strings have embedded '\0' bytes
-	# XXX because of a bug in the dictionary module
-	if typedict.has_key(x):
-		return typedict[x]
-	uid = genuid()
-	typedict[x] = uid
-	print FN, '[', `uid`, '] =', `x`
-	return uid
-
-# Function to dump type objects
-#
-typeswitch = {}
-class some_class:
-	def method(self): pass
-some_instance = some_class()
-#
-def dumptype(x, typedict, types, stack):
-	xrepr = `x`
-	if typedict.has_key(xrepr):
-		return typedict[xrepr]
-	uid = genuid()
-	typedict[xrepr] = uid
-	if typeswitch.has_key(xrepr):
-		print FN, '[', `uid`, '] =', typeswitch[xrepr]
-	elif x == type(sys):
-		print 'import sys'
-		print FN, '[', `uid`, '] = type(sys)'
-	elif x == type(sys.stderr):
-		print 'import sys'
-		print FN, '[', `uid`, '] = type(sys.stderr)'
-	elif x == type(dumptype):
-		print 'def some_function(): pass'
-		print FN, '[', `uid`, '] = type(some_function)'
-	elif x == type(some_class):
-		print 'class some_class: pass'
-		print FN, '[', `uid`, '] = type(some_class)'
-	elif x == type(some_instance):
-		print 'class another_class: pass'
-		print 'some_instance = another_class()'
-		print FN, '[', `uid`, '] = type(some_instance)'
-	elif x == type(some_instance.method):
-		print 'class yet_another_class:'
-		print '    def method(): pass'
-		print 'another_instance = yet_another_class()'
-		print FN, '[', `uid`, '] = type(another_instance.method)'
-	else:
-		# Unknown type
-		print FN, '[', `uid`, '] =', `xrepr`, '# XXX'
-	return uid
-
-# Initialize the typeswitch
-#
-for x in None, 0, 0.0, '', (), [], {}:
-	typeswitch[`type(x)`] = 'type(' + `x` + ')'
-for s in 'type(0)', 'abs', '[].append':
-	typeswitch[`type(eval(s))`] = 'type(' + s + ')'
-
-# Dump a tuple object
-#
-def dumptuple(x, typedict, types, stack):
-	item_uids = []
-	xrepr = ''
-	for item in x:
-		item_uid = dumpobject(item, types, stack)
-		item_uids.append(item_uid)
-		xrepr = xrepr + ' ' + item_uid
-	del stack[-1:]
-	if typedict.has_key(xrepr):
-		return typedict[xrepr]
-	uid = genuid()
-	typedict[xrepr] = uid
-	print FN, '[', `uid`, '] = (',
-	for item_uid in item_uids:
-		print FN, '[', `item_uid`, '],',
-	print ')'
-	return uid
-
-# Dump a list object
-#
-def dumplist(x, typedict, types, stack):
-	# Check for recursion
-	for x1, uid1 in stack:
-		if x is x1: return uid1
-	# Check for occurrence elsewhere in the typedict
-	for uid1 in typedict.keys():
-		if x is typedict[uid1]: return uid1
-	# This uses typedict differently!
-	uid = genuid()
-	typedict[uid] = x
-	print FN, '[', `uid`, '] = []'
-	stack.append(x, uid)
-	item_uids = []
-	for item in x:
-		item_uid = dumpobject(item, types, stack)
-		item_uids.append(item_uid)
-	del stack[-1:]
-	for item_uid in item_uids:
-		print FN, '[', `uid`, '].append(', FN, '[', `item_uid`, '])'
-	return uid
-
-# Dump a dictionary object
-#
-def dumpdict(x, typedict, types, stack):
-	# Check for recursion
-	for x1, uid1 in stack:
-		if x is x1: return uid1
-	# Check for occurrence elsewhere in the typedict
-	for uid1 in typedict.keys():
-		if x is typedict[uid1]: return uid1
-	# This uses typedict differently!
-	uid = genuid()
-	typedict[uid] = x
-	print FN, '[', `uid`, '] = {}'
-	stack.append(x, uid)
-	item_uids = []
-	for key in x.keys():
-		val_uid = dumpobject(x[key], types, stack)
-		item_uids.append(key, val_uid)
-	del stack[-1:]
-	for key, val_uid in item_uids:
-		print FN, '[', `uid`, '][', `key`, '] =',
-		print FN, '[', `val_uid`, ']'
-	return uid
-
-# Dump a module object
-#
-def dumpmodule(x, typedict, types, stack):
-	xrepr = `x`
-	if typedict.has_key(xrepr):
-		return typedict[xrepr]
-	from string import split
-	# `x` has the form <module 'foo'>
-	name = xrepr[9:-2]
-	uid = genuid()
-	typedict[xrepr] = uid
-	print 'import', name
-	print FN, '[', `uid`, '] =', name
-	return uid
-
-
-# Initialize dumpswitch, a table of functions to dump various objects,
-# indexed by `type(x)`.
-#
-for x in None, 0, 0.0:
-	dumpswitch[`type(x)`] = dumpvalue
-for x, f in ('', dumpstring), (type(0), dumptype), ((), dumptuple), \
-		([], dumplist), ({}, dumpdict), (sys, dumpmodule):
-	dumpswitch[`type(x)`] = f
-
-
-# Generate the next unique id; a string consisting of digits.
-# The seed is stored as seed[0].
-#
-seed = [0]
-#
-def genuid():
-	x = seed[0]
-	seed[0] = seed[0] + 1
-	return `x`
diff --git a/Python/pythonmain.c b/Python/pythonmain.c
deleted file mode 100644
index 000a3d7..0000000
--- a/Python/pythonmain.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/***********************************************************
-Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam,
-The Netherlands.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the names of Stichting Mathematisch
-Centrum or CWI not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior permission.
-
-STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
-THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
-FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
-OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-******************************************************************/
-
-/* Python interpreter main program */
-
-#include "allobjects.h"
-
-extern int debugging; /* Needed in parser.c, declared in pythonrun.c */
-extern int verbose; /* Needed in import.c, declared in pythonrun.c */
-extern int suppress_print; /* Needed in ceval.c, declared in pythonrun.c */
-
-/* Interface to getopt(): */
-extern int optind;
-extern char *optarg;
-extern int getopt(); /* PROTO((int, char **, char *)); -- not standardized */
-
-extern char *getenv();
-
-extern char *getversion();
-extern char *getcopyright();
-
-int
-realmain(argc, argv)
-	int argc;
-	char **argv;
-{
-	int c;
-	int sts;
-	char *command = NULL;
-	char *filename = NULL;
-	FILE *fp = stdin;
-	char *p;
-	int inspect = 0;
-	int unbuffered = 0;
-
-	if ((p = getenv("PYTHONDEBUG")) && *p != '\0')
-		debugging = 1;
-	if ((p = getenv("PYTHONSUPPRESS")) && *p != '\0')
-		suppress_print = 1;
-	if ((p = getenv("PYTHONVERBOSE")) && *p != '\0')
-		verbose = 1;
-	if ((p = getenv("PYTHONINSPECT")) && *p != '\0')
-		inspect = 1;
-	if ((p = getenv("PYTHONUNBUFFERED")) && *p != '\0')
-		unbuffered = 1;
-
-#ifdef macintosh
-	PyMac_InteractiveOptions(&inspect, &verbose, &suppress_print, &unbuffered, &debugging);
-#endif
-
-	while ((c = getopt(argc, argv, "c:disuv")) != EOF) {
-		if (c == 'c') {
-			/* -c is the last option; following arguments
-			   that look like options are left for the
-			   the command to interpret. */
-			command = malloc(strlen(optarg) + 2);
-			if (command == NULL)
-				fatal("not enough memory to copy -c argument");
-			strcpy(command, optarg);
-			strcat(command, "\n");
-			break;
-		}
-		
-		switch (c) {
-
-		case 'd':
-			debugging++;
-			break;
-
-		case 'i':
-			inspect++;
-			break;
-
-		case 's':
-			suppress_print++;
-			break;
-
-		case 'u':
-			unbuffered++;
-			break;
-
-		case 'v':
-			verbose++;
-			break;
-
-		/* This space reserved for other options */
-
-		default:
-			fprintf(stderr,
-"usage: %s [-d] [-i] [-s] [-u ] [-v] [-c cmd | file | -] [arg] ...\n",
-				argv[0]);
-#if !(defined(__CFM68K__) && defined(__MWERKS__))
-			/* Mwerks cfm68k linker doesn't like these... */
-			fprintf(stderr, "\
-\n\
-Options and arguments (and corresponding environment variables):\n\
--d     : debug output from parser (also PYTHONDEBUG=x)\n\
--i     : inspect interactively after running script (also PYTHONINSPECT=x)\n\
--s     : suppress the printing of top level expressions (also PYTHONSUPPRESS=x)\n\
--u     : unbuffered stdout and stderr (also PYTHONUNBUFFERED=x)\n\
--v     : verbose (trace import statements) (also PYTHONVERBOSE=x)\n\
--c cmd : program passed in as string (terminates option list)\n\
-");
-			/* ANSI does not allow strings > 512 chars
-			   and MPW doesn't like it either -- so split it! */
-			fprintf(stderr, "\
-file   : program read from script file\n\
--      : program read from stdin (default; interactive mode if a tty)\n\
-arg ...: arguments passed to program in sys.argv[1:]\n\
-\n\
-Other environment variables:\n\
-PYTHONSTARTUP: file executed on interactive startup (no default)\n\
-PYTHONPATH   : colon-separated list of directories prefixed to the\n\
-               default module search path.  The result is sys.path.\n\
-");
-#endif /* !cfm68k || !mwerks */
-			exit(2);
-			/*NOTREACHED*/
-
-		}
-	}
-
-	if (unbuffered) {
-#ifndef MPW
-		setbuf(stdout, (char *)NULL);
-		setbuf(stderr, (char *)NULL);
-#else
-		/* On MPW (3.2) unbuffered seems to hang */
-		setvbuf(stdout, (char *)NULL, _IOLBF, BUFSIZ);
-		setvbuf(stderr, (char *)NULL, _IOLBF, BUFSIZ);
-#endif
-	}
-
-	if (command == NULL && optind < argc && strcmp(argv[optind], "-") != 0)
-		filename = argv[optind];
-
-	if (verbose ||
-	    command == NULL && filename == NULL && isatty((int)fileno(fp)))
-		fprintf(stderr, "Python %s\n%s\n",
-			getversion(), getcopyright());
-	
-	if (filename != NULL) {
-		if ((fp = fopen(filename, "r")) == NULL) {
-			fprintf(stderr, "%s: can't open file '%s'\n",
-				argv[0], filename);
-			exit(2);
-		}
-	}
-	
-	initall();
-	
-	if (command != NULL) {
-		/* Backup optind and force sys.argv[0] = '-c' */
-		optind--;
-		argv[optind] = "-c";
-	}
-
-	setpythonargv(argc-optind, argv+optind);
-
-	if (command) {
-		sts = run_command(command) != 0;
-	}
-	else {
-		if (filename == NULL && isatty((int)fileno(fp))) {
-			char *startup = getenv("PYTHONSTARTUP");
-#ifdef macintosh
-			if (startup == NULL)
-				startup = "PythonStartup";
-#endif
-			if (startup != NULL && startup[0] != '\0') {
-				FILE *fp = fopen(startup, "r");
-				if (fp != NULL) {
-					(void) run_script(fp, startup);
-					err_clear();
-					fclose(fp);
-				}
-			}
-		}
-		sts = run(fp, filename == NULL ? "<stdin>" : filename) != 0;
-		if (filename != NULL)
-			fclose(fp);
-	}
-
-	if (inspect && isatty((int)fileno(stdin)) &&
-	    (filename != NULL || command != NULL))
-		sts = run(stdin, "<stdin>") != 0;
-
-	goaway(sts);
-	/*NOTREACHED*/
-}