Added Helpwin -- help in a text widget
diff --git a/Tools/pynche/PyncheWidget.py b/Tools/pynche/PyncheWidget.py
index 843efd7..1e651a3 100644
--- a/Tools/pynche/PyncheWidget.py
+++ b/Tools/pynche/PyncheWidget.py
@@ -4,6 +4,9 @@
 It is used to bring up other windows.
 """
 
+import sys
+import os
+import string
 from Tkinter import *
 import tkMessageBox
 
@@ -19,6 +22,7 @@
         self.__textwin = None
         self.__listwin = None
         self.__detailswin = None
+        self.__helpwin = None
         modal = self.__modal = not not master
         # If a master was given, we are running as a modal dialog servant to
         # some other application.  We rearrange our UI in this case (there's
@@ -73,6 +77,9 @@
 	helpmenu.add_command(label='About Pynche...',
                              command=self.__popup_about,
                              underline=0)
+        helpmenu.add_command(label='Help...',
+                             command=self.__popup_usage,
+                             underline=0)
         #
         # Tie them all together
         #
@@ -153,6 +160,11 @@
 author: Barry A. Warsaw
 email : bwarsaw@python.org''' % __version__)
 
+    def __popup_usage(self, event=None):
+        if not self.__helpwin:
+            self.__helpwin = Helpwin(self.__root, self.__quit)
+        self.__helpwin.deiconify()
+
     def __popup_text(self, event=None):
         if not self.__textwin:
             from TextViewer import TextViewer
@@ -179,3 +191,51 @@
 
     def deiconify(self):
         self.__root.deiconify()
+
+
+
+class Helpwin:
+    def __init__(self, master, quitfunc):
+        from Main import __version__, docstring
+        self.__root = root = Toplevel(master, class_='Pynche')
+        root.protocol('WM_DELETE_WINDOW', self.__withdraw)
+        root.title('Pynche Help Window')
+        root.iconname('Pynche Help Window')
+        root.bind('<Alt-q>', quitfunc)
+        root.bind('<Alt-Q>', quitfunc)
+        root.bind('<Alt-w>', self.__withdraw)
+        root.bind('<Alt-W>', self.__withdraw)
+
+        # more elaborate help is available in the README file
+        readmefile = os.path.join(sys.path[0], 'README')
+        try:
+            fp = None
+            try:
+                fp = open(readmefile)
+                contents = fp.read()
+                # wax the last page, it contains Emacs cruft
+                i = string.rfind(contents, '\f')
+                if i > 0:
+                    contents = string.rstrip(contents[:i])
+            finally:
+                if fp:
+                    fp.close()
+        except IOError:
+            sys.stderr.write("Couldn't open Pynche's README, "
+                             'using docstring instead.\n')
+            contents = docstring()
+
+        self.__text = text = Text(root, relief=SUNKEN,
+                                  width=80, height=24)
+        text.insert(0.0, contents)
+        scrollbar = Scrollbar(root)
+        scrollbar.pack(fill=Y, side=RIGHT)
+        text.pack(fill=BOTH, expand=YES)
+        text.configure(yscrollcommand=(scrollbar, 'set'))
+        scrollbar.configure(command=(text, 'yview'))
+
+    def __withdraw(self, event=None):
+        self.__root.withdraw()
+
+    def deiconify(self):
+        self.__root.deiconify()