Implemented support for CDDB_PATH and CDDB_WRITE_DIR environment
variables.
Added auxiliary routine tochash to convert a table-of-contents to a
hashed toc.
diff --git a/Lib/irix5/cddb.py b/Lib/irix5/cddb.py
index fa03ed3..c233b51 100755
--- a/Lib/irix5/cddb.py
+++ b/Lib/irix5/cddb.py
@@ -14,9 +14,9 @@
 # You can then use c.write() to write out the changed values to the
 # .cdplayerrc file.
 
-import string
+import string, posix
 
-_cddbrc = '.cddb/'
+_cddbrc = '.cddb'
 _DB_ID_NTRACKS = 5
 _dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
 def _dbid(v):
@@ -25,8 +25,43 @@
 	else:
 		return _dbid_map[v]
 
+def tochash(toc):
+	if type(toc) == type(''):
+		tracklist = []
+		for i in range(2, len(toc), 4):
+			tracklist.append((None,
+				  (string.atoi(toc[i:i+2]),
+				   string.atoi(toc[i+2:i+4]))))
+	else:
+		tracklist = toc
+	ntracks = len(tracklist)
+	hash = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
+	if ntracks <= _DB_ID_NTRACKS:
+		nidtracks = ntracks
+	else:
+		nidtracks = _DB_ID_NTRACKS - 1
+		min = 0
+		sec = 0
+		for track in tracklist:
+			start, length = track
+			min = min + length[0]
+			sec = sec + length[1]
+		min = min + sec / 60
+		sec = sec % 60
+		hash = hash + _dbid(min) + _dbid(sec)
+	for i in range(nidtracks):
+		start, length = tracklist[i]
+		hash = hash + _dbid(length[0]) + _dbid(length[1])
+	return hash
+	
 class Cddb:
 	def init(self, tracklist):
+		if posix.environ.has_key('CDDB_PATH'):
+			path = posix.environ['CDDB_PATH']
+			cddb_path = string.splitfields(path, ',')
+		else:
+			home = posix.environ['HOME']
+			cddb_path = [home + '/' + _cddbrc]
 		self.artist = ''
 		self.title = ''
 		if type(tracklist) == type(''):
@@ -60,11 +95,15 @@
 			start, length = track
 			self.toc = self.toc + string.zfill(length[0], 2) + \
 				  string.zfill(length[1], 2)
-		try:
-			import posix
-			file = posix.environ['HOME'] + '/' + _cddbrc + self.id + '.rdb'
-			f = open(file, 'r')
-		except IOError:
+		for dir in cddb_path:
+			file = dir + '/' + self.id + '.rdb'
+			try:
+				f = open(file, 'r')
+				self.file = file
+				break
+			except IOError:
+				pass
+		if not hasattr(self, 'file'):
 			return self
 		import regex
 		reg = regex.compile('^\\([^.]*\\)\\.\\([^:]*\\):\t\\(.*\\)')
@@ -93,7 +132,7 @@
 					print 'syntax error in ' + file
 					continue
 				if trackno > ntracks:
-					print 'track number ' + trackno + \
+					print 'track number ' + `trackno` + \
 						  ' in file ' + file + \
 						  ' out of range'
 					continue
@@ -102,8 +141,11 @@
 		return self
 
 	def write(self):
-		import posix
-		file = posix.environ['HOME'] + '/' + _cddbrc + self.id + '.rdb'
+		if posix.environ.has_key('CDDB_WRITE_DIR'):
+			dir = posix.environ['CDDB_WRITE_DIR']
+		else:
+			dir = posix.environ['HOME'] + '/' + _cddbrc
+		file = dir + '/' + self.id + '.rdb'
 		f = open(file, 'w')
 		f.write('album.title:\t' + self.title + '\n')
 		f.write('album.artist:\t' + self.artist + '\n')
diff --git a/Lib/plat-irix5/cddb.py b/Lib/plat-irix5/cddb.py
index fa03ed3..c233b51 100755
--- a/Lib/plat-irix5/cddb.py
+++ b/Lib/plat-irix5/cddb.py
@@ -14,9 +14,9 @@
 # You can then use c.write() to write out the changed values to the
 # .cdplayerrc file.
 
-import string
+import string, posix
 
-_cddbrc = '.cddb/'
+_cddbrc = '.cddb'
 _DB_ID_NTRACKS = 5
 _dbid_map = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ@_=+abcdefghijklmnopqrstuvwxyz'
 def _dbid(v):
@@ -25,8 +25,43 @@
 	else:
 		return _dbid_map[v]
 
+def tochash(toc):
+	if type(toc) == type(''):
+		tracklist = []
+		for i in range(2, len(toc), 4):
+			tracklist.append((None,
+				  (string.atoi(toc[i:i+2]),
+				   string.atoi(toc[i+2:i+4]))))
+	else:
+		tracklist = toc
+	ntracks = len(tracklist)
+	hash = _dbid((ntracks >> 4) & 0xF) + _dbid(ntracks & 0xF)
+	if ntracks <= _DB_ID_NTRACKS:
+		nidtracks = ntracks
+	else:
+		nidtracks = _DB_ID_NTRACKS - 1
+		min = 0
+		sec = 0
+		for track in tracklist:
+			start, length = track
+			min = min + length[0]
+			sec = sec + length[1]
+		min = min + sec / 60
+		sec = sec % 60
+		hash = hash + _dbid(min) + _dbid(sec)
+	for i in range(nidtracks):
+		start, length = tracklist[i]
+		hash = hash + _dbid(length[0]) + _dbid(length[1])
+	return hash
+	
 class Cddb:
 	def init(self, tracklist):
+		if posix.environ.has_key('CDDB_PATH'):
+			path = posix.environ['CDDB_PATH']
+			cddb_path = string.splitfields(path, ',')
+		else:
+			home = posix.environ['HOME']
+			cddb_path = [home + '/' + _cddbrc]
 		self.artist = ''
 		self.title = ''
 		if type(tracklist) == type(''):
@@ -60,11 +95,15 @@
 			start, length = track
 			self.toc = self.toc + string.zfill(length[0], 2) + \
 				  string.zfill(length[1], 2)
-		try:
-			import posix
-			file = posix.environ['HOME'] + '/' + _cddbrc + self.id + '.rdb'
-			f = open(file, 'r')
-		except IOError:
+		for dir in cddb_path:
+			file = dir + '/' + self.id + '.rdb'
+			try:
+				f = open(file, 'r')
+				self.file = file
+				break
+			except IOError:
+				pass
+		if not hasattr(self, 'file'):
 			return self
 		import regex
 		reg = regex.compile('^\\([^.]*\\)\\.\\([^:]*\\):\t\\(.*\\)')
@@ -93,7 +132,7 @@
 					print 'syntax error in ' + file
 					continue
 				if trackno > ntracks:
-					print 'track number ' + trackno + \
+					print 'track number ' + `trackno` + \
 						  ' in file ' + file + \
 						  ' out of range'
 					continue
@@ -102,8 +141,11 @@
 		return self
 
 	def write(self):
-		import posix
-		file = posix.environ['HOME'] + '/' + _cddbrc + self.id + '.rdb'
+		if posix.environ.has_key('CDDB_WRITE_DIR'):
+			dir = posix.environ['CDDB_WRITE_DIR']
+		else:
+			dir = posix.environ['HOME'] + '/' + _cddbrc
+		file = dir + '/' + self.id + '.rdb'
 		f = open(file, 'w')
 		f.write('album.title:\t' + self.title + '\n')
 		f.write('album.artist:\t' + self.artist + '\n')