Renamed vcopy to Vcopy (it is the only old tool that's still in use)
diff --git a/Demo/sgi/video/Vcopy.py b/Demo/sgi/video/Vcopy.py
new file mode 100755
index 0000000..f92dfdd
--- /dev/null
+++ b/Demo/sgi/video/Vcopy.py
@@ -0,0 +1,134 @@
+# Copy a video file, interactively, frame-by-frame.
+
+import sys
+import getopt
+from gl import *
+from DEVICE import *
+import VFile
+import string
+import imageop
+
+def report(time, iframe):
+	print 'Frame', iframe, ': t =', time
+
+def usage():
+	sys.stderr.write('usage: Vcopy [-t type] [-m treshold] [-a] infile outfile\n')
+	sys.stderr.write('-t Convert to other type\n')
+	sys.stderr.write('-a Automatic\n')
+	sys.stderr.write('-m Convert grey to mono with treshold\n')
+	sys.stderr.write('-d Convert grey to mono with dithering\n')
+	sys.exit(2)
+
+def help():
+	print 'Command summary:'
+	print 'n   get next image from input'
+	print 'w   write current image to output'
+
+def main():
+	foreground()
+	opts, args = getopt.getopt(sys.argv[1:], 't:am:d')
+	if len(args) <> 2:
+		usage()
+	[ifile, ofile] = args
+	print 'open film ', ifile
+	ifilm = VFile.VinFile().init(ifile)
+	print 'open output ', ofile
+	ofilm = VFile.VoutFile().init(ofile)
+	
+	ofilm.setinfo(ifilm.getinfo())
+
+	use_grabber = 0
+	continuous = 0
+	tomono = 0
+	tomonodither = 0
+	for o, a in opts:
+		if o == '-t':
+			ofilm.format = a
+			use_grabber = 1
+		if o == '-a':
+			continuous = 1
+		if o == '-m':
+			if ifilm.format <> 'grey':
+				print '-m only supported for greyscale'
+				sys.exit(1)
+			tomono = 1
+			treshold = string.atoi(a)
+			ofilm.format = 'mono'
+		if o == '-d':
+			if ifilm.format <> 'grey':
+				print '-m only supported for greyscale'
+				sys.exit(1)
+			tomonodither = 1
+			ofilm.format = 'mono'
+			
+	ofilm.writeheader()
+	#
+	prefsize(ifilm.width, ifilm.height)
+	w = winopen(ifile)
+	qdevice(KEYBD)
+	qdevice(ESCKEY)
+	qdevice(WINQUIT)
+	qdevice(WINSHUT)
+	print 'qdevice calls done'
+	#
+	help()
+	#
+	time, data, cdata = ifilm.getnextframe()
+	ifilm.showframe(data, cdata)
+	iframe = 1
+	report(time, iframe)
+	#
+	while 1:
+		if continuous:
+			dev = KEYBD
+		else:
+			dev, val = qread()
+		if dev in (ESCKEY, WINQUIT, WINSHUT):
+			break
+		if dev == REDRAW:
+			reshapeviewport()
+		elif dev == KEYBD:
+			if continuous:
+				c = '0'
+			else:
+				c = chr(val)
+			#XXX Debug
+			if c == 'R':
+				c3i(255,0,0)
+				clear()
+			if c == 'G':
+				c3i(0,255,0)
+				clear()
+			if c == 'B':
+				c3i(0,0,255)
+				clear()
+			if c == 'w' or continuous:
+				if use_grabber:
+					data, cdata = ofilm.grabframe()
+				if tomono:
+					data = imageop.grey2mono(data, \
+						  ifilm.width, ifilm.height, \
+						  treshold)
+				if tomonodither:
+					data = imageop.dither2mono(data, \
+						  ifilm.width, ifilm.height)
+				ofilm.writeframe(time, data, cdata)
+				print 'Frame', iframe, 'written.'
+			if c == 'n' or continuous:
+				try:
+					time,data,cdata = ifilm.getnextframe()
+					ifilm.showframe(data, cdata)
+					iframe = iframe+1
+					report(time, iframe)
+				except EOFError:
+					print 'EOF'
+					if continuous:
+						break
+					ringbell()
+		elif dev == INPUTCHANGE:
+			pass
+		else:
+			print '(dev, val) =', (dev, val)
+	ofilm.close()
+
+main()