Changes by Richard Wolff:

1) I added a command queue which is helpful to me (at least so far) and
   would also allow syntax like 's;s' (step; step) in conjunction with precmd
2) doc_leader allows the derived class to print a message before the help
   output.  Defaults to current practise of a blank line
3) nohelp allows one to override the 'No help on' message.  I need
    'Undefined command: "%s".  Try "help".'
4) Pass line to self.precmd to allow one to do some parsing: change first
   word to lower case, strip out a leading number, whatever.
5) Pass the result of onecmd and the input line to postcmd.  This allows
   one to ponder the stop result before it is effective.
6) emptyline() requires a   if self.lastcmd:  conditional because if the
   first command is null (<cr>), you get an infinite recursion with the
   code as it stands.
diff --git a/Lib/cmd.py b/Lib/cmd.py
index 35b9e0b..20c01aa 100644
--- a/Lib/cmd.py
+++ b/Lib/cmd.py
@@ -47,10 +47,13 @@
 	identchars = IDENTCHARS
 	ruler = '='
 	lastcmd = ''
+	cmdqueue = []
 	intro = None
+	doc_leader = ""
 	doc_header = "Documented commands (type help <topic>):"
 	misc_header = "Miscellaneous help topics:"
 	undoc_header = "Undocumented commands:"
+	nohelp = "*** No help on %s"
 
 	def __init__(self): pass
 
@@ -62,20 +65,24 @@
 			print self.intro
 		stop = None
 		while not stop:
-			try:
-				line = raw_input(self.prompt)
-			except EOFError:
-				line = 'EOF'
-			self.precmd()
+			if self.cmdqueue:
+				line = self.cmdqueue[0]
+				del self.cmdqueue[0]
+			else:
+				try:
+					line = raw_input(self.prompt)
+				except EOFError:
+					line = 'EOF'
+			line = self.precmd(line)
 			stop = self.onecmd(line)
-			self.postcmd()
+			stop = self.postcmd(stop, line)
 		self.postloop()
 
-	def precmd(self):
-		pass
+	def precmd(self, line):
+		return line
 
-	def postcmd(self):
-		pass
+	def postcmd(self, stop, line):
+		return stop
 
 	def preloop(self):
 		pass
@@ -108,7 +115,8 @@
 			return func(arg)
 
 	def emptyline(self):
-		return self.onecmd(self.lastcmd)
+		if self.lastcmd:
+			return self.onecmd(self.lastcmd)
 
 	def default(self, line):
 		print '*** Unknown syntax:', line
@@ -119,7 +127,7 @@
 			try:
 				func = getattr(self, 'help_' + arg)
 			except:
-				print '*** No help on', `arg`
+				print self.nohelp % (arg,)
 				return
 			func()
 		else:
@@ -138,7 +146,7 @@
 						del help[cmd]
 					else:
 						cmds_undoc.append(cmd)
-			print 
+			print self.doc_leader
 			self.print_topics(self.doc_header,   cmds_doc,   15,80)
 			self.print_topics(self.misc_header,  help.keys(),15,80)
 			self.print_topics(self.undoc_header, cmds_undoc, 15,80)