Initial revision
diff --git a/Demo/sgi/cd/playcd.py b/Demo/sgi/cd/playcd.py
new file mode 100755
index 0000000..8b24581
--- /dev/null
+++ b/Demo/sgi/cd/playcd.py
@@ -0,0 +1,71 @@
+# Read CD audio data from the SCSI bus and play it back over the
+# built-in speaker or audio jack.
+
+import al
+import AL
+import cd
+import CD
+
+def playaudio(port, type, audio):
+##	print 'playaudio'
+	port.writesamps(audio)
+
+callbacks = ['audio', 'pnum', 'index', 'ptime', 'atime', 'catalog', 'ident', 'control']
+
+def callback(port, type, data):
+	print 'type', callbacks[type], 'data', `data`
+
+def main():
+	player = cd.open()
+	parser = cd.createparser()
+
+	state, track, min, sec, frame, abs_min, abs_sec, abs_frame, \
+		  total_min, total_sec, total_frame, first, last, scsi_audio, \
+		  cur_block, dum1, dum2, dum3 = player.getstatus()
+	print `state, track, min, sec, frame, abs_min, abs_sec, abs_frame, \
+		  total_min, total_sec, total_frame, first, last, scsi_audio, \
+		  cur_block, dum1, dum2, dum3`
+
+	if state <> CD.READY:
+		player.close()
+		raise 'playcd.Error', 'CD not ready'
+	if not scsi_audio:
+		player.close()
+		raise 'playcd.Error', 'not an audio-capable CD-ROM player'
+
+	for i in range(first, last+1):
+		trackinfo = player.gettrackinfo(i)
+		print `trackinfo`
+
+	size = player.bestreadsize()
+
+	try:
+		oldparams = [AL.OUTPUT_RATE, 0]
+		params = oldparams[:]
+		al.getparams(AL.DEFAULT_DEVICE, oldparams)
+		params[1] = AL.RATE_44100
+		al.setparams(AL.DEFAULT_DEVICE, params)
+		config = al.newconfig()
+		config.setwidth(AL.SAMPLE_16)
+		config.setchannels(AL.STEREO)
+		port = al.openport('CD Player', 'w', config)
+
+		parser.setcallback(CD.AUDIO, playaudio, port)
+		for i in range(1, 8):
+			parser.setcallback(i, callback, port)
+		parser.removecallback(CD.ATIME)
+		parser.removecallback(CD.PTIME)
+
+		while 1:
+			frames = player.readda(size)
+			if frames == '':
+				break
+			parser.parseframe(frames)
+	except KeyboardInterrupt:
+		pass
+
+	al.setparams(AL.DEFAULT_DEVICE, oldparams)
+	player.close()
+	parser.deleteparser()
+
+main()