diff --git a/Lib/plat-irix5/cdplayer.py b/Lib/plat-irix5/cdplayer.py
new file mode 100755
index 0000000..2839021
--- /dev/null
+++ b/Lib/plat-irix5/cdplayer.py
@@ -0,0 +1,83 @@
+# This file implements a class which forms an interface to the .cdplayerrc
+# file that is maintained by SGI's cdplayer program.
+#
+# Usage is as follows:
+#
+# import readcd
+# r = readcd.Readcd().init()
+# c = Cdplayer().init(r.gettrackinfo())
+#
+# Now you can use c.artist, c.title and c.track[trackno] (where trackno
+# starts at 1).  When the CD is not recognized, all values will be the empty
+# string.
+# It is also possible to set the above mentioned variables to new values.
+# You can then use c.write() to write out the changed values to the
+# .cdplayerrc file.
+
+cdplayerrc = '.cdplayerrc'
+
+class Cdplayer():
+	def init(self, tracklist):
+		import string
+		self.artist = ''
+		self.title = ''
+		self.track = [None] + [''] * len(tracklist)
+		self.id = 'd' + string.zfill(len(tracklist), 2)
+		for track in tracklist:
+			start, length = track
+			self.id = self.id + string.zfill(length[0], 2) + \
+				  string.zfill(length[1], 2)
+		try:
+			import posix
+			f = open(posix.environ['HOME'] + '/' + cdplayerrc, 'r')
+		except IOError:
+			return self
+		import regex
+		reg = regex.compile('^\\([^:]*\\):\t\\(.*\\)')
+		s = self.id + '.'
+		l = len(s)
+		while 1:
+			line = f.readline()
+			if line == '':
+				break
+			if line[:l] == s:
+				line = line[l:]
+				if reg.match(line) == -1:
+					print 'syntax error in ~/' + cdplayerrc
+					continue
+				name = line[reg.regs[1][0]:reg.regs[1][1]]
+				value = line[reg.regs[2][0]:reg.regs[2][1]]
+				if name == 'title':
+					self.title = value
+				elif name == 'artist':
+					self.artist = value
+				elif name[:5] == 'track':
+					trackno = string.atoi(name[6:])
+					self.track[trackno] = value
+		f.close()
+		return self
+
+	def write(self):
+		import posix
+		filename = posix.environ['HOME'] + '/' + cdplayerrc
+		try:
+			old = open(filename, 'r')
+		except IOError:
+			old = open('/dev/null', 'r')
+		new = open(filename + '.new', 'w')
+		s = self.id + '.'
+		l = len(s)
+		while 1:
+			line = old.readline()
+			if line == '':
+				break
+			if line[:l] <> s:
+				new.write(line)
+		new.write(self.id + '.title:\t' + self.title + '\n')
+		new.write(self.id + '.artist:\t' + self.artist + '\n')
+		for i in range(1, len(self.track)):
+			new.write(self.id + '.track.' + `i` + ':\t' + \
+				  self.track[i] + '\n')
+		old.close()
+		new.close()
+		posix.rename(filename + '.new', filename)
