renamed DbShelf->DbfilenameShelf;added BsdDbShelf (David Ely)
diff --git a/Lib/shelve.py b/Lib/shelve.py
index fcd52ec..18aa905 100644
--- a/Lib/shelve.py
+++ b/Lib/shelve.py
@@ -73,23 +73,64 @@
 		self.close()
 
 
-class DbShelf(Shelf):
+class BsdDbShelf(Shelf):
+	"""Shelf implementation using the "BSD" db interface.
+
+	The actual database is opened using one of thethe "bsddb" modules
+	"open" routines (i.e. bsddb.hashopen, bsddb.btopen or bsddb.rnopen.)
+
+	This class is initialized with the the database object
+	returned from one of the bsddb open functions.
+
+	See the module's __doc__ string for an overview of the interface.
+	"""
+
+	def __init__(self, dict):
+	    Shelf.__init__(self, dict)
+
+	def set_location(self, key):
+	     (key, value) = self.dict.set_location(key)
+	     f = StringIO.StringIO(value)
+	     return (key, pickle.Unpickler(f).load())
+
+	def next(self):
+	     (key, value) = self.dict.next()
+	     f = StringIO.StringIO(value)
+	     return (key, pickle.Unpickler(f).load())
+
+	def previous(self):
+	     (key, value) = self.dict.previous()
+	     f = StringIO.StringIO(value)
+	     return (key, pickle.Unpickler(f).load())
+
+	def first(self):
+	     (key, value) = self.dict.first()
+	     f = StringIO.StringIO(value)
+	     return (key, pickle.Unpickler(f).load())
+
+	def last(self):
+	     (key, value) = self.dict.last()
+	     f = StringIO.StringIO(value)
+	     return (key, pickle.Unpickler(f).load())
+
+
+class DbfilenameShelf(Shelf):
 	"""Shelf implementation using the "anydbm" generic dbm interface.
 
 	This is initialized with the filename for the dbm database.
 	See the module's __doc__ string for an overview of the interface.
 	"""
 	
-	def __init__(self, filename):
+	def __init__(self, filename, flag='c'):
 		import anydbm
-		Shelf.__init__(self, anydbm.open(filename))
+		Shelf.__init__(self, anydbm.open(filename, flag))
 
 
-def open(filename):
+def open(filename, flag='c'):
 	"""Open a persistent dictionary for reading and writing.
 
 	Argument is the filename for the dbm database.
 	See the module's __doc__ string for an overview of the interface.
 	"""
 	
-	return DbShelf(filename)
+	return DbfilenameShelf(filename, flag)