Add comments and options
diff --git a/Demo/sgi/video/Vinfo.py b/Demo/sgi/video/Vinfo.py
index 3293e41..2aec803 100755
--- a/Demo/sgi/video/Vinfo.py
+++ b/Demo/sgi/video/Vinfo.py
@@ -1,12 +1,53 @@
+#! /usr/local/python
+
+# Print some info about a CMIF movie file
+
+
+# Usage:
+#
+# Vinfo [-d] [-q] [-s] [file] ...
+
+
+# Options:
+#
+# -d       : print deltas between frames instead of frame times
+# -q       : quick: don't read the frames
+# -s       : don't print times (but do count frames and print the total)
+# file ... : file(s) to inspect; default film.video
+
+
 import sys
+sys.path.append('/ufs/guido/src/video')
 import VFile
+import getopt
+
+
+# Global options
+
+short = 0
+quick = 0
+diffs = 0
+
+
+# Main program -- mostly command line parsing
 
 def main():
-	if sys.argv[1:]:
-		for filename in sys.argv[1:]:
-			process(filename)
-	else:
-		process('film.video')
+	global short, quick, diffs
+	opts, args = getopt.getopt(sys.argv[1:], 'dqs')
+	for opt, arg in opts:
+		if opt == '-q':
+			quick = 1
+		elif opt == '-d':
+			diffs = 1
+		elif opt == '-s':
+			short = 1
+	if not args:
+		args = ['film.video']
+	for filename in args:
+		process(filename)
+
+
+# Process one file
 
 def process(filename):
 	vin = VFile.VinFile().init(filename)
@@ -17,22 +58,37 @@
 	print 'Bits:    ', vin.c0bits, vin.c1bits, vin.c2bits
 	print 'Format:  ', vin.format
 	print 'Offset:  ', vin.offset
-	print 'Frame times:',
+	if quick:
+		vin.close()
+		return
+	if not short:
+		print 'Frame times:',
 	n = 0
 	t = 0
+	told = 0
 	while 1:
 		try:
 			t, data, cdata = vin.getnextframe()
 		except EOFError:
-			print
+			if not short:
+				print
 			break
-		if n%8 == 0:
-			sys.stdout.write('\n')
-		sys.stdout.write('\t' + `t`)
+		if not short:
+			if n%8 == 0:
+				sys.stdout.write('\n')
+			if delta:
+				sys.stdout.write('\t' + `t - told`)
+				told = t
+			else:
+				sys.stdout.write('\t' + `t`)
 		n = n+1
 	print 'Total', n, 'frames in', t*0.001, 'sec.',
 	if t:
 		print '-- average', int(n*10000.0/t)*0.1, 'frames/sec',
 	print
+	vin.close()
+
+
+# Don't forget to call the main program
 
 main()
diff --git a/Demo/sgi/video/Vplay.py b/Demo/sgi/video/Vplay.py
index 1b9c80c..ce82b68 100755
--- a/Demo/sgi/video/Vplay.py
+++ b/Demo/sgi/video/Vplay.py
@@ -1,15 +1,63 @@
+#! /usr/local/python
+
+# Play CMIF movie files
+
+
+# Usage:
+#
+# Vplay [-l] [-m maginfy] [file] ...
+
+
+# Options:
+#
+# -l         : loop, playing the movie over and over again
+# -m magnify : magnify the image by the given factor
+# file ...   : file(s) to play; default film.video
+
+
+# User interface:
+#
+# Place the windo where you want it.  The size is determined by the
+# movie file and the -m option.
+#
+# Press ESC or select the window manager Quit or Close window option
+# to close a window; if more files are given the window for the next
+# file now pops up.
+
+
 import sys
+sys.path.append('/ufs/guido/src/video')
 import VFile
 import time
 import gl, GL
 from DEVICE import *
+import getopt
+import string
+
+
+# Global options
+
+magnify = 1
+looping = 0
+
+
+# Main program -- mostly command line parsing
 
 def main():
-	if sys.argv[1:]:
-		for filename in sys.argv[1:]:
-			process(filename)
-	else:
-		process('film.video')
+	global magnify, looping
+	opts, args = getopt.getopt(sys.argv[1:], 'lm:')
+	for opt, arg in opts:
+		if opt == '-l':
+			looping = 1
+		elif opt == '-m':
+			magnify = string.atoi(arg)
+	if not args:
+		args = ['film.video']
+	for filename in args:
+		process(filename)
+
+
+# Process one file
 
 def process(filename):
 	vin = VFile.VinFile().init(filename)
@@ -20,9 +68,10 @@
 	print 'Bits:    ', vin.c0bits, vin.c1bits, vin.c2bits
 	print 'Format:  ', vin.format
 	print 'Offset:  ', vin.offset
+	vin.magnify = magnify
 	
 	gl.foreground()
-	gl.prefsize(vin.width, vin.height)
+	gl.prefsize(vin.width * magnify, vin.height * magnify)
 	win = gl.winopen('* ' + filename)
 	vin.initcolormap()
 
@@ -33,25 +82,53 @@
 	t0 = time.millitimer()
 	running = 1
 	data = None
+	t = 0
+	n = 0
 	while 1:
 		if running:
 			try:
 				t, data, chromdata = vin.getnextframe()
+				n = n+1
 			except EOFError:
-				running = 0
+				t1 = time.millitimer()
 				gl.wintitle(filename)
+				print 'Recorded:', n,
+				print 'frames in', t*0.001, 'sec.',
+				if t:
+					print '-- average',
+					print int(n*10000.0/t)*0.1,
+					print 'frames/sec',
+				print
+				t = t1-t0
+				print 'Played:', n,
+				print 'frames in', t*0.001, 'sec.',
+				if t:
+					print '-- average',
+					print int(n*10000.0/t)*0.1,
+					print 'frames/sec',
+				print
+				if looping and n > 0:
+					vin.rewind()
+					vin.magnify = magnify
+					continue
+				else:
+					running = 0
 		if running:
 			dt = t + t0 - time.millitimer()
 			if dt > 0:
 				time.millisleep(dt)
-				vin.showframe(data, chromdata)
+			vin.showframe(data, chromdata)
 		if not running or gl.qtest():
 			dev, val = gl.qread()
 			if dev in (ESCKEY, WINSHUT, WINQUIT):
+				gl.winclose(win)
 				break
 			if dev == REDRAW:
 				gl.reshapeviewport()
 				if data:
 					vin.showframe(data, chromdata)
 
+
+# Don't forget to call the main program
+
 main()