Made 'generate_help()' and 'print_help()' methods of FancyGetopt.
Added 'set_option_table()' method.
Added missing 'self' to 'get_option_order()'.
Cosmetic/comment/docstring tweaks.
diff --git a/Lib/distutils/fancy_getopt.py b/Lib/distutils/fancy_getopt.py
index 8ee2774..c811233 100644
--- a/Lib/distutils/fancy_getopt.py
+++ b/Lib/distutils/fancy_getopt.py
@@ -64,7 +64,7 @@
         # table (ie. those 3-tuples).
         self.option_index = {}
         if self.option_table:
-            self.build_index()
+            self._build_index()
 
         # 'negative_alias' keeps track of options that are the boolean
         # opposite of some other option
@@ -88,10 +88,14 @@
     # __init__ ()
     
 
-    def build_index (self):
+    def _build_index (self):
         for option in self.option_table:
             self.option_index[option[0]] = option
 
+    def set_option_table (self, option_table):
+        self.option_table = option_table
+        self._build_index()
+
     def add_option (self, long_option, short_option=None, help_string=None):
         if self.option_index.has_key(long_option):
             raise DistutilsGetoptError, \
@@ -190,7 +194,6 @@
 
 
     def getopt (self, args=None, object=None):
-
         """Parse the command-line options in 'args' and store the results
         as attributes of 'object'.  If 'args' is None or not supplied, uses
         'sys.argv[1:]'.  If 'object' is None or not supplied, creates a new
@@ -253,16 +256,108 @@
     # getopt()
 
 
-    def get_option_order ():
+    def get_option_order (self):
         """Returns the list of (option, value) tuples processed by the
-        previous run of 'fancy_getopt()'.  Raises RuntimeError if
-        'fancy_getopt()' hasn't been called yet."""
+        previous run of 'getopt()'.  Raises RuntimeError if
+        'getopt()' hasn't been called yet."""
 
         if self.option_order is None:
-            raise RuntimeError, "'fancy_getopt()' hasn't been called yet"
+            raise RuntimeError, "'getopt()' hasn't been called yet"
         else:
             return self.option_order
 
+
+    def generate_help (header=None):
+        """Generate help text (a list of strings, one per suggested line of
+        output) from the option table for this FancyGetopt object."""
+
+        # Blithely assume the option table is good: probably wouldn't call
+        # 'generate_help()' unless you've already called 'getopt()'.
+
+        # First pass: determine maximum length of long option names
+        max_opt = 0
+        for option in self.option_table:
+            long = option[0]
+            short = option[1]
+            l = len (long)
+            if long[-1] == '=':
+                l = l - 1
+            if short is not None:
+                l = l + 5                   # " (-x)" where short == 'x'
+            if l > max_opt:
+                max_opt = l
+
+        opt_width = max_opt + 2 + 2 + 2     # room for indent + dashes + gutter
+
+        # Typical help block looks like this:
+        #   --foo       controls foonabulation
+        # Help block for longest option looks like this:
+        #   --flimflam  set the flim-flam level
+        # and with wrapped text:
+        #   --flimflam  set the flim-flam level (must be between
+        #               0 and 100, except on Tuesdays)
+        # Options with short names will have the short name shown (but
+        # it doesn't contribute to max_opt):
+        #   --foo (-f)  controls foonabulation
+        # If adding the short option would make the left column too wide,
+        # we push the explanation off to the next line
+        #   --flimflam (-l)
+        #               set the flim-flam level
+        # Important parameters:
+        #   - 2 spaces before option block start lines
+        #   - 2 dashes for each long option name
+        #   - min. 2 spaces between option and explanation (gutter)
+        #   - 5 characters (incl. space) for short option name
+
+        # Now generate lines of help text.  (If 80 columns were good enough
+        # for Jesus, then 78 columns are good enough for me!)
+        line_width = 78
+        text_width = line_width - opt_width
+        big_indent = ' ' * opt_width
+        if header:
+            lines = [header]
+        else:
+            lines = ['Option summary:']
+
+        for (long,short,help) in self.option_table:
+
+            text = wrap_text (help, text_width)
+            if long[-1] == '=':
+                long = long[0:-1]
+
+            # Case 1: no short option at all (makes life easy)
+            if short is None:
+                if text:
+                    lines.append ("  --%-*s  %s" % (max_opt, long, text[0]))
+                else:
+                    lines.append ("  --%-*s  " % (max_opt, long))
+
+                for l in text[1:]:
+                    lines.append (big_indent + l)
+
+            # Case 2: we have a short option, so we have to include it
+            # just after the long option
+            else:
+                opt_names = "%s (-%s)" % (long, short)
+                if text:
+                    lines.append ("  --%-*s  %s" %
+                                  (max_opt, opt_names, text[0]))
+                else:
+                    lines.append ("  --%-*s" % opt_names)
+
+        # for self.option_table
+
+        return lines
+
+    # generate_help ()
+
+    def print_help (self, file=None, header=None):
+        if file is None:
+            file = sys.stdout
+        for line in self.generate_help (header):
+            file.write (line + "\n")
+    # print_help ()
+
 # class FancyGetopt
 
 
@@ -330,98 +425,6 @@
 # wrap_text ()
         
 
-def generate_help (options, header=None):
-    """Generate help text (a list of strings, one per suggested line of
-       output) from an option table."""
-
-    # Blithely assume the option table is good: probably wouldn't call
-    # 'generate_help()' unless you've already called 'fancy_getopt()'.
-
-    # First pass: determine maximum length of long option names
-    max_opt = 0
-    for option in options:
-        long = option[0]
-        short = option[1]
-        l = len (long)
-        if long[-1] == '=':
-            l = l - 1
-        if short is not None:
-            l = l + 5                   # " (-x)" where short == 'x'
-        if l > max_opt:
-            max_opt = l
-            
-    opt_width = max_opt + 2 + 2 + 2     # room for indent + dashes + gutter
-
-    # Typical help block looks like this:
-    #   --foo       controls foonabulation
-    # Help block for longest option looks like this:
-    #   --flimflam  set the flim-flam level
-    # and with wrapped text:
-    #   --flimflam  set the flim-flam level (must be between
-    #               0 and 100, except on Tuesdays)
-    # Options with short names will have the short name shown (but
-    # it doesn't contribute to max_opt):
-    #   --foo (-f)  controls foonabulation
-    # If adding the short option would make the left column too wide,
-    # we push the explanation off to the next line
-    #   --flimflam (-l)
-    #               set the flim-flam level
-    # Important parameters:
-    #   - 2 spaces before option block start lines
-    #   - 2 dashes for each long option name
-    #   - min. 2 spaces between option and explanation (gutter)
-    #   - 5 characters (incl. space) for short option name
-
-    # Now generate lines of help text.
-    line_width = 78                     # if 80 columns were good enough for
-    text_width = line_width - opt_width # Jesus, then 78 are good enough for me
-    big_indent = ' ' * opt_width
-    if header:
-        lines = [header]
-    else:
-        lines = ['Option summary:']
-
-    for (long,short,help) in options:
-       
-        text = wrap_text (help, text_width)
-        if long[-1] == '=':
-            long = long[0:-1]
-
-        # Case 1: no short option at all (makes life easy)
-        if short is None:
-            if text:
-                lines.append ("  --%-*s  %s" % (max_opt, long, text[0]))
-            else:
-                lines.append ("  --%-*s  " % (max_opt, long))
-
-            for l in text[1:]:
-                lines.append (big_indent + l)
-
-        # Case 2: we have a short option, so we have to include it
-        # just after the long option
-        else:
-            opt_names = "%s (-%s)" % (long, short)
-            if text:
-                lines.append ("  --%-*s  %s" %
-                              (max_opt, opt_names, text[0]))
-            else:
-                lines.append ("  --%-*s" % opt_names)
-
-    # for loop over options
-
-    return lines
-
-# generate_help ()
-
-
-def print_help (options, file=None, header=None):
-    if file is None:
-        file = sys.stdout
-    for line in generate_help (options, header):
-        file.write (line + "\n")
-# print_help ()
-
-
 class OptionDummy:
     """Dummy class just used as a place to hold command-line option
     values as instance attributes."""