Added 'linestart' array and 'unreadline()' method (makes parsing a lot easier).
diff --git a/Lib/distutils/text_file.py b/Lib/distutils/text_file.py
index 6153dea..1d57956 100644
--- a/Lib/distutils/text_file.py
+++ b/Lib/distutils/text_file.py
@@ -52,6 +52,11 @@
             self.filename = filename
             self.file = file
             self.current_line = 0       # assuming that file is at BOF!
+
+        # 'linestart' stores the file offset of the start of each logical
+        # line; it is used to back up the file pointer when the caller
+        # wants to "unread" a line
+        self.linestart = []
         
 
     def open (self, filename):
@@ -81,6 +86,11 @@
         buildup_line = ''
 
         while 1:
+            # record current file position; this will be appended to
+            # the linestart array *unless* we're accumulating a
+            # continued logical line
+            current_pos = self.file.tell()
+
             # read the line, optionally strip comments
             line = self.file.readline()
             if self.strip_comments and line:
@@ -101,6 +111,11 @@
                     self.current_line[1] = self.current_line[1] + 1
                 else:
                     self.current_line = [self.current_line, self.current_line+1]
+
+                # Forget current position: don't want to save it in the
+                # middle of a logical line
+                current_pos = None
+
             # just an ordinary line, read it as usual
             else:
                 if not line:
@@ -111,7 +126,7 @@
                     self.current_line = self.current_line[1] + 1
                 else:
                     self.current_line = self.current_line + 1
-                
+
 
             # strip whitespace however the client wants (leading and
             # trailing, or one or the other, or neither)
@@ -128,6 +143,12 @@
             if line == '' or line == '\n' and self.skip_blanks:
                 continue
 
+            # if we're still here and have kept the current position,
+            # then this physical line starts a logical line; record its
+            # starting offset
+            if current_pos is not None:
+                self.linestart.append (current_pos)
+                
             if self.join_lines:
                 if line[-1] == '\\':
                     buildup_line = line[:-1]
@@ -147,6 +168,14 @@
     # end readline
 
 
+    def unreadline (self):
+        if not self.linestart:
+            raise IOError, "at beginning of file -- can't unreadline"
+        pos = self.linestart[-1]
+        del self.linestart[-1]
+        self.file.seek (pos)        
+
+
     def readlines (self):
         lines = []
         while 1: