Removing DOS 8x3 support
diff --git a/Lib/dos-8x3/basehttp.py b/Lib/dos-8x3/basehttp.py
deleted file mode 100755
index 49f8984..0000000
--- a/Lib/dos-8x3/basehttp.py
+++ /dev/null
@@ -1,482 +0,0 @@
-"""HTTP server base class.
-
-Note: the class in this module doesn't implement any HTTP request; see
-SimpleHTTPServer for simple implementations of GET, HEAD and POST
-(including CGI scripts).
-
-Contents:
-
-- BaseHTTPRequestHandler: HTTP request handler base class
-- test: test function
-
-XXX To do:
-
-- send server version
-- log requests even later (to capture byte count)
-- log user-agent header and other interesting goodies
-- send error log to separate file
-- are request names really case sensitive?
-
-"""
-
-
-# See also:
-#
-# HTTP Working Group                                        T. Berners-Lee
-# INTERNET-DRAFT                                            R. T. Fielding
-# <draft-ietf-http-v10-spec-00.txt>                     H. Frystyk Nielsen
-# Expires September 8, 1995                                  March 8, 1995
-#
-# URL: http://www.ics.uci.edu/pub/ietf/http/draft-ietf-http-v10-spec-00.txt
-
-
-# Log files
-# ---------
-# 
-# Here's a quote from the NCSA httpd docs about log file format.
-# 
-# | The logfile format is as follows. Each line consists of: 
-# | 
-# | host rfc931 authuser [DD/Mon/YYYY:hh:mm:ss] "request" ddd bbbb 
-# | 
-# |        host: Either the DNS name or the IP number of the remote client 
-# |        rfc931: Any information returned by identd for this person,
-# |                - otherwise. 
-# |        authuser: If user sent a userid for authentication, the user name,
-# |                  - otherwise. 
-# |        DD: Day 
-# |        Mon: Month (calendar name) 
-# |        YYYY: Year 
-# |        hh: hour (24-hour format, the machine's timezone) 
-# |        mm: minutes 
-# |        ss: seconds 
-# |        request: The first line of the HTTP request as sent by the client. 
-# |        ddd: the status code returned by the server, - if not available. 
-# |        bbbb: the total number of bytes sent,
-# |              *not including the HTTP/1.0 header*, - if not available 
-# | 
-# | You can determine the name of the file accessed through request.
-# 
-# (Actually, the latter is only true if you know the server configuration
-# at the time the request was made!)
-
-
-__version__ = "0.2"
-
-
-import sys
-import time
-import socket # For gethostbyaddr()
-import string
-import mimetools
-import SocketServer
-
-# Default error message
-DEFAULT_ERROR_MESSAGE = """\
-<head>
-<title>Error response</title>
-</head>
-<body>
-<h1>Error response</h1>
-<p>Error code %(code)d.
-<p>Message: %(message)s.
-<p>Error code explanation: %(code)s = %(explain)s.
-</body>
-"""
-
-
-class HTTPServer(SocketServer.TCPServer):
-
-    allow_reuse_address = 1    # Seems to make sense in testing environment
-
-    def server_bind(self):
-        """Override server_bind to store the server name."""
-        SocketServer.TCPServer.server_bind(self)
-        host, port = self.socket.getsockname()
-        self.server_name = socket.getfqdn(host)
-        self.server_port = port
-
-
-class BaseHTTPRequestHandler(SocketServer.StreamRequestHandler):
-
-    """HTTP request handler base class.
-
-    The following explanation of HTTP serves to guide you through the
-    code as well as to expose any misunderstandings I may have about
-    HTTP (so you don't need to read the code to figure out I'm wrong
-    :-).
-
-    HTTP (HyperText Transfer Protocol) is an extensible protocol on
-    top of a reliable stream transport (e.g. TCP/IP).  The protocol
-    recognizes three parts to a request:
-
-    1. One line identifying the request type and path
-    2. An optional set of RFC-822-style headers
-    3. An optional data part
-
-    The headers and data are separated by a blank line.
-
-    The first line of the request has the form
-
-    <command> <path> <version>
-
-    where <command> is a (case-sensitive) keyword such as GET or POST,
-    <path> is a string containing path information for the request,
-    and <version> should be the string "HTTP/1.0".  <path> is encoded
-    using the URL encoding scheme (using %xx to signify the ASCII
-    character with hex code xx).
-
-    The protocol is vague about whether lines are separated by LF
-    characters or by CRLF pairs -- for compatibility with the widest
-    range of clients, both should be accepted.  Similarly, whitespace
-    in the request line should be treated sensibly (allowing multiple
-    spaces between components and allowing trailing whitespace).
-
-    Similarly, for output, lines ought to be separated by CRLF pairs
-    but most clients grok LF characters just fine.
-
-    If the first line of the request has the form
-
-    <command> <path>
-
-    (i.e. <version> is left out) then this is assumed to be an HTTP
-    0.9 request; this form has no optional headers and data part and
-    the reply consists of just the data.
-
-    The reply form of the HTTP 1.0 protocol again has three parts:
-
-    1. One line giving the response code
-    2. An optional set of RFC-822-style headers
-    3. The data
-
-    Again, the headers and data are separated by a blank line.
-
-    The response code line has the form
-
-    <version> <responsecode> <responsestring>
-
-    where <version> is the protocol version (always "HTTP/1.0"),
-    <responsecode> is a 3-digit response code indicating success or
-    failure of the request, and <responsestring> is an optional
-    human-readable string explaining what the response code means.
-
-    This server parses the request and the headers, and then calls a
-    function specific to the request type (<command>).  Specifically,
-    a request SPAM will be handled by a method do_SPAM().  If no
-    such method exists the server sends an error response to the
-    client.  If it exists, it is called with no arguments:
-
-    do_SPAM()
-
-    Note that the request name is case sensitive (i.e. SPAM and spam
-    are different requests).
-
-    The various request details are stored in instance variables:
-
-    - client_address is the client IP address in the form (host,
-    port);
-
-    - command, path and version are the broken-down request line;
-
-    - headers is an instance of mimetools.Message (or a derived
-    class) containing the header information;
-
-    - rfile is a file object open for reading positioned at the
-    start of the optional input data part;
-
-    - wfile is a file object open for writing.
-
-    IT IS IMPORTANT TO ADHERE TO THE PROTOCOL FOR WRITING!
-
-    The first thing to be written must be the response line.  Then
-    follow 0 or more header lines, then a blank line, and then the
-    actual data (if any).  The meaning of the header lines depends on
-    the command executed by the server; in most cases, when data is
-    returned, there should be at least one header line of the form
-
-    Content-type: <type>/<subtype>
-
-    where <type> and <subtype> should be registered MIME types,
-    e.g. "text/html" or "text/plain".
-
-    """
-
-    # The Python system version, truncated to its first component.
-    sys_version = "Python/" + string.split(sys.version)[0]
-
-    # The server software version.  You may want to override this.
-    # The format is multiple whitespace-separated strings,
-    # where each string is of the form name[/version].
-    server_version = "BaseHTTP/" + __version__
-
-    def parse_request(self):
-        """Parse a request (internal).
-
-        The request should be stored in self.raw_request; the results
-        are in self.command, self.path, self.request_version and
-        self.headers.
-
-        Return value is 1 for success, 0 for failure; on failure, an
-        error is sent back.
-
-        """
-        self.request_version = version = "HTTP/0.9" # Default
-        requestline = self.raw_requestline
-        if requestline[-2:] == '\r\n':
-            requestline = requestline[:-2]
-        elif requestline[-1:] == '\n':
-            requestline = requestline[:-1]
-        self.requestline = requestline
-        words = string.split(requestline)
-        if len(words) == 3:
-            [command, path, version] = words
-            if version[:5] != 'HTTP/':
-                self.send_error(400, "Bad request version (%s)" % `version`)
-                return 0
-        elif len(words) == 2:
-            [command, path] = words
-            if command != 'GET':
-                self.send_error(400,
-                                "Bad HTTP/0.9 request type (%s)" % `command`)
-                return 0
-        else:
-            self.send_error(400, "Bad request syntax (%s)" % `requestline`)
-            return 0
-        self.command, self.path, self.request_version = command, path, version
-        self.headers = self.MessageClass(self.rfile, 0)
-        return 1
-
-    def handle(self):
-        """Handle a single HTTP request.
-
-        You normally don't need to override this method; see the class
-        __doc__ string for information on how to handle specific HTTP
-        commands such as GET and POST.
-
-        """
-
-        self.raw_requestline = self.rfile.readline()
-        if not self.parse_request(): # An error code has been sent, just exit
-            return
-        mname = 'do_' + self.command
-        if not hasattr(self, mname):
-            self.send_error(501, "Unsupported method (%s)" % `self.command`)
-            return
-        method = getattr(self, mname)
-        method()
-
-    def send_error(self, code, message=None):
-        """Send and log an error reply.
-
-        Arguments are the error code, and a detailed message.
-        The detailed message defaults to the short entry matching the
-        response code.
-
-        This sends an error response (so it must be called before any
-        output has been generated), logs the error, and finally sends
-        a piece of HTML explaining the error to the user.
-
-        """
-
-        try:
-            short, long = self.responses[code]
-        except KeyError:
-            short, long = '???', '???'
-        if not message:
-            message = short
-        explain = long
-        self.log_error("code %d, message %s", code, message)
-        self.send_response(code, message)
-        self.end_headers()
-        self.wfile.write(self.error_message_format %
-                         {'code': code,
-                          'message': message,
-                          'explain': explain})
-
-    error_message_format = DEFAULT_ERROR_MESSAGE
-
-    def send_response(self, code, message=None):
-        """Send the response header and log the response code.
-
-        Also send two standard headers with the server software
-        version and the current date.
-
-        """
-        self.log_request(code)
-        if message is None:
-            if self.responses.has_key(code):
-                message = self.responses[code][0]
-            else:
-                message = ''
-        if self.request_version != 'HTTP/0.9':
-            self.wfile.write("%s %s %s\r\n" %
-                             (self.protocol_version, str(code), message))
-        self.send_header('Server', self.version_string())
-        self.send_header('Date', self.date_time_string())
-
-    def send_header(self, keyword, value):
-        """Send a MIME header."""
-        if self.request_version != 'HTTP/0.9':
-            self.wfile.write("%s: %s\r\n" % (keyword, value))
-
-    def end_headers(self):
-        """Send the blank line ending the MIME headers."""
-        if self.request_version != 'HTTP/0.9':
-            self.wfile.write("\r\n")
-
-    def log_request(self, code='-', size='-'):
-        """Log an accepted request.
-
-        This is called by send_reponse().
-
-        """
-
-        self.log_message('"%s" %s %s',
-                         self.requestline, str(code), str(size))
-
-    def log_error(self, *args):
-        """Log an error.
-
-        This is called when a request cannot be fulfilled.  By
-        default it passes the message on to log_message().
-
-        Arguments are the same as for log_message().
-
-        XXX This should go to the separate error log.
-
-        """
-
-        apply(self.log_message, args)
-
-    def log_message(self, format, *args):
-        """Log an arbitrary message.
-
-        This is used by all other logging functions.  Override
-        it if you have specific logging wishes.
-
-        The first argument, FORMAT, is a format string for the
-        message to be logged.  If the format string contains
-        any % escapes requiring parameters, they should be
-        specified as subsequent arguments (it's just like
-        printf!).
-
-        The client host and current date/time are prefixed to
-        every message.
-
-        """
-
-        sys.stderr.write("%s - - [%s] %s\n" %
-                         (self.address_string(),
-                          self.log_date_time_string(),
-                          format%args))
-
-    def version_string(self):
-        """Return the server software version string."""
-        return self.server_version + ' ' + self.sys_version
-
-    def date_time_string(self):
-        """Return the current date and time formatted for a message header."""
-        now = time.time()
-        year, month, day, hh, mm, ss, wd, y, z = time.gmtime(now)
-        s = "%s, %02d %3s %4d %02d:%02d:%02d GMT" % (
-                self.weekdayname[wd],
-                day, self.monthname[month], year,
-                hh, mm, ss)
-        return s
-
-    def log_date_time_string(self):
-        """Return the current time formatted for logging."""
-        now = time.time()
-        year, month, day, hh, mm, ss, x, y, z = time.localtime(now)
-        s = "%02d/%3s/%04d %02d:%02d:%02d" % (
-                day, self.monthname[month], year, hh, mm, ss)
-        return s
-
-    weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-
-    monthname = [None,
-                 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-                 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-
-    def address_string(self):
-        """Return the client address formatted for logging.
-
-        This version looks up the full hostname using gethostbyaddr(),
-        and tries to find a name that contains at least one dot.
-
-        """
-
-        host, port = self.client_address
-        return socket.getfqdn(host)
-
-    # Essentially static class variables
-
-    # The version of the HTTP protocol we support.
-    # Don't override unless you know what you're doing (hint: incoming
-    # requests are required to have exactly this version string).
-    protocol_version = "HTTP/1.0"
-
-    # The Message-like class used to parse headers
-    MessageClass = mimetools.Message
-
-    # Table mapping response codes to messages; entries have the
-    # form {code: (shortmessage, longmessage)}.
-    # See http://www.w3.org/hypertext/WWW/Protocols/HTTP/HTRESP.html
-    responses = {
-        200: ('OK', 'Request fulfilled, document follows'),
-        201: ('Created', 'Document created, URL follows'),
-        202: ('Accepted',
-              'Request accepted, processing continues off-line'),
-        203: ('Partial information', 'Request fulfilled from cache'),
-        204: ('No response', 'Request fulfilled, nothing follows'),
-        
-        301: ('Moved', 'Object moved permanently -- see URI list'),
-        302: ('Found', 'Object moved temporarily -- see URI list'),
-        303: ('Method', 'Object moved -- see Method and URL list'),
-        304: ('Not modified',
-              'Document has not changed singe given time'),
-        
-        400: ('Bad request',
-              'Bad request syntax or unsupported method'),
-        401: ('Unauthorized',
-              'No permission -- see authorization schemes'),
-        402: ('Payment required',
-              'No payment -- see charging schemes'),
-        403: ('Forbidden',
-              'Request forbidden -- authorization will not help'),
-        404: ('Not found', 'Nothing matches the given URI'),
-        
-        500: ('Internal error', 'Server got itself in trouble'),
-        501: ('Not implemented',
-              'Server does not support this operation'),
-        502: ('Service temporarily overloaded',
-              'The server cannot process the request due to a high load'),
-        503: ('Gateway timeout',
-              'The gateway server did not receive a timely response'),
-        
-        }
-
-
-def test(HandlerClass = BaseHTTPRequestHandler,
-         ServerClass = HTTPServer):
-    """Test the HTTP request handler class.
-
-    This runs an HTTP server on port 8000 (or the first command line
-    argument).
-
-    """
-
-    if sys.argv[1:]:
-        port = string.atoi(sys.argv[1])
-    else:
-        port = 8000
-    server_address = ('', port)
-
-    httpd = ServerClass(server_address, HandlerClass)
-
-    print "Serving HTTP on port", port, "..."
-    httpd.serve_forever()
-
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/bastion.py b/Lib/dos-8x3/bastion.py
deleted file mode 100755
index a6e716b..0000000
--- a/Lib/dos-8x3/bastion.py
+++ /dev/null
@@ -1,174 +0,0 @@
-"""Bastionification utility.
-
-A bastion (for another object -- the 'original') is an object that has
-the same methods as the original but does not give access to its
-instance variables.  Bastions have a number of uses, but the most
-obvious one is to provide code executing in restricted mode with a
-safe interface to an object implemented in unrestricted mode.
-
-The bastionification routine has an optional second argument which is
-a filter function.  Only those methods for which the filter method
-(called with the method name as argument) returns true are accessible.
-The default filter method returns true unless the method name begins
-with an underscore.
-
-There are a number of possible implementations of bastions.  We use a
-'lazy' approach where the bastion's __getattr__() discipline does all
-the work for a particular method the first time it is used.  This is
-usually fastest, especially if the user doesn't call all available
-methods.  The retrieved methods are stored as instance variables of
-the bastion, so the overhead is only occurred on the first use of each
-method.
-
-Detail: the bastion class has a __repr__() discipline which includes
-the repr() of the original object.  This is precomputed when the
-bastion is created.
-
-"""
-
-
-from types import MethodType
-
-
-class BastionClass:
-
-    """Helper class used by the Bastion() function.
-
-    You could subclass this and pass the subclass as the bastionclass
-    argument to the Bastion() function, as long as the constructor has
-    the same signature (a get() function and a name for the object).
-
-    """
-
-    def __init__(self, get, name):
-        """Constructor.
-
-        Arguments:
-
-        get - a function that gets the attribute value (by name)
-        name - a human-readable name for the original object
-               (suggestion: use repr(object))
-
-        """
-        self._get_ = get
-        self._name_ = name
-
-    def __repr__(self):
-        """Return a representation string.
-
-        This includes the name passed in to the constructor, so that
-        if you print the bastion during debugging, at least you have
-        some idea of what it is.
-
-        """
-        return "<Bastion for %s>" % self._name_
-
-    def __getattr__(self, name):
-        """Get an as-yet undefined attribute value.
-
-        This calls the get() function that was passed to the
-        constructor.  The result is stored as an instance variable so
-        that the next time the same attribute is requested,
-        __getattr__() won't be invoked.
-
-        If the get() function raises an exception, this is simply
-        passed on -- exceptions are not cached.
-
-        """
-        attribute = self._get_(name)
-        self.__dict__[name] = attribute
-        return attribute
-
-
-def Bastion(object, filter = lambda name: name[:1] != '_',
-            name=None, bastionclass=BastionClass):
-    """Create a bastion for an object, using an optional filter.
-
-    See the Bastion module's documentation for background.
-
-    Arguments:
-
-    object - the original object
-    filter - a predicate that decides whether a function name is OK;
-             by default all names are OK that don't start with '_'
-    name - the name of the object; default repr(object)
-    bastionclass - class used to create the bastion; default BastionClass
-
-    """
-
-    # Note: we define *two* ad-hoc functions here, get1 and get2.
-    # Both are intended to be called in the same way: get(name).
-    # It is clear that the real work (getting the attribute
-    # from the object and calling the filter) is done in get1.
-    # Why can't we pass get1 to the bastion?  Because the user
-    # would be able to override the filter argument!  With get2,
-    # overriding the default argument is no security loophole:
-    # all it does is call it.
-    # Also notice that we can't place the object and filter as
-    # instance variables on the bastion object itself, since
-    # the user has full access to all instance variables!
-
-    def get1(name, object=object, filter=filter):
-        """Internal function for Bastion().  See source comments."""
-        if filter(name):
-            attribute = getattr(object, name)
-            if type(attribute) == MethodType:
-                return attribute
-        raise AttributeError, name
-
-    def get2(name, get1=get1):
-        """Internal function for Bastion().  See source comments."""
-        return get1(name)
-
-    if name is None:
-        name = `object`
-    return bastionclass(get2, name)
-
-
-def _test():
-    """Test the Bastion() function."""
-    class Original:
-        def __init__(self):
-            self.sum = 0
-        def add(self, n):
-            self._add(n)
-        def _add(self, n):
-            self.sum = self.sum + n
-        def total(self):
-            return self.sum
-    o = Original()
-    b = Bastion(o)
-    testcode = """if 1:
-    b.add(81)
-    b.add(18)
-    print "b.total() =", b.total()
-    try:
-        print "b.sum =", b.sum,
-    except:
-        print "inaccessible"
-    else:
-        print "accessible"
-    try:
-        print "b._add =", b._add,
-    except:
-        print "inaccessible"
-    else:
-        print "accessible"
-    try:
-        print "b._get_.func_defaults =", b._get_.func_defaults,
-    except:
-        print "inaccessible"
-    else:
-        print "accessible"
-    \n"""
-    exec testcode
-    print '='*20, "Using rexec:", '='*20
-    import rexec
-    r = rexec.RExec()
-    m = r.add_module('__main__')
-    m.b = b
-    r.r_exec(testcode)
-
-
-if __name__ == '__main__':
-    _test()
diff --git a/Lib/dos-8x3/cgihttps.py b/Lib/dos-8x3/cgihttps.py
deleted file mode 100755
index ba1e76b..0000000
--- a/Lib/dos-8x3/cgihttps.py
+++ /dev/null
@@ -1,305 +0,0 @@
-"""CGI-savvy HTTP Server.
-
-This module builds on SimpleHTTPServer by implementing GET and POST
-requests to cgi-bin scripts.
-
-If the os.fork() function is not present (e.g. on Windows),
-os.popen2() is used as a fallback, with slightly altered semantics; if
-that function is not present either (e.g. on Macintosh), only Python
-scripts are supported, and they are executed by the current process.
-
-In all cases, the implementation is intentionally naive -- all
-requests are executed sychronously.
-
-SECURITY WARNING: DON'T USE THIS CODE UNLESS YOU ARE INSIDE A FIREWALL
--- it may execute arbitrary Python code or external programs.
-
-"""
-
-
-__version__ = "0.4"
-
-
-import os
-import sys
-import string
-import urllib
-import BaseHTTPServer
-import SimpleHTTPServer
-
-
-class CGIHTTPRequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
-
-    """Complete HTTP server with GET, HEAD and POST commands.
-
-    GET and HEAD also support running CGI scripts.
-
-    The POST command is *only* implemented for CGI scripts.
-
-    """
-
-    # Determine platform specifics
-    have_fork = hasattr(os, 'fork')
-    have_popen2 = hasattr(os, 'popen2')
-
-    # Make rfile unbuffered -- we need to read one line and then pass
-    # the rest to a subprocess, so we can't use buffered input.
-    rbufsize = 0
-
-    def do_POST(self):
-        """Serve a POST request.
-
-        This is only implemented for CGI scripts.
-
-        """
-
-        if self.is_cgi():
-            self.run_cgi()
-        else:
-            self.send_error(501, "Can only POST to CGI scripts")
-
-    def send_head(self):
-        """Version of send_head that support CGI scripts"""
-        if self.is_cgi():
-            return self.run_cgi()
-        else:
-            return SimpleHTTPServer.SimpleHTTPRequestHandler.send_head(self)
-
-    def is_cgi(self):
-        """Test whether self.path corresponds to a CGI script.
-
-        Return a tuple (dir, rest) if self.path requires running a
-        CGI script, None if not.  Note that rest begins with a
-        slash if it is not empty.
-
-        The default implementation tests whether the path
-        begins with one of the strings in the list
-        self.cgi_directories (and the next character is a '/'
-        or the end of the string).
-
-        """
-
-        path = self.path
-
-        for x in self.cgi_directories:
-            i = len(x)
-            if path[:i] == x and (not path[i:] or path[i] == '/'):
-                self.cgi_info = path[:i], path[i+1:]
-                return 1
-        return 0
-
-    cgi_directories = ['/cgi-bin', '/htbin']
-
-    def is_executable(self, path):
-        """Test whether argument path is an executable file."""
-        return executable(path)
-
-    def is_python(self, path):
-        """Test whether argument path is a Python script."""
-        head, tail = os.path.splitext(path)
-        return tail.lower() in (".py", ".pyw")
-
-    def run_cgi(self):
-        """Execute a CGI script."""
-        dir, rest = self.cgi_info
-        i = string.rfind(rest, '?')
-        if i >= 0:
-            rest, query = rest[:i], rest[i+1:]
-        else:
-            query = ''
-        i = string.find(rest, '/')
-        if i >= 0:
-            script, rest = rest[:i], rest[i:]
-        else:
-            script, rest = rest, ''
-        scriptname = dir + '/' + script
-        scriptfile = self.translate_path(scriptname)
-        if not os.path.exists(scriptfile):
-            self.send_error(404, "No such CGI script (%s)" % `scriptname`)
-            return
-        if not os.path.isfile(scriptfile):
-            self.send_error(403, "CGI script is not a plain file (%s)" %
-                            `scriptname`)
-            return
-        ispy = self.is_python(scriptname)
-        if not ispy:
-            if not (self.have_fork or self.have_popen2):
-                self.send_error(403, "CGI script is not a Python script (%s)" %
-                                `scriptname`)
-                return
-            if not self.is_executable(scriptfile):
-                self.send_error(403, "CGI script is not executable (%s)" %
-                                `scriptname`)
-                return
-
-        # Reference: http://hoohoo.ncsa.uiuc.edu/cgi/env.html
-        # XXX Much of the following could be prepared ahead of time!
-        env = {}
-        env['SERVER_SOFTWARE'] = self.version_string()
-        env['SERVER_NAME'] = self.server.server_name
-        env['GATEWAY_INTERFACE'] = 'CGI/1.1'
-        env['SERVER_PROTOCOL'] = self.protocol_version
-        env['SERVER_PORT'] = str(self.server.server_port)
-        env['REQUEST_METHOD'] = self.command
-        uqrest = urllib.unquote(rest)
-        env['PATH_INFO'] = uqrest
-        env['PATH_TRANSLATED'] = self.translate_path(uqrest)
-        env['SCRIPT_NAME'] = scriptname
-        if query:
-            env['QUERY_STRING'] = query
-        host = self.address_string()
-        if host != self.client_address[0]:
-            env['REMOTE_HOST'] = host
-        env['REMOTE_ADDR'] = self.client_address[0]
-        # XXX AUTH_TYPE
-        # XXX REMOTE_USER
-        # XXX REMOTE_IDENT
-        if self.headers.typeheader is None:
-            env['CONTENT_TYPE'] = self.headers.type
-        else:
-            env['CONTENT_TYPE'] = self.headers.typeheader
-        length = self.headers.getheader('content-length')
-        if length:
-            env['CONTENT_LENGTH'] = length
-        accept = []
-        for line in self.headers.getallmatchingheaders('accept'):
-            if line[:1] in string.whitespace:
-                accept.append(string.strip(line))
-            else:
-                accept = accept + string.split(line[7:], ',')
-        env['HTTP_ACCEPT'] = string.joinfields(accept, ',')
-        ua = self.headers.getheader('user-agent')
-        if ua:
-            env['HTTP_USER_AGENT'] = ua
-        co = filter(None, self.headers.getheaders('cookie'))
-        if co:
-            env['HTTP_COOKIE'] = string.join(co, ', ')
-        # XXX Other HTTP_* headers
-        if not self.have_fork:
-            # Since we're setting the env in the parent, provide empty
-            # values to override previously set values
-            for k in ('QUERY_STRING', 'REMOTE_HOST', 'CONTENT_LENGTH',
-                      'HTTP_USER_AGENT', 'HTTP_COOKIE'):
-                env.setdefault(k, "")
-
-        self.send_response(200, "Script output follows")
-
-        decoded_query = string.replace(query, '+', ' ')
-
-        if self.have_fork:
-            # Unix -- fork as we should
-            args = [script]
-            if '=' not in decoded_query:
-                args.append(decoded_query)
-            nobody = nobody_uid()
-            self.wfile.flush() # Always flush before forking
-            pid = os.fork()
-            if pid != 0:
-                # Parent
-                pid, sts = os.waitpid(pid, 0)
-                if sts:
-                    self.log_error("CGI script exit status %#x", sts)
-                return
-            # Child
-            try:
-                try:
-                    os.setuid(nobody)
-                except os.error:
-                    pass
-                os.dup2(self.rfile.fileno(), 0)
-                os.dup2(self.wfile.fileno(), 1)
-                os.execve(scriptfile, args, env)
-            except:
-                self.server.handle_error(self.request, self.client_address)
-                os._exit(127)
-
-        elif self.have_popen2:
-            # Windows -- use popen2 to create a subprocess
-            import shutil
-            os.environ.update(env)
-            cmdline = scriptfile
-            if self.is_python(scriptfile):
-                interp = sys.executable
-                if interp.lower().endswith("w.exe"):
-                    # On Windows, use python.exe, not python.exe
-                    interp = interp[:-5] = interp[-4:]
-                cmdline = "%s %s" % (interp, cmdline)
-            if '=' not in query and '"' not in query:
-                cmdline = '%s "%s"' % (cmdline, query)
-            self.log_error("command: %s", cmdline)
-            try:
-                nbytes = int(length)
-            except:
-                nbytes = 0
-            fi, fo = os.popen2(cmdline)
-            if self.command.lower() == "post" and nbytes > 0:
-                data = self.rfile.read(nbytes)
-                fi.write(data)
-            fi.close()
-            shutil.copyfileobj(fo, self.wfile)
-            sts = fo.close()
-            if sts:
-                self.log_error("CGI script exit status %#x", sts)
-            else:
-                self.log_error("CGI script exited OK")
-
-        else:
-            # Other O.S. -- execute script in this process
-            os.environ.update(env)
-            save_argv = sys.argv
-            save_stdin = sys.stdin
-            save_stdout = sys.stdout
-            save_stderr = sys.stderr
-            try:
-                try:
-                    sys.argv = [scriptfile]
-                    if '=' not in decoded_query:
-                        sys.argv.append(decoded_query)
-                    sys.stdout = self.wfile
-                    sys.stdin = self.rfile
-                    execfile(scriptfile, {"__name__": "__main__"})
-                finally:
-                    sys.argv = save_argv
-                    sys.stdin = save_stdin
-                    sys.stdout = save_stdout
-                    sys.stderr = save_stderr
-            except SystemExit, sts:
-                self.log_error("CGI script exit status %s", str(sts))
-            else:
-                self.log_error("CGI script exited OK")
-
-
-nobody = None
-
-def nobody_uid():
-    """Internal routine to get nobody's uid"""
-    global nobody
-    if nobody:
-        return nobody
-    try:
-        import pwd
-    except ImportError:
-        return -1
-    try:
-        nobody = pwd.getpwnam('nobody')[2]
-    except KeyError:
-        nobody = 1 + max(map(lambda x: x[2], pwd.getpwall()))
-    return nobody
-
-
-def executable(path):
-    """Test for executable file."""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return 0
-    return st[0] & 0111 != 0
-
-
-def test(HandlerClass = CGIHTTPRequestHandler,
-         ServerClass = BaseHTTPServer.HTTPServer):
-    SimpleHTTPServer.test(HandlerClass, ServerClass)
-
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/compilea.py b/Lib/dos-8x3/compilea.py
deleted file mode 100755
index e56c8b2..0000000
--- a/Lib/dos-8x3/compilea.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""Module/script to "compile" all .py files to .pyc (or .pyo) file.
-
-When called as a script with arguments, this compiles the directories
-given as arguments recursively; the -l option prevents it from
-recursing into directories.
-
-Without arguments, if compiles all modules on sys.path, without
-recursing into subdirectories.  (Even though it should do so for
-packages -- for now, you'll have to deal with packages separately.)
-
-See module py_compile for details of the actual byte-compilation.
-
-"""
-
-import os
-import stat
-import sys
-import py_compile
-
-def compile_dir(dir, maxlevels=10, ddir=None, force=0):
-    """Byte-compile all modules in the given directory tree.
-
-    Arguments (only dir is required):
-
-    dir:       the directory to byte-compile
-    maxlevels: maximum recursion level (default 10)
-    ddir:      if given, purported directory name (this is the
-               directory name that will show up in error messages)
-    force:     if 1, force compilation, even if timestamps are up-to-date
-
-    """
-    print 'Listing', dir, '...'
-    try:
-        names = os.listdir(dir)
-    except os.error:
-        print "Can't list", dir
-        names = []
-    names.sort()
-    success = 1
-    for name in names:
-        fullname = os.path.join(dir, name)
-        if ddir:
-            dfile = os.path.join(ddir, name)
-        else:
-            dfile = None
-        if os.path.isfile(fullname):
-            head, tail = name[:-3], name[-3:]
-            if tail == '.py':
-                cfile = fullname + (__debug__ and 'c' or 'o')
-                ftime = os.stat(fullname)[stat.ST_MTIME]
-                try: ctime = os.stat(cfile)[stat.ST_MTIME]
-                except os.error: ctime = 0
-                if (ctime > ftime) and not force: continue
-                print 'Compiling', fullname, '...'
-                try:
-                    py_compile.compile(fullname, None, dfile)
-                except KeyboardInterrupt:
-                    raise KeyboardInterrupt
-                except:
-                    if type(sys.exc_type) == type(''):
-                        exc_type_name = sys.exc_type
-                    else: exc_type_name = sys.exc_type.__name__
-                    print 'Sorry:', exc_type_name + ':',
-                    print sys.exc_value
-                    success = 0
-        elif maxlevels > 0 and \
-             name != os.curdir and name != os.pardir and \
-             os.path.isdir(fullname) and \
-             not os.path.islink(fullname):
-            compile_dir(fullname, maxlevels - 1, dfile, force)
-    return success
-
-def compile_path(skip_curdir=1, maxlevels=0, force=0):
-    """Byte-compile all module on sys.path.
-
-    Arguments (all optional):
-
-    skip_curdir: if true, skip current directory (default true)
-    maxlevels:   max recursion level (default 0)
-    force: as for compile_dir() (default 0)
-
-    """
-    success = 1
-    for dir in sys.path:
-        if (not dir or dir == os.curdir) and skip_curdir:
-            print 'Skipping current directory'
-        else:
-            success = success and compile_dir(dir, maxlevels, None, force)
-    return success
-
-def main():
-    """Script main program."""
-    import getopt
-    try:
-        opts, args = getopt.getopt(sys.argv[1:], 'lfd:')
-    except getopt.error, msg:
-        print msg
-        print "usage: compileall [-l] [-f] [-d destdir] [directory ...]"
-        print "-l: don't recurse down"
-        print "-f: force rebuild even if timestamps are up-to-date"
-        print "-d destdir: purported directory name for error messages"
-        print "if no directory arguments, -l sys.path is assumed"
-        sys.exit(2)
-    maxlevels = 10
-    ddir = None
-    force = 0
-    for o, a in opts:
-        if o == '-l': maxlevels = 0
-        if o == '-d': ddir = a
-        if o == '-f': force = 1
-    if ddir:
-        if len(args) != 1:
-            print "-d destdir require exactly one directory argument"
-            sys.exit(2)
-    success = 1
-    try:
-        if args:
-            for dir in args:
-                success = success and compile_dir(dir, maxlevels, ddir, force)
-        else:
-            success = compile_path()
-    except KeyboardInterrupt:
-        print "\n[interrupt]"
-        success = 0
-    return success
-
-if __name__ == '__main__':
-    sys.exit(not main())
diff --git a/Lib/dos-8x3/configpa.py b/Lib/dos-8x3/configpa.py
deleted file mode 100644
index 5043687..0000000
--- a/Lib/dos-8x3/configpa.py
+++ /dev/null
@@ -1,469 +0,0 @@
-"""Configuration file parser.
-
-A setup file consists of sections, lead by a "[section]" header,
-and followed by "name: value" entries, with continuations and such in
-the style of RFC 822.
-
-The option values can contain format strings which refer to other values in
-the same section, or values in a special [DEFAULT] section.
-
-For example:
-
-    something: %(dir)s/whatever
-
-would resolve the "%(dir)s" to the value of dir.  All reference
-expansions are done late, on demand.
-
-Intrinsic defaults can be specified by passing them into the
-ConfigParser constructor as a dictionary.
-
-class:
-
-ConfigParser -- responsible for for parsing a list of
-                configuration files, and managing the parsed database.
-
-    methods:
-
-    __init__(defaults=None)
-        create the parser and specify a dictionary of intrinsic defaults.  The
-        keys must be strings, the values must be appropriate for %()s string
-        interpolation.  Note that `__name__' is always an intrinsic default;
-        it's value is the section's name.
-
-    sections()
-        return all the configuration section names, sans DEFAULT
-
-    has_section(section)
-        return whether the given section exists
-
-    has_option(section, option)
-        return whether the given option exists in the given section
-
-    options(section)
-        return list of configuration options for the named section
-
-    has_option(section, option)
-        return whether the given section has the given option
-
-    read(filenames)
-        read and parse the list of named configuration files, given by
-        name.  A single filename is also allowed.  Non-existing files
-        are ignored.
-
-    readfp(fp, filename=None)
-        read and parse one configuration file, given as a file object.
-        The filename defaults to fp.name; it is only used in error
-        messages (if fp has no `name' attribute, the string `<???>' is used).
-
-    get(section, option, raw=0, vars=None)
-        return a string value for the named option.  All % interpolations are
-        expanded in the return values, based on the defaults passed into the
-        constructor and the DEFAULT section.  Additional substitutions may be
-        provided using the `vars' argument, which must be a dictionary whose
-        contents override any pre-existing defaults.
-
-    getint(section, options)
-        like get(), but convert value to an integer
-
-    getfloat(section, options)
-        like get(), but convert value to a float
-
-    getboolean(section, options)
-        like get(), but convert value to a boolean (currently defined as 0 or
-        1, only)
-
-    remove_section(section)
-	remove the given file section and all its options
-
-    remove_option(section, option)
-	remove the given option from the given section
-
-    set(section, option, value)
-        set the given option
-
-    write(fp)
-	write the configuration state in .ini format
-"""
-
-import sys
-import string
-import re
-
-DEFAULTSECT = "DEFAULT"
-
-MAX_INTERPOLATION_DEPTH = 10
-
-
-
-# exception classes
-class Error:
-    def __init__(self, msg=''):
-        self._msg = msg
-    def __repr__(self):
-        return self._msg
-
-class NoSectionError(Error):
-    def __init__(self, section):
-        Error.__init__(self, 'No section: %s' % section)
-        self.section = section
-
-class DuplicateSectionError(Error):
-    def __init__(self, section):
-        Error.__init__(self, "Section %s already exists" % section)
-        self.section = section
-
-class NoOptionError(Error):
-    def __init__(self, option, section):
-        Error.__init__(self, "No option `%s' in section: %s" %
-                       (option, section))
-        self.option = option
-        self.section = section
-
-class InterpolationError(Error):
-    def __init__(self, reference, option, section, rawval):
-        Error.__init__(self,
-                       "Bad value substitution:\n"
-                       "\tsection: [%s]\n"
-                       "\toption : %s\n"
-                       "\tkey    : %s\n"
-                       "\trawval : %s\n"
-                       % (section, option, reference, rawval))
-        self.reference = reference
-        self.option = option
-        self.section = section
-
-class InterpolationDepthError(Error):
-    def __init__(self, option, section, rawval):
-        Error.__init__(self,
-                       "Value interpolation too deeply recursive:\n"
-                       "\tsection: [%s]\n"
-                       "\toption : %s\n"
-                       "\trawval : %s\n"
-                       % (section, option, rawval))
-        self.option = option
-        self.section = section
-
-class ParsingError(Error):
-    def __init__(self, filename):
-        Error.__init__(self, 'File contains parsing errors: %s' % filename)
-        self.filename = filename
-        self.errors = []
-
-    def append(self, lineno, line):
-        self.errors.append((lineno, line))
-        self._msg = self._msg + '\n\t[line %2d]: %s' % (lineno, line)
-
-class MissingSectionHeaderError(ParsingError):
-    def __init__(self, filename, lineno, line):
-        Error.__init__(
-            self,
-            'File contains no section headers.\nfile: %s, line: %d\n%s' %
-            (filename, lineno, line))
-        self.filename = filename
-        self.lineno = lineno
-        self.line = line
-
-
-
-class ConfigParser:
-    def __init__(self, defaults=None):
-        self.__sections = {}
-        if defaults is None:
-            self.__defaults = {}
-        else:
-            self.__defaults = defaults
-
-    def defaults(self):
-        return self.__defaults
-
-    def sections(self):
-        """Return a list of section names, excluding [DEFAULT]"""
-        # self.__sections will never have [DEFAULT] in it
-        return self.__sections.keys()
-
-    def add_section(self, section):
-        """Create a new section in the configuration.
-
-        Raise DuplicateSectionError if a section by the specified name
-        already exists.
-        """
-        if self.__sections.has_key(section):
-            raise DuplicateSectionError(section)
-        self.__sections[section] = {}
-
-    def has_section(self, section):
-        """Indicate whether the named section is present in the configuration.
-
-        The DEFAULT section is not acknowledged.
-        """
-        return section in self.sections()
-
-    def options(self, section):
-        """Return a list of option names for the given section name."""
-        try:
-            opts = self.__sections[section].copy()
-        except KeyError:
-            raise NoSectionError(section)
-        opts.update(self.__defaults)
-        if opts.has_key('__name__'):
-            del opts['__name__']
-        return opts.keys()
-
-    def has_option(self, section, option):
-        """Return whether the given section has the given option."""
-        return option in self.options(section)
-
-    def read(self, filenames):
-        """Read and parse a filename or a list of filenames.
-        
-        Files that cannot be opened are silently ignored; this is
-        designed so that you can specify a list of potential
-        configuration file locations (e.g. current directory, user's
-        home directory, systemwide directory), and all existing
-        configuration files in the list will be read.  A single
-        filename may also be given.
-        """
-        if type(filenames) in [type(''), type(u'')]:
-            filenames = [filenames]
-        for filename in filenames:
-            try:
-                fp = open(filename)
-            except IOError:
-                continue
-            self.__read(fp, filename)
-            fp.close()
-
-    def readfp(self, fp, filename=None):
-        """Like read() but the argument must be a file-like object.
-
-        The `fp' argument must have a `readline' method.  Optional
-        second argument is the `filename', which if not given, is
-        taken from fp.name.  If fp has no `name' attribute, `<???>' is
-        used.
-
-        """
-        if filename is None:
-            try:
-                filename = fp.name
-            except AttributeError:
-                filename = '<???>'
-        self.__read(fp, filename)
-
-    def get(self, section, option, raw=0, vars=None):
-        """Get an option value for a given section.
-
-        All % interpolations are expanded in the return values, based on the
-        defaults passed into the constructor, unless the optional argument
-        `raw' is true.  Additional substitutions may be provided using the
-        `vars' argument, which must be a dictionary whose contents overrides
-        any pre-existing defaults.
-
-        The section DEFAULT is special.
-        """
-        try:
-            sectdict = self.__sections[section].copy()
-        except KeyError:
-            if section == DEFAULTSECT:
-                sectdict = {}
-            else:
-                raise NoSectionError(section)
-        d = self.__defaults.copy()
-        d.update(sectdict)
-        # Update with the entry specific variables
-        if vars:
-            d.update(vars)
-        option = self.optionxform(option)
-        try:
-            rawval = d[option]
-        except KeyError:
-            raise NoOptionError(option, section)
-
-        if raw:
-            return rawval
-
-        # do the string interpolation
-        value = rawval                  # Make it a pretty variable name
-        depth = 0                       
-        while depth < 10:               # Loop through this until it's done
-            depth = depth + 1
-            if string.find(value, "%(") >= 0:
-                try:
-                    value = value % d
-                except KeyError, key:
-                    raise InterpolationError(key, option, section, rawval)
-            else:
-                break
-        if value.find("%(") >= 0:
-            raise InterpolationDepthError(option, section, rawval)
-        return value
-    
-    def __get(self, section, conv, option):
-        return conv(self.get(section, option))
-
-    def getint(self, section, option):
-        return self.__get(section, string.atoi, option)
-
-    def getfloat(self, section, option):
-        return self.__get(section, string.atof, option)
-
-    def getboolean(self, section, option):
-        v = self.get(section, option)
-        val = string.atoi(v)
-        if val not in (0, 1):
-            raise ValueError, 'Not a boolean: %s' % v
-        return val
-
-    def optionxform(self, optionstr):
-        return string.lower(optionstr)
-
-    def has_option(self, section, option):
-        """Check for the existence of a given option in a given section."""
-        if not section or section == "DEFAULT":
-            return self.__defaults.has_key(option)
-        elif not self.has_section(section):
-            return 0
-        else:
-            return self.__sections[section].has_key(option)
-
-    def set(self, section, option, value):
-        """Set an option."""
-        if not section or section == "DEFAULT":
-            sectdict = self.__defaults
-        else:
-            try:
-                sectdict = self.__sections[section]
-            except KeyError:
-                raise NoSectionError(section)
-        sectdict[option] = value
-
-    def write(self, fp):
-        """Write an .ini-format representation of the configuration state."""
-        if self.__defaults:
-            fp.write("[DEFAULT]\n")
-            for (key, value) in self.__defaults.items():
-                fp.write("%s = %s\n" % (key, value))
-            fp.write("\n")
-        for section in self.sections():
-            fp.write("[" + section + "]\n")
-            sectdict = self.__sections[section]
-            for (key, value) in sectdict.items():
-                if key == "__name__":
-                    continue
-                fp.write("%s = %s\n" % (key, value))
-            fp.write("\n")
-
-    def remove_option(self, section, option):
-        """Remove an option."""
-        if not section or section == "DEFAULT":
-            sectdict = self.__defaults
-        else:
-            try:
-                sectdict = self.__sections[section]
-            except KeyError:
-                raise NoSectionError(section)
-        existed = sectdict.has_key(key)
-        if existed:
-            del sectdict[key]
-        return existed
-
-    def remove_section(self, section):
-        """Remove a file section."""
-        if self.__sections.has_key(section):
-            del self.__sections[section]
-            return 1
-        else:
-            return 0
-
-    #
-    # Regular expressions for parsing section headers and options.  Note a
-    # slight semantic change from the previous version, because of the use
-    # of \w, _ is allowed in section header names.
-    SECTCRE = re.compile(
-        r'\['                                 # [
-        r'(?P<header>[-\w_.*,(){} ]+)'        # a lot of stuff found by IvL
-        r'\]'                                 # ]
-        )
-    OPTCRE = re.compile(
-        r'(?P<option>[-\w_.*,(){}]+)'         # a lot of stuff found by IvL
-        r'[ \t]*(?P<vi>[:=])[ \t]*'           # any number of space/tab,
-                                              # followed by separator
-                                              # (either : or =), followed
-                                              # by any # space/tab
-        r'(?P<value>.*)$'                     # everything up to eol
-        )
-
-    def __read(self, fp, fpname):
-        """Parse a sectioned setup file.
-
-        The sections in setup file contains a title line at the top,
-        indicated by a name in square brackets (`[]'), plus key/value
-        options lines, indicated by `name: value' format lines.
-        Continuation are represented by an embedded newline then
-        leading whitespace.  Blank lines, lines beginning with a '#',
-        and just about everything else is ignored.
-        """
-        cursect = None                            # None, or a dictionary
-        optname = None
-        lineno = 0
-        e = None                                  # None, or an exception
-        while 1:
-            line = fp.readline()
-            if not line:
-                break
-            lineno = lineno + 1
-            # comment or blank line?
-            if string.strip(line) == '' or line[0] in '#;':
-                continue
-            if string.lower(string.split(line)[0]) == 'rem' \
-               and line[0] in "rR":      # no leading whitespace
-                continue
-            # continuation line?
-            if line[0] in ' \t' and cursect is not None and optname:
-                value = string.strip(line)
-                if value:
-                    cursect[optname] = cursect[optname] + '\n ' + value
-            # a section header or option header?
-            else:
-                # is it a section header?
-                mo = self.SECTCRE.match(line)
-                if mo:
-                    sectname = mo.group('header')
-                    if self.__sections.has_key(sectname):
-                        cursect = self.__sections[sectname]
-                    elif sectname == DEFAULTSECT:
-                        cursect = self.__defaults
-                    else:
-                        cursect = {'__name__': sectname}
-                        self.__sections[sectname] = cursect
-                    # So sections can't start with a continuation line
-                    optname = None
-                # no section header in the file?
-                elif cursect is None:
-                    raise MissingSectionHeaderError(fpname, lineno, `line`)
-                # an option line?
-                else:
-                    mo = self.OPTCRE.match(line)
-                    if mo:
-                        optname, vi, optval = mo.group('option', 'vi', 'value')
-                        if vi in ('=', ':') and ';' in optval:
-                            # ';' is a comment delimiter only if it follows
-                            # a spacing character
-                            pos = string.find(optval, ';')
-                            if pos and optval[pos-1] in string.whitespace:
-                                optval = optval[:pos]
-                        optval = string.strip(optval)
-                        # allow empty values
-                        if optval == '""':
-                            optval = ''
-                        cursect[self.optionxform(optname)] = optval
-                    else:
-                        # a non-fatal parsing error occurred.  set up the
-                        # exception but keep going. the exception will be
-                        # raised at the end of the file and will contain a
-                        # list of all bogus lines
-                        if not e:
-                            e = ParsingError(fpname)
-                        e.append(lineno, `line`)
-        # if any parsing errors occurred, raise an exception
-        if e:
-            raise e
diff --git a/Lib/dos-8x3/cookie.py b/Lib/dos-8x3/cookie.py
deleted file mode 100644
index 67259af..0000000
--- a/Lib/dos-8x3/cookie.py
+++ /dev/null
@@ -1,726 +0,0 @@
-#!/usr/bin/env python
-#
-
-####
-# Copyright 2000 by Timothy O'Malley <timo@alum.mit.edu>
-# 
-#                All Rights Reserved
-# 
-# Permission to use, copy, modify, and distribute this software
-# and its documentation for any purpose and without fee is hereby
-# granted, provided that the above copyright notice appear in all
-# copies and that both that copyright notice and this permission
-# notice appear in supporting documentation, and that the name of
-# Timothy O'Malley  not be used in advertising or publicity
-# pertaining to distribution of the software without specific, written
-# prior permission. 
-# 
-# Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-# SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-# AND FITNESS, IN NO EVENT SHALL Timothy O'Malley BE LIABLE FOR
-# ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-# WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-# ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE. 
-#
-####
-# 
-# Id: Cookie.py,v 2.29 2000/08/23 05:28:49 timo Exp 
-#   by Timothy O'Malley <timo@alum.mit.edu>
-#
-#  Cookie.py is a Python module for the handling of HTTP
-#  cookies as a Python dictionary.  See RFC 2109 for more
-#  information on cookies.
-#
-#  The original idea to treat Cookies as a dictionary came from
-#  Dave Mitchell (davem@magnet.com) in 1995, when he released the
-#  first version of nscookie.py.
-#
-####
-
-"""
-Here's a sample session to show how to use this module.
-At the moment, this is the only documentation.
-
-The Basics
-----------
-
-Importing is easy..
-
-   >>> import Cookie
-
-Most of the time you start by creating a cookie.  Cookies come in
-three flavors, each with slighly different encoding semanitcs, but
-more on that later.
-
-   >>> C = Cookie.SimpleCookie()
-   >>> C = Cookie.SerialCookie()
-   >>> C = Cookie.SmartCookie()
-
-[Note: Long-time users of Cookie.py will remember using
-Cookie.Cookie() to create an Cookie object.  Although deprecated, it
-is still supported by the code.  See the Backward Compatibility notes
-for more information.]
-
-Once you've created your Cookie, you can add values just as if it were
-a dictionary.
-
-   >>> C = Cookie.SmartCookie()
-   >>> C["fig"] = "newton"
-   >>> C["sugar"] = "wafer"
-   >>> print C
-   Set-Cookie: sugar=wafer;
-   Set-Cookie: fig=newton;
-
-Notice that the printable representation of a Cookie is the
-appropriate format for a Set-Cookie: header.  This is the
-default behavior.  You can change the header and printed
-attributes by using the the .output() function
-
-   >>> C = Cookie.SmartCookie()
-   >>> C["rocky"] = "road"
-   >>> C["rocky"]["path"] = "/cookie"
-   >>> print C.output(header="Cookie:")
-   Cookie: rocky=road; Path=/cookie;
-   >>> print C.output(attrs=[], header="Cookie:")
-   Cookie: rocky=road;
-
-The load() method of a Cookie extracts cookies from a string.  In a
-CGI script, you would use this method to extract the cookies from the
-HTTP_COOKIE environment variable.
-
-   >>> C = Cookie.SmartCookie()
-   >>> C.load("chips=ahoy; vienna=finger")
-   >>> print C
-   Set-Cookie: vienna=finger;
-   Set-Cookie: chips=ahoy;
-
-The load() method is darn-tootin smart about identifying cookies
-within a string.  Escaped quotation marks, nested semicolons, and other
-such trickeries do not confuse it.
-
-   >>> C = Cookie.SmartCookie()
-   >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
-   >>> print C
-   Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;";
-
-Each element of the Cookie also supports all of the RFC 2109
-Cookie attributes.  Here's an example which sets the Path
-attribute.
-
-   >>> C = Cookie.SmartCookie()
-   >>> C["oreo"] = "doublestuff"
-   >>> C["oreo"]["path"] = "/"
-   >>> print C
-   Set-Cookie: oreo="doublestuff"; Path=/;
-
-Each dictionary element has a 'value' attribute, which gives you
-back the value associated with the key. 
-
-   >>> C = Cookie.SmartCookie()
-   >>> C["twix"] = "none for you"
-   >>> C["twix"].value
-   'none for you'
-
-
-A Bit More Advanced
--------------------
-
-As mentioned before, there are three different flavors of Cookie
-objects, each with different encoding/decoding semantics.  This
-section briefly discusses the differences.
-
-SimpleCookie
-
-The SimpleCookie expects that all values should be standard strings.
-Just to be sure, SimpleCookie invokes the str() builtin to convert
-the value to a string, when the values are set dictionary-style.
-
-   >>> C = Cookie.SimpleCookie()
-   >>> C["number"] = 7
-   >>> C["string"] = "seven"
-   >>> C["number"].value
-   '7'
-   >>> C["string"].value
-   'seven'
-   >>> print C
-   Set-Cookie: number=7;
-   Set-Cookie: string=seven;
-
- 
-SerialCookie
-
-The SerialCookie expects that all values should be serialized using
-cPickle (or pickle, if cPickle isn't available).  As a result of
-serializing, SerialCookie can save almost any Python object to a
-value, and recover the exact same object when the cookie has been
-returned.  (SerialCookie can yield some strange-looking cookie
-values, however.)
-
-   >>> C = Cookie.SerialCookie()
-   >>> C["number"] = 7
-   >>> C["string"] = "seven"
-   >>> C["number"].value
-   7
-   >>> C["string"].value
-   'seven'
-   >>> print C
-   Set-Cookie: number="I7\012.";
-   Set-Cookie: string="S'seven'\012p1\012.";
-
-Be warned, however, if SerialCookie cannot de-serialize a value (because
-it isn't a valid pickle'd object), IT WILL RAISE AN EXCEPTION.
-
-
-SmartCookie
-
-The SmartCookie combines aspects of each of the other two flavors.
-When setting a value in a dictionary-fashion, the SmartCookie will
-serialize (ala cPickle) the value *if and only if* it isn't a
-Python string.  String objects are *not* serialized.  Similarly,
-when the load() method parses out values, it attempts to de-serialize
-the value.  If it fails, then it fallsback to treating the value
-as a string.
-
-   >>> C = Cookie.SmartCookie()
-   >>> C["number"] = 7
-   >>> C["string"] = "seven"
-   >>> C["number"].value
-   7
-   >>> C["string"].value
-   'seven'
-   >>> print C
-   Set-Cookie: number="I7\012.";
-   Set-Cookie: string=seven;
-
-
-Backwards Compatibility
------------------------
-
-In order to keep compatibilty with earlier versions of Cookie.py,
-it is still possible to use Cookie.Cookie() to create a Cookie.  In
-fact, this simply returns a SmartCookie.
-
-   >>> C = Cookie.Cookie()
-   >>> C.__class__
-   <class Cookie.SmartCookie at 99f88>
-
-
-Finis.
-"""  #"
-#     ^
-#     |----helps out font-lock
-
-#
-# Import our required modules
-# 
-import string, sys
-from UserDict import UserDict
-
-try:
-    from cPickle import dumps, loads
-except ImportError:
-    from pickle import dumps, loads
-
-try:
-    import re
-except ImportError:
-    raise ImportError, "Cookie.py requires 're' from Python 1.5 or later"
-
-
-#
-# Define an exception visible to External modules
-#
-class CookieError(Exception):
-    pass
-
-
-# These quoting routines conform to the RFC2109 specification, which in
-# turn references the character definitions from RFC2068.  They provide
-# a two-way quoting algorithm.  Any non-text character is translated
-# into a 4 character sequence: a forward-slash followed by the
-# three-digit octal equivalent of the character.  Any '\' or '"' is
-# quoted with a preceeding '\' slash.
-# 
-# These are taken from RFC2068 and RFC2109.
-#       _LegalChars       is the list of chars which don't require "'s
-#       _Translator       hash-table for fast quoting
-#
-_LegalChars       = string.letters + string.digits + "!#$%&'*+-.^_`|~"
-_Translator       = {
-    '\000' : '\\000',  '\001' : '\\001',  '\002' : '\\002',
-    '\003' : '\\003',  '\004' : '\\004',  '\005' : '\\005',
-    '\006' : '\\006',  '\007' : '\\007',  '\010' : '\\010',
-    '\011' : '\\011',  '\012' : '\\012',  '\013' : '\\013',
-    '\014' : '\\014',  '\015' : '\\015',  '\016' : '\\016',
-    '\017' : '\\017',  '\020' : '\\020',  '\021' : '\\021',
-    '\022' : '\\022',  '\023' : '\\023',  '\024' : '\\024',
-    '\025' : '\\025',  '\026' : '\\026',  '\027' : '\\027',
-    '\030' : '\\030',  '\031' : '\\031',  '\032' : '\\032',
-    '\033' : '\\033',  '\034' : '\\034',  '\035' : '\\035',
-    '\036' : '\\036',  '\037' : '\\037',
-
-    '"' : '\\"',       '\\' : '\\\\',
-
-    '\177' : '\\177',  '\200' : '\\200',  '\201' : '\\201',
-    '\202' : '\\202',  '\203' : '\\203',  '\204' : '\\204',
-    '\205' : '\\205',  '\206' : '\\206',  '\207' : '\\207',
-    '\210' : '\\210',  '\211' : '\\211',  '\212' : '\\212',
-    '\213' : '\\213',  '\214' : '\\214',  '\215' : '\\215',
-    '\216' : '\\216',  '\217' : '\\217',  '\220' : '\\220',
-    '\221' : '\\221',  '\222' : '\\222',  '\223' : '\\223',
-    '\224' : '\\224',  '\225' : '\\225',  '\226' : '\\226',
-    '\227' : '\\227',  '\230' : '\\230',  '\231' : '\\231',
-    '\232' : '\\232',  '\233' : '\\233',  '\234' : '\\234',
-    '\235' : '\\235',  '\236' : '\\236',  '\237' : '\\237',
-    '\240' : '\\240',  '\241' : '\\241',  '\242' : '\\242',
-    '\243' : '\\243',  '\244' : '\\244',  '\245' : '\\245',
-    '\246' : '\\246',  '\247' : '\\247',  '\250' : '\\250',
-    '\251' : '\\251',  '\252' : '\\252',  '\253' : '\\253',
-    '\254' : '\\254',  '\255' : '\\255',  '\256' : '\\256',
-    '\257' : '\\257',  '\260' : '\\260',  '\261' : '\\261',
-    '\262' : '\\262',  '\263' : '\\263',  '\264' : '\\264',
-    '\265' : '\\265',  '\266' : '\\266',  '\267' : '\\267',
-    '\270' : '\\270',  '\271' : '\\271',  '\272' : '\\272',
-    '\273' : '\\273',  '\274' : '\\274',  '\275' : '\\275',
-    '\276' : '\\276',  '\277' : '\\277',  '\300' : '\\300',
-    '\301' : '\\301',  '\302' : '\\302',  '\303' : '\\303',
-    '\304' : '\\304',  '\305' : '\\305',  '\306' : '\\306',
-    '\307' : '\\307',  '\310' : '\\310',  '\311' : '\\311',
-    '\312' : '\\312',  '\313' : '\\313',  '\314' : '\\314',
-    '\315' : '\\315',  '\316' : '\\316',  '\317' : '\\317',
-    '\320' : '\\320',  '\321' : '\\321',  '\322' : '\\322',
-    '\323' : '\\323',  '\324' : '\\324',  '\325' : '\\325',
-    '\326' : '\\326',  '\327' : '\\327',  '\330' : '\\330',
-    '\331' : '\\331',  '\332' : '\\332',  '\333' : '\\333',
-    '\334' : '\\334',  '\335' : '\\335',  '\336' : '\\336',
-    '\337' : '\\337',  '\340' : '\\340',  '\341' : '\\341',
-    '\342' : '\\342',  '\343' : '\\343',  '\344' : '\\344',
-    '\345' : '\\345',  '\346' : '\\346',  '\347' : '\\347',
-    '\350' : '\\350',  '\351' : '\\351',  '\352' : '\\352',
-    '\353' : '\\353',  '\354' : '\\354',  '\355' : '\\355',
-    '\356' : '\\356',  '\357' : '\\357',  '\360' : '\\360',
-    '\361' : '\\361',  '\362' : '\\362',  '\363' : '\\363',
-    '\364' : '\\364',  '\365' : '\\365',  '\366' : '\\366',
-    '\367' : '\\367',  '\370' : '\\370',  '\371' : '\\371',
-    '\372' : '\\372',  '\373' : '\\373',  '\374' : '\\374',
-    '\375' : '\\375',  '\376' : '\\376',  '\377' : '\\377'
-    }
-
-def _quote(str, LegalChars=_LegalChars,
-    join=string.join, idmap=string._idmap, translate=string.translate):
-    #
-    # If the string does not need to be double-quoted,
-    # then just return the string.  Otherwise, surround
-    # the string in doublequotes and precede quote (with a \)
-    # special characters.
-    #
-    if "" == translate(str, idmap, LegalChars):
-        return str
-    else:
-        return '"' + join( map(_Translator.get, str, str), "" ) + '"'    
-# end _quote
-
-
-_OctalPatt = re.compile(r"\\[0-3][0-7][0-7]")
-_QuotePatt = re.compile(r"[\\].")
-
-def _unquote(str, join=string.join, atoi=string.atoi):
-    # If there aren't any doublequotes,
-    # then there can't be any special characters.  See RFC 2109.
-    if  len(str) < 2:
-        return str
-    if str[0] != '"' or str[-1] != '"':
-        return str
-
-    # We have to assume that we must decode this string.
-    # Down to work.
-
-    # Remove the "s
-    str = str[1:-1]
-
-    # Check for special sequences.  Examples:
-    #    \012 --> \n
-    #    \"   --> "
-    #
-    i = 0
-    n = len(str)
-    res = []
-    while 0 <= i < n:
-        Omatch = _OctalPatt.search(str, i)
-        Qmatch = _QuotePatt.search(str, i)
-        if not Omatch and not Qmatch:              # Neither matched
-            res.append(str[i:])
-            break
-        # else:
-        j = k = -1
-        if Omatch: j = Omatch.start(0)
-        if Qmatch: k = Qmatch.start(0)
-        if Qmatch and ( not Omatch or k < j ):     # QuotePatt matched
-            res.append(str[i:k])
-            res.append(str[k+1])
-            i = k+2
-        else:                                      # OctalPatt matched
-            res.append(str[i:j])
-            res.append( chr( atoi(str[j+1:j+4], 8) ) )
-            i = j+4
-    return join(res, "")
-# end _unquote
-
-# The _getdate() routine is used to set the expiration time in
-# the cookie's HTTP header.      By default, _getdate() returns the
-# current time in the appropriate "expires" format for a 
-# Set-Cookie header.     The one optional argument is an offset from
-# now, in seconds.      For example, an offset of -3600 means "one hour ago".
-# The offset may be a floating point number.
-#
-
-_weekdayname = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
-
-_monthname = [None,
-              'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
-              'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
-
-def _getdate(future=0, weekdayname=_weekdayname, monthname=_monthname):
-    from time import gmtime, time
-    now = time()
-    year, month, day, hh, mm, ss, wd, y, z = gmtime(now + future)
-    return "%s, %02d-%3s-%4d %02d:%02d:%02d GMT" % \
-           (weekdayname[wd], day, monthname[month], year, hh, mm, ss)
-
-
-#
-# A class to hold ONE key,value pair.
-# In a cookie, each such pair may have several attributes.
-#       so this class is used to keep the attributes associated
-#       with the appropriate key,value pair.
-# This class also includes a coded_value attribute, which
-#       is used to hold the network representation of the
-#       value.  This is most useful when Python objects are
-#       pickled for network transit.
-#
-
-class Morsel(UserDict):
-    # RFC 2109 lists these attributes as reserved:
-    #   path       comment         domain
-    #   max-age    secure      version
-    # 
-    # For historical reasons, these attributes are also reserved:
-    #   expires
-    #
-    # This dictionary provides a mapping from the lowercase
-    # variant on the left to the appropriate traditional
-    # formatting on the right.
-    _reserved = { "expires" : "expires",
-                   "path"        : "Path",
-                   "comment" : "Comment",
-                   "domain"      : "Domain",
-                   "max-age" : "Max-Age",
-                   "secure"      : "secure",
-                   "version" : "Version",
-                   }
-    _reserved_keys = _reserved.keys()
-
-    def __init__(self):
-        # Set defaults
-        self.key = self.value = self.coded_value = None
-        UserDict.__init__(self)
-
-        # Set default attributes
-        for K in self._reserved_keys:
-            UserDict.__setitem__(self, K, "")
-    # end __init__
-
-    def __setitem__(self, K, V):
-        K = string.lower(K)
-        if not K in self._reserved_keys:
-            raise CookieError("Invalid Attribute %s" % K)
-        UserDict.__setitem__(self, K, V)
-    # end __setitem__
-
-    def isReservedKey(self, K):
-        return string.lower(K) in self._reserved_keys
-    # end isReservedKey
-
-    def set(self, key, val, coded_val,
-            LegalChars=_LegalChars,
-            idmap=string._idmap, translate=string.translate ):
-        # First we verify that the key isn't a reserved word
-        # Second we make sure it only contains legal characters
-        if string.lower(key) in self._reserved_keys:
-            raise CookieError("Attempt to set a reserved key: %s" % key)
-        if "" != translate(key, idmap, LegalChars):
-            raise CookieError("Illegal key value: %s" % key)
-
-        # It's a good key, so save it.
-        self.key                 = key
-        self.value               = val
-        self.coded_value         = coded_val
-    # end set
-
-    def output(self, attrs=None, header = "Set-Cookie:"):
-        return "%s %s" % ( header, self.OutputString(attrs) )
-
-    __str__ = output
-
-    def __repr__(self):
-        return '<%s: %s=%s>' % (self.__class__.__name__,
-                                self.key, repr(self.value) )
-
-    def js_output(self, attrs=None):
-        # Print javascript
-        return """
-        <SCRIPT LANGUAGE="JavaScript">
-        <!-- begin hiding
-        document.cookie = \"%s\"
-        // end hiding -->
-        </script>
-        """ % ( self.OutputString(attrs), )
-    # end js_output()
-
-    def OutputString(self, attrs=None):
-        # Build up our result
-        #
-        result = []
-        RA = result.append
-
-        # First, the key=value pair
-        RA("%s=%s;" % (self.key, self.coded_value))
-
-        # Now add any defined attributes
-        if attrs == None:
-            attrs = self._reserved_keys
-        for K,V in self.items():
-            if V == "": continue
-            if K not in attrs: continue
-            if K == "expires" and type(V) == type(1):
-                RA("%s=%s;" % (self._reserved[K], _getdate(V)))
-            elif K == "max-age" and type(V) == type(1):
-                RA("%s=%d;" % (self._reserved[K], V))
-            elif K == "secure":
-                RA("%s;" % self._reserved[K])
-            else:
-                RA("%s=%s;" % (self._reserved[K], V))
-
-        # Return the result
-        return string.join(result, " ")
-    # end OutputString
-# end Morsel class
-
-
-
-#
-# Pattern for finding cookie
-#
-# This used to be strict parsing based on the RFC2109 and RFC2068
-# specifications.  I have since discovered that MSIE 3.0x doesn't
-# follow the character rules outlined in those specs.  As a
-# result, the parsing rules here are less strict.
-#
-
-_LegalCharsPatt  = r"[\w\d!#%&'~_`><@,:/\$\*\+\-\.\^\|\)\(\?\}\{]"
-_CookiePattern = re.compile(
-    r"(?x)"                       # This is a Verbose pattern
-    r"(?P<key>"                   # Start of group 'key'
-    ""+ _LegalCharsPatt +"+"        # Any word of at least one letter
-    r")"                          # End of group 'key'
-    r"\s*=\s*"                    # Equal Sign
-    r"(?P<val>"                   # Start of group 'val'
-    r'"(?:[^\\"]|\\.)*"'            # Any doublequoted string
-    r"|"                            # or
-    ""+ _LegalCharsPatt +"*"        # Any word or empty string
-    r")"                          # End of group 'val'
-    r"\s*;?"                      # Probably ending in a semi-colon
-    )
-
-
-# At long last, here is the cookie class.
-#   Using this class is almost just like using a dictionary.
-# See this module's docstring for example usage.
-#
-class BaseCookie(UserDict):
-    # A container class for a set of Morsels
-    #
-
-    def value_decode(self, val):
-        """real_value, coded_value = value_decode(STRING)
-        Called prior to setting a cookie's value from the network
-        representation.  The VALUE is the value read from HTTP
-        header.
-        Override this function to modify the behavior of cookies.
-        """
-        return val, val
-    # end value_encode
-
-    def value_encode(self, val):
-        """real_value, coded_value = value_encode(VALUE)
-        Called prior to setting a cookie's value from the dictionary
-        representation.  The VALUE is the value being assigned.
-        Override this function to modify the behavior of cookies.
-        """
-        strval = str(val)
-        return strval, strval
-    # end value_encode
-
-    def __init__(self, input=None):
-        UserDict.__init__(self)
-        if input: self.load(input)
-    # end __init__
-
-    def __set(self, key, real_value, coded_value):
-        """Private method for setting a cookie's value"""
-        M = self.get(key, Morsel())
-        M.set(key, real_value, coded_value)
-        UserDict.__setitem__(self, key, M)
-    # end __set
-
-    def __setitem__(self, key, value):
-        """Dictionary style assignment."""
-        rval, cval = self.value_encode(value)
-        self.__set(key, rval, cval)
-    # end __setitem__
-
-    def output(self, attrs=None, header="Set-Cookie:", sep="\n"):
-        """Return a string suitable for HTTP."""
-        result = []
-        for K,V in self.items():
-            result.append( V.output(attrs, header) )
-        return string.join(result, sep)
-    # end output
-
-    __str__ = output
-
-    def __repr__(self):
-        L = []
-        for K,V in self.items():
-            L.append( '%s=%s' % (K,repr(V.value) ) )
-        return '<%s: %s>' % (self.__class__.__name__, string.join(L))
-
-    def js_output(self, attrs=None):
-        """Return a string suitable for JavaScript."""
-        result = []
-        for K,V in self.items():
-            result.append( V.js_output(attrs) )
-        return string.join(result, "")
-    # end js_output
-
-    def load(self, rawdata):
-        """Load cookies from a string (presumably HTTP_COOKIE) or
-        from a dictionary.  Loading cookies from a dictionary 'd'
-        is equivalent to calling:
-            map(Cookie.__setitem__, d.keys(), d.values())
-        """
-        if type(rawdata) == type(""):
-            self.__ParseString(rawdata)
-        else:
-            self.update(rawdata)
-        return
-    # end load()
-
-    def __ParseString(self, str, patt=_CookiePattern):
-        i = 0            # Our starting point
-        n = len(str)     # Length of string
-        M = None         # current morsel
-
-        while 0 <= i < n:
-            # Start looking for a cookie
-            match = patt.search(str, i)
-            if not match: break          # No more cookies
-
-            K,V = match.group("key"), match.group("val")
-            i = match.end(0)
-
-            # Parse the key, value in case it's metainfo
-            if K[0] == "$":
-                # We ignore attributes which pertain to the cookie
-                # mechanism as a whole.  See RFC 2109.
-                # (Does anyone care?)
-                if M:
-                    M[ K[1:] ] = V
-            elif string.lower(K) in Morsel._reserved_keys:
-                if M:
-                    M[ K ] = _unquote(V)
-            else:
-                rval, cval = self.value_decode(V)
-                self.__set(K, rval, cval)
-                M = self[K]
-    # end __ParseString
-# end BaseCookie class
-
-class SimpleCookie(BaseCookie):
-    """SimpleCookie
-    SimpleCookie supports strings as cookie values.  When setting
-    the value using the dictionary assignment notation, SimpleCookie
-    calls the builtin str() to convert the value to a string.  Values
-    received from HTTP are kept as strings.
-    """
-    def value_decode(self, val):
-        return _unquote( val ), val
-    def value_encode(self, val):
-        strval = str(val)
-        return strval, _quote( strval )
-# end SimpleCookie
-
-class SerialCookie(BaseCookie):
-    """SerialCookie
-    SerialCookie supports arbitrary objects as cookie values. All
-    values are serialized (using cPickle) before being sent to the
-    client.  All incoming values are assumed to be valid Pickle
-    representations.  IF AN INCOMING VALUE IS NOT IN A VALID PICKLE
-    FORMAT, THEN AN EXCEPTION WILL BE RAISED.
-
-    Note: Large cookie values add overhead because they must be
-    retransmitted on every HTTP transaction.
-
-    Note: HTTP has a 2k limit on the size of a cookie.  This class
-    does not check for this limit, so be careful!!!
-    """
-    def value_decode(self, val):
-        # This could raise an exception!
-        return loads( _unquote(val) ), val
-    def value_encode(self, val):
-        return val, _quote( dumps(val) )
-# end SerialCookie
-
-class SmartCookie(BaseCookie):
-    """SmartCookie
-    SmartCookie supports arbitrary objects as cookie values.  If the
-    object is a string, then it is quoted.  If the object is not a
-    string, however, then SmartCookie will use cPickle to serialize
-    the object into a string representation.
-
-    Note: Large cookie values add overhead because they must be
-    retransmitted on every HTTP transaction.
-
-    Note: HTTP has a 2k limit on the size of a cookie.  This class
-    does not check for this limit, so be careful!!!
-    """
-    def value_decode(self, val):
-        strval = _unquote(val)
-        try:
-            return loads(strval), val
-        except:
-            return strval, val
-    def value_encode(self, val):
-        if type(val) == type(""):
-            return val, _quote(val)
-        else:
-            return val, _quote( dumps(val) )
-# end SmartCookie
-
-
-###########################################################
-# Backwards Compatibility:  Don't break any existing code!
-
-# We provide Cookie() as an alias for SmartCookie()
-Cookie = SmartCookie
-
-#
-###########################################################
-
-
-
-#Local Variables:
-#tab-width: 4
-#end:
diff --git a/Lib/dos-8x3/fileinpu.py b/Lib/dos-8x3/fileinpu.py
deleted file mode 100644
index d1b7617..0000000
--- a/Lib/dos-8x3/fileinpu.py
+++ /dev/null
@@ -1,268 +0,0 @@
-"""Helper class to quickly write a loop over all standard input files.
-
-Typical use is:
-
-    import fileinput
-    for line in fileinput.input():
-        process(line)
-
-This iterates over the lines of all files listed in sys.argv[1:],
-defaulting to sys.stdin if the list is empty.  If a filename is '-' it
-is also replaced by sys.stdin.  To specify an alternative list of
-filenames, pass it as the argument to input().  A single file name is
-also allowed.
-
-Functions filename(), lineno() return the filename and cumulative line
-number of the line that has just been read; filelineno() returns its
-line number in the current file; isfirstline() returns true iff the
-line just read is the first line of its file; isstdin() returns true
-iff the line was read from sys.stdin.  Function nextfile() closes the
-current file so that the next iteration will read the first line from
-the next file (if any); lines not read from the file will not count
-towards the cumulative line count; the filename is not changed until
-after the first line of the next file has been read.  Function close()
-closes the sequence.
-
-Before any lines have been read, filename() returns None and both line
-numbers are zero; nextfile() has no effect.  After all lines have been
-read, filename() and the line number functions return the values
-pertaining to the last line read; nextfile() has no effect.
-
-All files are opened in text mode.  If an I/O error occurs during
-opening or reading a file, the IOError exception is raised.
-
-If sys.stdin is used more than once, the second and further use will
-return no lines, except perhaps for interactive use, or if it has been
-explicitly reset (e.g. using sys.stdin.seek(0)).
-
-Empty files are opened and immediately closed; the only time their
-presence in the list of filenames is noticeable at all is when the
-last file opened is empty.
-
-It is possible that the last line of a file doesn't end in a newline
-character; otherwise lines are returned including the trailing
-newline.
-
-Class FileInput is the implementation; its methods filename(),
-lineno(), fileline(), isfirstline(), isstdin(), nextfile() and close()
-correspond to the functions in the module.  In addition it has a
-readline() method which returns the next input line, and a
-__getitem__() method which implements the sequence behavior.  The
-sequence must be accessed in strictly sequential order; sequence
-access and readline() cannot be mixed.
-
-Optional in-place filtering: if the keyword argument inplace=1 is
-passed to input() or to the FileInput constructor, the file is moved
-to a backup file and standard output is directed to the input file.
-This makes it possible to write a filter that rewrites its input file
-in place.  If the keyword argument backup=".<some extension>" is also
-given, it specifies the extension for the backup file, and the backup
-file remains around; by default, the extension is ".bak" and it is
-deleted when the output file is closed.  In-place filtering is
-disabled when standard input is read.  XXX The current implementation
-does not work for MS-DOS 8+3 filesystems.
-
-XXX Possible additions:
-
-- optional getopt argument processing
-- specify open mode ('r' or 'rb')
-- specify buffer size
-- fileno()
-- isatty()
-- read(), read(size), even readlines()
-
-"""
-
-import sys, os, stat
-
-_state = None
-
-def input(files=None, inplace=0, backup=""):
-    global _state
-    if _state and _state._file:
-        raise RuntimeError, "input() already active"
-    _state = FileInput(files, inplace, backup)
-    return _state
-
-def close():
-    global _state
-    state = _state
-    _state = None
-    if state:
-        state.close()
-
-def nextfile():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.nextfile()
-
-def filename():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.filename()
-
-def lineno():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.lineno()
-
-def filelineno():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.filelineno()
-
-def isfirstline():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.isfirstline()
-
-def isstdin():
-    if not _state:
-        raise RuntimeError, "no active input()"
-    return _state.isstdin()
-
-class FileInput:
-
-    def __init__(self, files=None, inplace=0, backup=""):
-        if type(files) == type(''):
-            files = (files,)
-        else:
-            if files is None:
-                files = sys.argv[1:]
-            if not files:
-                files = ('-',)
-            else:
-                files = tuple(files)
-        self._files = files
-        self._inplace = inplace
-        self._backup = backup
-        self._savestdout = None
-        self._output = None
-        self._filename = None
-        self._lineno = 0
-        self._filelineno = 0
-        self._file = None
-        self._isstdin = 0
-        self._backupfilename = None
-
-    def __del__(self):
-        self.close()
-
-    def close(self):
-        self.nextfile()
-        self._files = ()
-
-    def __getitem__(self, i):
-        if i != self._lineno:
-            raise RuntimeError, "accessing lines out of order"
-        line = self.readline()
-        if not line:
-            raise IndexError, "end of input reached"
-        return line
-
-    def nextfile(self):
-        savestdout = self._savestdout
-        self._savestdout = 0
-        if savestdout:
-            sys.stdout = savestdout
-
-        output = self._output
-        self._output = 0
-        if output:
-            output.close()
-
-        file = self._file
-        self._file = 0
-        if file and not self._isstdin:
-            file.close()
-
-        backupfilename = self._backupfilename
-        self._backupfilename = 0
-        if backupfilename and not self._backup:
-            try: os.unlink(backupfilename)
-            except: pass
-
-        self._isstdin = 0
-
-    def readline(self):
-        if not self._file:
-            if not self._files:
-                return ""
-            self._filename = self._files[0]
-            self._files = self._files[1:]
-            self._filelineno = 0
-            self._file = None
-            self._isstdin = 0
-            self._backupfilename = 0
-            if self._filename == '-':
-                self._filename = '<stdin>'
-                self._file = sys.stdin
-                self._isstdin = 1
-            else:
-                if self._inplace:
-                    self._backupfilename = (
-                        self._filename + (self._backup or ".bak"))
-                    try: os.unlink(self._backupfilename)
-                    except os.error: pass
-                    # The next few lines may raise IOError
-                    os.rename(self._filename, self._backupfilename)
-                    self._file = open(self._backupfilename, "r")
-                    try:
-                        perm = os.fstat(self._file.fileno())[stat.ST_MODE]
-                    except:
-                        self._output = open(self._filename, "w")
-                    else:
-                        fd = os.open(self._filename,
-                                     os.O_CREAT | os.O_WRONLY | os.O_TRUNC,
-                                     perm)
-                        self._output = os.fdopen(fd, "w")
-                        try:
-                            os.chmod(self._filename, perm)
-                        except:
-                            pass
-                    self._savestdout = sys.stdout
-                    sys.stdout = self._output
-                else:
-                    # This may raise IOError
-                    self._file = open(self._filename, "r")
-        line = self._file.readline()
-        if line:
-            self._lineno = self._lineno + 1
-            self._filelineno = self._filelineno + 1
-            return line
-        self.nextfile()
-        # Recursive call
-        return self.readline()
-
-    def filename(self):
-        return self._filename
-
-    def lineno(self):
-        return self._lineno
-
-    def filelineno(self):
-        return self._filelineno
-
-    def isfirstline(self):
-        return self._filelineno == 1
-
-    def isstdin(self):
-        return self._isstdin
-
-def _test():
-    import getopt
-    inplace = 0
-    backup = 0
-    opts, args = getopt.getopt(sys.argv[1:], "ib:")
-    for o, a in opts:
-        if o == '-i': inplace = 1
-        if o == '-b': backup = a
-    for line in input(args, inplace=inplace, backup=backup):
-        if line[-1:] == '\n': line = line[:-1]
-        if line[-1:] == '\r': line = line[:-1]
-        print "%d: %s[%d]%s %s" % (lineno(), filename(), filelineno(),
-                                   isfirstline() and "*" or "", line)
-    print "%d: %s[%d]" % (lineno(), filename(), filelineno())
-
-if __name__ == '__main__':
-    _test()
diff --git a/Lib/dos-8x3/formatte.py b/Lib/dos-8x3/formatte.py
deleted file mode 100755
index 4d6a129..0000000
--- a/Lib/dos-8x3/formatte.py
+++ /dev/null
@@ -1,422 +0,0 @@
-"""Generic output formatting.
-
-Formatter objects transform an abstract flow of formatting events into
-specific output events on writer objects. Formatters manage several stack
-structures to allow various properties of a writer object to be changed and
-restored; writers need not be able to handle relative changes nor any sort
-of ``change back'' operation. Specific writer properties which may be
-controlled via formatter objects are horizontal alignment, font, and left
-margin indentations. A mechanism is provided which supports providing
-arbitrary, non-exclusive style settings to a writer as well. Additional
-interfaces facilitate formatting events which are not reversible, such as
-paragraph separation. 
-
-Writer objects encapsulate device interfaces. Abstract devices, such as
-file formats, are supported as well as physical devices. The provided
-implementations all work with abstract devices. The interface makes
-available mechanisms for setting the properties which formatter objects
-manage and inserting data into the output. 
-"""
-
-import string
-import sys
-from types import StringType
-
-
-AS_IS = None
-
-
-class NullFormatter:
-
-    def __init__(self, writer=None):
-        if not writer:
-            writer = NullWriter()
-        self.writer = writer
-    def end_paragraph(self, blankline): pass
-    def add_line_break(self): pass
-    def add_hor_rule(self, *args, **kw): pass
-    def add_label_data(self, format, counter, blankline=None): pass
-    def add_flowing_data(self, data): pass
-    def add_literal_data(self, data): pass
-    def flush_softspace(self): pass
-    def push_alignment(self, align): pass
-    def pop_alignment(self): pass
-    def push_font(self, x): pass
-    def pop_font(self): pass
-    def push_margin(self, margin): pass
-    def pop_margin(self): pass
-    def set_spacing(self, spacing): pass
-    def push_style(self, *styles): pass
-    def pop_style(self, n=1): pass
-    def assert_line_data(self, flag=1): pass
-
-
-class AbstractFormatter:
-
-    #  Space handling policy:  blank spaces at the boundary between elements
-    #  are handled by the outermost context.  "Literal" data is not checked
-    #  to determine context, so spaces in literal data are handled directly
-    #  in all circumstances.
-
-    def __init__(self, writer):
-        self.writer = writer            # Output device
-        self.align = None               # Current alignment
-        self.align_stack = []           # Alignment stack
-        self.font_stack = []            # Font state
-        self.margin_stack = []          # Margin state
-        self.spacing = None             # Vertical spacing state
-        self.style_stack = []           # Other state, e.g. color
-        self.nospace = 1                # Should leading space be suppressed
-        self.softspace = 0              # Should a space be inserted
-        self.para_end = 1               # Just ended a paragraph
-        self.parskip = 0                # Skipped space between paragraphs?
-        self.hard_break = 1             # Have a hard break
-        self.have_label = 0
-
-    def end_paragraph(self, blankline):
-        if not self.hard_break:
-            self.writer.send_line_break()
-            self.have_label = 0
-        if self.parskip < blankline and not self.have_label:
-            self.writer.send_paragraph(blankline - self.parskip)
-            self.parskip = blankline
-            self.have_label = 0
-        self.hard_break = self.nospace = self.para_end = 1
-        self.softspace = 0
-
-    def add_line_break(self):
-        if not (self.hard_break or self.para_end):
-            self.writer.send_line_break()
-            self.have_label = self.parskip = 0
-        self.hard_break = self.nospace = 1
-        self.softspace = 0
-
-    def add_hor_rule(self, *args, **kw):
-        if not self.hard_break:
-            self.writer.send_line_break()
-        apply(self.writer.send_hor_rule, args, kw)
-        self.hard_break = self.nospace = 1
-        self.have_label = self.para_end = self.softspace = self.parskip = 0
-
-    def add_label_data(self, format, counter, blankline = None):
-        if self.have_label or not self.hard_break:
-            self.writer.send_line_break()
-        if not self.para_end:
-            self.writer.send_paragraph((blankline and 1) or 0)
-        if type(format) is StringType:
-            self.writer.send_label_data(self.format_counter(format, counter))
-        else:
-            self.writer.send_label_data(format)
-        self.nospace = self.have_label = self.hard_break = self.para_end = 1
-        self.softspace = self.parskip = 0
-
-    def format_counter(self, format, counter):
-        label = ''
-        for c in format:
-            try:
-                if c == '1':
-                    label = label + ('%d' % counter)
-                elif c in 'aA':
-                    if counter > 0:
-                        label = label + self.format_letter(c, counter)
-                elif c in 'iI':
-                    if counter > 0:
-                        label = label + self.format_roman(c, counter)
-                else:
-                    label = label + c
-            except:
-                label = label + c
-        return label
-
-    def format_letter(self, case, counter):
-        label = ''
-        while counter > 0:
-            counter, x = divmod(counter-1, 26)
-            s = chr(ord(case) + x)
-            label = s + label
-        return label
-
-    def format_roman(self, case, counter):
-        ones = ['i', 'x', 'c', 'm']
-        fives = ['v', 'l', 'd']
-        label, index = '', 0
-        # This will die of IndexError when counter is too big
-        while counter > 0:
-            counter, x = divmod(counter, 10)
-            if x == 9:
-                label = ones[index] + ones[index+1] + label
-            elif x == 4:
-                label = ones[index] + fives[index] + label
-            else:
-                if x >= 5:
-                    s = fives[index]
-                    x = x-5
-                else:
-                    s = ''
-                s = s + ones[index]*x
-                label = s + label
-            index = index + 1
-        if case == 'I':
-            return string.upper(label)
-        return label
-
-    def add_flowing_data(self, data,
-                         # These are only here to load them into locals:
-                         whitespace = string.whitespace,
-                         join = string.join, split = string.split):
-        if not data: return
-        # The following looks a bit convoluted but is a great improvement over
-        # data = regsub.gsub('[' + string.whitespace + ']+', ' ', data)
-        prespace = data[:1] in whitespace
-        postspace = data[-1:] in whitespace
-        data = join(split(data))
-        if self.nospace and not data:
-            return
-        elif prespace or self.softspace:
-            if not data:
-                if not self.nospace:
-                    self.softspace = 1
-                    self.parskip = 0
-                return
-            if not self.nospace:
-                data = ' ' + data
-        self.hard_break = self.nospace = self.para_end = \
-                          self.parskip = self.have_label = 0
-        self.softspace = postspace
-        self.writer.send_flowing_data(data)
-
-    def add_literal_data(self, data):
-        if not data: return
-        if self.softspace:
-            self.writer.send_flowing_data(" ")
-        self.hard_break = data[-1:] == '\n'
-        self.nospace = self.para_end = self.softspace = \
-                       self.parskip = self.have_label = 0
-        self.writer.send_literal_data(data)
-
-    def flush_softspace(self):
-        if self.softspace:
-            self.hard_break = self.para_end = self.parskip = \
-                              self.have_label = self.softspace = 0
-            self.nospace = 1
-            self.writer.send_flowing_data(' ')
-
-    def push_alignment(self, align):
-        if align and align != self.align:
-            self.writer.new_alignment(align)
-            self.align = align
-            self.align_stack.append(align)
-        else:
-            self.align_stack.append(self.align)
-
-    def pop_alignment(self):
-        if self.align_stack:
-            del self.align_stack[-1]
-        if self.align_stack:
-            self.align = align = self.align_stack[-1]
-            self.writer.new_alignment(align)
-        else:
-            self.align = None
-            self.writer.new_alignment(None)
-
-    def push_font(self, (size, i, b, tt)):
-        if self.softspace:
-            self.hard_break = self.para_end = self.softspace = 0
-            self.nospace = 1
-            self.writer.send_flowing_data(' ')
-        if self.font_stack:
-            csize, ci, cb, ctt = self.font_stack[-1]
-            if size is AS_IS: size = csize
-            if i is AS_IS: i = ci
-            if b is AS_IS: b = cb
-            if tt is AS_IS: tt = ctt
-        font = (size, i, b, tt)
-        self.font_stack.append(font)
-        self.writer.new_font(font)
-
-    def pop_font(self):
-        if self.font_stack:
-            del self.font_stack[-1]
-        if self.font_stack:
-            font = self.font_stack[-1]
-        else:
-            font = None
-        self.writer.new_font(font)
-
-    def push_margin(self, margin):
-        self.margin_stack.append(margin)
-        fstack = filter(None, self.margin_stack)
-        if not margin and fstack:
-            margin = fstack[-1]
-        self.writer.new_margin(margin, len(fstack))
-
-    def pop_margin(self):
-        if self.margin_stack:
-            del self.margin_stack[-1]
-        fstack = filter(None, self.margin_stack)
-        if fstack:
-            margin = fstack[-1]
-        else:
-            margin = None
-        self.writer.new_margin(margin, len(fstack))
-
-    def set_spacing(self, spacing):
-        self.spacing = spacing
-        self.writer.new_spacing(spacing)
-
-    def push_style(self, *styles):
-        if self.softspace:
-            self.hard_break = self.para_end = self.softspace = 0
-            self.nospace = 1
-            self.writer.send_flowing_data(' ')
-        for style in styles:
-            self.style_stack.append(style)
-        self.writer.new_styles(tuple(self.style_stack))
-
-    def pop_style(self, n=1):
-        del self.style_stack[-n:]
-        self.writer.new_styles(tuple(self.style_stack))
-
-    def assert_line_data(self, flag=1):
-        self.nospace = self.hard_break = not flag
-        self.para_end = self.parskip = self.have_label = 0
-
-
-class NullWriter:
-    """Minimal writer interface to use in testing & inheritance."""
-    def __init__(self): pass
-    def flush(self): pass
-    def new_alignment(self, align): pass
-    def new_font(self, font): pass
-    def new_margin(self, margin, level): pass
-    def new_spacing(self, spacing): pass
-    def new_styles(self, styles): pass
-    def send_paragraph(self, blankline): pass
-    def send_line_break(self): pass
-    def send_hor_rule(self, *args, **kw): pass
-    def send_label_data(self, data): pass
-    def send_flowing_data(self, data): pass
-    def send_literal_data(self, data): pass
-
-
-class AbstractWriter(NullWriter):
-
-    def __init__(self):
-        pass
-
-    def new_alignment(self, align):
-        print "new_alignment(%s)" % `align`
-
-    def new_font(self, font):
-        print "new_font(%s)" % `font`
-
-    def new_margin(self, margin, level):
-        print "new_margin(%s, %d)" % (`margin`, level)
-
-    def new_spacing(self, spacing):
-        print "new_spacing(%s)" % `spacing`
-
-    def new_styles(self, styles):
-        print "new_styles(%s)" % `styles`
-
-    def send_paragraph(self, blankline):
-        print "send_paragraph(%s)" % `blankline`
-
-    def send_line_break(self):
-        print "send_line_break()"
-
-    def send_hor_rule(self, *args, **kw):
-        print "send_hor_rule()"
-
-    def send_label_data(self, data):
-        print "send_label_data(%s)" % `data`
-
-    def send_flowing_data(self, data):
-        print "send_flowing_data(%s)" % `data`
-
-    def send_literal_data(self, data):
-        print "send_literal_data(%s)" % `data`
-
-
-class DumbWriter(NullWriter):
-
-    def __init__(self, file=None, maxcol=72):
-        self.file = file or sys.stdout
-        self.maxcol = maxcol
-        NullWriter.__init__(self)
-        self.reset()
-
-    def reset(self):
-        self.col = 0
-        self.atbreak = 0
-
-    def send_paragraph(self, blankline):
-        self.file.write('\n'*blankline)
-        self.col = 0
-        self.atbreak = 0
-
-    def send_line_break(self):
-        self.file.write('\n')
-        self.col = 0
-        self.atbreak = 0
-
-    def send_hor_rule(self, *args, **kw):
-        self.file.write('\n')
-        self.file.write('-'*self.maxcol)
-        self.file.write('\n')
-        self.col = 0
-        self.atbreak = 0
-
-    def send_literal_data(self, data):
-        self.file.write(data)
-        i = string.rfind(data, '\n')
-        if i >= 0:
-            self.col = 0
-            data = data[i+1:]
-        data = string.expandtabs(data)
-        self.col = self.col + len(data)
-        self.atbreak = 0
-
-    def send_flowing_data(self, data):
-        if not data: return
-        atbreak = self.atbreak or data[0] in string.whitespace
-        col = self.col
-        maxcol = self.maxcol
-        write = self.file.write
-        for word in string.split(data):
-            if atbreak:
-                if col + len(word) >= maxcol:
-                    write('\n')
-                    col = 0
-                else:
-                    write(' ')
-                    col = col + 1
-            write(word)
-            col = col + len(word)
-            atbreak = 1
-        self.col = col
-        self.atbreak = data[-1] in string.whitespace
-
-
-def test(file = None):
-    w = DumbWriter()
-    f = AbstractFormatter(w)
-    if file:
-        fp = open(file)
-    elif sys.argv[1:]:
-        fp = open(sys.argv[1])
-    else:
-        fp = sys.stdin
-    while 1:
-        line = fp.readline()
-        if not line:
-            break
-        if line == '\n':
-            f.end_paragraph(1)
-        else:
-            f.add_flowing_data(line)
-    f.end_paragraph(0)
-
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/gopherli.py b/Lib/dos-8x3/gopherli.py
deleted file mode 100755
index 6965fbd..0000000
--- a/Lib/dos-8x3/gopherli.py
+++ /dev/null
@@ -1,208 +0,0 @@
-"""Gopher protocol client interface."""
-
-import string
-
-# Default selector, host and port
-DEF_SELECTOR = '1/'
-DEF_HOST     = 'gopher.micro.umn.edu'
-DEF_PORT     = 70
-
-# Recognized file types
-A_TEXT       = '0'
-A_MENU       = '1'
-A_CSO        = '2'
-A_ERROR      = '3'
-A_MACBINHEX  = '4'
-A_PCBINHEX   = '5'
-A_UUENCODED  = '6'
-A_INDEX      = '7'
-A_TELNET     = '8'
-A_BINARY     = '9'
-A_DUPLICATE  = '+'
-A_SOUND      = 's'
-A_EVENT      = 'e'
-A_CALENDAR   = 'c'
-A_HTML       = 'h'
-A_TN3270     = 'T'
-A_MIME       = 'M'
-A_IMAGE      = 'I'
-A_WHOIS      = 'w'
-A_QUERY      = 'q'
-A_GIF        = 'g'
-A_HTML       = 'h'          # HTML file
-A_WWW        = 'w'          # WWW address
-A_PLUS_IMAGE = ':'
-A_PLUS_MOVIE = ';'
-A_PLUS_SOUND = '<'
-
-
-_names = dir()
-_type_to_name_map = {}
-def type_to_name(gtype):
-    """Map all file types to strings; unknown types become TYPE='x'."""
-    global _type_to_name_map
-    if _type_to_name_map=={}:
-        for name in _names:
-            if name[:2] == 'A_':
-                _type_to_name_map[eval(name)] = name[2:]
-    if _type_to_name_map.has_key(gtype):
-        return _type_to_name_map[gtype]
-    return 'TYPE=' + `gtype`
-
-# Names for characters and strings
-CRLF = '\r\n'
-TAB = '\t'
-
-def send_selector(selector, host, port = 0):
-    """Send a selector to a given host and port, return a file with the reply."""
-    import socket
-    import string
-    if not port:
-        i = string.find(host, ':')
-        if i >= 0:
-            host, port = host[:i], string.atoi(host[i+1:])
-    if not port:
-        port = DEF_PORT
-    elif type(port) == type(''):
-        port = string.atoi(port)
-    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-    s.connect((host, port))
-    s.send(selector + CRLF)
-    s.shutdown(1)
-    return s.makefile('rb')
-
-def send_query(selector, query, host, port = 0):
-    """Send a selector and a query string."""
-    return send_selector(selector + '\t' + query, host, port)
-
-def path_to_selector(path):
-    """Takes a path as returned by urlparse and returns the appropriate selector."""
-    if path=="/":
-        return "/"
-    else:
-        return path[2:] # Cuts initial slash and data type identifier
-
-def path_to_datatype_name(path):
-    """Takes a path as returned by urlparse and maps it to a string.
-    See section 3.4 of RFC 1738 for details."""
-    if path=="/":
-        # No way to tell, although "INDEX" is likely
-        return "TYPE='unknown'"
-    else:
-        return type_to_name(path[1])
-
-# The following functions interpret the data returned by the gopher
-# server according to the expected type, e.g. textfile or directory
-
-def get_directory(f):
-    """Get a directory in the form of a list of entries."""
-    import string
-    list = []
-    while 1:
-        line = f.readline()
-        if not line:
-            print '(Unexpected EOF from server)'
-            break
-        if line[-2:] == CRLF:
-            line = line[:-2]
-        elif line[-1:] in CRLF:
-            line = line[:-1]
-        if line == '.':
-            break
-        if not line:
-            print '(Empty line from server)'
-            continue
-        gtype = line[0]
-        parts = string.splitfields(line[1:], TAB)
-        if len(parts) < 4:
-            print '(Bad line from server:', `line`, ')'
-            continue
-        if len(parts) > 4:
-            if parts[4:] != ['+']:
-                print '(Extra info from server:',
-                print parts[4:], ')'
-        else:
-            parts.append('')
-        parts.insert(0, gtype)
-        list.append(parts)
-    return list
-
-def get_textfile(f):
-    """Get a text file as a list of lines, with trailing CRLF stripped."""
-    list = []
-    get_alt_textfile(f, list.append)
-    return list
-
-def get_alt_textfile(f, func):
-    """Get a text file and pass each line to a function, with trailing CRLF stripped."""
-    while 1:
-        line = f.readline()
-        if not line:
-            print '(Unexpected EOF from server)'
-            break
-        if line[-2:] == CRLF:
-            line = line[:-2]
-        elif line[-1:] in CRLF:
-            line = line[:-1]
-        if line == '.':
-            break
-        if line[:2] == '..':
-            line = line[1:]
-        func(line)
-
-def get_binary(f):
-    """Get a binary file as one solid data block."""
-    data = f.read()
-    return data
-
-def get_alt_binary(f, func, blocksize):
-    """Get a binary file and pass each block to a function."""
-    while 1:
-        data = f.read(blocksize)
-        if not data:
-            break
-        func(data)
-
-def test():
-    """Trivial test program."""
-    import sys
-    import getopt
-    opts, args = getopt.getopt(sys.argv[1:], '')
-    selector = DEF_SELECTOR
-    type = selector[0]
-    host = DEF_HOST
-    port = DEF_PORT
-    if args:
-        host = args[0]
-        args = args[1:]
-    if args:
-        type = args[0]
-        args = args[1:]
-        if len(type) > 1:
-            type, selector = type[0], type
-        else:
-            selector = ''
-            if args:
-                selector = args[0]
-                args = args[1:]
-        query = ''
-        if args:
-            query = args[0]
-            args = args[1:]
-    if type == A_INDEX:
-        f = send_query(selector, query, host)
-    else:
-        f = send_selector(selector, host)
-    if type == A_TEXT:
-        list = get_textfile(f)
-        for item in list: print item
-    elif type in (A_MENU, A_INDEX):
-        list = get_directory(f)
-        for item in list: print item
-    else:
-        data = get_binary(f)
-        print 'binary data:', len(data), 'bytes:', `data[:100]`[:40]
-
-# Run the test when run as script
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/htmlenti.py b/Lib/dos-8x3/htmlenti.py
deleted file mode 100755
index 6682bf2..0000000
--- a/Lib/dos-8x3/htmlenti.py
+++ /dev/null
@@ -1,257 +0,0 @@
-"""HTML character entity references."""
-
-entitydefs = {
-    'AElig':	'\306',  	# latin capital letter AE = latin capital ligature AE, U+00C6 ISOlat1
-    'Aacute':	'\301',  	# latin capital letter A with acute, U+00C1 ISOlat1
-    'Acirc':	'\302',  	# latin capital letter A with circumflex, U+00C2 ISOlat1
-    'Agrave':	'\300',  	# latin capital letter A with grave = latin capital letter A grave, U+00C0 ISOlat1
-    'Alpha':	'&#913;',  	# greek capital letter alpha, U+0391
-    'Aring':	'\305',  	# latin capital letter A with ring above = latin capital letter A ring, U+00C5 ISOlat1
-    'Atilde':	'\303',  	# latin capital letter A with tilde, U+00C3 ISOlat1
-    'Auml':	'\304',  	# latin capital letter A with diaeresis, U+00C4 ISOlat1
-    'Beta':	'&#914;',  	# greek capital letter beta, U+0392
-    'Ccedil':	'\307',  	# latin capital letter C with cedilla, U+00C7 ISOlat1
-    'Chi':	'&#935;',  	# greek capital letter chi, U+03A7
-    'Dagger':	'&#8225;',  	# double dagger, U+2021 ISOpub
-    'Delta':	'&#916;',  	# greek capital letter delta, U+0394 ISOgrk3
-    'ETH':	'\320',  	# latin capital letter ETH, U+00D0 ISOlat1
-    'Eacute':	'\311',  	# latin capital letter E with acute, U+00C9 ISOlat1
-    'Ecirc':	'\312',  	# latin capital letter E with circumflex, U+00CA ISOlat1
-    'Egrave':	'\310',  	# latin capital letter E with grave, U+00C8 ISOlat1
-    'Epsilon':	'&#917;',  	# greek capital letter epsilon, U+0395
-    'Eta':	'&#919;',  	# greek capital letter eta, U+0397
-    'Euml':	'\313',  	# latin capital letter E with diaeresis, U+00CB ISOlat1
-    'Gamma':	'&#915;',  	# greek capital letter gamma, U+0393 ISOgrk3
-    'Iacute':	'\315',  	# latin capital letter I with acute, U+00CD ISOlat1
-    'Icirc':	'\316',  	# latin capital letter I with circumflex, U+00CE ISOlat1
-    'Igrave':	'\314',  	# latin capital letter I with grave, U+00CC ISOlat1
-    'Iota':	'&#921;',  	# greek capital letter iota, U+0399
-    'Iuml':	'\317',  	# latin capital letter I with diaeresis, U+00CF ISOlat1
-    'Kappa':	'&#922;',  	# greek capital letter kappa, U+039A
-    'Lambda':	'&#923;',  	# greek capital letter lambda, U+039B ISOgrk3
-    'Mu':	'&#924;',  	# greek capital letter mu, U+039C
-    'Ntilde':	'\321',  	# latin capital letter N with tilde, U+00D1 ISOlat1
-    'Nu':	'&#925;',  	# greek capital letter nu, U+039D
-    'OElig':	'&#338;',  	# latin capital ligature OE, U+0152 ISOlat2
-    'Oacute':	'\323',  	# latin capital letter O with acute, U+00D3 ISOlat1
-    'Ocirc':	'\324',  	# latin capital letter O with circumflex, U+00D4 ISOlat1
-    'Ograve':	'\322',  	# latin capital letter O with grave, U+00D2 ISOlat1
-    'Omega':	'&#937;',  	# greek capital letter omega, U+03A9 ISOgrk3
-    'Omicron':	'&#927;',  	# greek capital letter omicron, U+039F
-    'Oslash':	'\330',  	# latin capital letter O with stroke = latin capital letter O slash, U+00D8 ISOlat1
-    'Otilde':	'\325',  	# latin capital letter O with tilde, U+00D5 ISOlat1
-    'Ouml':	'\326',  	# latin capital letter O with diaeresis, U+00D6 ISOlat1
-    'Phi':	'&#934;',  	# greek capital letter phi, U+03A6 ISOgrk3
-    'Pi':	'&#928;',  	# greek capital letter pi, U+03A0 ISOgrk3
-    'Prime':	'&#8243;',  	# double prime = seconds = inches, U+2033 ISOtech
-    'Psi':	'&#936;',  	# greek capital letter psi, U+03A8 ISOgrk3
-    'Rho':	'&#929;',  	# greek capital letter rho, U+03A1
-    'Scaron':	'&#352;',  	# latin capital letter S with caron, U+0160 ISOlat2
-    'Sigma':	'&#931;',  	# greek capital letter sigma, U+03A3 ISOgrk3
-    'THORN':	'\336',  	# latin capital letter THORN, U+00DE ISOlat1
-    'Tau':	'&#932;',  	# greek capital letter tau, U+03A4
-    'Theta':	'&#920;',  	# greek capital letter theta, U+0398 ISOgrk3
-    'Uacute':	'\332',  	# latin capital letter U with acute, U+00DA ISOlat1
-    'Ucirc':	'\333',  	# latin capital letter U with circumflex, U+00DB ISOlat1
-    'Ugrave':	'\331',  	# latin capital letter U with grave, U+00D9 ISOlat1
-    'Upsilon':	'&#933;',  	# greek capital letter upsilon, U+03A5 ISOgrk3
-    'Uuml':	'\334',  	# latin capital letter U with diaeresis, U+00DC ISOlat1
-    'Xi':	'&#926;',  	# greek capital letter xi, U+039E ISOgrk3
-    'Yacute':	'\335',  	# latin capital letter Y with acute, U+00DD ISOlat1
-    'Yuml':	'&#376;',  	# latin capital letter Y with diaeresis, U+0178 ISOlat2
-    'Zeta':	'&#918;',  	# greek capital letter zeta, U+0396
-    'aacute':	'\341',  	# latin small letter a with acute, U+00E1 ISOlat1
-    'acirc':	'\342',  	# latin small letter a with circumflex, U+00E2 ISOlat1
-    'acute':	'\264',  	# acute accent = spacing acute, U+00B4 ISOdia
-    'aelig':	'\346',  	# latin small letter ae = latin small ligature ae, U+00E6 ISOlat1
-    'agrave':	'\340',  	# latin small letter a with grave = latin small letter a grave, U+00E0 ISOlat1
-    'alefsym':	'&#8501;',  	# alef symbol = first transfinite cardinal, U+2135 NEW
-    'alpha':	'&#945;',  	# greek small letter alpha, U+03B1 ISOgrk3
-    'amp':	'\46',  	# ampersand, U+0026 ISOnum
-    'and':	'&#8743;',  	# logical and = wedge, U+2227 ISOtech
-    'ang':	'&#8736;',  	# angle, U+2220 ISOamso
-    'aring':	'\345',  	# latin small letter a with ring above = latin small letter a ring, U+00E5 ISOlat1
-    'asymp':	'&#8776;',  	# almost equal to = asymptotic to, U+2248 ISOamsr
-    'atilde':	'\343',  	# latin small letter a with tilde, U+00E3 ISOlat1
-    'auml':	'\344',  	# latin small letter a with diaeresis, U+00E4 ISOlat1
-    'bdquo':	'&#8222;',  	# double low-9 quotation mark, U+201E NEW
-    'beta':	'&#946;',  	# greek small letter beta, U+03B2 ISOgrk3
-    'brvbar':	'\246',  	# broken bar = broken vertical bar, U+00A6 ISOnum
-    'bull':	'&#8226;',  	# bullet = black small circle, U+2022 ISOpub
-    'cap':	'&#8745;',  	# intersection = cap, U+2229 ISOtech
-    'ccedil':	'\347',  	# latin small letter c with cedilla, U+00E7 ISOlat1
-    'cedil':	'\270',  	# cedilla = spacing cedilla, U+00B8 ISOdia
-    'cent':	'\242',  	# cent sign, U+00A2 ISOnum
-    'chi':	'&#967;',  	# greek small letter chi, U+03C7 ISOgrk3
-    'circ':	'&#710;',  	# modifier letter circumflex accent, U+02C6 ISOpub
-    'clubs':	'&#9827;',  	# black club suit = shamrock, U+2663 ISOpub
-    'cong':	'&#8773;',  	# approximately equal to, U+2245 ISOtech
-    'copy':	'\251',  	# copyright sign, U+00A9 ISOnum
-    'crarr':	'&#8629;',  	# downwards arrow with corner leftwards = carriage return, U+21B5 NEW
-    'cup':	'&#8746;',  	# union = cup, U+222A ISOtech
-    'curren':	'\244',  	# currency sign, U+00A4 ISOnum
-    'dArr':	'&#8659;',  	# downwards double arrow, U+21D3 ISOamsa
-    'dagger':	'&#8224;',  	# dagger, U+2020 ISOpub
-    'darr':	'&#8595;',  	# downwards arrow, U+2193 ISOnum
-    'deg':	'\260',  	# degree sign, U+00B0 ISOnum
-    'delta':	'&#948;',  	# greek small letter delta, U+03B4 ISOgrk3
-    'diams':	'&#9830;',  	# black diamond suit, U+2666 ISOpub
-    'divide':	'\367',  	# division sign, U+00F7 ISOnum
-    'eacute':	'\351',  	# latin small letter e with acute, U+00E9 ISOlat1
-    'ecirc':	'\352',  	# latin small letter e with circumflex, U+00EA ISOlat1
-    'egrave':	'\350',  	# latin small letter e with grave, U+00E8 ISOlat1
-    'empty':	'&#8709;',  	# empty set = null set = diameter, U+2205 ISOamso
-    'emsp':	'&#8195;',  	# em space, U+2003 ISOpub
-    'ensp':	'&#8194;',  	# en space, U+2002 ISOpub
-    'epsilon':	'&#949;',  	# greek small letter epsilon, U+03B5 ISOgrk3
-    'equiv':	'&#8801;',  	# identical to, U+2261 ISOtech
-    'eta':	'&#951;',  	# greek small letter eta, U+03B7 ISOgrk3
-    'eth':	'\360',  	# latin small letter eth, U+00F0 ISOlat1
-    'euml':	'\353',  	# latin small letter e with diaeresis, U+00EB ISOlat1
-    'euro':	'&#8364;',  	# euro sign, U+20AC NEW
-    'exist':	'&#8707;',  	# there exists, U+2203 ISOtech
-    'fnof':	'&#402;',  	# latin small f with hook = function = florin, U+0192 ISOtech
-    'forall':	'&#8704;',  	# for all, U+2200 ISOtech
-    'frac12':	'\275',  	# vulgar fraction one half = fraction one half, U+00BD ISOnum
-    'frac14':	'\274',  	# vulgar fraction one quarter = fraction one quarter, U+00BC ISOnum
-    'frac34':	'\276',  	# vulgar fraction three quarters = fraction three quarters, U+00BE ISOnum
-    'frasl':	'&#8260;',  	# fraction slash, U+2044 NEW
-    'gamma':	'&#947;',  	# greek small letter gamma, U+03B3 ISOgrk3
-    'ge':	'&#8805;',  	# greater-than or equal to, U+2265 ISOtech
-    'gt':	'\76',  	# greater-than sign, U+003E ISOnum
-    'hArr':	'&#8660;',  	# left right double arrow, U+21D4 ISOamsa
-    'harr':	'&#8596;',  	# left right arrow, U+2194 ISOamsa
-    'hearts':	'&#9829;',  	# black heart suit = valentine, U+2665 ISOpub
-    'hellip':	'&#8230;',  	# horizontal ellipsis = three dot leader, U+2026 ISOpub
-    'iacute':	'\355',  	# latin small letter i with acute, U+00ED ISOlat1
-    'icirc':	'\356',  	# latin small letter i with circumflex, U+00EE ISOlat1
-    'iexcl':	'\241',  	# inverted exclamation mark, U+00A1 ISOnum
-    'igrave':	'\354',  	# latin small letter i with grave, U+00EC ISOlat1
-    'image':	'&#8465;',  	# blackletter capital I = imaginary part, U+2111 ISOamso
-    'infin':	'&#8734;',  	# infinity, U+221E ISOtech
-    'int':	'&#8747;',  	# integral, U+222B ISOtech
-    'iota':	'&#953;',  	# greek small letter iota, U+03B9 ISOgrk3
-    'iquest':	'\277',  	# inverted question mark = turned question mark, U+00BF ISOnum
-    'isin':	'&#8712;',  	# element of, U+2208 ISOtech
-    'iuml':	'\357',  	# latin small letter i with diaeresis, U+00EF ISOlat1
-    'kappa':	'&#954;',  	# greek small letter kappa, U+03BA ISOgrk3
-    'lArr':	'&#8656;',  	# leftwards double arrow, U+21D0 ISOtech
-    'lambda':	'&#955;',  	# greek small letter lambda, U+03BB ISOgrk3
-    'lang':	'&#9001;',  	# left-pointing angle bracket = bra, U+2329 ISOtech
-    'laquo':	'\253',  	# left-pointing double angle quotation mark = left pointing guillemet, U+00AB ISOnum
-    'larr':	'&#8592;',  	# leftwards arrow, U+2190 ISOnum
-    'lceil':	'&#8968;',  	# left ceiling = apl upstile, U+2308 ISOamsc
-    'ldquo':	'&#8220;',  	# left double quotation mark, U+201C ISOnum
-    'le':	'&#8804;',  	# less-than or equal to, U+2264 ISOtech
-    'lfloor':	'&#8970;',  	# left floor = apl downstile, U+230A ISOamsc
-    'lowast':	'&#8727;',  	# asterisk operator, U+2217 ISOtech
-    'loz':	'&#9674;',  	# lozenge, U+25CA ISOpub
-    'lrm':	'&#8206;',  	# left-to-right mark, U+200E NEW RFC 2070
-    'lsaquo':	'&#8249;',  	# single left-pointing angle quotation mark, U+2039 ISO proposed
-    'lsquo':	'&#8216;',  	# left single quotation mark, U+2018 ISOnum
-    'lt':	'\74',  	# less-than sign, U+003C ISOnum
-    'macr':	'\257',  	# macron = spacing macron = overline = APL overbar, U+00AF ISOdia
-    'mdash':	'&#8212;',  	# em dash, U+2014 ISOpub
-    'micro':	'\265',  	# micro sign, U+00B5 ISOnum
-    'middot':	'\267',  	# middle dot = Georgian comma = Greek middle dot, U+00B7 ISOnum
-    'minus':	'&#8722;',  	# minus sign, U+2212 ISOtech
-    'mu':	'&#956;',  	# greek small letter mu, U+03BC ISOgrk3
-    'nabla':	'&#8711;',  	# nabla = backward difference, U+2207 ISOtech
-    'nbsp':	'\240',  	# no-break space = non-breaking space, U+00A0 ISOnum
-    'ndash':	'&#8211;',  	# en dash, U+2013 ISOpub
-    'ne':	'&#8800;',  	# not equal to, U+2260 ISOtech
-    'ni':	'&#8715;',  	# contains as member, U+220B ISOtech
-    'not':	'\254',  	# not sign, U+00AC ISOnum
-    'notin':	'&#8713;',  	# not an element of, U+2209 ISOtech
-    'nsub':	'&#8836;',  	# not a subset of, U+2284 ISOamsn
-    'ntilde':	'\361',  	# latin small letter n with tilde, U+00F1 ISOlat1
-    'nu':	'&#957;',  	# greek small letter nu, U+03BD ISOgrk3
-    'oacute':	'\363',  	# latin small letter o with acute, U+00F3 ISOlat1
-    'ocirc':	'\364',  	# latin small letter o with circumflex, U+00F4 ISOlat1
-    'oelig':	'&#339;',  	# latin small ligature oe, U+0153 ISOlat2
-    'ograve':	'\362',  	# latin small letter o with grave, U+00F2 ISOlat1
-    'oline':	'&#8254;',  	# overline = spacing overscore, U+203E NEW
-    'omega':	'&#969;',  	# greek small letter omega, U+03C9 ISOgrk3
-    'omicron':	'&#959;',  	# greek small letter omicron, U+03BF NEW
-    'oplus':	'&#8853;',  	# circled plus = direct sum, U+2295 ISOamsb
-    'or':	'&#8744;',  	# logical or = vee, U+2228 ISOtech
-    'ordf':	'\252',  	# feminine ordinal indicator, U+00AA ISOnum
-    'ordm':	'\272',  	# masculine ordinal indicator, U+00BA ISOnum
-    'oslash':	'\370',  	# latin small letter o with stroke, = latin small letter o slash, U+00F8 ISOlat1
-    'otilde':	'\365',  	# latin small letter o with tilde, U+00F5 ISOlat1
-    'otimes':	'&#8855;',  	# circled times = vector product, U+2297 ISOamsb
-    'ouml':	'\366',  	# latin small letter o with diaeresis, U+00F6 ISOlat1
-    'para':	'\266',  	# pilcrow sign = paragraph sign, U+00B6 ISOnum
-    'part':	'&#8706;',  	# partial differential, U+2202 ISOtech
-    'permil':	'&#8240;',  	# per mille sign, U+2030 ISOtech
-    'perp':	'&#8869;',  	# up tack = orthogonal to = perpendicular, U+22A5 ISOtech
-    'phi':	'&#966;',  	# greek small letter phi, U+03C6 ISOgrk3
-    'pi':	'&#960;',  	# greek small letter pi, U+03C0 ISOgrk3
-    'piv':	'&#982;',  	# greek pi symbol, U+03D6 ISOgrk3
-    'plusmn':	'\261',  	# plus-minus sign = plus-or-minus sign, U+00B1 ISOnum
-    'pound':	'\243',  	# pound sign, U+00A3 ISOnum
-    'prime':	'&#8242;',  	# prime = minutes = feet, U+2032 ISOtech
-    'prod':	'&#8719;',  	# n-ary product = product sign, U+220F ISOamsb
-    'prop':	'&#8733;',  	# proportional to, U+221D ISOtech
-    'psi':	'&#968;',  	# greek small letter psi, U+03C8 ISOgrk3
-    'quot':	'\42',  	# quotation mark = APL quote, U+0022 ISOnum
-    'rArr':	'&#8658;',  	# rightwards double arrow, U+21D2 ISOtech
-    'radic':	'&#8730;',  	# square root = radical sign, U+221A ISOtech
-    'rang':	'&#9002;',  	# right-pointing angle bracket = ket, U+232A ISOtech
-    'raquo':	'\273',  	# right-pointing double angle quotation mark = right pointing guillemet, U+00BB ISOnum
-    'rarr':	'&#8594;',  	# rightwards arrow, U+2192 ISOnum
-    'rceil':	'&#8969;',  	# right ceiling, U+2309 ISOamsc
-    'rdquo':	'&#8221;',  	# right double quotation mark, U+201D ISOnum
-    'real':	'&#8476;',  	# blackletter capital R = real part symbol, U+211C ISOamso
-    'reg':	'\256',  	# registered sign = registered trade mark sign, U+00AE ISOnum
-    'rfloor':	'&#8971;',  	# right floor, U+230B ISOamsc
-    'rho':	'&#961;',  	# greek small letter rho, U+03C1 ISOgrk3
-    'rlm':	'&#8207;',  	# right-to-left mark, U+200F NEW RFC 2070
-    'rsaquo':	'&#8250;',  	# single right-pointing angle quotation mark, U+203A ISO proposed
-    'rsquo':	'&#8217;',  	# right single quotation mark, U+2019 ISOnum
-    'sbquo':	'&#8218;',  	# single low-9 quotation mark, U+201A NEW
-    'scaron':	'&#353;',  	# latin small letter s with caron, U+0161 ISOlat2
-    'sdot':	'&#8901;',  	# dot operator, U+22C5 ISOamsb
-    'sect':	'\247',  	# section sign, U+00A7 ISOnum
-    'shy':	'\255',  	# soft hyphen = discretionary hyphen, U+00AD ISOnum
-    'sigma':	'&#963;',  	# greek small letter sigma, U+03C3 ISOgrk3
-    'sigmaf':	'&#962;',  	# greek small letter final sigma, U+03C2 ISOgrk3
-    'sim':	'&#8764;',  	# tilde operator = varies with = similar to, U+223C ISOtech
-    'spades':	'&#9824;',  	# black spade suit, U+2660 ISOpub
-    'sub':	'&#8834;',  	# subset of, U+2282 ISOtech
-    'sube':	'&#8838;',  	# subset of or equal to, U+2286 ISOtech
-    'sum':	'&#8721;',  	# n-ary sumation, U+2211 ISOamsb
-    'sup':	'&#8835;',  	# superset of, U+2283 ISOtech
-    'sup1':	'\271',  	# superscript one = superscript digit one, U+00B9 ISOnum
-    'sup2':	'\262',  	# superscript two = superscript digit two = squared, U+00B2 ISOnum
-    'sup3':	'\263',  	# superscript three = superscript digit three = cubed, U+00B3 ISOnum
-    'supe':	'&#8839;',  	# superset of or equal to, U+2287 ISOtech
-    'szlig':	'\337',  	# latin small letter sharp s = ess-zed, U+00DF ISOlat1
-    'tau':	'&#964;',  	# greek small letter tau, U+03C4 ISOgrk3
-    'there4':	'&#8756;',  	# therefore, U+2234 ISOtech
-    'theta':	'&#952;',  	# greek small letter theta, U+03B8 ISOgrk3
-    'thetasym':	'&#977;',  	# greek small letter theta symbol, U+03D1 NEW
-    'thinsp':	'&#8201;',  	# thin space, U+2009 ISOpub
-    'thorn':	'\376',  	# latin small letter thorn with, U+00FE ISOlat1
-    'tilde':	'&#732;',  	# small tilde, U+02DC ISOdia
-    'times':	'\327',  	# multiplication sign, U+00D7 ISOnum
-    'trade':	'&#8482;',  	# trade mark sign, U+2122 ISOnum
-    'uArr':	'&#8657;',  	# upwards double arrow, U+21D1 ISOamsa
-    'uacute':	'\372',  	# latin small letter u with acute, U+00FA ISOlat1
-    'uarr':	'&#8593;',  	# upwards arrow, U+2191 ISOnum
-    'ucirc':	'\373',  	# latin small letter u with circumflex, U+00FB ISOlat1
-    'ugrave':	'\371',  	# latin small letter u with grave, U+00F9 ISOlat1
-    'uml':	'\250',  	# diaeresis = spacing diaeresis, U+00A8 ISOdia
-    'upsih':	'&#978;',  	# greek upsilon with hook symbol, U+03D2 NEW
-    'upsilon':	'&#965;',  	# greek small letter upsilon, U+03C5 ISOgrk3
-    'uuml':	'\374',  	# latin small letter u with diaeresis, U+00FC ISOlat1
-    'weierp':	'&#8472;',  	# script capital P = power set = Weierstrass p, U+2118 ISOamso
-    'xi':	'&#958;',  	# greek small letter xi, U+03BE ISOgrk3
-    'yacute':	'\375',  	# latin small letter y with acute, U+00FD ISOlat1
-    'yen':	'\245',  	# yen sign = yuan sign, U+00A5 ISOnum
-    'yuml':	'\377',  	# latin small letter y with diaeresis, U+00FF ISOlat1
-    'zeta':	'&#950;',  	# greek small letter zeta, U+03B6 ISOgrk3
-    'zwj':	'&#8205;',  	# zero width joiner, U+200D NEW RFC 2070
-    'zwnj':	'&#8204;',  	# zero width non-joiner, U+200C NEW RFC 2070
-
-}
diff --git a/Lib/dos-8x3/linecach.py b/Lib/dos-8x3/linecach.py
deleted file mode 100755
index bca40b2..0000000
--- a/Lib/dos-8x3/linecach.py
+++ /dev/null
@@ -1,92 +0,0 @@
-"""Cache lines from files.
-
-This is intended to read lines from modules imported -- hence if a filename
-is not found, it will look down the module search path for a file by
-that name.
-"""
-
-import sys
-import os
-from stat import *
-
-def getline(filename, lineno):
-    lines = getlines(filename)
-    if 1 <= lineno <= len(lines):
-        return lines[lineno-1]
-    else:
-        return ''
-
-
-# The cache
-
-cache = {} # The cache
-
-
-def clearcache():
-    """Clear the cache entirely."""
-
-    global cache
-    cache = {}
-
-
-def getlines(filename):
-    """Get the lines for a file from the cache.
-    Update the cache if it doesn't contain an entry for this file already."""
-
-    if cache.has_key(filename):
-        return cache[filename][2]
-    else:
-        return updatecache(filename)
-
-
-def checkcache():
-    """Discard cache entries that are out of date.
-    (This is not checked upon each call!)"""
-
-    for filename in cache.keys():
-        size, mtime, lines, fullname = cache[filename]
-        try:
-            stat = os.stat(fullname)
-        except os.error:
-            del cache[filename]
-            continue
-        if size <> stat[ST_SIZE] or mtime <> stat[ST_MTIME]:
-            del cache[filename]
-
-
-def updatecache(filename):
-    """Update a cache entry and return its list of lines.
-    If something's wrong, print a message, discard the cache entry,
-    and return an empty list."""
-
-    if cache.has_key(filename):
-        del cache[filename]
-    if not filename or filename[0] + filename[-1] == '<>':
-        return []
-    fullname = filename
-    try:
-        stat = os.stat(fullname)
-    except os.error, msg:
-        # Try looking through the module search path
-        basename = os.path.split(filename)[1]
-        for dirname in sys.path:
-            fullname = os.path.join(dirname, basename)
-            try:
-                stat = os.stat(fullname)
-                break
-            except os.error:
-                pass
-        else:
-            # No luck
-##          print '*** Cannot stat', filename, ':', msg
-            return []
-    try:
-        fp = open(fullname, 'r')
-        lines = fp.readlines()
-        fp.close()
-    except IOError, msg:
-##      print '*** Cannot open', fullname, ':', msg
-        return []
-    size, mtime = stat[ST_SIZE], stat[ST_MTIME]
-    cache[filename] = size, mtime, lines, fullname
-    return lines
diff --git a/Lib/dos-8x3/macurl2p.py b/Lib/dos-8x3/macurl2p.py
deleted file mode 100755
index c971eda..0000000
--- a/Lib/dos-8x3/macurl2p.py
+++ /dev/null
@@ -1,94 +0,0 @@
-"""Macintosh-specific module for conversion between pathnames and URLs.
-
-Do not import directly; use urllib instead."""
-
-import string
-import urllib
-import os
-
-def url2pathname(pathname):
-    "Convert /-delimited pathname to mac pathname"
-    #
-    # XXXX The .. handling should be fixed...
-    #
-    tp = urllib.splittype(pathname)[0]
-    if tp and tp <> 'file':
-        raise RuntimeError, 'Cannot convert non-local URL to pathname'
-    # Turn starting /// into /, an empty hostname means current host
-    if pathname[:3] == '///':
-    	pathname = pathname[2:]
-    elif pathname[:2] == '//':
-        raise RuntimeError, 'Cannot convert non-local URL to pathname'
-    components = string.split(pathname, '/')
-    # Remove . and embedded ..
-    i = 0
-    while i < len(components):
-        if components[i] == '.':
-            del components[i]
-        elif components[i] == '..' and i > 0 and \
-                                  components[i-1] not in ('', '..'):
-            del components[i-1:i+1]
-            i = i-1
-        elif components[i] == '' and i > 0 and components[i-1] <> '':
-            del components[i]
-        else:
-            i = i+1
-    if not components[0]:
-        # Absolute unix path, don't start with colon
-        rv = string.join(components[1:], ':')
-    else:
-        # relative unix path, start with colon. First replace
-        # leading .. by empty strings (giving ::file)
-        i = 0
-        while i < len(components) and components[i] == '..':
-            components[i] = ''
-            i = i + 1
-        rv = ':' + string.join(components, ':')
-    # and finally unquote slashes and other funny characters
-    return urllib.unquote(rv)
-
-def pathname2url(pathname):
-    "convert mac pathname to /-delimited pathname"
-    if '/' in pathname:
-        raise RuntimeError, "Cannot convert pathname containing slashes"
-    components = string.split(pathname, ':')
-    # Remove empty first and/or last component
-    if components[0] == '':
-        del components[0]
-    if components[-1] == '':
-        del components[-1]
-    # Replace empty string ('::') by .. (will result in '/../' later)
-    for i in range(len(components)):
-        if components[i] == '':
-            components[i] = '..'
-    # Truncate names longer than 31 bytes
-    components = map(_pncomp2url, components)
-
-    if os.path.isabs(pathname):
-        return '/' + string.join(components, '/')
-    else:
-        return string.join(components, '/')
-        
-def _pncomp2url(component):
-	component = urllib.quote(component[:31], safe='')  # We want to quote slashes
-	return component
-	
-def test():
-    for url in ["index.html",
-                "bar/index.html",
-                "/foo/bar/index.html",
-                "/foo/bar/",
-                "/"]:
-        print `url`, '->', `url2pathname(url)`
-    for path in ["drive:",
-                 "drive:dir:",
-                 "drive:dir:file",
-                 "drive:file",
-                 "file",
-                 ":file",
-                 ":dir:",
-                 ":dir:file"]:
-        print `path`, '->', `pathname2url(path)`
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/mimetool.py b/Lib/dos-8x3/mimetool.py
deleted file mode 100755
index da955af..0000000
--- a/Lib/dos-8x3/mimetool.py
+++ /dev/null
@@ -1,229 +0,0 @@
-"""Various tools used by MIME-reading or MIME-writing programs."""
-
-
-import os
-import rfc822
-import string
-import tempfile
-
-
-class Message(rfc822.Message):
-	"""A derived class of rfc822.Message that knows about MIME headers and
-	contains some hooks for decoding encoded and multipart messages."""
-
-	def __init__(self, fp, seekable = 1):
-		rfc822.Message.__init__(self, fp, seekable)
-		self.encodingheader = \
-			self.getheader('content-transfer-encoding')
-		self.typeheader = \
-			self.getheader('content-type')
-		self.parsetype()
-		self.parseplist()
-
-	def parsetype(self):
-		str = self.typeheader
-		if str == None:
-			str = 'text/plain'
-		if ';' in str:
-			i = string.index(str, ';')
-			self.plisttext = str[i:]
-			str = str[:i]
-		else:
-			self.plisttext = ''
-		fields = string.splitfields(str, '/')
-		for i in range(len(fields)):
-			fields[i] = string.lower(string.strip(fields[i]))
-		self.type = string.joinfields(fields, '/')
-		self.maintype = fields[0]
-		self.subtype = string.joinfields(fields[1:], '/')
-
-	def parseplist(self):
-		str = self.plisttext
-		self.plist = []
-		while str[:1] == ';':
-			str = str[1:]
-			if ';' in str:
-				# XXX Should parse quotes!
-				end = string.index(str, ';')
-			else:
-				end = len(str)
-			f = str[:end]
-			if '=' in f:
-				i = string.index(f, '=')
-				f = string.lower(string.strip(f[:i])) + \
-					'=' + string.strip(f[i+1:])
-			self.plist.append(string.strip(f))
-			str = str[end:]
-
-	def getplist(self):
-		return self.plist
-
-	def getparam(self, name):
-		name = string.lower(name) + '='
-		n = len(name)
-		for p in self.plist:
-			if p[:n] == name:
-				return rfc822.unquote(p[n:])
-		return None
-
-	def getparamnames(self):
-		result = []
-		for p in self.plist:
-			i = string.find(p, '=')
-			if i >= 0:
-				result.append(string.lower(p[:i]))
-		return result
-
-	def getencoding(self):
-		if self.encodingheader == None:
-			return '7bit'
-		return string.lower(self.encodingheader)
-
-	def gettype(self):
-		return self.type
-
-	def getmaintype(self):
-		return self.maintype
-
-	def getsubtype(self):
-		return self.subtype
-
-
-
-
-# Utility functions
-# -----------------
-
-
-_prefix = None
-
-def choose_boundary():
-	"""Return a random string usable as a multipart boundary.
-	The method used is so that it is *very* unlikely that the same
-	string of characters will every occur again in the Universe,
-	so the caller needn't check the data it is packing for the
-	occurrence of the boundary.
-
-	The boundary contains dots so you have to quote it in the header."""
-
-	global _prefix
-	import time
-	import random
-	if _prefix == None:
-		import socket
-		import os
-		hostid = socket.gethostbyname(socket.gethostname())
-		try:
-		    uid = `os.getuid()`
-		except:
-		    uid = '1'
-		try:
-		    pid = `os.getpid()`
-		except:
-		    pid = '1'
-		_prefix = hostid + '.' + uid + '.' + pid
-	timestamp = '%.3f' % time.time()
-	seed = `random.randint(0, 32767)`
-	return _prefix + '.' + timestamp + '.' + seed
-
-
-# Subroutines for decoding some common content-transfer-types
-
-def decode(input, output, encoding):
-	"""Decode common content-transfer-encodings (base64, quopri, uuencode)."""
-	if encoding == 'base64':
-		import base64
-		return base64.decode(input, output)
-	if encoding == 'quoted-printable':
-		import quopri
-		return quopri.decode(input, output)
-	if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
-		import uu
-		return uu.decode(input, output)
-	if encoding in ('7bit', '8bit'):
-		return output.write(input.read())
-	if decodetab.has_key(encoding):
-		pipethrough(input, decodetab[encoding], output)
-	else:
-		raise ValueError, \
-		      'unknown Content-Transfer-Encoding: %s' % encoding
-
-def encode(input, output, encoding):
-	"""Encode common content-transfer-encodings (base64, quopri, uuencode)."""
-	if encoding == 'base64':
-		import base64
-		return base64.encode(input, output)
-	if encoding == 'quoted-printable':
-		import quopri
-		return quopri.encode(input, output, 0)
-	if encoding in ('uuencode', 'x-uuencode', 'uue', 'x-uue'):
-		import uu
-		return uu.encode(input, output)
-	if encoding in ('7bit', '8bit'):
-		return output.write(input.read())
-	if encodetab.has_key(encoding):
-		pipethrough(input, encodetab[encoding], output)
-	else:
-		raise ValueError, \
-		      'unknown Content-Transfer-Encoding: %s' % encoding
-
-# The following is no longer used for standard encodings
-
-# XXX This requires that uudecode and mmencode are in $PATH
-
-uudecode_pipe = '''(
-TEMP=/tmp/@uu.$$
-sed "s%^begin [0-7][0-7]* .*%begin 600 $TEMP%" | uudecode
-cat $TEMP
-rm $TEMP
-)'''
-
-decodetab = {
-	'uuencode':		uudecode_pipe,
-	'x-uuencode':		uudecode_pipe,
-	'uue':			uudecode_pipe,
-	'x-uue':		uudecode_pipe,
-	'quoted-printable':	'mmencode -u -q',
-	'base64':		'mmencode -u -b',
-}
-
-encodetab = {
-	'x-uuencode':		'uuencode tempfile',
-	'uuencode':		'uuencode tempfile',
-	'x-uue':		'uuencode tempfile',
-	'uue':			'uuencode tempfile',
-	'quoted-printable':	'mmencode -q',
-	'base64':		'mmencode -b',
-}
-
-def pipeto(input, command):
-	pipe = os.popen(command, 'w')
-	copyliteral(input, pipe)
-	pipe.close()
-
-def pipethrough(input, command, output):
-	tempname = tempfile.mktemp()
-	try:
-		temp = open(tempname, 'w')
-	except IOError:
-		print '*** Cannot create temp file', `tempname`
-		return
-	copyliteral(input, temp)
-	temp.close()
-	pipe = os.popen(command + ' <' + tempname, 'r')
-	copybinary(pipe, output)
-	pipe.close()
-	os.unlink(tempname)
-
-def copyliteral(input, output):
-	while 1:
-		line = input.readline()
-		if not line: break
-		output.write(line)
-
-def copybinary(input, output):
-	BUFSIZE = 8192
-	while 1:
-		line = input.read(BUFSIZE)
-		if not line: break
-		output.write(line)
diff --git a/Lib/dos-8x3/mimetype.py b/Lib/dos-8x3/mimetype.py
deleted file mode 100644
index 9dc3645..0000000
--- a/Lib/dos-8x3/mimetype.py
+++ /dev/null
@@ -1,237 +0,0 @@
-"""Guess the MIME type of a file.
-
-This module defines two useful functions:
-
-guess_type(url) -- guess the MIME type and encoding of a URL.
-
-guess_extension(type) -- guess the extension for a given MIME type.
-
-It also contains the following, for tuning the behavior:
-
-Data:
-
-knownfiles -- list of files to parse
-inited -- flag set when init() has been called
-suffixes_map -- dictionary mapping suffixes to suffixes
-encodings_map -- dictionary mapping suffixes to encodings
-types_map -- dictionary mapping suffixes to types
-
-Functions:
-
-init([files]) -- parse a list of files, default knownfiles
-read_mime_types(file) -- parse one file, return a dictionary or None
-
-"""
-
-import string
-import posixpath
-import urllib
-
-knownfiles = [
-    "/usr/local/etc/httpd/conf/mime.types",
-    "/usr/local/lib/netscape/mime.types",
-    "/usr/local/etc/httpd/conf/mime.types",     # Apache 1.2
-    "/usr/local/etc/mime.types",                # Apache 1.3
-    ]
-
-inited = 0
-
-def guess_type(url):
-    """Guess the type of a file based on its URL.
-
-    Return value is a tuple (type, encoding) where type is None if the
-    type can't be guessed (no or unknown suffix) or a string of the
-    form type/subtype, usable for a MIME Content-type header; and
-    encoding is None for no encoding or the name of the program used
-    to encode (e.g. compress or gzip).  The mappings are table
-    driven.  Encoding suffixes are case sensitive; type suffixes are
-    first tried case sensitive, then case insensitive.
-
-    The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped
-    to ".tar.gz".  (This is table-driven too, using the dictionary
-    suffix_map).
-
-    """
-    if not inited:
-        init()
-    scheme, url = urllib.splittype(url)
-    if scheme == 'data':
-        # syntax of data URLs:
-        # dataurl   := "data:" [ mediatype ] [ ";base64" ] "," data
-        # mediatype := [ type "/" subtype ] *( ";" parameter )
-        # data      := *urlchar
-        # parameter := attribute "=" value
-        # type/subtype defaults to "text/plain"
-        comma = string.find(url, ',')
-        if comma < 0:
-            # bad data URL
-            return None, None
-        semi = string.find(url, ';', 0, comma)
-        if semi >= 0:
-            type = url[:semi]
-        else:
-            type = url[:comma]
-        if '=' in type or '/' not in type:
-            type = 'text/plain'
-        return type, None               # never compressed, so encoding is None
-    base, ext = posixpath.splitext(url)
-    while suffix_map.has_key(ext):
-        base, ext = posixpath.splitext(base + suffix_map[ext])
-    if encodings_map.has_key(ext):
-        encoding = encodings_map[ext]
-        base, ext = posixpath.splitext(base)
-    else:
-        encoding = None
-    if types_map.has_key(ext):
-        return types_map[ext], encoding
-    elif types_map.has_key(string.lower(ext)):
-        return types_map[string.lower(ext)], encoding
-    else:
-        return None, encoding
-
-def guess_extension(type):
-    """Guess the extension for a file based on its MIME type.
-
-    Return value is a string giving a filename extension, including the
-    leading dot ('.').  The extension is not guaranteed to have been
-    associated with any particular data stream, but would be mapped to the
-    MIME type `type' by guess_type().  If no extension can be guessed for
-    `type', None is returned.
-    """
-    global inited
-    if not inited:
-        init()
-    type = string.lower(type)
-    for ext, stype in types_map.items():
-        if type == stype:
-            return ext
-    return None
-
-def init(files=None):
-    global inited
-    for file in files or knownfiles:
-        s = read_mime_types(file)
-        if s:
-            for key, value in s.items():
-                types_map[key] = value
-    inited = 1
-
-def read_mime_types(file):
-    try:
-        f = open(file)
-    except IOError:
-        return None
-    map = {}
-    while 1:
-        line = f.readline()
-        if not line: break
-        words = string.split(line)
-        for i in range(len(words)):
-            if words[i][0] == '#':
-                del words[i:]
-                break
-        if not words: continue
-        type, suffixes = words[0], words[1:]
-        for suff in suffixes:
-            map['.'+suff] = type
-    f.close()
-    return map
-
-suffix_map = {
-    '.tgz': '.tar.gz',
-    '.taz': '.tar.gz',
-    '.tz': '.tar.gz',
-}
-
-encodings_map = {
-    '.gz': 'gzip',
-    '.Z': 'compress',
-    }
-
-types_map = {
-    '.a': 'application/octet-stream',
-    '.ai': 'application/postscript',
-    '.aif': 'audio/x-aiff',
-    '.aifc': 'audio/x-aiff',
-    '.aiff': 'audio/x-aiff',
-    '.au': 'audio/basic',
-    '.avi': 'video/x-msvideo',
-    '.bcpio': 'application/x-bcpio',
-    '.bin': 'application/octet-stream',
-    '.cdf': 'application/x-netcdf',
-    '.cpio': 'application/x-cpio',
-    '.csh': 'application/x-csh',
-    '.dll': 'application/octet-stream',
-    '.dvi': 'application/x-dvi',
-    '.exe': 'application/octet-stream',
-    '.eps': 'application/postscript',
-    '.etx': 'text/x-setext',
-    '.gif': 'image/gif',
-    '.gtar': 'application/x-gtar',
-    '.hdf': 'application/x-hdf',
-    '.htm': 'text/html',
-    '.html': 'text/html',
-    '.ief': 'image/ief',
-    '.jpe': 'image/jpeg',
-    '.jpeg': 'image/jpeg',
-    '.jpg': 'image/jpeg',
-    '.js': 'application/x-javascript',
-    '.latex': 'application/x-latex',
-    '.man': 'application/x-troff-man',
-    '.me': 'application/x-troff-me',
-    '.mif': 'application/x-mif',
-    '.mov': 'video/quicktime',
-    '.movie': 'video/x-sgi-movie',
-    '.mpe': 'video/mpeg',
-    '.mpeg': 'video/mpeg',
-    '.mpg': 'video/mpeg',
-    '.ms': 'application/x-troff-ms',
-    '.nc': 'application/x-netcdf',
-    '.o': 'application/octet-stream',
-    '.obj': 'application/octet-stream',
-    '.oda': 'application/oda',
-    '.pbm': 'image/x-portable-bitmap',
-    '.pdf': 'application/pdf',
-    '.pgm': 'image/x-portable-graymap',
-    '.pnm': 'image/x-portable-anymap',
-    '.png': 'image/png',
-    '.ppm': 'image/x-portable-pixmap',
-    '.py': 'text/x-python',
-    '.pyc': 'application/x-python-code',
-    '.ps': 'application/postscript',
-    '.qt': 'video/quicktime',
-    '.ras': 'image/x-cmu-raster',
-    '.rgb': 'image/x-rgb',
-    '.rdf': 'application/xml',
-    '.roff': 'application/x-troff',
-    '.rtf': 'application/rtf',
-    '.rtx': 'text/richtext',
-    '.sgm': 'text/x-sgml',
-    '.sgml': 'text/x-sgml',
-    '.sh': 'application/x-sh',
-    '.shar': 'application/x-shar',
-    '.snd': 'audio/basic',
-    '.so': 'application/octet-stream',
-    '.src': 'application/x-wais-source',
-    '.sv4cpio': 'application/x-sv4cpio',
-    '.sv4crc': 'application/x-sv4crc',
-    '.t': 'application/x-troff',
-    '.tar': 'application/x-tar',
-    '.tcl': 'application/x-tcl',
-    '.tex': 'application/x-tex',
-    '.texi': 'application/x-texinfo',
-    '.texinfo': 'application/x-texinfo',
-    '.tif': 'image/tiff',
-    '.tiff': 'image/tiff',
-    '.tr': 'application/x-troff',
-    '.tsv': 'text/tab-separated-values',
-    '.txt': 'text/plain',
-    '.ustar': 'application/x-ustar',
-    '.wav': 'audio/x-wav',
-    '.xbm': 'image/x-xbitmap',
-    '.xml': 'text/xml',
-    '.xsl': 'application/xml',
-    '.xpm': 'image/x-xpixmap',
-    '.xwd': 'image/x-xwindowdump',
-    '.zip': 'application/zip',
-    }
diff --git a/Lib/dos-8x3/mimewrit.py b/Lib/dos-8x3/mimewrit.py
deleted file mode 100644
index 754576b..0000000
--- a/Lib/dos-8x3/mimewrit.py
+++ /dev/null
@@ -1,128 +0,0 @@
-"""Generic MIME writer.
-
-Classes:
-
-MimeWriter - the only thing here.
-
-"""
-
-
-import string
-import mimetools
-
-
-class MimeWriter:
-
-    """Generic MIME writer.
-
-    Methods:
-
-    __init__()
-    addheader()
-    flushheaders()
-    startbody()
-    startmultipartbody()
-    nextpart()
-    lastpart()
-
-    A MIME writer is much more primitive than a MIME parser.  It
-    doesn't seek around on the output file, and it doesn't use large
-    amounts of buffer space, so you have to write the parts in the
-    order they should occur on the output file.  It does buffer the
-    headers you add, allowing you to rearrange their order.
-    
-    General usage is:
-
-    f = <open the output file>
-    w = MimeWriter(f)
-    ...call w.addheader(key, value) 0 or more times...
-
-    followed by either:
-
-    f = w.startbody(content_type)
-    ...call f.write(data) for body data...
-
-    or:
-
-    w.startmultipartbody(subtype)
-    for each part:
-        subwriter = w.nextpart()
-        ...use the subwriter's methods to create the subpart...
-    w.lastpart()
-
-    The subwriter is another MimeWriter instance, and should be
-    treated in the same way as the toplevel MimeWriter.  This way,
-    writing recursive body parts is easy.
-
-    Warning: don't forget to call lastpart()!
-
-    XXX There should be more state so calls made in the wrong order
-    are detected.
-
-    Some special cases:
-
-    - startbody() just returns the file passed to the constructor;
-      but don't use this knowledge, as it may be changed.
-
-    - startmultipartbody() actually returns a file as well;
-      this can be used to write the initial 'if you can read this your
-      mailer is not MIME-aware' message.
-
-    - If you call flushheaders(), the headers accumulated so far are
-      written out (and forgotten); this is useful if you don't need a
-      body part at all, e.g. for a subpart of type message/rfc822
-      that's (mis)used to store some header-like information.
-
-    - Passing a keyword argument 'prefix=<flag>' to addheader(),
-      start*body() affects where the header is inserted; 0 means
-      append at the end, 1 means insert at the start; default is
-      append for addheader(), but insert for start*body(), which use
-      it to determine where the Content-Type header goes.
-
-    """
-
-    def __init__(self, fp):
-        self._fp = fp
-        self._headers = []
-
-    def addheader(self, key, value, prefix=0):
-        lines = string.splitfields(value, "\n")
-        while lines and not lines[-1]: del lines[-1]
-        while lines and not lines[0]: del lines[0]
-        for i in range(1, len(lines)):
-            lines[i] = "    " + string.strip(lines[i])
-        value = string.joinfields(lines, "\n") + "\n"
-        line = key + ": " + value
-        if prefix:
-            self._headers.insert(0, line)
-        else:
-            self._headers.append(line)
-
-    def flushheaders(self):
-        self._fp.writelines(self._headers)
-        self._headers = []
-
-    def startbody(self, ctype, plist=[], prefix=1):
-        for name, value in plist:
-            ctype = ctype + ';\n %s=\"%s\"' % (name, value)
-        self.addheader("Content-Type", ctype, prefix=prefix)
-        self.flushheaders()
-        self._fp.write("\n")
-        return self._fp
-
-    def startmultipartbody(self, subtype, boundary=None, plist=[], prefix=1):
-        self._boundary = boundary or mimetools.choose_boundary()
-        return self.startbody("multipart/" + subtype,
-                              [("boundary", self._boundary)] + plist,
-                              prefix=prefix)
-
-    def nextpart(self):
-        self._fp.write("\n--" + self._boundary + "\n")
-        return self.__class__(self._fp)
-
-    def lastpart(self):
-        self._fp.write("\n--" + self._boundary + "--\n")
-
-
-if __name__ == '__main__':
-    import test.test_MimeWriter
diff --git a/Lib/dos-8x3/multifil.py b/Lib/dos-8x3/multifil.py
deleted file mode 100755
index e43d331..0000000
--- a/Lib/dos-8x3/multifil.py
+++ /dev/null
@@ -1,164 +0,0 @@
-"""A readline()-style interface to the parts of a multipart message.
-
-The MultiFile class makes each part of a multipart message "feel" like
-an ordinary file, as long as you use fp.readline().  Allows recursive
-use, for nested multipart messages.  Probably best used together
-with module mimetools.
-
-Suggested use:
-
-real_fp = open(...)
-fp = MultiFile(real_fp)
-
-"read some lines from fp"
-fp.push(separator)
-while 1:
-	"read lines from fp until it returns an empty string" (A)
-	if not fp.next(): break
-fp.pop()
-"read remaining lines from fp until it returns an empty string"
-
-The latter sequence may be used recursively at (A).
-It is also allowed to use multiple push()...pop() sequences.
-
-If seekable is given as 0, the class code will not do the bookkeeping
-it normally attempts in order to make seeks relative to the beginning of the
-current file part.  This may be useful when using MultiFile with a non-
-seekable stream object.
-"""
-
-import sys
-import string
-
-class Error(Exception):
-	pass
-
-class MultiFile:
-
-	seekable = 0
-
-	def __init__(self, fp, seekable=1):
-		self.fp = fp
-		self.stack = [] # Grows down
-		self.level = 0
-		self.last = 0
-		if seekable:
-			self.seekable = 1
-			self.start = self.fp.tell()
-			self.posstack = [] # Grows down
-
-	def tell(self):
-		if self.level > 0:
-			return self.lastpos
-		return self.fp.tell() - self.start
-
-	def seek(self, pos, whence=0):
-		here = self.tell()
-		if whence:
-			if whence == 1:
-				pos = pos + here
-			elif whence == 2:
-				if self.level > 0:
-					pos = pos + self.lastpos
-				else:
-					raise Error, "can't use whence=2 yet"
-		if not 0 <= pos <= here or \
-				self.level > 0 and pos > self.lastpos:
-			raise Error, 'bad MultiFile.seek() call'
-		self.fp.seek(pos + self.start)
-		self.level = 0
-		self.last = 0
-
-	def readline(self):
-		if self.level > 0:
-			return ''
-		line = self.fp.readline()
-		# Real EOF?
-		if not line:
-			self.level = len(self.stack)
-			self.last = (self.level > 0)
-			if self.last:
-				raise Error, 'sudden EOF in MultiFile.readline()'
-			return ''
-		assert self.level == 0
-		# Fast check to see if this is just data
-		if self.is_data(line):
-			return line
-		else:
-			# Ignore trailing whitespace on marker lines 
-			k = len(line) - 1;
-			while line[k] in string.whitespace:
-				k = k - 1
-			marker = line[:k+1]
-		# No?  OK, try to match a boundary.
-		# Return the line (unstripped) if we don't.
-		for i in range(len(self.stack)):
-			sep = self.stack[i]
-			if marker == self.section_divider(sep):
-				self.last = 0
-				break
-			elif marker == self.end_marker(sep):
-				self.last = 1
-				break
-		else:
-			return line
-		# We only get here if we see a section divider or EOM line
-		if self.seekable:
-			self.lastpos = self.tell() - len(line)
-		self.level = i+1
-		if self.level > 1:
-			raise Error,'Missing endmarker in MultiFile.readline()'
-		return ''
-
-	def readlines(self):
-		list = []
-		while 1:
-			line = self.readline()
-			if not line: break
-			list.append(line)
-		return list
-
-	def read(self): # Note: no size argument -- read until EOF only!
-		return string.joinfields(self.readlines(), '')
-
-	def next(self):
-		while self.readline(): pass
-		if self.level > 1 or self.last:
-			return 0
-		self.level = 0
-		self.last = 0
-		if self.seekable:
-			self.start = self.fp.tell()
-		return 1
-
-	def push(self, sep):
-		if self.level > 0:
-			raise Error, 'bad MultiFile.push() call'
-		self.stack.insert(0, sep)
-		if self.seekable:
-			self.posstack.insert(0, self.start)
-			self.start = self.fp.tell()
-
-	def pop(self):
-		if self.stack == []:
-			raise Error, 'bad MultiFile.pop() call'
-		if self.level <= 1:
-			self.last = 0
-		else:
-			abslastpos = self.lastpos + self.start
-		self.level = max(0, self.level - 1)
-		del self.stack[0]
-		if self.seekable:
-			self.start = self.posstack[0]
-			del self.posstack[0]
-			if self.level > 0:
-				self.lastpos = abslastpos - self.start
-
-	def is_data(self, line):
-		return line[:2] <> '--'
-
-	def section_divider(self, str):
-		return "--" + str
-
-	def end_marker(self, str):
-		return "--" + str + "--"
diff --git a/Lib/dos-8x3/nturl2pa.py b/Lib/dos-8x3/nturl2pa.py
deleted file mode 100755
index 0445b8a..0000000
--- a/Lib/dos-8x3/nturl2pa.py
+++ /dev/null
@@ -1,66 +0,0 @@
-"""Convert a NT pathname to a file URL and vice versa."""
-
-def url2pathname(url):
-	r"""Convert a URL to a DOS path.
-
-		///C|/foo/bar/spam.foo
-
-			becomes
-
-		C:\foo\bar\spam.foo
-	"""
-	import string, urllib
-	if not '|' in url:
-	    # No drive specifier, just convert slashes
-	    if url[:4] == '////':
-	        # path is something like ////host/path/on/remote/host
-	        # convert this to \\host\path\on\remote\host
-	        # (notice halving of slashes at the start of the path)
-	        url = url[2:]
-	    components = string.split(url, '/')
-	    # make sure not to convert quoted slashes :-)
-	    return urllib.unquote(string.join(components, '\\'))
-	comp = string.split(url, '|')
-	if len(comp) != 2 or comp[0][-1] not in string.letters:
-		error = 'Bad URL: ' + url
-		raise IOError, error
-	drive = string.upper(comp[0][-1])
-	components = string.split(comp[1], '/')
-	path = drive + ':'
-	for  comp in components:
-		if comp:
-			path = path + '\\' + urllib.unquote(comp)
-	return path
-
-def pathname2url(p):
-	r"""Convert a DOS path name to a file url.
-
-		C:\foo\bar\spam.foo
-
-			becomes
-
-		///C|/foo/bar/spam.foo
-	"""
-
-	import string, urllib
-	if not ':' in p:
-	    # No drive specifier, just convert slashes and quote the name
-	    if p[:2] == '\\\\':
-	        # path is something like \\host\path\on\remote\host
-	        # convert this to ////host/path/on/remote/host
-	        # (notice doubling of slashes at the start of the path)
-	        p = '\\\\' + p
-	    components = string.split(p, '\\')
-	    return urllib.quote(string.join(components, '/'))
-	comp = string.split(p, ':')
-	if len(comp) != 2 or len(comp[0]) > 1:
-		error = 'Bad path: ' + p
-		raise IOError, error
-
-	drive = urllib.quote(string.upper(comp[0]))
-	components = string.split(comp[1], '\\')
-	path = '///' + drive + '|'
-	for comp in components:
-		if comp:
-			path = path + '/' + urllib.quote(comp)
-	return path
diff --git a/Lib/dos-8x3/posixfil.py b/Lib/dos-8x3/posixfil.py
deleted file mode 100755
index 23f2c85..0000000
--- a/Lib/dos-8x3/posixfil.py
+++ /dev/null
@@ -1,229 +0,0 @@
-"""Extended file operations available in POSIX.
-
-f = posixfile.open(filename, [mode, [bufsize]])
-      will create a new posixfile object
-
-f = posixfile.fileopen(fileobject)
-      will create a posixfile object from a builtin file object
-
-f.file()
-      will return the original builtin file object
-
-f.dup()
-      will return a new file object based on a new filedescriptor
-
-f.dup2(fd)
-      will return a new file object based on the given filedescriptor
-
-f.flags(mode)
-      will turn on the associated flag (merge)
-      mode can contain the following characters:
-
-  (character representing a flag)
-      a       append only flag
-      c       close on exec flag
-      n       no delay flag
-      s       synchronization flag
-  (modifiers)
-      !       turn flags 'off' instead of default 'on'
-      =       copy flags 'as is' instead of default 'merge'
-      ?       return a string in which the characters represent the flags
-              that are set
-
-      note: - the '!' and '=' modifiers are mutually exclusive.
-            - the '?' modifier will return the status of the flags after they
-              have been changed by other characters in the mode string
-
-f.lock(mode [, len [, start [, whence]]])
-      will (un)lock a region
-      mode can contain the following characters:
-
-  (character representing type of lock)
-      u       unlock
-      r       read lock
-      w       write lock
-  (modifiers)
-      |       wait until the lock can be granted
-      ?       return the first lock conflicting with the requested lock
-              or 'None' if there is no conflict. The lock returned is in the
-              format (mode, len, start, whence, pid) where mode is a
-              character representing the type of lock ('r' or 'w')
-
-      note: - the '?' modifier prevents a region from being locked; it is
-              query only
-"""
-
-class _posixfile_:
-    """File wrapper class that provides extra POSIX file routines."""
-
-    states = ['open', 'closed']
-
-    #
-    # Internal routines
-    #
-    def __repr__(self):
-        file = self._file_
-        return "<%s posixfile '%s', mode '%s' at %s>" % \
-                (self.states[file.closed], file.name, file.mode, \
-                 hex(id(self))[2:])
-
-    #
-    # Initialization routines
-    #
-    def open(self, name, mode='r', bufsize=-1):
-        import __builtin__
-        return self.fileopen(__builtin__.open(name, mode, bufsize))
-
-    def fileopen(self, file):
-        if `type(file)` != "<type 'file'>":
-            raise TypeError, 'posixfile.fileopen() arg must be file object'
-        self._file_  = file
-        # Copy basic file methods
-        for method in file.__methods__:
-            setattr(self, method, getattr(file, method))
-        return self
-
-    #
-    # New methods
-    #
-    def file(self):
-        return self._file_
-
-    def dup(self):
-        import posix
-
-        try: ignore = posix.fdopen
-        except: raise AttributeError, 'dup() method unavailable'
-
-        return posix.fdopen(posix.dup(self._file_.fileno()), self._file_.mode)
-
-    def dup2(self, fd):
-        import posix
-
-        try: ignore = posix.fdopen
-        except: raise AttributeError, 'dup() method unavailable'
-
-        posix.dup2(self._file_.fileno(), fd)
-        return posix.fdopen(fd, self._file_.mode)
-
-    def flags(self, *which):
-        import fcntl, FCNTL
-
-        if which:
-            if len(which) > 1:
-                raise TypeError, 'Too many arguments'
-            which = which[0]
-        else: which = '?'
-
-        l_flags = 0
-        if 'n' in which: l_flags = l_flags | FCNTL.O_NDELAY
-        if 'a' in which: l_flags = l_flags | FCNTL.O_APPEND
-        if 's' in which: l_flags = l_flags | FCNTL.O_SYNC
-
-        file = self._file_
-
-        if '=' not in which:
-            cur_fl = fcntl.fcntl(file.fileno(), FCNTL.F_GETFL, 0)
-            if '!' in which: l_flags = cur_fl & ~ l_flags
-            else: l_flags = cur_fl | l_flags
-
-        l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_SETFL, l_flags)
-
-        if 'c' in which:        
-            arg = ('!' not in which)    # 0 is don't, 1 is do close on exec
-            l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_SETFD, arg)
-
-        if '?' in which:
-            which = ''                  # Return current flags
-            l_flags = fcntl.fcntl(file.fileno(), FCNTL.F_GETFL, 0)
-            if FCNTL.O_APPEND & l_flags: which = which + 'a'
-            if fcntl.fcntl(file.fileno(), FCNTL.F_GETFD, 0) & 1:
-                which = which + 'c'
-            if FCNTL.O_NDELAY & l_flags: which = which + 'n'
-            if FCNTL.O_SYNC & l_flags: which = which + 's'
-            return which
-        
-    def lock(self, how, *args):
-        import struct, fcntl, FCNTL
-
-        if 'w' in how: l_type = FCNTL.F_WRLCK
-        elif 'r' in how: l_type = FCNTL.F_RDLCK
-        elif 'u' in how: l_type = FCNTL.F_UNLCK
-        else: raise TypeError, 'no type of lock specified'
-
-        if '|' in how: cmd = FCNTL.F_SETLKW
-        elif '?' in how: cmd = FCNTL.F_GETLK
-        else: cmd = FCNTL.F_SETLK
-
-        l_whence = 0
-        l_start = 0
-        l_len = 0
-
-        if len(args) == 1:
-            l_len = args[0]
-        elif len(args) == 2:
-            l_len, l_start = args
-        elif len(args) == 3:
-            l_len, l_start, l_whence = args
-        elif len(args) > 3:
-            raise TypeError, 'too many arguments'
-
-        # Hack by davem@magnet.com to get locking to go on freebsd;
-        # additions for AIX by Vladimir.Marangozov@imag.fr
-        import sys, os
-        if sys.platform in ('netbsd1',
-                            'openbsd2',
-                            'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                            'bsdos2', 'bsdos3', 'bsdos4'):
-            flock = struct.pack('lxxxxlxxxxlhh', \
-                  l_start, l_len, os.getpid(), l_type, l_whence) 
-        elif sys.platform in ['aix3', 'aix4']:
-            flock = struct.pack('hhlllii', \
-                  l_type, l_whence, l_start, l_len, 0, 0, 0)
-        else:
-            flock = struct.pack('hhllhh', \
-                  l_type, l_whence, l_start, l_len, 0, 0)
-
-        flock = fcntl.fcntl(self._file_.fileno(), cmd, flock)
-
-        if '?' in how:
-            if sys.platform in ('netbsd1',
-                                'openbsd2',
-                                'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                                'bsdos2', 'bsdos3', 'bsdos4'):
-                l_start, l_len, l_pid, l_type, l_whence = \
-                    struct.unpack('lxxxxlxxxxlhh', flock)
-            elif sys.platform in ['aix3', 'aix4']:
-                l_type, l_whence, l_start, l_len, l_sysid, l_pid, l_vfs = \
-                    struct.unpack('hhlllii', flock)
-            elif sys.platform == "linux2":
-                l_type, l_whence, l_start, l_len, l_pid, l_sysid = \
-                    struct.unpack('hhllhh', flock)
-            else:
-                l_type, l_whence, l_start, l_len, l_sysid, l_pid = \
-                    struct.unpack('hhllhh', flock)
-
-            if l_type != FCNTL.F_UNLCK:
-                if l_type == FCNTL.F_RDLCK:
-                    return 'r', l_len, l_start, l_whence, l_pid
-                else:
-                    return 'w', l_len, l_start, l_whence, l_pid
-
-def open(name, mode='r', bufsize=-1):
-    """Public routine to open a file as a posixfile object."""
-    return _posixfile_().open(name, mode, bufsize)
-
-def fileopen(file):
-    """Public routine to get a posixfile object from a Python file object."""
-    return _posixfile_().fileopen(file)
-
-#
-# Constants
-#
-SEEK_SET = 0
-SEEK_CUR = 1
-SEEK_END = 2
-
-#
-# End of posixfile.py
-#
diff --git a/Lib/dos-8x3/posixpat.py b/Lib/dos-8x3/posixpat.py
deleted file mode 100755
index 2826604..0000000
--- a/Lib/dos-8x3/posixpat.py
+++ /dev/null
@@ -1,368 +0,0 @@
-"""Common operations on Posix pathnames.
-
-Instead of importing this module directly, import os and refer to
-this module as os.path.  The "os.path" name is an alias for this
-module on Posix systems; on other systems (e.g. Mac, Windows),
-os.path provides the same operations in a manner specific to that
-platform, and is an alias to another module (e.g. macpath, ntpath).
-
-Some of this can actually be useful on non-Posix systems too, e.g.
-for manipulation of the pathname component of URLs.
-"""
-
-import os
-import stat
-
-
-# Normalize the case of a pathname.  Trivial in Posix, string.lower on Mac.
-# On MS-DOS this may also turn slashes into backslashes; however, other
-# normalizations (such as optimizing '../' away) are not allowed
-# (another function should be defined to do that).
-
-def normcase(s):
-    """Normalize case of pathname.  Has no effect under Posix"""
-    return s
-
-
-# Return whether a path is absolute.
-# Trivial in Posix, harder on the Mac or MS-DOS.
-
-def isabs(s):
-    """Test whether a path is absolute"""
-    return s[:1] == '/'
-
-
-# Join pathnames.
-# Ignore the previous parts if a part is absolute.
-# Insert a '/' unless the first part is empty or already ends in '/'.
-
-def join(a, *p):
-    """Join two or more pathname components, inserting '/' as needed"""
-    path = a
-    for b in p:
-        if b[:1] == '/':
-            path = b
-        elif path == '' or path[-1:] == '/':
-            path = path + b
-        else:
-            path = path + '/' + b
-    return path
-
-
-# Split a path in head (everything up to the last '/') and tail (the
-# rest).  If the path ends in '/', tail will be empty.  If there is no
-# '/' in the path, head  will be empty.
-# Trailing '/'es are stripped from head unless it is the root.
-
-def split(p):
-    """Split a pathname.  Returns tuple "(head, tail)" where "tail" is 
-    everything after the final slash.  Either part may be empty."""
-    i = p.rfind('/') + 1
-    head, tail = p[:i], p[i:]
-    if head and head <> '/'*len(head):
-        while head[-1] == '/':
-            head = head[:-1]
-    return head, tail
-
-
-# Split a path in root and extension.
-# The extension is everything starting at the last dot in the last
-# pathname component; the root is everything before that.
-# It is always true that root + ext == p.
-
-def splitext(p):
-    """Split the extension from a pathname.  Extension is everything from the
-    last dot to the end.  Returns "(root, ext)", either part may be empty."""
-    root, ext = '', ''
-    for c in p:
-        if c == '/':
-            root, ext = root + ext + c, ''
-        elif c == '.':
-            if ext:
-                root, ext = root + ext, c
-            else:
-                ext = c
-        elif ext:
-            ext = ext + c
-        else:
-            root = root + c
-    return root, ext
-
-
-# Split a pathname into a drive specification and the rest of the
-# path.  Useful on DOS/Windows/NT; on Unix, the drive is always empty.
-
-def splitdrive(p):
-    """Split a pathname into drive and path. On Posix, drive is always 
-    empty."""
-    return '', p
-
-
-# Return the tail (basename) part of a path.
-
-def basename(p):
-    """Returns the final component of a pathname"""
-    return split(p)[1]
-
-
-# Return the head (dirname) part of a path.
-
-def dirname(p):
-    """Returns the directory component of a pathname"""
-    return split(p)[0]
-
-
-# Return the longest prefix of all list elements.
-
-def commonprefix(m):
-    "Given a list of pathnames, returns the longest common leading component"
-    if not m: return ''
-    prefix = m[0]
-    for item in m:
-        for i in range(len(prefix)):
-            if prefix[:i+1] <> item[:i+1]:
-                prefix = prefix[:i]
-                if i == 0: return ''
-                break
-    return prefix
-
-
-# Get size, mtime, atime of files.
-
-def getsize(filename):
-    """Return the size of a file, reported by os.stat()."""
-    st = os.stat(filename)
-    return st[stat.ST_SIZE]
-
-def getmtime(filename):
-    """Return the last modification time of a file, reported by os.stat()."""
-    st = os.stat(filename)
-    return st[stat.ST_MTIME]
-
-def getatime(filename):
-    """Return the last access time of a file, reported by os.stat()."""
-    st = os.stat(filename)
-    return st[stat.ST_ATIME]
-
-
-# Is a path a symbolic link?
-# This will always return false on systems where os.lstat doesn't exist.
-
-def islink(path):
-    """Test whether a path is a symbolic link"""
-    try:
-        st = os.lstat(path)
-    except (os.error, AttributeError):
-        return 0
-    return stat.S_ISLNK(st[stat.ST_MODE])
-
-
-# Does a path exist?
-# This is false for dangling symbolic links.
-
-def exists(path):
-    """Test whether a path exists.  Returns false for broken symbolic links"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return 0
-    return 1
-
-
-# Is a path a directory?
-# This follows symbolic links, so both islink() and isdir() can be true
-# for the same path.
-
-def isdir(path):
-    """Test whether a path is a directory"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return 0
-    return stat.S_ISDIR(st[stat.ST_MODE])
-
-
-# Is a path a regular file?
-# This follows symbolic links, so both islink() and isfile() can be true
-# for the same path.
-
-def isfile(path):
-    """Test whether a path is a regular file"""
-    try:
-        st = os.stat(path)
-    except os.error:
-        return 0
-    return stat.S_ISREG(st[stat.ST_MODE])
-
-
-# Are two filenames really pointing to the same file?
-
-def samefile(f1, f2):
-    """Test whether two pathnames reference the same actual file"""
-    s1 = os.stat(f1)
-    s2 = os.stat(f2)
-    return samestat(s1, s2)
-
-
-# Are two open files really referencing the same file?
-# (Not necessarily the same file descriptor!)
-
-def sameopenfile(fp1, fp2):
-    """Test whether two open file objects reference the same file"""
-    s1 = os.fstat(fp1)
-    s2 = os.fstat(fp2)
-    return samestat(s1, s2)
-
-
-# Are two stat buffers (obtained from stat, fstat or lstat)
-# describing the same file?
-
-def samestat(s1, s2):
-    """Test whether two stat buffers reference the same file"""
-    return s1[stat.ST_INO] == s2[stat.ST_INO] and \
-	   s1[stat.ST_DEV] == s2[stat.ST_DEV]
-
-
-# Is a path a mount point?
-# (Does this work for all UNIXes?  Is it even guaranteed to work by Posix?)
-
-def ismount(path):
-    """Test whether a path is a mount point"""
-    try:
-        s1 = os.stat(path)
-        s2 = os.stat(join(path, '..'))
-    except os.error:
-        return 0 # It doesn't exist -- so not a mount point :-)
-    dev1 = s1[stat.ST_DEV]
-    dev2 = s2[stat.ST_DEV]
-    if dev1 != dev2:
-        return 1        # path/.. on a different device as path
-    ino1 = s1[stat.ST_INO]
-    ino2 = s2[stat.ST_INO]
-    if ino1 == ino2:
-        return 1        # path/.. is the same i-node as path
-    return 0
-
-
-# Directory tree walk.
-# For each directory under top (including top itself, but excluding
-# '.' and '..'), func(arg, dirname, filenames) is called, where
-# dirname is the name of the directory and filenames is the list
-# of files (and subdirectories etc.) in the directory.
-# The func may modify the filenames list, to implement a filter,
-# or to impose a different order of visiting.
-
-def walk(top, func, arg):
-    """walk(top,func,arg) calls func(arg, d, files) for each directory "d" 
-    in the tree  rooted at "top" (including "top" itself).  "files" is a list
-    of all the files and subdirs in directory "d".
-    """
-    try:
-        names = os.listdir(top)
-    except os.error:
-        return
-    func(arg, top, names)
-    for name in names:
-            name = join(top, name)
-            st = os.lstat(name)
-            if stat.S_ISDIR(st[stat.ST_MODE]):
-                walk(name, func, arg)
-
-
-# Expand paths beginning with '~' or '~user'.
-# '~' means $HOME; '~user' means that user's home directory.
-# If the path doesn't begin with '~', or if the user or $HOME is unknown,
-# the path is returned unchanged (leaving error reporting to whatever
-# function is called with the expanded path as argument).
-# See also module 'glob' for expansion of *, ? and [...] in pathnames.
-# (A function should also be defined to do full *sh-style environment
-# variable expansion.)
-
-def expanduser(path):
-    """Expand ~ and ~user constructions.  If user or $HOME is unknown, 
-    do nothing."""
-    if path[:1] <> '~':
-        return path
-    i, n = 1, len(path)
-    while i < n and path[i] <> '/':
-        i = i + 1
-    if i == 1:
-        if not os.environ.has_key('HOME'):
-            return path
-        userhome = os.environ['HOME']
-    else:
-        import pwd
-        try:
-            pwent = pwd.getpwnam(path[1:i])
-        except KeyError:
-            return path
-        userhome = pwent[5]
-    if userhome[-1:] == '/': i = i + 1
-    return userhome + path[i:]
-
-
-# Expand paths containing shell variable substitutions.
-# This expands the forms $variable and ${variable} only.
-# Non-existent variables are left unchanged.
-
-_varprog = None
-
-def expandvars(path):
-    """Expand shell variables of form $var and ${var}.  Unknown variables
-    are left unchanged."""
-    global _varprog
-    if '$' not in path:
-        return path
-    if not _varprog:
-        import re
-        _varprog = re.compile(r'\$(\w+|\{[^}]*\})')
-    i = 0
-    while 1:
-        m = _varprog.search(path, i)
-        if not m:
-            break
-        i, j = m.span(0)
-        name = m.group(1)
-        if name[:1] == '{' and name[-1:] == '}':
-            name = name[1:-1]
-        if os.environ.has_key(name):
-            tail = path[j:]
-            path = path[:i] + os.environ[name]
-            i = len(path)
-            path = path + tail
-        else:
-            i = j
-    return path
-
-
-# Normalize a path, e.g. A//B, A/./B and A/foo/../B all become A/B.
-# It should be understood that this may change the meaning of the path
-# if it contains symbolic links!
-
-def normpath(path):
-    """Normalize path, eliminating double slashes, etc."""
-    if path == '':
-        return '.'
-    initial_slash = (path[0] == '/')
-    comps = path.split('/')
-    new_comps = []
-    for comp in comps:
-        if comp in ('', '.'):
-            continue
-        if (comp != '..' or (not initial_slash and not new_comps) or 
-             (new_comps and new_comps[-1] == '..')):
-            new_comps.append(comp)
-        elif new_comps:
-            new_comps.pop()
-    comps = new_comps
-    path = '/'.join(comps)
-    if initial_slash:
-        path = '/' + path
-    return path or '.'
-
-
-def abspath(path):
-    """Return an absolute path."""
-    if not isabs(path):
-        path = join(os.getcwd(), path)
-    return normpath(path)
diff --git a/Lib/dos-8x3/py_compi.py b/Lib/dos-8x3/py_compi.py
deleted file mode 100755
index b453109..0000000
--- a/Lib/dos-8x3/py_compi.py
+++ /dev/null
@@ -1,80 +0,0 @@
-"""Routine to "compile" a .py file to a .pyc (or .pyo) file.
-
-This module has intimate knowledge of the format of .pyc files.
-"""
-
-import imp
-MAGIC = imp.get_magic()
-
-def wr_long(f, x):
-    """Internal; write a 32-bit int to a file in little-endian order."""
-    f.write(chr( x        & 0xff))
-    f.write(chr((x >> 8)  & 0xff))
-    f.write(chr((x >> 16) & 0xff))
-    f.write(chr((x >> 24) & 0xff))
-
-def compile(file, cfile=None, dfile=None):
-    """Byte-compile one Python source file to Python bytecode.
-
-    Arguments:
-
-    file:  source filename
-    cfile: target filename; defaults to source with 'c' or 'o' appended
-           ('c' normally, 'o' in optimizing mode, giving .pyc or .pyo)
-    dfile: purported filename; defaults to source (this is the filename
-           that will show up in error messages)
-
-    Note that it isn't necessary to byte-compile Python modules for
-    execution efficiency -- Python itself byte-compiles a module when
-    it is loaded, and if it can, writes out the bytecode to the
-    corresponding .pyc (or .pyo) file.
-
-    However, if a Python installation is shared between users, it is a
-    good idea to byte-compile all modules upon installation, since
-    other users may not be able to write in the source directories,
-    and thus they won't be able to write the .pyc/.pyo file, and then
-    they would be byte-compiling every module each time it is loaded.
-    This can slow down program start-up considerably.
-
-    See compileall.py for a script/module that uses this module to
-    byte-compile all installed files (or all files in selected
-    directories).
-
-    """
-    import os, marshal, __builtin__
-    f = open(file)
-    try:
-        timestamp = long(os.fstat(f.fileno())[8])
-    except AttributeError:
-        timestamp = long(os.stat(file)[8])
-    codestring = f.read()
-    # If parsing from a string, line breaks are \n (see parsetok.c:tok_nextc)
-    # Replace will return original string if pattern is not found, so
-    # we don't need to check whether it is found first.
-    codestring = codestring.replace("\r\n","\n")
-    codestring = codestring.replace("\r","\n")
-    f.close()
-    if codestring and codestring[-1] != '\n':
-        codestring = codestring + '\n'
-    try:
-        codeobject = __builtin__.compile(codestring, dfile or file, 'exec')
-    except SyntaxError, detail:
-        import traceback, sys, string
-        lines = traceback.format_exception_only(SyntaxError, detail)
-        for line in lines:
-            sys.stderr.write(string.replace(line, 'File "<string>"',
-                                            'File "%s"' % (dfile or file)))
-        return
-    if not cfile:
-        cfile = file + (__debug__ and 'c' or 'o')
-    fc = open(cfile, 'wb')
-    fc.write('\0\0\0\0')
-    wr_long(fc, timestamp)
-    marshal.dump(codeobject, fc)
-    fc.flush()
-    fc.seek(0, 0)
-    fc.write(MAGIC)
-    fc.close()
-    if os.name == 'mac':
-        import macfs
-        macfs.FSSpec(cfile).SetCreatorType('Pyth', 'PYC ')
diff --git a/Lib/dos-8x3/queue.py b/Lib/dos-8x3/queue.py
deleted file mode 100755
index 9d5f799..0000000
--- a/Lib/dos-8x3/queue.py
+++ /dev/null
@@ -1,138 +0,0 @@
-"""A multi-producer, multi-consumer queue."""
-
-# define this exception to be compatible with Python 1.5's class
-# exceptions, but also when -X option is used.
-try:
-    class Empty(Exception):
-        pass
-    class Full(Exception):
-        pass
-except TypeError:
-    # string based exceptions
-    # exception raised by get(block=0)/get_nowait()
-    Empty = 'Queue.Empty'
-    # exception raised by put(block=0)/put_nowait()
-    Full = 'Queue.Full'
-
-class Queue:
-    def __init__(self, maxsize=0):
-        """Initialize a queue object with a given maximum size.
-
-        If maxsize is <= 0, the queue size is infinite.
-        """
-        import thread
-        self._init(maxsize)
-        self.mutex = thread.allocate_lock()
-        self.esema = thread.allocate_lock()
-        self.esema.acquire()
-        self.fsema = thread.allocate_lock()
-
-    def qsize(self):
-        """Return the approximate size of the queue (not reliable!)."""
-        self.mutex.acquire()
-        n = self._qsize()
-        self.mutex.release()
-        return n
-
-    def empty(self):
-        """Return 1 if the queue is empty, 0 otherwise (not reliable!)."""
-        self.mutex.acquire()
-        n = self._empty()
-        self.mutex.release()
-        return n
-
-    def full(self):
-        """Return 1 if the queue is full, 0 otherwise (not reliable!)."""
-        self.mutex.acquire()
-        n = self._full()
-        self.mutex.release()
-        return n
-
-    def put(self, item, block=1):
-        """Put an item into the queue.
-
-        If optional arg 'block' is 1 (the default), block if
-        necessary until a free slot is available.  Otherwise (block
-        is 0), put an item on the queue if a free slot is immediately
-        available, else raise the Full exception.
-        """
-        if block:
-            self.fsema.acquire()
-        elif not self.fsema.acquire(0):
-            raise Full
-        self.mutex.acquire()
-        was_empty = self._empty()
-        self._put(item)
-        if was_empty:
-            self.esema.release()
-        if not self._full():
-            self.fsema.release()
-        self.mutex.release()
-
-    def put_nowait(self, item):
-        """Put an item into the queue without blocking.
-
-        Only enqueue the item if a free slot is immediately available.
-        Otherwise raise the Full exception.
-        """
-        return self.put(item, 0)
-
-    def get(self, block=1):
-        """Remove and return an item from the queue.
-
-        If optional arg 'block' is 1 (the default), block if
-        necessary until an item is available.  Otherwise (block is 0),
-        return an item if one is immediately available, else raise the
-        Empty exception.
-        """
-        if block:
-            self.esema.acquire()
-        elif not self.esema.acquire(0):
-            raise Empty
-        self.mutex.acquire()
-        was_full = self._full()
-        item = self._get()
-        if was_full:
-            self.fsema.release()
-        if not self._empty():
-            self.esema.release()
-        self.mutex.release()
-        return item
-
-    def get_nowait(self):
-        """Remove and return an item from the queue without blocking.
-
-        Only get an item if one is immediately available.  Otherwise
-        raise the Empty exception.
-        """
-        return self.get(0)
-
-    # Override these methods to implement other queue organizations
-    # (e.g. stack or priority queue).
-    # These will only be called with appropriate locks held
-
-    # Initialize the queue representation
-    def _init(self, maxsize):
-        self.maxsize = maxsize
-        self.queue = []
-
-    def _qsize(self):
-        return len(self.queue)
-
-    # Check whether the queue is empty
-    def _empty(self):
-        return not self.queue
-
-    # Check whether the queue is full
-    def _full(self):
-        return self.maxsize > 0 and len(self.queue) == self.maxsize
-
-    # Put a new item in the queue
-    def _put(self, item):
-        self.queue.append(item)
-
-    # Get an item from the queue
-    def _get(self):
-        item = self.queue[0]
-        del self.queue[0]
-        return item
diff --git a/Lib/dos-8x3/reconver.py b/Lib/dos-8x3/reconver.py
deleted file mode 100644
index 7c2d376..0000000
--- a/Lib/dos-8x3/reconver.py
+++ /dev/null
@@ -1,186 +0,0 @@
-#! /usr/bin/env python1.5
-
-r"""Convert old ("regex") regular expressions to new syntax ("re").
-
-When imported as a module, there are two functions, with their own
-strings:
-
-  convert(s, syntax=None) -- convert a regex regular expression to re syntax
-
-  quote(s) -- return a quoted string literal
-
-When used as a script, read a Python string literal (or any other
-expression evaluating to a string) from stdin, and write the
-translated expression to stdout as a string literal.  Unless stdout is
-a tty, no trailing \n is written to stdout.  This is done so that it
-can be used with Emacs C-U M-| (shell-command-on-region with argument
-which filters the region through the shell command).
-
-No attempt has been made at coding for performance.
-
-Translation table...
-
-    \(    (     (unless RE_NO_BK_PARENS set)
-    \)    )     (unless RE_NO_BK_PARENS set)
-    \|    |     (unless RE_NO_BK_VBAR set)
-    \<    \b    (not quite the same, but alla...)
-    \>    \b    (not quite the same, but alla...)
-    \`    \A
-    \'    \Z
-
-Not translated...
-
-    .
-    ^
-    $
-    *
-    +           (unless RE_BK_PLUS_QM set, then to \+)
-    ?           (unless RE_BK_PLUS_QM set, then to \?)
-    \
-    \b
-    \B
-    \w
-    \W
-    \1 ... \9
-
-Special cases...
-
-    Non-printable characters are always replaced by their 3-digit
-    escape code (except \t, \n, \r, which use mnemonic escapes)
-
-    Newline is turned into | when RE_NEWLINE_OR is set
-
-XXX To be done...
-
-    [...]     (different treatment of backslashed items?)
-    [^...]    (different treatment of backslashed items?)
-    ^ $ * + ? (in some error contexts these are probably treated differently)
-    \vDD  \DD (in the regex docs but only works when RE_ANSI_HEX set)
-
-"""
-
-
-import regex
-from regex_syntax import * # RE_* 
-
-# Default translation table
-mastertable = {
-    r'\<': r'\b',
-    r'\>': r'\b',
-    r'\`': r'\A',
-    r'\'': r'\Z',
-    r'\(': '(',
-    r'\)': ')',
-    r'\|': '|',
-    '(': r'\(',
-    ')': r'\)',
-    '|': r'\|',
-    '\t': r'\t',
-    '\n': r'\n',
-    '\r': r'\r',
-}
-
-
-def convert(s, syntax=None):
-    """Convert a regex regular expression to re syntax.
-
-    The first argument is the regular expression, as a string object,
-    just like it would be passed to regex.compile().  (I.e., pass the
-    actual string object -- string quotes must already have been
-    removed and the standard escape processing has already been done,
-    e.g. by eval().)
-
-    The optional second argument is the regex syntax variant to be
-    used.  This is an integer mask as passed to regex.set_syntax();
-    the flag bits are defined in regex_syntax.  When not specified, or
-    when None is given, the current regex syntax mask (as retrieved by
-    regex.get_syntax()) is used -- which is 0 by default.
-
-    The return value is a regular expression, as a string object that
-    could be passed to re.compile().  (I.e., no string quotes have
-    been added -- use quote() below, or repr().)
-
-    The conversion is not always guaranteed to be correct.  More
-    syntactical analysis should be performed to detect borderline
-    cases and decide what to do with them.  For example, 'x*?' is not
-    translated correctly.
-
-    """
-    table = mastertable.copy()
-    if syntax is None:
-        syntax = regex.get_syntax()
-    if syntax & RE_NO_BK_PARENS:
-        del table[r'\('], table[r'\)']
-        del table['('], table[')']
-    if syntax & RE_NO_BK_VBAR:
-        del table[r'\|']
-        del table['|']
-    if syntax & RE_BK_PLUS_QM:
-        table['+'] = r'\+'
-        table['?'] = r'\?'
-        table[r'\+'] = '+'
-        table[r'\?'] = '?'
-    if syntax & RE_NEWLINE_OR:
-        table['\n'] = '|'
-    res = ""
-
-    i = 0
-    end = len(s)
-    while i < end:
-        c = s[i]
-        i = i+1
-        if c == '\\':
-            c = s[i]
-            i = i+1
-            key = '\\' + c
-            key = table.get(key, key)
-            res = res + key
-        else:
-            c = table.get(c, c)
-            res = res + c
-    return res
-
-
-def quote(s, quote=None):
-    """Convert a string object to a quoted string literal.
-
-    This is similar to repr() but will return a "raw" string (r'...'
-    or r"...") when the string contains backslashes, instead of
-    doubling all backslashes.  The resulting string does *not* always
-    evaluate to the same string as the original; however it will do
-    just the right thing when passed into re.compile().
-
-    The optional second argument forces the string quote; it must be
-    a single character which is a valid Python string quote.
-
-    """
-    if quote is None:
-        q = "'"
-        altq = "'"
-        if q in s and altq not in s:
-            q = altq
-    else:
-        assert quote in ('"', "'")
-        q = quote
-    res = q
-    for c in s:
-        if c == q: c = '\\' + c
-        elif c < ' ' or c > '~': c = "\\%03o" % ord(c)
-        res = res + c
-    res = res + q
-    if '\\' in res:
-        res = 'r' + res
-    return res
-
-
-def main():
-    """Main program -- called when run as a script."""
-    import sys
-    s = eval(sys.stdin.read())
-    sys.stdout.write(quote(convert(s)))
-    if sys.stdout.isatty():
-        sys.stdout.write("\n")
-
-
-if __name__ == '__main__':
-    main()
diff --git a/Lib/dos-8x3/regex_sy.py b/Lib/dos-8x3/regex_sy.py
deleted file mode 100755
index aab7e7a..0000000
--- a/Lib/dos-8x3/regex_sy.py
+++ /dev/null
@@ -1,53 +0,0 @@
-"""Constants for selecting regexp syntaxes for the obsolete regex module.
-
-This module is only for backward compatibility.  "regex" has now
-been replaced by the new regular expression module, "re".
-
-These bits are passed to regex.set_syntax() to choose among
-alternative regexp syntaxes.
-"""
-
-# 1 means plain parentheses serve as grouping, and backslash
-#   parentheses are needed for literal searching.
-# 0 means backslash-parentheses are grouping, and plain parentheses
-#   are for literal searching.
-RE_NO_BK_PARENS = 1
-
-# 1 means plain | serves as the "or"-operator, and \| is a literal.
-# 0 means \| serves as the "or"-operator, and | is a literal.
-RE_NO_BK_VBAR = 2
-
-# 0 means plain + or ? serves as an operator, and \+, \? are literals.
-# 1 means \+, \? are operators and plain +, ? are literals.
-RE_BK_PLUS_QM = 4
-
-# 1 means | binds tighter than ^ or $.
-# 0 means the contrary.
-RE_TIGHT_VBAR = 8
-
-# 1 means treat \n as an _OR operator
-# 0 means treat it as a normal character
-RE_NEWLINE_OR = 16
-
-# 0 means that a special characters (such as *, ^, and $) always have
-#   their special meaning regardless of the surrounding context.
-# 1 means that special characters may act as normal characters in some
-#   contexts.  Specifically, this applies to:
-#	^ - only special at the beginning, or after ( or |
-#	$ - only special at the end, or before ) or |
-#	*, +, ? - only special when not after the beginning, (, or |
-RE_CONTEXT_INDEP_OPS = 32
-
-# ANSI sequences (\n etc) and \xhh
-RE_ANSI_HEX = 64
-
-# No GNU extensions
-RE_NO_GNU_EXTENSIONS = 128
-
-# Now define combinations of bits for the standard possibilities.
-RE_SYNTAX_AWK = (RE_NO_BK_PARENS | RE_NO_BK_VBAR | RE_CONTEXT_INDEP_OPS)
-RE_SYNTAX_EGREP = (RE_SYNTAX_AWK | RE_NEWLINE_OR)
-RE_SYNTAX_GREP = (RE_BK_PLUS_QM | RE_NEWLINE_OR)
-RE_SYNTAX_EMACS = 0
-
-# (Python's obsolete "regexp" module used a syntax similar to awk.)
diff --git a/Lib/dos-8x3/regex_te.py b/Lib/dos-8x3/regex_te.py
deleted file mode 100644
index dcb980a..0000000
--- a/Lib/dos-8x3/regex_te.py
+++ /dev/null
@@ -1,289 +0,0 @@
-
-# Regex test suite and benchmark suite v1.5a2
-# Due to the use of r"aw" strings, this file will 
-# only work with Python 1.5 or higher.
-
-# The 3 possible outcomes for each pattern
-[SUCCEED, FAIL, SYNTAX_ERROR] = range(3)
-
-# Benchmark suite (needs expansion)
-#
-# The benchmark suite does not test correctness, just speed.  The
-# first element of each tuple is the regex pattern; the second is a 
-# string to match it against.  The benchmarking code will embed the
-# second string inside several sizes of padding, to test how regex 
-# matching performs on large strings.
-
-benchmarks = [
-	('Python', 'Python'),                     # Simple text literal
-	('.*Python', 'Python'),                   # Bad text literal
-        ('.*Python.*', 'Python'),                 # Worse text literal
-	('.*\\(Python\\)', 'Python'),             # Bad text literal with grouping
-
-	('(Python\\|Perl\\|Tcl', 'Perl'),          # Alternation
-	('\\(Python\\|Perl\\|Tcl\\)', 'Perl'),     # Grouped alternation
-	('\\(Python\\)\\1', 'PythonPython'),       # Backreference
-#	('\\([0a-z][a-z]*,\\)+', 'a5,b7,c9,'),     # Disable the fastmap optimization
-	('\\([a-z][a-z0-9]*,\\)+', 'a5,b7,c9,')    # A few sets
-]
-
-# Test suite (for verifying correctness)
-#
-# The test suite is a list of 5- or 3-tuples.  The 5 parts of a
-# complete tuple are:
-# element 0: a string containing the pattern
-#         1: the string to match against the pattern
-#         2: the expected result (SUCCEED, FAIL, SYNTAX_ERROR)
-#         3: a string that will be eval()'ed to produce a test string.
-#            This is an arbitrary Python expression; the available
-#            variables are "found" (the whole match), and "g1", "g2", ...
-#            up to "g10" contain the contents of each group, or the
-#            string 'None' if the group wasn't given a value.
-#         4: The expected result of evaluating the expression.
-#            If the two don't match, an error is reported.
-#
-# If the regex isn't expected to work, the latter two elements can be omitted.
-
-tests = [
-('abc', 'abc', SUCCEED,
- 'found', 'abc'),
-('abc', 'xbc', FAIL),
-('abc', 'axc', FAIL),
-('abc', 'abx', FAIL),
-('abc', 'xabcy', SUCCEED,
- 'found', 'abc'),
-('abc', 'ababc', SUCCEED,
- 'found', 'abc'),
-('ab*c', 'abc', SUCCEED,
- 'found', 'abc'),
-('ab*bc', 'abc', SUCCEED,
- 'found', 'abc'),
-('ab*bc', 'abbc', SUCCEED,
- 'found', 'abbc'),
-('ab*bc', 'abbbbc', SUCCEED,
- 'found', 'abbbbc'),
-('ab+bc', 'abbc', SUCCEED,
- 'found', 'abbc'),
-('ab+bc', 'abc', FAIL),
-('ab+bc', 'abq', FAIL),
-('ab+bc', 'abbbbc', SUCCEED,
- 'found', 'abbbbc'),
-('ab?bc', 'abbc', SUCCEED,
- 'found', 'abbc'),
-('ab?bc', 'abc', SUCCEED,
- 'found', 'abc'),
-('ab?bc', 'abbbbc', FAIL),
-('ab?c', 'abc', SUCCEED,
- 'found', 'abc'),
-('^abc$', 'abc', SUCCEED,
- 'found', 'abc'),
-('^abc$', 'abcc', FAIL),
-('^abc', 'abcc', SUCCEED,
- 'found', 'abc'),
-('^abc$', 'aabc', FAIL),
-('abc$', 'aabc', SUCCEED,
- 'found', 'abc'),
-('^', 'abc', SUCCEED,
- 'found+"-"', '-'),
-('$', 'abc', SUCCEED,
- 'found+"-"', '-'),
-('a.c', 'abc', SUCCEED,
- 'found', 'abc'),
-('a.c', 'axc', SUCCEED,
- 'found', 'axc'),
-('a.*c', 'axyzc', SUCCEED,
- 'found', 'axyzc'),
-('a.*c', 'axyzd', FAIL),
-('a[bc]d', 'abc', FAIL),
-('a[bc]d', 'abd', SUCCEED,
- 'found', 'abd'),
-('a[b-d]e', 'abd', FAIL),
-('a[b-d]e', 'ace', SUCCEED,
- 'found', 'ace'),
-('a[b-d]', 'aac', SUCCEED,
- 'found', 'ac'),
-('a[-b]', 'a-', SUCCEED,
- 'found', 'a-'),
-('a[b-]', 'a-', SUCCEED,
- 'found', 'a-'),
-('a[]b', '-', SYNTAX_ERROR),
-('a[', '-', SYNTAX_ERROR),
-('a\\', '-', SYNTAX_ERROR),
-('abc\\)', '-', SYNTAX_ERROR),
-('\\(abc', '-', SYNTAX_ERROR),
-('a]', 'a]', SUCCEED,
- 'found', 'a]'),
-('a[]]b', 'a]b', SUCCEED,
- 'found', 'a]b'),
-('a[^bc]d', 'aed', SUCCEED,
- 'found', 'aed'),
-('a[^bc]d', 'abd', FAIL),
-('a[^-b]c', 'adc', SUCCEED,
- 'found', 'adc'),
-('a[^-b]c', 'a-c', FAIL),
-('a[^]b]c', 'a]c', FAIL),
-('a[^]b]c', 'adc', SUCCEED,
- 'found', 'adc'),
-('\\ba\\b', 'a-', SUCCEED,
- '"-"', '-'),
-('\\ba\\b', '-a', SUCCEED,
- '"-"', '-'),
-('\\ba\\b', '-a-', SUCCEED,
- '"-"', '-'),
-('\\by\\b', 'xy', FAIL),
-('\\by\\b', 'yz', FAIL),
-('\\by\\b', 'xyz', FAIL),
-('ab\\|cd', 'abc', SUCCEED,
- 'found', 'ab'),
-('ab\\|cd', 'abcd', SUCCEED,
- 'found', 'ab'),
-('\\(\\)ef', 'def', SUCCEED,
- 'found+"-"+g1', 'ef-'),
-('$b', 'b', FAIL),
-('a(b', 'a(b', SUCCEED,
- 'found+"-"+g1', 'a(b-None'),
-('a(*b', 'ab', SUCCEED,
- 'found', 'ab'),
-('a(*b', 'a((b', SUCCEED,
- 'found', 'a((b'),
-('a\\\\b', 'a\\b', SUCCEED,
- 'found', 'a\\b'),
-('\\(\\(a\\)\\)', 'abc', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'a-a-a'),
-('\\(a\\)b\\(c\\)', 'abc', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'abc-a-c'),
-('a+b+c', 'aabbabc', SUCCEED,
- 'found', 'abc'),
-('\\(a+\\|b\\)*', 'ab', SUCCEED,
- 'found+"-"+g1', 'ab-b'),
-('\\(a+\\|b\\)+', 'ab', SUCCEED,
- 'found+"-"+g1', 'ab-b'),
-('\\(a+\\|b\\)?', 'ab', SUCCEED,
- 'found+"-"+g1', 'a-a'),
-('\\)\\(', '-', SYNTAX_ERROR),
-('[^ab]*', 'cde', SUCCEED,
- 'found', 'cde'),
-('abc', '', FAIL),
-('a*', '', SUCCEED,
- 'found', ''),
-('a\\|b\\|c\\|d\\|e', 'e', SUCCEED,
- 'found', 'e'),
-('\\(a\\|b\\|c\\|d\\|e\\)f', 'ef', SUCCEED,
- 'found+"-"+g1', 'ef-e'),
-('abcd*efg', 'abcdefg', SUCCEED,
- 'found', 'abcdefg'),
-('ab*', 'xabyabbbz', SUCCEED,
- 'found', 'ab'),
-('ab*', 'xayabbbz', SUCCEED,
- 'found', 'a'),
-('\\(ab\\|cd\\)e', 'abcde', SUCCEED,
- 'found+"-"+g1', 'cde-cd'),
-('[abhgefdc]ij', 'hij', SUCCEED,
- 'found', 'hij'),
-('^\\(ab\\|cd\\)e', 'abcde', FAIL,
- 'xg1y', 'xy'),
-('\\(abc\\|\\)ef', 'abcdef', SUCCEED,
- 'found+"-"+g1', 'ef-'),
-('\\(a\\|b\\)c*d', 'abcd', SUCCEED,
- 'found+"-"+g1', 'bcd-b'),
-('\\(ab\\|ab*\\)bc', 'abc', SUCCEED,
- 'found+"-"+g1', 'abc-a'),
-('a\\([bc]*\\)c*', 'abc', SUCCEED,
- 'found+"-"+g1', 'abc-bc'),
-('a\\([bc]*\\)\\(c*d\\)', 'abcd', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
-('a\\([bc]+\\)\\(c*d\\)', 'abcd', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'abcd-bc-d'),
-('a\\([bc]*\\)\\(c+d\\)', 'abcd', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'abcd-b-cd'),
-('a[bcd]*dcdcde', 'adcdcde', SUCCEED,
- 'found', 'adcdcde'),
-('a[bcd]+dcdcde', 'adcdcde', FAIL),
-('\\(ab\\|a\\)b*c', 'abc', SUCCEED,
- 'found+"-"+g1', 'abc-ab'),
-('\\(\\(a\\)\\(b\\)c\\)\\(d\\)', 'abcd', SUCCEED,
- 'g1+"-"+g2+"-"+g3+"-"+g4', 'abc-a-b-d'),
-('[a-zA-Z_][a-zA-Z0-9_]*', 'alpha', SUCCEED,
- 'found', 'alpha'),
-('^a\\(bc+\\|b[eh]\\)g\\|.h$', 'abh', SUCCEED,
- 'found+"-"+g1', 'bh-None'),
-('\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effgz', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
-('\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'ij', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'ij-ij-j'),
-('\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'effg', FAIL),
-('\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'bcdd', FAIL),
-('\\(bc+d$\\|ef*g.\\|h?i\\(j\\|k\\)\\)', 'reffgz', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'effgz-effgz-None'),
-('\\(\\(\\(\\(\\(\\(\\(\\(\\(a\\)\\)\\)\\)\\)\\)\\)\\)\\)', 'a', SUCCEED,
- 'found', 'a'),
-('multiple words of text', 'uh-uh', FAIL),
-('multiple words', 'multiple words, yeah', SUCCEED,
- 'found', 'multiple words'),
-('\\(.*\\)c\\(.*\\)', 'abcde', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'abcde-ab-de'),
-('(\\(.*\\), \\(.*\\))', '(a, b)', SUCCEED,
- 'g2+"-"+g1', 'b-a'),
-('[k]', 'ab', FAIL),
-('a[-]?c', 'ac', SUCCEED,
- 'found', 'ac'),
-('\\(abc\\)\\1', 'abcabc', SUCCEED,
- 'g1', 'abc'),
-('\\([a-c]*\\)\\1', 'abcabc', SUCCEED,
- 'g1', 'abc'),
-('^\\(.+\\)?B', 'AB', SUCCEED,
- 'g1', 'A'),
-('\\(a+\\).\\1$', 'aaaaa', SUCCEED,
- 'found+"-"+g1', 'aaaaa-aa'),
-('^\\(a+\\).\\1$', 'aaaa', FAIL),
-('\\(abc\\)\\1', 'abcabc', SUCCEED,
- 'found+"-"+g1', 'abcabc-abc'),
-('\\([a-c]+\\)\\1', 'abcabc', SUCCEED,
- 'found+"-"+g1', 'abcabc-abc'),
-('\\(a\\)\\1', 'aa', SUCCEED,
- 'found+"-"+g1', 'aa-a'),
-('\\(a+\\)\\1', 'aa', SUCCEED,
- 'found+"-"+g1', 'aa-a'),
-('\\(a+\\)+\\1', 'aa', SUCCEED,
- 'found+"-"+g1', 'aa-a'),
-('\\(a\\).+\\1', 'aba', SUCCEED,
- 'found+"-"+g1', 'aba-a'),
-('\\(a\\)ba*\\1', 'aba', SUCCEED,
- 'found+"-"+g1', 'aba-a'),
-('\\(aa\\|a\\)a\\1$', 'aaa', SUCCEED,
- 'found+"-"+g1', 'aaa-a'),
-('\\(a\\|aa\\)a\\1$', 'aaa', SUCCEED,
- 'found+"-"+g1', 'aaa-a'),
-('\\(a+\\)a\\1$', 'aaa', SUCCEED,
- 'found+"-"+g1', 'aaa-a'),
-('\\([abc]*\\)\\1', 'abcabc', SUCCEED,
- 'found+"-"+g1', 'abcabc-abc'),
-('\\(a\\)\\(b\\)c\\|ab', 'ab', SUCCEED,
- 'found+"-"+g1+"-"+g2', 'ab-None-None'),
-('\\(a\\)+x', 'aaax', SUCCEED,
- 'found+"-"+g1', 'aaax-a'),
-('\\([ac]\\)+x', 'aacx', SUCCEED,
- 'found+"-"+g1', 'aacx-c'),
-('\\([^/]*/\\)*sub1/', 'd:msgs/tdir/sub1/trial/away.cpp', SUCCEED,
- 'found+"-"+g1', 'd:msgs/tdir/sub1/-tdir/'),
-('\\([^.]*\\)\\.\\([^:]*\\):[T ]+\\(.*\\)', 'track1.title:TBlah blah blah', SUCCEED,
- 'found+"-"+g1+"-"+g2+"-"+g3', 'track1.title:TBlah blah blah-track1-title-Blah blah blah'),
-('\\([^N]*N\\)+', 'abNNxyzN', SUCCEED,
- 'found+"-"+g1', 'abNNxyzN-xyzN'),
-('\\([^N]*N\\)+', 'abNNxyz', SUCCEED,
- 'found+"-"+g1', 'abNN-N'),
-('\\([abc]*\\)x', 'abcx', SUCCEED,
- 'found+"-"+g1', 'abcx-abc'),
-('\\([abc]*\\)x', 'abc', FAIL),
-('\\([xyz]*\\)x', 'abcx', SUCCEED,
- 'found+"-"+g1', 'x-'),
-('\\(a\\)+b\\|aac', 'aac', SUCCEED,
- 'found+"-"+g1', 'aac-None'),
-('\<a', 'a', SUCCEED, 'found', 'a'),
-('\<a', '!', FAIL),
-('a\<b', 'ab', FAIL),
-('a\>', 'ab', FAIL),
-('a\>', 'a!', SUCCEED, 'found', 'a'),
-('a\>', 'a', SUCCEED, 'found', 'a'),
-]
-
diff --git a/Lib/dos-8x3/rlcomple.py b/Lib/dos-8x3/rlcomple.py
deleted file mode 100644
index 8cd21ed..0000000
--- a/Lib/dos-8x3/rlcomple.py
+++ /dev/null
@@ -1,120 +0,0 @@
-"""Word completion for GNU readline 2.0.
-
-This requires the latest extension to the readline module (the
-completes keywords, built-ins and globals in __main__; when completing
-NAME.NAME..., it evaluates (!) the expression up to the last dot and
-completes its attributes.
-
-It's very cool to do "import string" type "string.", hit the
-completion key (twice), and see the list of names defined by the
-string module!
-
-Tip: to use the tab key as the completion key, call
-
-    readline.parse_and_bind("tab: complete")
-
-Notes:
-
-- Exceptions raised by the completer function are *ignored* (and
-generally cause the completion to fail).  This is a feature -- since
-readline sets the tty device in raw (or cbreak) mode, printing a
-traceback wouldn't work well without some complicated hoopla to save,
-reset and restore the tty state.
-
-- The evaluation of the NAME.NAME... form may cause arbitrary
-application defined code to be executed if an object with a
-__getattr__ hook is found.  Since it is the responsibility of the
-application (or the user) to enable this feature, I consider this an
-acceptable risk.  More complicated expressions (e.g. function calls or
-indexing operations) are *not* evaluated.
-
-- GNU readline is also used by the built-in functions input() and
-raw_input(), and thus these also benefit/suffer from the completer
-features.  Clearly an interactive application can benefit by
-specifying its own completer function and using raw_input() for all
-its input.
-
-- When the original stdin is not a tty device, GNU readline is never
-used, and this module (and the readline module) are silently inactive.
-
-"""
-
-import readline
-import __builtin__
-import __main__
-
-class Completer:
-
-    def complete(self, text, state):
-        """Return the next possible completion for 'text'.
-
-        This is called successively with state == 0, 1, 2, ... until it
-        returns None.  The completion should begin with 'text'.
-
-        """
-        if state == 0:
-            if "." in text:
-                self.matches = self.attr_matches(text)
-            else:
-                self.matches = self.global_matches(text)
-        try:
-            return self.matches[state]
-        except IndexError:
-            return None
-
-    def global_matches(self, text):
-        """Compute matches when text is a simple name.
-
-        Return a list of all keywords, built-in functions and names
-        currently defines in __main__ that match.
-
-        """
-        import keyword
-        matches = []
-        n = len(text)
-        for list in [keyword.kwlist,
-                     __builtin__.__dict__.keys(),
-                     __main__.__dict__.keys()]:
-            for word in list:
-                if word[:n] == text and word != "__builtins__":
-                    matches.append(word)
-        return matches
-
-    def attr_matches(self, text):
-        """Compute matches when text contains a dot.
-
-        Assuming the text is of the form NAME.NAME....[NAME], and is
-        evaluatable in the globals of __main__, it will be evaluated
-        and its attributes (as revealed by dir()) are used as possible
-        completions.  (For class instances, class members are are also
-        considered.)
-
-        WARNING: this can still invoke arbitrary C code, if an object
-        with a __getattr__ hook is evaluated.
-
-        """
-        import re
-        m = re.match(r"(\w+(\.\w+)*)\.(\w*)", text)
-        if not m:
-            return
-        expr, attr = m.group(1, 3)
-        object = eval(expr, __main__.__dict__)
-        words = dir(object)
-        if hasattr(object,'__class__'):
-            words.append('__class__')
-            words = words + get_class_members(object.__class__)
-        matches = []
-        n = len(attr)
-        for word in words:
-            if word[:n] == attr and word != "__builtins__":
-                matches.append("%s.%s" % (expr, word))
-        return matches
-
-def get_class_members(klass):
-    ret = dir(klass)
-    if hasattr(klass,'__bases__'):
-        for base in klass.__bases__:
-            ret = ret + get_class_members(base)
-    return ret
-
-readline.set_completer(Completer().complete)
diff --git a/Lib/dos-8x3/robotpar.py b/Lib/dos-8x3/robotpar.py
deleted file mode 100644
index 3f4396b..0000000
--- a/Lib/dos-8x3/robotpar.py
+++ /dev/null
@@ -1,97 +0,0 @@
-"""
-
-Robots.txt file parser class.  Accepts a list of lines or robots.txt URL as
-input, builds a set of rules from that list, then answers questions about
-fetchability of other URLs.
-
-"""
-
-class RobotFileParser:
-
-    def __init__(self):
-        self.rules = {}
-        self.debug = 0
-        self.url = ''
-        self.last_checked = 0
-
-    def mtime(self):
-        return self.last_checked
-
-    def modified(self):
-        import time
-        self.last_checked = time.time()
-
-    def set_url(self, url):
-        self.url = url
-
-    def read(self):
-        import urllib
-        self.parse(urllib.urlopen(self.url).readlines())
-
-    def parse(self, lines):
-        """parse the input lines from a robot.txt file"""
-        import string, re
-        active = []
-        for line in lines:
-            if self.debug: print '>', line,
-            # blank line terminates current record
-            if not line[:-1]:
-                active = []
-                continue
-            # remove optional comment and strip line
-            line = string.strip(line[:string.find(line, '#')])
-            if not line:
-                continue
-            line = re.split(' *: *', line)
-            if len(line) == 2:
-                line[0] = string.lower(line[0])
-                if line[0] == 'user-agent':
-                    # this record applies to this user agent
-                    if self.debug: print '>> user-agent:', line[1]
-                    active.append(line[1])
-                    if not self.rules.has_key(line[1]):
-                        self.rules[line[1]] = []
-                elif line[0] == 'disallow':
-                    if line[1]:
-                        if self.debug: print '>> disallow:', line[1]
-                        for agent in active:
-                            self.rules[agent].append(re.compile(line[1]))
-                    else:
-                        pass
-                        for agent in active:
-                            if self.debug: print '>> allow', agent
-                            self.rules[agent] = []
-                else:
-                    if self.debug: print '>> unknown:', line
-
-        self.modified()
-
-    # returns true if agent is allowed to fetch url
-    def can_fetch(self, useragent, url):
-        """using the parsed robots.txt decide if useragent can fetch url"""
-        import urlparse
-        ag = useragent
-        if not self.rules.has_key(ag): ag = '*'
-        if not self.rules.has_key(ag):
-            if self.debug: print '>> allowing', url, 'fetch by', useragent
-            return 1
-        path = urlparse.urlparse(url)[2]
-        for rule in self.rules[ag]:
-            if rule.match(path) is not None:
-                if self.debug: print '>> disallowing', url, 'fetch by', useragent
-                return 0
-        if self.debug: print '>> allowing', url, 'fetch by', useragent
-        return 1
-
-def _test():
-    rp = RobotFileParser()
-    rp.debug = 1
-    rp.set_url('http://www.musi-cal.com/robots.txt')
-    rp.read()
-    print rp.rules
-    print rp.can_fetch('*', 'http://www.musi-cal.com.com/')
-    print rp.can_fetch('Musi-Cal-Robot',
-                       'http://www.musi-cal.com/cgi-bin/event-search?city=San+Francisco')
-
-if __name__ == "__main__":
-    _test()
diff --git a/Lib/dos-8x3/simpleht.py b/Lib/dos-8x3/simpleht.py
deleted file mode 100755
index 4cfedbc..0000000
--- a/Lib/dos-8x3/simpleht.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""Simple HTTP Server.
-
-This module builds on BaseHTTPServer by implementing the standard GET
-and HEAD requests in a fairly straightforward manner.
-
-"""
-
-
-__version__ = "0.5"
-
-
-import os
-import string
-import posixpath
-import BaseHTTPServer
-import urllib
-import cgi
-import shutil
-from StringIO import StringIO
-
-
-class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
-
-    """Simple HTTP request handler with GET and HEAD commands.
-
-    This serves files from the current directory and any of its
-    subdirectories.  It assumes that all files are plain text files
-    unless they have the extension ".html" in which case it assumes
-    they are HTML files.
-
-    The GET and HEAD requests are identical except that the HEAD
-    request omits the actual contents of the file.
-
-    """
-
-    server_version = "SimpleHTTP/" + __version__
-
-    def do_GET(self):
-        """Serve a GET request."""
-        f = self.send_head()
-        if f:
-            self.copyfile(f, self.wfile)
-            f.close()
-
-    def do_HEAD(self):
-        """Serve a HEAD request."""
-        f = self.send_head()
-        if f:
-            f.close()
-
-    def send_head(self):
-        """Common code for GET and HEAD commands.
-
-        This sends the response code and MIME headers.
-
-        Return value is either a file object (which has to be copied
-        to the outputfile by the caller unless the command was HEAD,
-        and must be closed by the caller under all circumstances), or
-        None, in which case the caller has nothing further to do.
-
-        """
-        path = self.translate_path(self.path)
-        f = None
-        if os.path.isdir(path):
-            for index in "index.html", "index.htm":
-                index = os.path.join(path, index)
-                if os.path.exists(index):
-                    path = index
-                    break
-            else:
-                return self.list_directory(path)
-        ctype = self.guess_type(path)
-        if ctype.startswith('text/'):
-            mode = 'r'
-        else:
-            mode = 'rb'
-        try:
-            f = open(path, mode)
-        except IOError:
-            self.send_error(404, "File not found")
-            return None
-        self.send_response(200)
-        self.send_header("Content-type", ctype)
-        self.end_headers()
-        return f
-
-    def list_directory(self, path):
-        """Helper to produce a directory listing (absent index.html).
-
-        Return value is either a file object, or None (indicating an
-        error).  In either case, the headers are sent, making the
-        interface the same as for send_head().
-
-        """
-        try:
-            list = os.listdir(path)
-        except os.error:
-            self.send_error(404, "No permission to list directory");
-            return None
-        list.sort(lambda a, b: cmp(a.lower(), b.lower()))
-        f = StringIO()
-        f.write("<title>Directory listing for %s</title>\n" % self.path)
-        f.write("<h2>Directory listing for %s</h2>\n" % self.path)
-        f.write("<hr>\n<ul>\n")
-        for name in list:
-            fullname = os.path.join(path, name)
-            displayname = linkname = name = cgi.escape(name)
-            # Append / for directories or @ for symbolic links
-            if os.path.isdir(fullname):
-                displayname = name + "/"
-                linkname = name + "/"
-            if os.path.islink(fullname):
-                displayname = name + "@"
-                # Note: a link to a directory displays with @ and links with /
-            f.write('<li><a href="%s">%s</a>\n' % (linkname, displayname))
-        f.write("</ul>\n<hr>\n")
-        f.seek(0)
-        self.send_response(200)
-        self.send_header("Content-type", "text/html")
-        self.end_headers()
-        return f
-
-    def translate_path(self, path):
-        """Translate a /-separated PATH to the local filename syntax.
-
-        Components that mean special things to the local file system
-        (e.g. drive or directory names) are ignored.  (XXX They should
-        probably be diagnosed.)
-
-        """
-        path = posixpath.normpath(urllib.unquote(path))
-        words = string.splitfields(path, '/')
-        words = filter(None, words)
-        path = os.getcwd()
-        for word in words:
-            drive, word = os.path.splitdrive(word)
-            head, word = os.path.split(word)
-            if word in (os.curdir, os.pardir): continue
-            path = os.path.join(path, word)
-        return path
-
-    def copyfile(self, source, outputfile):
-        """Copy all data between two file objects.
-
-        The SOURCE argument is a file object open for reading
-        (or anything with a read() method) and the DESTINATION
-        argument is a file object open for writing (or
-        anything with a write() method).
-
-        The only reason for overriding this would be to change
-        the block size or perhaps to replace newlines by CRLF
-        -- note however that this the default server uses this
-        to copy binary data as well.
-
-        """
-        shutil.copyfileobj(source, outputfile)
-
-    def guess_type(self, path):
-        """Guess the type of a file.
-
-        Argument is a PATH (a filename).
-
-        Return value is a string of the form type/subtype,
-        usable for a MIME Content-type header.
-
-        The default implementation looks the file's extension
-        up in the table self.extensions_map, using text/plain
-        as a default; however it would be permissible (if
-        slow) to look inside the data to make a better guess.
-
-        """
-
-        base, ext = posixpath.splitext(path)
-        if self.extensions_map.has_key(ext):
-            return self.extensions_map[ext]
-        ext = string.lower(ext)
-        if self.extensions_map.has_key(ext):
-            return self.extensions_map[ext]
-        else:
-            return self.extensions_map['']
-
-    extensions_map = {
-            '': 'text/plain',   # Default, *must* be present
-            '.html': 'text/html',
-            '.htm': 'text/html',
-            '.gif': 'image/gif',
-            '.jpg': 'image/jpeg',
-            '.jpeg': 'image/jpeg',
-            }
-
-
-def test(HandlerClass = SimpleHTTPRequestHandler,
-         ServerClass = BaseHTTPServer.HTTPServer):
-    BaseHTTPServer.test(HandlerClass, ServerClass)
-
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/socketse.py b/Lib/dos-8x3/socketse.py
deleted file mode 100755
index a263f8e..0000000
--- a/Lib/dos-8x3/socketse.py
+++ /dev/null
@@ -1,447 +0,0 @@
-"""Generic socket server classes.
-
-This module tries to capture the various aspects of defining a server:
-
-- address family:
-        - AF_INET: IP (Internet Protocol) sockets (default)
-        - AF_UNIX: Unix domain sockets
-        - others, e.g. AF_DECNET are conceivable (see <socket.h>
-- socket type:
-        - SOCK_STREAM (reliable stream, e.g. TCP)
-        - SOCK_DGRAM (datagrams, e.g. UDP)
-- client address verification before further looking at the request
-        (This is actually a hook for any processing that needs to look
-         at the request before anything else, e.g. logging)
-- how to handle multiple requests:
-        - synchronous (one request is handled at a time)
-        - forking (each request is handled by a new process)
-        - threading (each request is handled by a new thread)
-
-The classes in this module favor the server type that is simplest to
-write: a synchronous TCP/IP server.  This is bad class design, but
-save some typing.  (There's also the issue that a deep class hierarchy
-slows down method lookups.)
-
-There are four classes in an inheritance diagram that represent
-synchronous servers of four types:
-
-        +-----------+        +------------------+
-        | TCPServer |------->| UnixStreamServer |
-        +-----------+        +------------------+
-              |
-              v
-        +-----------+        +--------------------+
-        | UDPServer |------->| UnixDatagramServer |
-        +-----------+        +--------------------+
-
-Note that UnixDatagramServer derives from UDPServer, not from
-UnixStreamServer -- the only difference between an IP and a Unix
-stream server is the address family, which is simply repeated in both
-unix server classes.
-
-Forking and threading versions of each type of server can be created
-using the ForkingServer and ThreadingServer mix-in classes.  For
-instance, a threading UDP server class is created as follows:
-
-        class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
-
-The Mix-in class must come first, since it overrides a method defined
-in UDPServer!
-
-To implement a service, you must derive a class from
-BaseRequestHandler and redefine its handle() method.  You can then run
-various versions of the service by combining one of the server classes
-with your request handler class.
-
-The request handler class must be different for datagram or stream
-services.  This can be hidden by using the mix-in request handler
-classes StreamRequestHandler or DatagramRequestHandler.
-
-Of course, you still have to use your head!
-
-For instance, it makes no sense to use a forking server if the service
-contains state in memory that can be modified by requests (since the
-modifications in the child process would never reach the initial state
-kept in the parent process and passed to each child).  In this case,
-you can use a threading server, but you will probably have to use
-locks to avoid two requests that come in nearly simultaneous to apply
-conflicting changes to the server state.
-
-On the other hand, if you are building e.g. an HTTP server, where all
-data is stored externally (e.g. in the file system), a synchronous
-class will essentially render the service "deaf" while one request is
-being handled -- which may be for a very long time if a client is slow
-to reqd all the data it has requested.  Here a threading or forking
-server is appropriate.
-
-In some cases, it may be appropriate to process part of a request
-synchronously, but to finish processing in a forked child depending on
-the request data.  This can be implemented by using a synchronous
-server and doing an explicit fork in the request handler class's
-handle() method.
-
-Another approach to handling multiple simultaneous requests in an
-environment that supports neither threads nor fork (or where these are
-too expensive or inappropriate for the service) is to maintain an
-explicit table of partially finished requests and to use select() to
-decide which request to work on next (or whether to handle a new
-incoming request).  This is particularly important for stream services
-where each client can potentially be connected for a long time (if
-threads or subprocesses can't be used).
-
-Future work:
-- Standard classes for Sun RPC (which uses either UDP or TCP)
-- Standard mix-in classes to implement various authentication
-  and encryption schemes
-- Standard framework for select-based multiplexing
-
-XXX Open problems:
-- What to do with out-of-band data?
-
-"""
-
-
-__version__ = "0.2"
-
-
-import socket
-import sys
-import os
-
-
-class TCPServer:
-
-    """Base class for various socket-based server classes.
-
-    Defaults to synchronous IP stream (i.e., TCP).
-
-    Methods for the caller:
-
-    - __init__(server_address, RequestHandlerClass)
-    - serve_forever()
-    - handle_request()  # if you don't use serve_forever()
-    - fileno() -> int   # for select()
-
-    Methods that may be overridden:
-
-    - server_bind()
-    - server_activate()
-    - get_request() -> request, client_address
-    - verify_request(request, client_address)
-    - process_request(request, client_address)
-    - handle_error()
-
-    Methods for derived classes:
-
-    - finish_request(request, client_address)
-
-    Class variables that may be overridden by derived classes or
-    instances:
-
-    - address_family
-    - socket_type
-    - request_queue_size (only for stream sockets)
-    - reuse_address
-
-    Instance variables:
-
-    - server_address
-    - RequestHandlerClass
-    - socket
-
-    """
-
-    address_family = socket.AF_INET
-
-    socket_type = socket.SOCK_STREAM
-
-    request_queue_size = 5
-
-    allow_reuse_address = 0
-
-    def __init__(self, server_address, RequestHandlerClass):
-        """Constructor.  May be extended, do not override."""
-        self.server_address = server_address
-        self.RequestHandlerClass = RequestHandlerClass
-        self.socket = socket.socket(self.address_family,
-                                    self.socket_type)
-        self.server_bind()
-        self.server_activate()
-
-    def server_bind(self):
-        """Called by constructor to bind the socket.
-
-        May be overridden.
-
-        """
-        if self.allow_reuse_address:
-            self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
-        self.socket.bind(self.server_address)
-
-    def server_activate(self):
-        """Called by constructor to activate the server.
-
-        May be overridden.
-
-        """
-        self.socket.listen(self.request_queue_size)
-
-    def fileno(self):
-        """Return socket file number.
-
-        Interface required by select().
-
-        """
-        return self.socket.fileno()
-
-    def serve_forever(self):
-        """Handle one request at a time until doomsday."""
-        while 1:
-            self.handle_request()
-
-    # The distinction between handling, getting, processing and
-    # finishing a request is fairly arbitrary.  Remember:
-    #
-    # - handle_request() is the top-level call.  It calls
-    #   get_request(), verify_request() and process_request()
-    # - get_request() is different for stream or datagram sockets
-    # - process_request() is the place that may fork a new process
-    #   or create a new thread to finish the request
-    # - finish_request() instantiates the request handler class;
-    #   this constructor will handle the request all by itself
-
-    def handle_request(self):
-        """Handle one request, possibly blocking."""
-        try:
-            request, client_address = self.get_request()
-        except socket.error:
-            return
-        if self.verify_request(request, client_address):
-            try:
-                self.process_request(request, client_address)
-            except:
-                self.handle_error(request, client_address)
-
-    def get_request(self):
-        """Get the request and client address from the socket.
-
-        May be overridden.
-
-        """
-        return self.socket.accept()
-
-    def verify_request(self, request, client_address):
-        """Verify the request.  May be overridden.
-
-        Return true if we should proceed with this request.
-
-        """
-        return 1
-
-    def process_request(self, request, client_address):
-        """Call finish_request.
-
-        Overridden by ForkingMixIn and ThreadingMixIn.
-
-        """
-        self.finish_request(request, client_address)
-
-    def finish_request(self, request, client_address):
-        """Finish one request by instantiating RequestHandlerClass."""
-        self.RequestHandlerClass(request, client_address, self)
-
-    def handle_error(self, request, client_address):
-        """Handle an error gracefully.  May be overridden.
-
-        The default is to print a traceback and continue.
-
-        """
-        print '-'*40
-        print 'Exception happened during processing of request from',
-        print client_address
-        import traceback
-        traceback.print_exc()
-        print '-'*40
-
-
-class UDPServer(TCPServer):
-
-    """UDP server class."""
-
-    socket_type = socket.SOCK_DGRAM
-
-    max_packet_size = 8192
-
-    def get_request(self):
-        data, client_addr = self.socket.recvfrom(self.max_packet_size)
-        return (data, self.socket), client_addr
-
-    def server_activate(self):
-        # No need to call listen() for UDP.
-        pass
-
-
-class ForkingMixIn:
-
-    """Mix-in class to handle each request in a new process."""
-
-    active_children = None
-    max_children = 40
-
-    def collect_children(self):
-        """Internal routine to wait for died children."""
-        while self.active_children:
-            if len(self.active_children) < self.max_children:
-                options = os.WNOHANG
-            else:
-                # If the maximum number of children are already
-                # running, block while waiting for a child to exit
-                options = 0
-            try:
-                pid, status = os.waitpid(0, options)
-            except os.error:
-                pid = None
-            if not pid: break
-            self.active_children.remove(pid)
-
-    def process_request(self, request, client_address):
-        """Fork a new subprocess to process the request."""
-        self.collect_children()
-        pid = os.fork()
-        if pid:
-            # Parent process
-            if self.active_children is None:
-                self.active_children = []
-            self.active_children.append(pid)
-            return
-        else:
-            # Child process.
-            # This must never return, hence os._exit()!
-            try:
-                self.socket.close()
-                self.finish_request(request, client_address)
-                os._exit(0)
-            except:
-                try:
-                    self.handle_error(request,
-                                      client_address)
-                finally:
-                    os._exit(1)
-
-
-class ThreadingMixIn:
-    """Mix-in class to handle each request in a new thread."""
-
-    def process_request(self, request, client_address):
-        """Start a new thread to process the request."""
-        import threading
-        t = threading.Thread(target = self.finish_request,
-                             args = (request, client_address))
-        t.start()
-
-
-class ForkingUDPServer(ForkingMixIn, UDPServer): pass
-class ForkingTCPServer(ForkingMixIn, TCPServer): pass
-
-class ThreadingUDPServer(ThreadingMixIn, UDPServer): pass
-class ThreadingTCPServer(ThreadingMixIn, TCPServer): pass
-
-if hasattr(socket, 'AF_UNIX'):
-
-    class UnixStreamServer(TCPServer):
-        address_family = socket.AF_UNIX
-
-    class UnixDatagramServer(UDPServer):
-        address_family = socket.AF_UNIX
-
-    class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer): pass
-
-    class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer): pass
-
-class BaseRequestHandler:
-
-    """Base class for request handler classes.
-
-    This class is instantiated for each request to be handled.  The
-    constructor sets the instance variables request, client_address
-    and server, and then calls the handle() method.  To implement a
-    specific service, all you need to do is to derive a class which
-    defines a handle() method.
-
-    The handle() method can find the request as self.request, the
-    client address as self.client_address, and the server (in case it
-    needs access to per-server information) as self.server.  Since a
-    separate instance is created for each request, the handle() method
-    can define arbitrary other instance variariables.
-
-    """
-
-    def __init__(self, request, client_address, server):
-        self.request = request
-        self.client_address = client_address
-        self.server = server
-        try:
-            self.setup()
-            self.handle()
-            self.finish()
-        finally:
-            sys.exc_traceback = None    # Help garbage collection
-
-    def setup(self):
-        pass
-
-    def __del__(self):
-        pass
-
-    def handle(self):
-        pass
-
-    def finish(self):
-        pass
-
-
-# The following two classes make it possible to use the same service
-# class for stream or datagram servers.
-# Each class sets up these instance variables:
-# - rfile: a file object from which receives the request is read
-# - wfile: a file object to which the reply is written
-# When the handle() method returns, wfile is flushed properly
-
-
-class StreamRequestHandler(BaseRequestHandler):
-
-    """Define self.rfile and self.wfile for stream sockets."""
-
-    # Default buffer sizes for rfile, wfile.
-    # We default rfile to buffered because otherwise it could be
-    # really slow for large data (a getc() call per byte); we make
-    # wfile unbuffered because (a) often after a write() we want to
-    # read and we need to flush the line; (b) big writes to unbuffered
-    # files are typically optimized by stdio even when big reads
-    # aren't.
-    rbufsize = -1
-    wbufsize = 0
-
-    def setup(self):
-        self.connection = self.request
-        self.rfile = self.connection.makefile('rb', self.rbufsize)
-        self.wfile = self.connection.makefile('wb', self.wbufsize)
-
-    def finish(self):
-        self.wfile.flush()
-        self.wfile.close()
-        self.rfile.close()
-
-
-class DatagramRequestHandler(BaseRequestHandler):
-
-    """Define self.rfile and self.wfile for datagram sockets."""
-
-    def setup(self):
-        import StringIO
-        self.packet, self.socket = self.request
-        self.rfile = StringIO.StringIO(self.packet)
-        self.wfile = StringIO.StringIO(self.packet)
-
-    def finish(self):
-        self.socket.sendto(self.wfile.getvalue(), self.client_address)
diff --git a/Lib/dos-8x3/sre_comp.py b/Lib/dos-8x3/sre_comp.py
deleted file mode 100644
index dc508e5..0000000
--- a/Lib/dos-8x3/sre_comp.py
+++ /dev/null
@@ -1,381 +0,0 @@
-#
-# Secret Labs' Regular Expression Engine
-#
-# convert template to internal format
-#
-# Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
-#
-# See the sre.py file for information on usage and redistribution.
-#
-
-import _sre
-
-from sre_constants import *
-
-MAXCODE = 65535
-
-def _compile(code, pattern, flags):
-    # internal: compile a (sub)pattern
-    emit = code.append
-    for op, av in pattern:
-        if op in (LITERAL, NOT_LITERAL):
-            if flags & SRE_FLAG_IGNORECASE:
-                emit(OPCODES[OP_IGNORE[op]])
-            else:
-                emit(OPCODES[op])
-            emit(av)
-        elif op is IN:
-            if flags & SRE_FLAG_IGNORECASE:
-                emit(OPCODES[OP_IGNORE[op]])
-                def fixup(literal, flags=flags):
-                    return _sre.getlower(literal, flags)
-            else:
-                emit(OPCODES[op])
-                fixup = lambda x: x
-            skip = len(code); emit(0)
-            _compile_charset(av, flags, code, fixup)
-            code[skip] = len(code) - skip
-        elif op is ANY:
-            if flags & SRE_FLAG_DOTALL:
-                emit(OPCODES[ANY_ALL])
-            else:
-                emit(OPCODES[ANY])
-        elif op in (REPEAT, MIN_REPEAT, MAX_REPEAT):
-            if flags & SRE_FLAG_TEMPLATE:
-                raise error, "internal: unsupported template operator"
-                emit(OPCODES[REPEAT])
-                skip = len(code); emit(0)
-                emit(av[0])
-                emit(av[1])
-                _compile(code, av[2], flags)
-                emit(OPCODES[SUCCESS])
-                code[skip] = len(code) - skip
-            elif _simple(av) and op == MAX_REPEAT:
-                emit(OPCODES[REPEAT_ONE])
-                skip = len(code); emit(0)
-                emit(av[0])
-                emit(av[1])
-                _compile(code, av[2], flags)
-                emit(OPCODES[SUCCESS])
-                code[skip] = len(code) - skip
-            else:
-                emit(OPCODES[REPEAT])
-                skip = len(code); emit(0)
-                emit(av[0])
-                emit(av[1])
-                _compile(code, av[2], flags)
-                code[skip] = len(code) - skip
-                if op == MAX_REPEAT:
-                    emit(OPCODES[MAX_UNTIL])
-                else:
-                    emit(OPCODES[MIN_UNTIL])
-        elif op is SUBPATTERN:
-            if av[0]:
-                emit(OPCODES[MARK])
-                emit((av[0]-1)*2)
-            # _compile_info(code, av[1], flags)
-            _compile(code, av[1], flags)
-            if av[0]:
-                emit(OPCODES[MARK])
-                emit((av[0]-1)*2+1)
-        elif op in (SUCCESS, FAILURE):
-            emit(OPCODES[op])
-        elif op in (ASSERT, ASSERT_NOT):
-            emit(OPCODES[op])
-            skip = len(code); emit(0)
-            if av[0] >= 0:
-                emit(0) # look ahead
-            else:
-                lo, hi = av[1].getwidth()
-                if lo != hi:
-                    raise error, "look-behind requires fixed-width pattern"
-                emit(lo) # look behind
-            _compile(code, av[1], flags)
-            emit(OPCODES[SUCCESS])
-            code[skip] = len(code) - skip
-        elif op is CALL:
-            emit(OPCODES[op])
-            skip = len(code); emit(0)
-            _compile(code, av, flags)
-            emit(OPCODES[SUCCESS])
-            code[skip] = len(code) - skip
-        elif op is AT:
-            emit(OPCODES[op])
-            if flags & SRE_FLAG_MULTILINE:
-                emit(ATCODES[AT_MULTILINE.get(av, av)])
-            else:
-                emit(ATCODES[av])
-        elif op is BRANCH:
-            emit(OPCODES[op])
-            tail = []
-            for av in av[1]:
-                skip = len(code); emit(0)
-                # _compile_info(code, av, flags)
-                _compile(code, av, flags)
-                emit(OPCODES[JUMP])
-                tail.append(len(code)); emit(0)
-                code[skip] = len(code) - skip
-            emit(0) # end of branch
-            for tail in tail:
-                code[tail] = len(code) - tail
-        elif op is CATEGORY:
-            emit(OPCODES[op])
-            if flags & SRE_FLAG_LOCALE:
-                emit(CHCODES[CH_LOCALE[av]])
-            elif flags & SRE_FLAG_UNICODE:
-                emit(CHCODES[CH_UNICODE[av]])
-            else:
-                emit(CHCODES[av])
-        elif op is GROUPREF:
-            if flags & SRE_FLAG_IGNORECASE:
-                emit(OPCODES[OP_IGNORE[op]])
-            else:
-                emit(OPCODES[op])
-            emit(av-1)
-        else:
-            raise ValueError, ("unsupported operand type", op)
-
-def _compile_charset(charset, flags, code, fixup=None):
-    # compile charset subprogram
-    emit = code.append
-    if not fixup:
-        fixup = lambda x: x
-    for op, av in _optimize_charset(charset, fixup):
-        emit(OPCODES[op])
-        if op is NEGATE:
-            pass
-        elif op is LITERAL:
-            emit(fixup(av))
-        elif op is RANGE:
-            emit(fixup(av[0]))
-            emit(fixup(av[1]))
-        elif op is CHARSET:
-            code.extend(av)
-        elif op is CATEGORY:
-            if flags & SRE_FLAG_LOCALE:
-                emit(CHCODES[CH_LOCALE[av]])
-            elif flags & SRE_FLAG_UNICODE:
-                emit(CHCODES[CH_UNICODE[av]])
-            else:
-                emit(CHCODES[av])
-        else:
-            raise error, "internal: unsupported set operator"
-    emit(OPCODES[FAILURE])
-
-def _optimize_charset(charset, fixup):
-    # internal: optimize character set
-    out = []
-    charmap = [0]*256
-    try:
-        for op, av in charset:
-            if op is NEGATE:
-                out.append((op, av))
-            elif op is LITERAL:
-                charmap[fixup(av)] = 1
-            elif op is RANGE:
-                for i in range(fixup(av[0]), fixup(av[1])+1):
-                    charmap[i] = 1
-            elif op is CATEGORY:
-                # FIXME: could append to charmap tail
-                return charset # cannot compress
-    except IndexError:
-        # character set contains unicode characters
-        return charset
-    # compress character map
-    i = p = n = 0
-    runs = []
-    for c in charmap:
-        if c:
-            if n == 0:
-                p = i
-            n = n + 1
-        elif n:
-            runs.append((p, n))
-            n = 0
-        i = i + 1
-    if n:
-        runs.append((p, n))
-    if len(runs) <= 2:
-        # use literal/range
-        for p, n in runs:
-            if n == 1:
-                out.append((LITERAL, p))
-            else:
-                out.append((RANGE, (p, p+n-1)))
-        if len(out) < len(charset):
-            return out
-    else:
-        # use bitmap
-        data = []
-        m = 1; v = 0
-        for c in charmap:
-            if c:
-                v = v + m
-            m = m << 1
-            if m > MAXCODE:
-                data.append(v)
-                m = 1; v = 0
-        out.append((CHARSET, data))
-        return out
-    return charset
-
-def _simple(av):
-    # check if av is a "simple" operator
-    lo, hi = av[2].getwidth()
-    if lo == 0 and hi == MAXREPEAT:
-        raise error, "nothing to repeat"
-    return lo == hi == 1 and av[2][0][0] != SUBPATTERN
-
-def _compile_info(code, pattern, flags):
-    # internal: compile an info block.  in the current version,
-    # this contains min/max pattern width, and an optional literal
-    # prefix or a character map
-    lo, hi = pattern.getwidth()
-    if lo == 0:
-        return # not worth it
-    # look for a literal prefix
-    prefix = []
-    prefix_skip = 0
-    charset = [] # not used
-    if not (flags & SRE_FLAG_IGNORECASE):
-        # look for literal prefix
-        for op, av in pattern.data:
-            if op is LITERAL:
-                if len(prefix) == prefix_skip:
-                    prefix_skip = prefix_skip + 1
-                prefix.append(av)
-            elif op is SUBPATTERN and len(av[1]) == 1:
-                op, av = av[1][0]
-                if op is LITERAL:
-                    prefix.append(av)
-                else:
-                    break
-            else:
-                break
-        # if no prefix, look for charset prefix
-        if not prefix and pattern.data:
-            op, av = pattern.data[0]
-            if op is SUBPATTERN and av[1]:
-                op, av = av[1][0]
-                if op is LITERAL:
-                    charset.append((op, av))
-                elif op is BRANCH:
-                    c = []
-                    for p in av[1]:
-                        if not p:
-                            break
-                        op, av = p[0]
-                        if op is LITERAL:
-                            c.append((op, av))
-                        else:
-                            break
-                    else:
-                        charset = c
-            elif op is BRANCH:
-                c = []
-                for p in av[1]:
-                    if not p:
-                        break
-                    op, av = p[0]
-                    if op is LITERAL:
-                        c.append((op, av))
-                    else:
-                        break
-                else:
-                    charset = c
-            elif op is IN:
-                charset = av
-##     if prefix:
-##         print "*** PREFIX", prefix, prefix_skip
-##     if charset:
-##         print "*** CHARSET", charset
-    # add an info block
-    emit = code.append
-    emit(OPCODES[INFO])
-    skip = len(code); emit(0)
-    # literal flag
-    mask = 0
-    if prefix:
-        mask = SRE_INFO_PREFIX
-        if len(prefix) == prefix_skip == len(pattern.data):
-            mask = mask + SRE_INFO_LITERAL
-    elif charset:
-        mask = mask + SRE_INFO_CHARSET
-    emit(mask)
-    # pattern length
-    if lo < MAXCODE:
-        emit(lo)
-    else:
-        emit(MAXCODE)
-        prefix = prefix[:MAXCODE]
-    if hi < MAXCODE:
-        emit(hi)
-    else:
-        emit(0)
-    # add literal prefix
-    if prefix:
-        emit(len(prefix)) # length
-        emit(prefix_skip) # skip
-        code.extend(prefix)
-        # generate overlap table
-        table = [-1] + ([0]*len(prefix))
-        for i in range(len(prefix)):
-            table[i+1] = table[i]+1
-            while table[i+1] > 0 and prefix[i] != prefix[table[i+1]-1]:
-                table[i+1] = table[table[i+1]-1]+1
-        code.extend(table[1:]) # don't store first entry
-    elif charset:
-        _compile_charset(charset, 0, code)
-    code[skip] = len(code) - skip
-
-STRING_TYPES = [type("")]
-
-try:
-    STRING_TYPES.append(type(unicode("")))
-except NameError:
-    pass
-
-def _code(p, flags):
-
-    flags = p.pattern.flags | flags
-    code = []
-
-    # compile info block
-    _compile_info(code, p, flags)
-
-    # compile the pattern
-    _compile(code, p.data, flags)
-
-    code.append(OPCODES[SUCCESS])
-
-    return code
-
-def compile(p, flags=0):
-    # internal: convert pattern list to internal format
-
-    if type(p) in STRING_TYPES:
-        import sre_parse
-        pattern = p
-        p = sre_parse.parse(p, flags)
-    else:
-        pattern = None
-
-    code = _code(p, flags)
-
-    # print code
-
-    # FIXME: <fl> get rid of this limitation!
-    assert p.pattern.groups <= 100,\
-           "sorry, but this version only supports 100 named groups"
-
-    # map in either direction
-    groupindex = p.pattern.groupdict
-    indexgroup = [None] * p.pattern.groups
-    for k, i in groupindex.items():
-        indexgroup[i] = k
-
-    return _sre.compile(
-        pattern, flags, code,
-        p.pattern.groups-1,
-        groupindex, indexgroup
-        )
diff --git a/Lib/dos-8x3/sre_cons.py b/Lib/dos-8x3/sre_cons.py
deleted file mode 100644
index ea649c0..0000000
--- a/Lib/dos-8x3/sre_cons.py
+++ /dev/null
@@ -1,228 +0,0 @@
-#
-# Secret Labs' Regular Expression Engine
-#
-# various symbols used by the regular expression engine.
-# run this script to update the _sre include files!
-#
-# Copyright (c) 1998-2000 by Secret Labs AB.  All rights reserved.
-#
-# See the sre.py file for information on usage and redistribution.
-#
-
-MAXREPEAT = 65535
-
-# should this really be here?
-
-class error(Exception):
-    pass
-
-# operators
-
-FAILURE = "failure"
-SUCCESS = "success"
-
-ANY = "any"
-ANY_ALL = "any_all"
-ASSERT = "assert"
-ASSERT_NOT = "assert_not"
-AT = "at"
-BRANCH = "branch"
-CALL = "call"
-CATEGORY = "category"
-CHARSET = "charset"
-GROUPREF = "groupref"
-GROUPREF_IGNORE = "groupref_ignore"
-IN = "in"
-IN_IGNORE = "in_ignore"
-INFO = "info"
-JUMP = "jump"
-LITERAL = "literal"
-LITERAL_IGNORE = "literal_ignore"
-MARK = "mark"
-MAX_REPEAT = "max_repeat"
-MAX_UNTIL = "max_until"
-MIN_REPEAT = "min_repeat"
-MIN_UNTIL = "min_until"
-NEGATE = "negate"
-NOT_LITERAL = "not_literal"
-NOT_LITERAL_IGNORE = "not_literal_ignore"
-RANGE = "range"
-REPEAT = "repeat"
-REPEAT_ONE = "repeat_one"
-SUBPATTERN = "subpattern"
-
-# positions
-AT_BEGINNING = "at_beginning"
-AT_BEGINNING_LINE = "at_beginning_line"
-AT_BOUNDARY = "at_boundary"
-AT_NON_BOUNDARY = "at_non_boundary"
-AT_END = "at_end"
-AT_END_LINE = "at_end_line"
-
-# categories
-CATEGORY_DIGIT = "category_digit"
-CATEGORY_NOT_DIGIT = "category_not_digit"
-CATEGORY_SPACE = "category_space"
-CATEGORY_NOT_SPACE = "category_not_space"
-CATEGORY_WORD = "category_word"
-CATEGORY_NOT_WORD = "category_not_word"
-CATEGORY_LINEBREAK = "category_linebreak"
-CATEGORY_NOT_LINEBREAK = "category_not_linebreak"
-CATEGORY_LOC_WORD = "category_loc_word"
-CATEGORY_LOC_NOT_WORD = "category_loc_not_word"
-CATEGORY_UNI_DIGIT = "category_uni_digit"
-CATEGORY_UNI_NOT_DIGIT = "category_uni_not_digit"
-CATEGORY_UNI_SPACE = "category_uni_space"
-CATEGORY_UNI_NOT_SPACE = "category_uni_not_space"
-CATEGORY_UNI_WORD = "category_uni_word"
-CATEGORY_UNI_NOT_WORD = "category_uni_not_word"
-CATEGORY_UNI_LINEBREAK = "category_uni_linebreak"
-CATEGORY_UNI_NOT_LINEBREAK = "category_uni_not_linebreak"
-
-OPCODES = [
-
-    # failure=0 success=1 (just because it looks better that way :-)
-    FAILURE, SUCCESS,
-
-    ANY, ANY_ALL,
-    ASSERT, ASSERT_NOT,
-    AT,
-    BRANCH,
-    CALL,
-    CATEGORY,
-    CHARSET,
-    GROUPREF, GROUPREF_IGNORE,
-    IN, IN_IGNORE,
-    INFO,
-    JUMP,
-    LITERAL, LITERAL_IGNORE,
-    MARK,
-    MAX_UNTIL,
-    MIN_UNTIL,
-    NOT_LITERAL, NOT_LITERAL_IGNORE,
-    NEGATE,
-    RANGE,
-    REPEAT,
-    REPEAT_ONE,
-    SUBPATTERN
-
-]
-
-ATCODES = [
-    AT_BEGINNING, AT_BEGINNING_LINE, AT_BOUNDARY,
-    AT_NON_BOUNDARY, AT_END, AT_END_LINE
-]
-
-CHCODES = [
-    CATEGORY_DIGIT, CATEGORY_NOT_DIGIT, CATEGORY_SPACE,
-    CATEGORY_NOT_SPACE, CATEGORY_WORD, CATEGORY_NOT_WORD,
-    CATEGORY_LINEBREAK, CATEGORY_NOT_LINEBREAK, CATEGORY_LOC_WORD,
-    CATEGORY_LOC_NOT_WORD, CATEGORY_UNI_DIGIT, CATEGORY_UNI_NOT_DIGIT,
-    CATEGORY_UNI_SPACE, CATEGORY_UNI_NOT_SPACE, CATEGORY_UNI_WORD,
-    CATEGORY_UNI_NOT_WORD, CATEGORY_UNI_LINEBREAK,
-    CATEGORY_UNI_NOT_LINEBREAK
-]
-
-def makedict(list):
-    d = {}
-    i = 0
-    for item in list:
-        d[item] = i
-        i = i + 1
-    return d
-
-OPCODES = makedict(OPCODES)
-ATCODES = makedict(ATCODES)
-CHCODES = makedict(CHCODES)
-
-# replacement operations for "ignore case" mode
-OP_IGNORE = {
-    GROUPREF: GROUPREF_IGNORE,
-    IN: IN_IGNORE,
-    LITERAL: LITERAL_IGNORE,
-    NOT_LITERAL: NOT_LITERAL_IGNORE
-}
-
-AT_MULTILINE = {
-    AT_BEGINNING: AT_BEGINNING_LINE,
-    AT_END: AT_END_LINE
-}
-
-CH_LOCALE = {
-    CATEGORY_DIGIT: CATEGORY_DIGIT,
-    CATEGORY_NOT_DIGIT: CATEGORY_NOT_DIGIT,
-    CATEGORY_SPACE: CATEGORY_SPACE,
-    CATEGORY_NOT_SPACE: CATEGORY_NOT_SPACE,
-    CATEGORY_WORD: CATEGORY_LOC_WORD,
-    CATEGORY_NOT_WORD: CATEGORY_LOC_NOT_WORD,
-    CATEGORY_LINEBREAK: CATEGORY_LINEBREAK,
-    CATEGORY_NOT_LINEBREAK: CATEGORY_NOT_LINEBREAK
-}
-
-CH_UNICODE = {
-    CATEGORY_DIGIT: CATEGORY_UNI_DIGIT,
-    CATEGORY_NOT_DIGIT: CATEGORY_UNI_NOT_DIGIT,
-    CATEGORY_SPACE: CATEGORY_UNI_SPACE,
-    CATEGORY_NOT_SPACE: CATEGORY_UNI_NOT_SPACE,
-    CATEGORY_WORD: CATEGORY_UNI_WORD,
-    CATEGORY_NOT_WORD: CATEGORY_UNI_NOT_WORD,
-    CATEGORY_LINEBREAK: CATEGORY_UNI_LINEBREAK,
-    CATEGORY_NOT_LINEBREAK: CATEGORY_UNI_NOT_LINEBREAK
-}
-
-# flags
-SRE_FLAG_TEMPLATE = 1 # template mode (disable backtracking)
-SRE_FLAG_IGNORECASE = 2 # case insensitive
-SRE_FLAG_LOCALE = 4 # honour system locale
-SRE_FLAG_MULTILINE = 8 # treat target as multiline string
-SRE_FLAG_DOTALL = 16 # treat target as a single string
-SRE_FLAG_UNICODE = 32 # use unicode locale
-SRE_FLAG_VERBOSE = 64 # ignore whitespace and comments
-
-# flags for INFO primitive
-SRE_INFO_PREFIX = 1 # has prefix
-SRE_INFO_LITERAL = 2 # entire pattern is literal (given by prefix)
-SRE_INFO_CHARSET = 4 # pattern starts with character from given set
-
-if __name__ == "__main__":
-    import string
-    def dump(f, d, prefix):
-        items = d.items()
-        items.sort(lambda a, b: cmp(a[1], b[1]))
-        for k, v in items:
-            f.write("#define %s_%s %s\n" % (prefix, string.upper(k), v))
-    f = open("sre_constants.h", "w")
-    f.write("""\
-/*
- * Secret Labs' Regular Expression Engine
- *
- * regular expression matching engine
- *
- * NOTE: This file is generated by sre_constants.py.  If you need
- * to change anything in here, edit sre_constants.py and run it.
- *
- * Copyright (c) 1997-2000 by Secret Labs AB.  All rights reserved.
- *
- * See the _sre.c file for information on usage and redistribution.
- */
-
-""")
-
-    dump(f, OPCODES, "SRE_OP")
-    dump(f, ATCODES, "SRE")
-    dump(f, CHCODES, "SRE")
-
-    f.write("#define SRE_FLAG_TEMPLATE %d\n" % SRE_FLAG_TEMPLATE)
-    f.write("#define SRE_FLAG_IGNORECASE %d\n" % SRE_FLAG_IGNORECASE)
-    f.write("#define SRE_FLAG_LOCALE %d\n" % SRE_FLAG_LOCALE)
-    f.write("#define SRE_FLAG_MULTILINE %d\n" % SRE_FLAG_MULTILINE)
-    f.write("#define SRE_FLAG_DOTALL %d\n" % SRE_FLAG_DOTALL)
-    f.write("#define SRE_FLAG_UNICODE %d\n" % SRE_FLAG_UNICODE)
-    f.write("#define SRE_FLAG_VERBOSE %d\n" % SRE_FLAG_VERBOSE)
-
-    f.write("#define SRE_INFO_PREFIX %d\n" % SRE_INFO_PREFIX)
-    f.write("#define SRE_INFO_LITERAL %d\n" % SRE_INFO_LITERAL)
-    f.write("#define SRE_INFO_CHARSET %d\n" % SRE_INFO_CHARSET)
-
-    f.close()
-    print "done"
diff --git a/Lib/dos-8x3/sre_pars.py b/Lib/dos-8x3/sre_pars.py
deleted file mode 100644
index 7c36d4f..0000000
--- a/Lib/dos-8x3/sre_pars.py
+++ /dev/null
@@ -1,682 +0,0 @@
-#
-# Secret Labs' Regular Expression Engine
-#
-# convert re-style regular expression to sre pattern
-#
-# Copyright (c) 1998-2000 by Secret Labs AB.  All rights reserved.
-#
-# See the sre.py file for information on usage and redistribution.
-#
-
-import string, sys
-
-from sre_constants import *
-
-SPECIAL_CHARS = ".\\[{()*+?^$|"
-REPEAT_CHARS = "*+?{"
-
-DIGITS = tuple("0123456789")
-
-OCTDIGITS = tuple("01234567")
-HEXDIGITS = tuple("0123456789abcdefABCDEF")
-
-WHITESPACE = tuple(" \t\n\r\v\f")
-
-ESCAPES = {
-    r"\a": (LITERAL, 7),
-    r"\b": (LITERAL, 8),
-    r"\f": (LITERAL, 12),
-    r"\n": (LITERAL, 10),
-    r"\r": (LITERAL, 13),
-    r"\t": (LITERAL, 9),
-    r"\v": (LITERAL, 11),
-    r"\\": (LITERAL, ord("\\"))
-}
-
-CATEGORIES = {
-    r"\A": (AT, AT_BEGINNING), # start of string
-    r"\b": (AT, AT_BOUNDARY),
-    r"\B": (AT, AT_NON_BOUNDARY),
-    r"\d": (IN, [(CATEGORY, CATEGORY_DIGIT)]),
-    r"\D": (IN, [(CATEGORY, CATEGORY_NOT_DIGIT)]),
-    r"\s": (IN, [(CATEGORY, CATEGORY_SPACE)]),
-    r"\S": (IN, [(CATEGORY, CATEGORY_NOT_SPACE)]),
-    r"\w": (IN, [(CATEGORY, CATEGORY_WORD)]),
-    r"\W": (IN, [(CATEGORY, CATEGORY_NOT_WORD)]),
-    r"\Z": (AT, AT_END), # end of string
-}
-
-FLAGS = {
-    # standard flags
-    "i": SRE_FLAG_IGNORECASE,
-    "L": SRE_FLAG_LOCALE,
-    "m": SRE_FLAG_MULTILINE,
-    "s": SRE_FLAG_DOTALL,
-    "x": SRE_FLAG_VERBOSE,
-    # extensions
-    "t": SRE_FLAG_TEMPLATE,
-    "u": SRE_FLAG_UNICODE,
-}
-
-class Pattern:
-    # master pattern object.  keeps track of global attributes
-    def __init__(self):
-        self.flags = 0
-        self.groups = 1
-        self.groupdict = {}
-    def getgroup(self, name=None):
-        gid = self.groups
-        self.groups = gid + 1
-        if name:
-            self.groupdict[name] = gid
-        return gid
-
-class SubPattern:
-    # a subpattern, in intermediate form
-    def __init__(self, pattern, data=None):
-        self.pattern = pattern
-        if not data:
-            data = []
-        self.data = data
-        self.width = None
-    def dump(self, level=0):
-        nl = 1
-        for op, av in self.data:
-            print level*"  " + op,; nl = 0
-            if op == "in":
-                # member sublanguage
-                print; nl = 1
-                for op, a in av:
-                    print (level+1)*"  " + op, a
-            elif op == "branch":
-                print; nl = 1
-                i = 0
-                for a in av[1]:
-                    if i > 0:
-                        print level*"  " + "or"
-                    a.dump(level+1); nl = 1
-                    i = i + 1
-            elif type(av) in (type(()), type([])):
-                for a in av:
-                    if isinstance(a, SubPattern):
-                        if not nl: print
-                        a.dump(level+1); nl = 1
-                    else:
-                        print a, ; nl = 0
-            else:
-                print av, ; nl = 0
-            if not nl: print
-    def __repr__(self):
-        return repr(self.data)
-    def __len__(self):
-        return len(self.data)
-    def __delitem__(self, index):
-        del self.data[index]
-    def __getitem__(self, index):
-        return self.data[index]
-    def __setitem__(self, index, code):
-        self.data[index] = code
-    def __getslice__(self, start, stop):
-        return SubPattern(self.pattern, self.data[start:stop])
-    def insert(self, index, code):
-        self.data.insert(index, code)
-    def append(self, code):
-        self.data.append(code)
-    def getwidth(self):
-        # determine the width (min, max) for this subpattern
-        if self.width:
-            return self.width
-        lo = hi = 0L
-        for op, av in self.data:
-            if op is BRANCH:
-                i = sys.maxint
-                j = 0
-                for av in av[1]:
-                    l, h = av.getwidth()
-                    i = min(i, l)
-                    j = max(j, h)
-                lo = lo + i
-                hi = hi + j
-            elif op is CALL:
-                i, j = av.getwidth()
-                lo = lo + i
-                hi = hi + j
-            elif op is SUBPATTERN:
-                i, j = av[1].getwidth()
-                lo = lo + i
-                hi = hi + j
-            elif op in (MIN_REPEAT, MAX_REPEAT):
-                i, j = av[2].getwidth()
-                lo = lo + long(i) * av[0]
-                hi = hi + long(j) * av[1]
-            elif op in (ANY, RANGE, IN, LITERAL, NOT_LITERAL, CATEGORY):
-                lo = lo + 1
-                hi = hi + 1
-            elif op == SUCCESS:
-                break
-        self.width = int(min(lo, sys.maxint)), int(min(hi, sys.maxint))
-        return self.width
-
-class Tokenizer:
-    def __init__(self, string):
-        self.string = string
-        self.index = 0
-        self.__next()
-    def __next(self):
-        if self.index >= len(self.string):
-            self.next = None
-            return
-        char = self.string[self.index]
-        if char[0] == "\\":
-            try:
-                c = self.string[self.index + 1]
-            except IndexError:
-                raise error, "bogus escape"
-            char = char + c
-        self.index = self.index + len(char)
-        self.next = char
-    def match(self, char, skip=1):
-        if char == self.next:
-            if skip:
-                self.__next()
-            return 1
-        return 0
-    def get(self):
-        this = self.next
-        self.__next()
-        return this
-    def tell(self):
-        return self.index, self.next
-    def seek(self, index):
-        self.index, self.next = index
-
-def isident(char):
-    return "a" <= char <= "z" or "A" <= char <= "Z" or char == "_"
-
-def isdigit(char):
-    return "0" <= char <= "9"
-
-def isname(name):
-    # check that group name is a valid string
-    if not isident(name[0]):
-        return 0
-    for char in name:
-        if not isident(char) and not isdigit(char):
-            return 0
-    return 1
-
-def _group(escape, groups):
-    # check if the escape string represents a valid group
-    try:
-        gid = int(escape[1:])
-        if gid and gid < groups:
-            return gid
-    except ValueError:
-        pass
-    return None # not a valid group
-
-def _class_escape(source, escape):
-    # handle escape code inside character class
-    code = ESCAPES.get(escape)
-    if code:
-        return code
-    code = CATEGORIES.get(escape)
-    if code:
-        return code
-    try:
-        if escape[1:2] == "x":
-            # hexadecimal escape (exactly two digits)
-            while source.next in HEXDIGITS and len(escape) < 4:
-                escape = escape + source.get()
-            escape = escape[2:]
-            if len(escape) != 2:
-                raise error, "bogus escape: %s" % repr("\\" + escape)
-            return LITERAL, int(escape, 16) & 0xff
-        elif str(escape[1:2]) in OCTDIGITS:
-            # octal escape (up to three digits)
-            while source.next in OCTDIGITS and len(escape) < 5:
-                escape = escape + source.get()
-            escape = escape[1:]
-            return LITERAL, int(escape, 8) & 0xff
-        if len(escape) == 2:
-            return LITERAL, ord(escape[1])
-    except ValueError:
-        pass
-    raise error, "bogus escape: %s" % repr(escape)
-
-def _escape(source, escape, state):
-    # handle escape code in expression
-    code = CATEGORIES.get(escape)
-    if code:
-        return code
-    code = ESCAPES.get(escape)
-    if code:
-        return code
-    try:
-        if escape[1:2] == "x":
-            # hexadecimal escape
-            while source.next in HEXDIGITS and len(escape) < 4:
-                escape = escape + source.get()
-            if len(escape) != 4:
-                raise ValueError
-            return LITERAL, int(escape[2:], 16) & 0xff
-        elif escape[1:2] == "0":
-            # octal escape
-            while source.next in OCTDIGITS and len(escape) < 4:
-                escape = escape + source.get()
-            return LITERAL, int(escape[1:], 8) & 0xff
-        elif escape[1:2] in DIGITS:
-            # octal escape *or* decimal group reference (sigh)
-            here = source.tell()
-            if source.next in DIGITS:
-                escape = escape + source.get()
-                if (escape[1] in OCTDIGITS and escape[2] in OCTDIGITS and
-                    source.next in OCTDIGITS):
-                    # got three octal digits; this is an octal escape
-                    escape = escape + source.get()
-                    return LITERAL, int(escape[1:], 8) & 0xff
-            # got at least one decimal digit; this is a group reference
-            group = _group(escape, state.groups)
-            if group:
-                return GROUPREF, group
-            raise ValueError
-        if len(escape) == 2:
-            return LITERAL, ord(escape[1])
-    except ValueError:
-        pass
-    raise error, "bogus escape: %s" % repr(escape)
-
-def _parse_sub(source, state, nested=1):
-    # parse an alternation: a|b|c
-
-    items = []
-    while 1:
-        items.append(_parse(source, state))
-        if source.match("|"):
-            continue
-        if not nested:
-            break
-        if not source.next or source.match(")", 0):
-            break
-        else:
-            raise error, "pattern not properly closed"
-
-    if len(items) == 1:
-        return items[0]
-
-    subpattern = SubPattern(state)
-
-    # check if all items share a common prefix
-    while 1:
-        prefix = None
-        for item in items:
-            if not item:
-                break
-            if prefix is None:
-                prefix = item[0]
-            elif item[0] != prefix:
-                break
-        else:
-            # all subitems start with a common "prefix".
-            # move it out of the branch
-            for item in items:
-                del item[0]
-            subpattern.append(prefix)
-            continue # check next one
-        break
-
-    # check if the branch can be replaced by a character set
-    for item in items:
-        if len(item) != 1 or item[0][0] != LITERAL:
-            break
-    else:
-        # we can store this as a character set instead of a
-        # branch (the compiler may optimize this even more)
-        set = []
-        for item in items:
-            set.append(item[0])
-        subpattern.append((IN, set))
-        return subpattern
-
-    subpattern.append((BRANCH, (None, items)))
-    return subpattern
-
-def _parse(source, state):
-    # parse a simple pattern
-
-    subpattern = SubPattern(state)
-
-    while 1:
-
-        if source.next in ("|", ")"):
-            break # end of subpattern
-        this = source.get()
-        if this is None:
-            break # end of pattern
-
-        if state.flags & SRE_FLAG_VERBOSE:
-            # skip whitespace and comments
-            if this in WHITESPACE:
-                continue
-            if this == "#":
-                while 1:
-                    this = source.get()
-                    if this in (None, "\n"):
-                        break
-                continue
-
-        if this and this[0] not in SPECIAL_CHARS:
-            subpattern.append((LITERAL, ord(this)))
-
-        elif this == "[":
-            # character set
-            set = []
-##          if source.match(":"):
-##              pass # handle character classes
-            if source.match("^"):
-                set.append((NEGATE, None))
-            # check remaining characters
-            start = set[:]
-            while 1:
-                this = source.get()
-                if this == "]" and set != start:
-                    break
-                elif this and this[0] == "\\":
-                    code1 = _class_escape(source, this)
-                elif this:
-                    code1 = LITERAL, ord(this)
-                else:
-                    raise error, "unexpected end of regular expression"
-                if source.match("-"):
-                    # potential range
-                    this = source.get()
-                    if this == "]":
-                        if code1[0] is IN:
-                            code1 = code1[1][0]
-                        set.append(code1)
-                        set.append((LITERAL, ord("-")))
-                        break
-                    else:
-                        if this[0] == "\\":
-                            code2 = _class_escape(source, this)
-                        else:
-                            code2 = LITERAL, ord(this)
-                        if code1[0] != LITERAL or code2[0] != LITERAL:
-                            raise error, "illegal range"
-                        lo = code1[1]
-                        hi = code2[1]
-                        if hi < lo:
-                            raise error, "illegal range"
-                        set.append((RANGE, (lo, hi)))
-                else:
-                    if code1[0] is IN:
-                        code1 = code1[1][0]
-                    set.append(code1)
-
-            # FIXME: <fl> move set optimization to compiler!
-            if len(set)==1 and set[0][0] is LITERAL:
-                subpattern.append(set[0]) # optimization
-            elif len(set)==2 and set[0][0] is NEGATE and set[1][0] is LITERAL:
-                subpattern.append((NOT_LITERAL, set[1][1])) # optimization
-            else:
-                # FIXME: <fl> add charmap optimization
-                subpattern.append((IN, set))
-
-        elif this and this[0] in REPEAT_CHARS:
-            # repeat previous item
-            if this == "?":
-                min, max = 0, 1
-            elif this == "*":
-                min, max = 0, MAXREPEAT
-            elif this == "+":
-                min, max = 1, MAXREPEAT
-            elif this == "{":
-                here = source.tell()
-                min, max = 0, MAXREPEAT
-                lo = hi = ""
-                while source.next in DIGITS:
-                    lo = lo + source.get()
-                if source.match(","):
-                    while source.next in DIGITS:
-                        hi = hi + source.get()
-                else:
-                    hi = lo
-                if not source.match("}"):
-                    subpattern.append((LITERAL, ord(this)))
-                    source.seek(here)
-                    continue
-                if lo:
-                    min = int(lo)
-                if hi:
-                    max = int(hi)
-                # FIXME: <fl> check that hi >= lo!
-            else:
-                raise error, "not supported"
-            # figure out which item to repeat
-            if subpattern:
-                item = subpattern[-1:]
-            else:
-                raise error, "nothing to repeat"
-            if source.match("?"):
-                subpattern[-1] = (MIN_REPEAT, (min, max, item))
-            else:
-                subpattern[-1] = (MAX_REPEAT, (min, max, item))
-
-        elif this == ".":
-            subpattern.append((ANY, None))
-
-        elif this == "(":
-            group = 1
-            name = None
-            if source.match("?"):
-                group = 0
-                # options
-                if source.match("P"):
-                    # python extensions
-                    if source.match("<"):
-                        # named group: skip forward to end of name
-                        name = ""
-                        while 1:
-                            char = source.get()
-                            if char is None:
-                                raise error, "unterminated name"
-                            if char == ">":
-                                break
-                            name = name + char
-                        group = 1
-                        if not isname(name):
-                            raise error, "illegal character in group name"
-                    elif source.match("="):
-                        # named backreference
-                        name = ""
-                        while 1:
-                            char = source.get()
-                            if char is None:
-                                raise error, "unterminated name"
-                            if char == ")":
-                                break
-                            name = name + char
-                        if not isname(name):
-                            raise error, "illegal character in group name"
-                        gid = state.groupdict.get(name)
-                        if gid is None:
-                            raise error, "unknown group name"
-                        subpattern.append((GROUPREF, gid))
-                        continue
-                    else:
-                        char = source.get()
-                        if char is None:
-                            raise error, "unexpected end of pattern"
-                        raise error, "unknown specifier: ?P%s" % char
-                elif source.match(":"):
-                    # non-capturing group
-                    group = 2
-                elif source.match("#"):
-                    # comment
-                    while 1:
-                        if source.next is None or source.next == ")":
-                            break
-                        source.get()
-                    if not source.match(")"):
-                        raise error, "unbalanced parenthesis"
-                    continue
-                elif source.next in ("=", "!", "<"):
-                    # lookahead assertions
-                    char = source.get()
-                    dir = 1
-                    if char == "<":
-                        if source.next not in ("=", "!"):
-                            raise error, "syntax error"
-                        dir = -1 # lookbehind
-                        char = source.get()
-                    p = _parse_sub(source, state)
-                    if not source.match(")"):
-                        raise error, "unbalanced parenthesis"
-                    if char == "=":
-                        subpattern.append((ASSERT, (dir, p)))
-                    else:
-                        subpattern.append((ASSERT_NOT, (dir, p)))
-                    continue
-                else:
-                    # flags
-                    while FLAGS.has_key(source.next):
-                        state.flags = state.flags | FLAGS[source.get()]
-            if group:
-                # parse group contents
-                if group == 2:
-                    # anonymous group
-                    group = None
-                else:
-                    group = state.getgroup(name)
-                p = _parse_sub(source, state)
-                if not source.match(")"):
-                    raise error, "unbalanced parenthesis"
-                subpattern.append((SUBPATTERN, (group, p)))
-            else:
-                while 1:
-                    char = source.get()
-                    if char is None or char == ")":
-                        break
-                    raise error, "unknown extension"
-
-        elif this == "^":
-            subpattern.append((AT, AT_BEGINNING))
-
-        elif this == "$":
-            subpattern.append((AT, AT_END))
-
-        elif this and this[0] == "\\":
-            code = _escape(source, this, state)
-            subpattern.append(code)
-
-        else:
-            raise error, "parser error"
-
-    return subpattern
-
-def parse(str, flags=0, pattern=None):
-    # parse 're' pattern into list of (opcode, argument) tuples
-
-    source = Tokenizer(str)
-
-    if pattern is None:
-        pattern = Pattern()
-    pattern.flags = flags
-
-    p = _parse_sub(source, pattern, 0)
-
-    tail = source.get()
-    if tail == ")":
-        raise error, "unbalanced parenthesis"
-    elif tail:
-        raise error, "bogus characters at end of regular expression"
-
-    # p.dump()
-
-    if not (flags & SRE_FLAG_VERBOSE) and p.pattern.flags & SRE_FLAG_VERBOSE:
-        # the VERBOSE flag was switched on inside the pattern.  to be
-        # on the safe side, we'll parse the whole thing again...
-        return parse(str, p.pattern.flags)
-
-    return p
-
-def parse_template(source, pattern):
-    # parse 're' replacement string into list of literals and
-    # group references
-    s = Tokenizer(source)
-    p = []
-    a = p.append
-    while 1:
-        this = s.get()
-        if this is None:
-            break # end of replacement string
-        if this and this[0] == "\\":
-            # group
-            if this == "\\g":
-                name = ""
-                if s.match("<"):
-                    while 1:
-                        char = s.get()
-                        if char is None:
-                            raise error, "unterminated group name"
-                        if char == ">":
-                            break
-                        name = name + char
-                if not name:
-                    raise error, "bad group name"
-                try:
-                    index = int(name)
-                except ValueError:
-                    if not isname(name):
-                        raise error, "illegal character in group name"
-                    try:
-                        index = pattern.groupindex[name]
-                    except KeyError:
-                        raise IndexError, "unknown group name"
-                a((MARK, index))
-            elif len(this) > 1 and this[1] in DIGITS:
-                code = None
-                while 1:
-                    group = _group(this, pattern.groups+1)
-                    if group:
-                        if (s.next not in DIGITS or
-                            not _group(this + s.next, pattern.groups+1)):
-                            code = MARK, int(group)
-                            break
-                    elif s.next in OCTDIGITS:
-                        this = this + s.get()
-                    else:
-                        break
-                if not code:
-                    this = this[1:]
-                    code = LITERAL, int(this[-6:], 8) & 0xff
-                a(code)
-            else:
-                try:
-                    a(ESCAPES[this])
-                except KeyError:
-                    for c in this:
-                        a((LITERAL, ord(c)))
-        else:
-            a((LITERAL, ord(this)))
-    return p
-
-def expand_template(template, match):
-    # FIXME: <fl> this is sooooo slow.  drop in the slicelist
-    # code instead
-    p = []
-    a = p.append
-    sep = match.string[:0]
-    if type(sep) is type(""):
-        char = chr
-    else:
-        char = unichr
-    for c, s in template:
-        if c is LITERAL:
-            a(char(s))
-        elif c is MARK:
-            s = match.group(s)
-            if s is None:
-                raise error, "empty group"
-            a(s)
-    return string.join(p, sep)
diff --git a/Lib/dos-8x3/statcach.py b/Lib/dos-8x3/statcach.py
deleted file mode 100755
index b5147c2..0000000
--- a/Lib/dos-8x3/statcach.py
+++ /dev/null
@@ -1,75 +0,0 @@
-"""Maintain a cache of stat() information on files.
-
-There are functions to reset the cache or to selectively remove items.
-"""
-
-import os
-from stat import *
-
-# The cache.
-# Keys are pathnames, values are `os.stat' outcomes.
-#
-cache = {}
-
-
-def stat(path):
-	"""Stat a file, possibly out of the cache."""
-	if cache.has_key(path):
-		return cache[path]
-	cache[path] = ret = os.stat(path)
-	return ret
-
-
-def reset():
-	"""Reset the cache completely."""
-	global cache
-	cache = {}
-
-
-def forget(path):
-	"""Remove a given item from the cache, if it exists."""
-	if cache.has_key(path):
-		del cache[path]
-
-
-def forget_prefix(prefix):
-	"""Remove all pathnames with a given prefix."""
-	n = len(prefix)
-	for path in cache.keys():
-		if path[:n] == prefix:
-			del cache[path]
-
-
-def forget_dir(prefix):
-	"""Forget about a directory and all entries in it, but not about
-	entries in subdirectories."""
-	if prefix[-1:] == '/' and prefix <> '/':
-		prefix = prefix[:-1]
-	forget(prefix)
-	if prefix[-1:] <> '/':
-		prefix = prefix + '/'
-	n = len(prefix)
-	for path in cache.keys():
-		if path[:n] == prefix:
-			rest = path[n:]
-			if rest[-1:] == '/': rest = rest[:-1]
-			if '/' not in rest:
-				del cache[path]
-
-
-def forget_except_prefix(prefix):
-	"""Remove all pathnames except with a given prefix.
-	Normally used with prefix = '/' after a chdir()."""
-	n = len(prefix)
-	for path in cache.keys():
-		if path[:n] <> prefix:
-			del cache[path]
-
-
-def isdir(path):
-	"""Check for directory."""
-	try:
-		st = stat(path)
-	except os.error:
-		return 0
-	return S_ISDIR(st[ST_MODE])
diff --git a/Lib/dos-8x3/string_t.py b/Lib/dos-8x3/string_t.py
deleted file mode 100644
index d4041be..0000000
--- a/Lib/dos-8x3/string_t.py
+++ /dev/null
@@ -1,202 +0,0 @@
-"""Common tests shared by test_string and test_userstring"""
-
-import string
-
-transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
-
-from UserList import UserList
-
-class Sequence:
-    def __init__(self): self.seq = 'wxyz'
-    def __len__(self): return len(self.seq)
-    def __getitem__(self, i): return self.seq[i]
-
-class BadSeq1(Sequence):
-    def __init__(self): self.seq = [7, 'hello', 123L]
-
-class BadSeq2(Sequence):
-    def __init__(self): self.seq = ['a', 'b', 'c']
-    def __len__(self): return 8
-
-def run_module_tests(test):
-    """Run all tests that exercise a function in the string module"""
-
-    test('atoi', " 1 ", 1)
-    test('atoi', " 1x", ValueError)
-    test('atoi', " x1 ", ValueError)
-    test('atol', "  1  ", 1L)
-    test('atol', "  1x ", ValueError)
-    test('atol', "  x1 ", ValueError)
-    test('atof', "  1  ", 1.0)
-    test('atof', "  1x ", ValueError)
-    test('atof', "  x1 ", ValueError)
-
-    test('maketrans', 'abc', transtable, 'xyz')
-    test('maketrans', 'abc', ValueError, 'xyzq')
-
-    # join now works with any sequence type
-    test('join', ['a', 'b', 'c', 'd'], 'a b c d')
-    test('join', ('a', 'b', 'c', 'd'), 'abcd', '')
-    test('join', Sequence(), 'w x y z')
-    test('join', 7, TypeError)
-
-    test('join', BadSeq1(), TypeError)
-    test('join', BadSeq2(), 'a b c')
-
-    # try a few long ones
-    print string.join(['x' * 100] * 100, ':')
-    print string.join(('x' * 100,) * 100, ':')
-
-
-def run_method_tests(test):
-    """Run all tests that exercise a method of a string object"""
-
-    test('capitalize', ' hello ', ' hello ')
-    test('capitalize', 'hello ', 'Hello ')
-    test('find', 'abcdefghiabc', 0, 'abc')
-    test('find', 'abcdefghiabc', 9, 'abc', 1)
-    test('find', 'abcdefghiabc', -1, 'def', 4)
-    test('rfind', 'abcdefghiabc', 9, 'abc')
-    test('lower', 'HeLLo', 'hello')
-    test('lower', 'hello', 'hello')
-    test('upper', 'HeLLo', 'HELLO')
-    test('upper', 'HELLO', 'HELLO')
-
-    test('title', ' hello ', ' Hello ')
-    test('title', 'hello ', 'Hello ')
-    test('title', "fOrMaT thIs aS titLe String", 'Format This As Title String')
-    test('title', "fOrMaT,thIs-aS*titLe;String", 'Format,This-As*Title;String')
-    test('title', "getInt", 'Getint')
-
-    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi')
-    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab      def\ng       hi', 8)
-    test('expandtabs', 'abc\rab\tdef\ng\thi', 'abc\rab  def\ng   hi', 4)
-    test('expandtabs', 'abc\r\nab\tdef\ng\thi', 'abc\r\nab  def\ng   hi', 4)
-
-    test('islower', 'a', 1)
-    test('islower', 'A', 0)
-    test('islower', '\n', 0)
-    test('islower', 'abc', 1)
-    test('islower', 'aBc', 0)
-    test('islower', 'abc\n', 1)
-
-    test('isupper', 'a', 0)
-    test('isupper', 'A', 1)
-    test('isupper', '\n', 0)
-    test('isupper', 'ABC', 1)
-    test('isupper', 'AbC', 0)
-    test('isupper', 'ABC\n', 1)
-
-    test('istitle', 'a', 0)
-    test('istitle', 'A', 1)
-    test('istitle', '\n', 0)
-    test('istitle', 'A Titlecased Line', 1)
-    test('istitle', 'A\nTitlecased Line', 1)
-    test('istitle', 'A Titlecased, Line', 1)
-    test('istitle', 'Not a capitalized String', 0)
-    test('istitle', 'Not\ta Titlecase String', 0)
-    test('istitle', 'Not--a Titlecase String', 0)
-
-    test('isalpha', 'a', 1)
-    test('isalpha', 'A', 1)
-    test('isalpha', '\n', 0)
-    test('isalpha', 'abc', 1)
-    test('isalpha', 'aBc123', 0)
-    test('isalpha', 'abc\n', 0)
-
-    test('isalnum', 'a', 1)
-    test('isalnum', 'A', 1)
-    test('isalnum', '\n', 0)
-    test('isalnum', '123abc456', 1)
-    test('isalnum', 'a1b3c', 1)
-    test('isalnum', 'aBc000 ', 0)
-    test('isalnum', 'abc\n', 0)
-
-    # join now works with any sequence type
-    test('join', ' ', 'a b c d', ['a', 'b', 'c', 'd'])
-    test('join', '', 'abcd', ('a', 'b', 'c', 'd'))
-    test('join', ' ', 'w x y z', Sequence())
-    test('join', 'a', 'abc', ('abc',))
-    test('join', 'a', 'z', UserList(['z']))
-    test('join', u'.', u'a.b.c', ['a', 'b', 'c'])
-    test('join', '.', u'a.b.c', [u'a', 'b', 'c'])
-    test('join', '.', u'a.b.c', ['a', u'b', 'c'])
-    test('join', '.', u'a.b.c', ['a', 'b', u'c'])
-    test('join', '.', TypeError, ['a', u'b', 3])
-    for i in [5, 25, 125]:
-        test('join', '-', ((('a' * i) + '-') * i)[:-1],
-             ['a' * i] * i)
-
-    test('join', ' ', TypeError, BadSeq1())
-    test('join', ' ', 'a b c', BadSeq2())
-
-    test('splitlines', "abc\ndef\n\rghi", ['abc', 'def', '', 'ghi'])
-    test('splitlines', "abc\ndef\n\r\nghi", ['abc', 'def', '', 'ghi'])
-    test('splitlines', "abc\ndef\r\nghi", ['abc', 'def', 'ghi'])
-    test('splitlines', "abc\ndef\r\nghi\n", ['abc', 'def', 'ghi'])
-    test('splitlines', "abc\ndef\r\nghi\n\r", ['abc', 'def', 'ghi', ''])
-    test('splitlines', "\nabc\ndef\r\nghi\n\r", ['', 'abc', 'def', 'ghi', ''])
-    test('splitlines', "\nabc\ndef\r\nghi\n\r", ['\n', 'abc\n', 'def\r\n', 'ghi\n', '\r'], 1)
-
-    test('split', 'this is the split function',
-         ['this', 'is', 'the', 'split', 'function'])
-    test('split', 'a|b|c|d', ['a', 'b', 'c', 'd'], '|')
-    test('split', 'a|b|c|d', ['a', 'b', 'c|d'], '|', 2)
-    test('split', 'a b c d', ['a', 'b c d'], None, 1)
-    test('split', 'a b c d', ['a', 'b', 'c d'], None, 2)
-    test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 3)
-    test('split', 'a b c d', ['a', 'b', 'c', 'd'], None, 4)
-    test('split', 'a b c d', ['a b c d'], None, 0)
-    test('split', 'a  b  c  d', ['a', 'b', 'c  d'], None, 2)
-    test('split', 'a b c d ', ['a', 'b', 'c', 'd'])
-
-    test('strip', '   hello   ', 'hello')
-    test('lstrip', '   hello   ', 'hello   ')
-    test('rstrip', '   hello   ', '   hello')
-    test('strip', 'hello', 'hello')
-
-    test('swapcase', 'HeLLo cOmpUteRs', 'hEllO CoMPuTErS')
-    test('translate', 'xyzabcdef', 'xyzxyz', transtable, 'def')
-
-    table = string.maketrans('a', 'A')
-    test('translate', 'abc', 'Abc', table)
-    test('translate', 'xyz', 'xyz', table)
-
-    test('replace', 'one!two!three!', 'one@two!three!', '!', '@', 1)
-    test('replace', 'one!two!three!', 'onetwothree', '!', '')
-    test('replace', 'one!two!three!', 'one@two@three!', '!', '@', 2)
-    test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 3)
-    test('replace', 'one!two!three!', 'one@two@three@', '!', '@', 4)
-    test('replace', 'one!two!three!', 'one!two!three!', '!', '@', 0)
-    test('replace', 'one!two!three!', 'one@two@three@', '!', '@')
-    test('replace', 'one!two!three!', 'one!two!three!', 'x', '@')
-    test('replace', 'one!two!three!', 'one!two!three!', 'x', '@', 2)
-
-    test('startswith', 'hello', 1, 'he')
-    test('startswith', 'hello', 1, 'hello')
-    test('startswith', 'hello', 0, 'hello world')
-    test('startswith', 'hello', 1, '')
-    test('startswith', 'hello', 0, 'ello')
-    test('startswith', 'hello', 1, 'ello', 1)
-    test('startswith', 'hello', 1, 'o', 4)
-    test('startswith', 'hello', 0, 'o', 5)
-    test('startswith', 'hello', 1, '', 5)
-    test('startswith', 'hello', 0, 'lo', 6)
-    test('startswith', 'helloworld', 1, 'lowo', 3)
-    test('startswith', 'helloworld', 1, 'lowo', 3, 7)
-    test('startswith', 'helloworld', 0, 'lowo', 3, 6)
-
-    test('endswith', 'hello', 1, 'lo')
-    test('endswith', 'hello', 0, 'he')
-    test('endswith', 'hello', 1, '')
-    test('endswith', 'hello', 0, 'hello world')
-    test('endswith', 'helloworld', 0, 'worl')
-    test('endswith', 'helloworld', 1, 'worl', 3, 9)
-    test('endswith', 'helloworld', 1, 'world', 3, 12)
-    test('endswith', 'helloworld', 1, 'lowo', 1, 7)
-    test('endswith', 'helloworld', 1, 'lowo', 2, 7)
-    test('endswith', 'helloworld', 1, 'lowo', 3, 7)
-    test('endswith', 'helloworld', 0, 'lowo', 4, 7)
-    test('endswith', 'helloworld', 0, 'lowo', 3, 8)
-    test('endswith', 'ab', 0, 'ab', 0, 1)
-    test('endswith', 'ab', 0, 'ab', 0, 0)
diff --git a/Lib/dos-8x3/stringio.py b/Lib/dos-8x3/stringio.py
deleted file mode 100755
index 6952b1a..0000000
--- a/Lib/dos-8x3/stringio.py
+++ /dev/null
@@ -1,193 +0,0 @@
-"""File-like objects that read from or write to a string buffer.
-
-This implements (nearly) all stdio methods.
-
-f = StringIO()      # ready for writing
-f = StringIO(buf)   # ready for reading
-f.close()           # explicitly release resources held
-flag = f.isatty()   # always false
-pos = f.tell()      # get current position
-f.seek(pos)         # set current position
-f.seek(pos, mode)   # mode 0: absolute; 1: relative; 2: relative to EOF
-buf = f.read()      # read until EOF
-buf = f.read(n)     # read up to n bytes
-buf = f.readline()  # read until end of line ('\n') or EOF
-list = f.readlines()# list of f.readline() results until EOF
-f.truncate([size])  # truncate file at to at most size (default: current pos)
-f.write(buf)        # write at current position
-f.writelines(list)  # for line in list: f.write(line)
-f.getvalue()        # return whole file's contents as a string
-
-Notes:
-- Using a real file is often faster (but less convenient).
-- There's also a much faster implementation in C, called cStringIO, but
-  it's not subclassable.
-- fileno() is left unimplemented so that code which uses it triggers
-  an exception early.
-- Seeking far beyond EOF and then writing will insert real null
-  bytes that occupy space in the buffer.
-- There's a simple test set (see end of this file).
-"""
-
-import errno
-import string
-
-class StringIO:
-	def __init__(self, buf = ''):
-		self.buf = buf
-		self.len = len(buf)
-		self.buflist = []
-		self.pos = 0
-		self.closed = 0
-		self.softspace = 0
-	def close(self):
-		if not self.closed:
-			self.closed = 1
-			del self.buf, self.pos
-	def isatty(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		return 0
-	def seek(self, pos, mode = 0):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf = self.buf + string.joinfields(self.buflist, '')
-			self.buflist = []
-		if mode == 1:
-			pos = pos + self.pos
-		elif mode == 2:
-			pos = pos + self.len
-		self.pos = max(0, pos)
-	def tell(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		return self.pos
-	def read(self, n = -1):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf = self.buf + string.joinfields(self.buflist, '')
-			self.buflist = []
-		if n < 0:
-			newpos = self.len
-		else:
-			newpos = min(self.pos+n, self.len)
-		r = self.buf[self.pos:newpos]
-		self.pos = newpos
-		return r
-	def readline(self, length=None):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if self.buflist:
-			self.buf = self.buf + string.joinfields(self.buflist, '')
-			self.buflist = []
-		i = string.find(self.buf, '\n', self.pos)
-		if i < 0:
-			newpos = self.len
-		else:
-			newpos = i+1
-		if length is not None:
-			if self.pos + length < newpos:
-				newpos = self.pos + length
-		r = self.buf[self.pos:newpos]
-		self.pos = newpos
-		return r
-	def readlines(self, sizehint = 0):
-		total = 0
-		lines = []
-		line = self.readline()
-		while line:
-			lines.append(line)
-			total += len(line)
-			if 0 < sizehint <= total:
-				break
-			line = self.readline()
-		return lines
-	def truncate(self, size=None):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if size is None:
-			size = self.pos
-		elif size < 0:
-			raise IOError(errno.EINVAL,
-                                      "Negative size not allowed")
-		elif size < self.pos:
-			self.pos = size
-		self.buf = self.getvalue()[:size]
-	def write(self, s):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-		if not s: return
-		if self.pos > self.len:
-			self.buflist.append('\0'*(self.pos - self.len))
-			self.len = self.pos
-		newpos = self.pos + len(s)
-		if self.pos < self.len:
-			if self.buflist:
-				self.buf = self.buf + string.joinfields(self.buflist, '')
-				self.buflist = []
-			self.buflist = [self.buf[:self.pos], s, self.buf[newpos:]]
-			self.buf = ''
-			if newpos > self.len:
-				self.len = newpos
-		else:
-			self.buflist.append(s)
-			self.len = newpos
-		self.pos = newpos
-	def writelines(self, list):
-		self.write(string.joinfields(list, ''))
-	def flush(self):
-		if self.closed:
-			raise ValueError, "I/O operation on closed file"
-	def getvalue(self):
-		if self.buflist:
-			self.buf = self.buf + string.joinfields(self.buflist, '')
-			self.buflist = []
-		return self.buf
-
-
-# A little test suite
-
-def test():
-	import sys
-	if sys.argv[1:]:
-		file = sys.argv[1]
-	else:
-		file = '/etc/passwd'
-	lines = open(file, 'r').readlines()
-	text = open(file, 'r').read()
-	f = StringIO()
-	for line in lines[:-2]:
-		f.write(line)
-	f.writelines(lines[-2:])
-	if f.getvalue() != text:
-		raise RuntimeError, 'write failed'
-	length = f.tell()
-	print 'File length =', length
-	f.seek(len(lines[0]))
-	f.write(lines[1])
-	f.seek(0)
-	print 'First line =', `f.readline()`
-	here = f.tell()
-	line = f.readline()
-	print 'Second line =', `line`
-	f.seek(-len(line), 1)
-	line2 = f.read(len(line))
-	if line != line2:
-		raise RuntimeError, 'bad result after seek back'
-	f.seek(len(line2), 1)
-	list = f.readlines()
-	line = list[-1]
-	f.seek(f.tell() - len(line))
-	line2 = f.read()
-	if line != line2:
-		raise RuntimeError, 'bad result after seek back from EOF'
-	print 'Read', len(list), 'more lines'
-	print 'File length =', f.tell()
-	if f.tell() != length:
-		raise RuntimeError, 'bad length'
-	f.close()
-
-if __name__ == '__main__':
-	test()
diff --git a/Lib/dos-8x3/stringol.py b/Lib/dos-8x3/stringol.py
deleted file mode 100644
index c3e6f6f..0000000
--- a/Lib/dos-8x3/stringol.py
+++ /dev/null
@@ -1,431 +0,0 @@
-# module 'string' -- A collection of string operations
-
-# Warning: most of the code you see here isn't normally used nowadays.  With
-# Python 1.6, many of these functions are implemented as methods on the
-# standard string object. They used to be implemented by a built-in module
-# called strop, but strop is now obsolete itself.
-
-"""Common string manipulations.
-
-Public module variables:
-
-whitespace -- a string containing all characters considered whitespace
-lowercase -- a string containing all characters considered lowercase letters
-uppercase -- a string containing all characters considered uppercase letters
-letters -- a string containing all characters considered letters
-digits -- a string containing all characters considered decimal digits
-hexdigits -- a string containing all characters considered hexadecimal digits
-octdigits -- a string containing all characters considered octal digits
-
-"""
-
-# Some strings for ctype-style character classification
-whitespace = ' \t\n\r\v\f'
-lowercase = 'abcdefghijklmnopqrstuvwxyz'
-uppercase = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-letters = lowercase + uppercase
-digits = '0123456789'
-hexdigits = digits + 'abcdef' + 'ABCDEF'
-octdigits = '01234567'
-
-# Case conversion helpers
-_idmap = ''
-for i in range(256): _idmap = _idmap + chr(i)
-del i
-
-# Backward compatible names for exceptions
-index_error = ValueError
-atoi_error = ValueError
-atof_error = ValueError
-atol_error = ValueError
-
-# convert UPPER CASE letters to lower case
-def lower(s):
-    """lower(s) -> string
-
-    Return a copy of the string s converted to lowercase.
-
-    """
-    return s.lower()
-
-# Convert lower case letters to UPPER CASE
-def upper(s):
-    """upper(s) -> string
-
-    Return a copy of the string s converted to uppercase.
-
-    """
-    return s.upper()
-
-# Swap lower case letters and UPPER CASE
-def swapcase(s):
-    """swapcase(s) -> string
-
-    Return a copy of the string s with upper case characters
-    converted to lowercase and vice versa.
-
-    """
-    return s.swapcase()
-
-# Strip leading and trailing tabs and spaces
-def strip(s):
-    """strip(s) -> string
-
-    Return a copy of the string s with leading and trailing
-    whitespace removed.
-
-    """
-    return s.strip()
-
-# Strip leading tabs and spaces
-def lstrip(s):
-    """lstrip(s) -> string
-
-    Return a copy of the string s with leading whitespace removed.
-
-    """
-    return s.lstrip()
-
-# Strip trailing tabs and spaces
-def rstrip(s):
-    """rstrip(s) -> string
-
-    Return a copy of the string s with trailing whitespace
-    removed.
-
-    """
-    return s.rstrip()
-
-
-# Split a string into a list of space/tab-separated words
-# NB: split(s) is NOT the same as splitfields(s, ' ')!
-def split(s, sep=None, maxsplit=0):
-    """split(str [,sep [,maxsplit]]) -> list of strings
-
-    Return a list of the words in the string s, using sep as the
-    delimiter string.  If maxsplit is nonzero, splits into at most
-    maxsplit words If sep is not specified, any whitespace string
-    is a separator.  Maxsplit defaults to 0.
-
-    (split and splitfields are synonymous)
-
-    """
-    return s.split(sep, maxsplit)
-splitfields = split
-
-# Join fields with optional separator
-def join(words, sep = ' '):
-    """join(list [,sep]) -> string
-
-    Return a string composed of the words in list, with
-    intervening occurrences of sep.  The default separator is a
-    single space.
-
-    (joinfields and join are synonymous)
-
-    """
-    return sep.join(words)
-joinfields = join
-
-# for a little bit of speed
-_apply = apply
-
-# Find substring, raise exception if not found
-def index(s, *args):
-    """index(s, sub [,start [,end]]) -> int
-
-    Like find but raises ValueError when the substring is not found.
-
-    """
-    return _apply(s.index, args)
-
-# Find last substring, raise exception if not found
-def rindex(s, *args):
-    """rindex(s, sub [,start [,end]]) -> int
-
-    Like rfind but raises ValueError when the substring is not found.
-
-    """
-    return _apply(s.rindex, args)
-
-# Count non-overlapping occurrences of substring
-def count(s, *args):
-    """count(s, sub[, start[,end]]) -> int
-
-    Return the number of occurrences of substring sub in string
-    s[start:end].  Optional arguments start and end are
-    interpreted as in slice notation.
-
-    """
-    return _apply(s.count, args)
-
-# Find substring, return -1 if not found
-def find(s, *args):
-    """find(s, sub [,start [,end]]) -> in
-
-    Return the lowest index in s where substring sub is found,
-    such that sub is contained within s[start,end].  Optional
-    arguments start and end are interpreted as in slice notation.
-
-    Return -1 on failure.
-
-    """
-    return _apply(s.find, args)
-
-# Find last substring, return -1 if not found
-def rfind(s, *args):
-    """rfind(s, sub [,start [,end]]) -> int
-
-    Return the highest index in s where substring sub is found,
-    such that sub is contained within s[start,end].  Optional
-    arguments start and end are interpreted as in slice notation.
-
-    Return -1 on failure.
-
-    """
-    return _apply(s.rfind, args)
-
-# for a bit of speed
-_float = float
-_int = int
-_long = long
-_StringType = type('')
-
-# Convert string to float
-def atof(s):
-    """atof(s) -> float
-
-    Return the floating point number represented by the string s.
-
-    """
-    if type(s) == _StringType:
-        return _float(s)
-    else:
-        raise TypeError('argument 1: expected string, %s found' %
-                        type(s).__name__)
-
-# Convert string to integer
-def atoi(*args):
-    """atoi(s [,base]) -> int
-
-    Return the integer represented by the string s in the given
-    base, which defaults to 10.  The string s must consist of one
-    or more digits, possibly preceded by a sign.  If base is 0, it
-    is chosen from the leading characters of s, 0 for octal, 0x or
-    0X for hexadecimal.  If base is 16, a preceding 0x or 0X is
-    accepted.
-
-    """
-    try:
-        s = args[0]
-    except IndexError:
-        raise TypeError('function requires at least 1 argument: %d given' %
-                        len(args))
-    # Don't catch type error resulting from too many arguments to int().  The
-    # error message isn't compatible but the error type is, and this function
-    # is complicated enough already.
-    if type(s) == _StringType:
-        return _apply(_int, args)
-    else:
-        raise TypeError('argument 1: expected string, %s found' %
-                        type(s).__name__)
-
-
-# Convert string to long integer
-def atol(*args):
-    """atol(s [,base]) -> long
-
-    Return the long integer represented by the string s in the
-    given base, which defaults to 10.  The string s must consist
-    of one or more digits, possibly preceded by a sign.  If base
-    is 0, it is chosen from the leading characters of s, 0 for
-    octal, 0x or 0X for hexadecimal.  If base is 16, a preceding
-    0x or 0X is accepted.  A trailing L or l is not accepted,
-    unless base is 0.
-
-    """
-    try:
-        s = args[0]
-    except IndexError:
-        raise TypeError('function requires at least 1 argument: %d given' %
-                        len(args))
-    # Don't catch type error resulting from too many arguments to long().  The
-    # error message isn't compatible but the error type is, and this function
-    # is complicated enough already.
-    if type(s) == _StringType:
-        return _apply(_long, args)
-    else:
-        raise TypeError('argument 1: expected string, %s found' %
-                        type(s).__name__)
-
-
-# Left-justify a string
-def ljust(s, width):
-    """ljust(s, width) -> string
-
-    Return a left-justified version of s, in a field of the
-    specified width, padded with spaces as needed.  The string is
-    never truncated.
-
-    """
-    n = width - len(s)
-    if n <= 0: return s
-    return s + ' '*n
-
-# Right-justify a string
-def rjust(s, width):
-    """rjust(s, width) -> string
-
-    Return a right-justified version of s, in a field of the
-    specified width, padded with spaces as needed.  The string is
-    never truncated.
-
-    """
-    n = width - len(s)
-    if n <= 0: return s
-    return ' '*n + s
-
-# Center a string
-def center(s, width):
-    """center(s, width) -> string
-
-    Return a center version of s, in a field of the specified
-    width. padded with spaces as needed.  The string is never
-    truncated.
-
-    """
-    n = width - len(s)
-    if n <= 0: return s
-    half = n/2
-    if n%2 and width%2:
-        # This ensures that center(center(s, i), j) = center(s, j)
-        half = half+1
-    return ' '*half +  s + ' '*(n-half)
-
-# Zero-fill a number, e.g., (12, 3) --> '012' and (-3, 3) --> '-03'
-# Decadent feature: the argument may be a string or a number
-# (Use of this is deprecated; it should be a string as with ljust c.s.)
-def zfill(x, width):
-    """zfill(x, width) -> string
-
-    Pad a numeric string x with zeros on the left, to fill a field
-    of the specified width.  The string x is never truncated.
-
-    """
-    if type(x) == type(''): s = x
-    else: s = `x`
-    n = len(s)
-    if n >= width: return s
-    sign = ''
-    if s[0] in ('-', '+'):
-        sign, s = s[0], s[1:]
-    return sign + '0'*(width-n) + s
-
-# Expand tabs in a string.
-# Doesn't take non-printing chars into account, but does understand \n.
-def expandtabs(s, tabsize=8):
-    """expandtabs(s [,tabsize]) -> string
-
-    Return a copy of the string s with all tab characters replaced
-    by the appropriate number of spaces, depending on the current
-    column, and the tabsize (default 8).
-
-    """
-    res = line = ''
-    for c in s:
-        if c == '\t':
-            c = ' '*(tabsize - len(line) % tabsize)
-        line = line + c
-        if c == '\n':
-            res = res + line
-            line = ''
-    return res + line
-
-# Character translation through look-up table.
-def translate(s, table, deletions=""):
-    """translate(s,table [,deletechars]) -> string
-
-    Return a copy of the string s, where all characters occurring
-    in the optional argument deletechars are removed, and the
-    remaining characters have been mapped through the given
-    translation table, which must be a string of length 256.
-
-    """
-    return s.translate(table, deletions)
-
-# Capitalize a string, e.g. "aBc  dEf" -> "Abc  def".
-def capitalize(s):
-    """capitalize(s) -> string
-
-    Return a copy of the string s with only its first character
-    capitalized.
-
-    """
-    return s.capitalize()
-
-# Capitalize the words in a string, e.g. " aBc  dEf " -> "Abc Def".
-# See also regsub.capwords().
-def capwords(s, sep=None):
-    """capwords(s, [sep]) -> string
-
-    Split the argument into words using split, capitalize each
-    word using capitalize, and join the capitalized words using
-    join. Note that this replaces runs of whitespace characters by
-    a single space.
-
-    """
-    return join(map(capitalize, s.split(sep)), sep or ' ')
-
-# Construct a translation string
-_idmapL = None
-def maketrans(fromstr, tostr):
-    """maketrans(frm, to) -> string
-
-    Return a translation table (a string of 256 bytes long)
-    suitable for use in string.translate.  The strings frm and to
-    must be of the same length.
-
-    """
-    if len(fromstr) != len(tostr):
-        raise ValueError, "maketrans arguments must have same length"
-    global _idmapL
-    if not _idmapL:
-        _idmapL = map(None, _idmap)
-    L = _idmapL[:]
-    fromstr = map(ord, fromstr)
-    for i in range(len(fromstr)):
-        L[fromstr[i]] = tostr[i]
-    return joinfields(L, "")
-
-# Substring replacement (global)
-def replace(s, old, new, maxsplit=0):
-    """replace (str, old, new[, maxsplit]) -> string
-
-    Return a copy of string str with all occurrences of substring
-    old replaced by new. If the optional argument maxsplit is
-    given, only the first maxsplit occurrences are replaced.
-
-    """
-    return s.replace(old, new, maxsplit)
-
-
-# XXX: transitional
-#
-# If string objects do not have methods, then we need to use the old string.py
-# library, which uses strop for many more things than just the few outlined
-# below.
-try:
-    ''.upper
-except AttributeError:
-    from stringold import *
-
-# Try importing optional built-in module "strop" -- if it exists,
-# it redefines some string operations that are 100-1000 times faster.
-# It also defines values for whitespace, lowercase and uppercase
-# that match <ctype.h>'s definitions.
-
-try:
-    from strop import maketrans, lowercase, uppercase, whitespace
-    letters = lowercase + uppercase
-except ImportError:
-    pass                                          # Use the original versions
diff --git a/Lib/dos-8x3/telnetli.py b/Lib/dos-8x3/telnetli.py
deleted file mode 100644
index dfd549e..0000000
--- a/Lib/dos-8x3/telnetli.py
+++ /dev/null
@@ -1,503 +0,0 @@
-"""TELNET client class.
-
-Based on RFC 854: TELNET Protocol Specification, by J. Postel and
-J. Reynolds
-
-Example:
-
->>> from telnetlib import Telnet
->>> tn = Telnet('www.python.org', 79)   # connect to finger port
->>> tn.write('guido\r\n')
->>> print tn.read_all()
-Login       Name               TTY         Idle    When    Where
-guido    Guido van Rossum      pts/2        <Dec  2 11:10> snag.cnri.reston..
- 
->>>
-
-Note that read_all() won't read until eof -- it just reads some data
--- but it guarantees to read at least one byte unless EOF is hit.
-
-It is possible to pass a Telnet object to select.select() in order to
-wait until more data is available.  Note that in this case,
-read_eager() may return '' even if there was data on the socket,
-because the protocol negotiation may have eaten the data.  This is why
-EOFError is needed in some cases to distinguish between "no data" and
-"connection closed" (since the socket also appears ready for reading
-when it is closed).
-
-Bugs:
-- may hang when connection is slow in the middle of an IAC sequence
-
-To do:
-- option negotiation
-- timeout should be intrinsic to the connection object instead of an
-  option on one of the read calls only
-
-"""
-
-
-# Imported modules
-import sys
-import socket
-import select
-import string
-
-# Tunable parameters
-DEBUGLEVEL = 0
-
-# Telnet protocol defaults
-TELNET_PORT = 23
-
-# Telnet protocol characters (don't change)
-IAC  = chr(255) # "Interpret As Command"
-DONT = chr(254)
-DO   = chr(253)
-WONT = chr(252)
-WILL = chr(251)
-theNULL = chr(0)
-
-
-class Telnet:
-
-    """Telnet interface class.
-
-    An instance of this class represents a connection to a telnet
-    server.  The instance is initially not connected; the open()
-    method must be used to establish a connection.  Alternatively, the
-    host name and optional port number can be passed to the
-    constructor, too.
-
-    Don't try to reopen an already connected instance.
-
-    This class has many read_*() methods.  Note that some of them
-    raise EOFError when the end of the connection is read, because
-    they can return an empty string for other reasons.  See the
-    individual doc strings.
-
-    read_until(expected, [timeout])
-        Read until the expected string has been seen, or a timeout is
-        hit (default is no timeout); may block.
-
-    read_all()
-        Read all data until EOF; may block.
-
-    read_some()
-        Read at least one byte or EOF; may block.
-
-    read_very_eager()
-        Read all data available already queued or on the socket,
-        without blocking.
-
-    read_eager()
-        Read either data already queued or some data available on the
-        socket, without blocking.
-
-    read_lazy()
-        Read all data in the raw queue (processing it first), without
-        doing any socket I/O.
-
-    read_very_lazy()
-        Reads all data in the cooked queue, without doing any socket
-        I/O.
-
-    """
-
-    def __init__(self, host=None, port=0):
-        """Constructor.
-
-        When called without arguments, create an unconnected instance.
-        With a hostname argument, it connects the instance; a port
-        number is optional.
-
-        """
-        self.debuglevel = DEBUGLEVEL
-        self.host = host
-        self.port = port
-        self.sock = None
-        self.rawq = ''
-        self.irawq = 0
-        self.cookedq = ''
-        self.eof = 0
-        if host:
-            self.open(host, port)
-
-    def open(self, host, port=0):
-        """Connect to a host.
-
-        The optional second argument is the port number, which
-        defaults to the standard telnet port (23).
-
-        Don't try to reopen an already connected instance.
-
-        """
-        self.eof = 0
-        if not port:
-            port = TELNET_PORT
-        self.host = host
-        self.port = port
-        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.sock.connect((self.host, self.port))
-
-    def __del__(self):
-        """Destructor -- close the connection."""
-        self.close()
-
-    def msg(self, msg, *args):
-        """Print a debug message, when the debug level is > 0.
-
-        If extra arguments are present, they are substituted in the
-        message using the standard string formatting operator.
-
-        """
-        if self.debuglevel > 0:
-            print 'Telnet(%s,%d):' % (self.host, self.port),
-            if args:
-                print msg % args
-            else:
-                print msg
-
-    def set_debuglevel(self, debuglevel):
-        """Set the debug level.
-
-        The higher it is, the more debug output you get (on sys.stdout).
-
-        """
-        self.debuglevel = debuglevel
-
-    def close(self):
-        """Close the connection."""
-        if self.sock:
-            self.sock.close()
-        self.sock = 0
-        self.eof = 1
-
-    def get_socket(self):
-        """Return the socket object used internally."""
-        return self.sock
-
-    def fileno(self):
-        """Return the fileno() of the socket object used internally."""
-        return self.sock.fileno()
-
-    def write(self, buffer):
-        """Write a string to the socket, doubling any IAC characters.
-
-        Can block if the connection is blocked.  May raise
-        socket.error if the connection is closed.
-
-        """
-        if IAC in buffer:
-            buffer = string.replace(buffer, IAC, IAC+IAC)
-        self.msg("send %s", `buffer`)
-        self.sock.send(buffer)
-
-    def read_until(self, match, timeout=None):
-        """Read until a given string is encountered or until timeout.
-
-        When no match is found, return whatever is available instead,
-        possibly the empty string.  Raise EOFError if the connection
-        is closed and no cooked data is available.
-
-        """
-        n = len(match)
-        self.process_rawq()
-        i = string.find(self.cookedq, match)
-        if i >= 0:
-            i = i+n
-            buf = self.cookedq[:i]
-            self.cookedq = self.cookedq[i:]
-            return buf
-        s_reply = ([self], [], [])
-        s_args = s_reply
-        if timeout is not None:
-            s_args = s_args + (timeout,)
-        while not self.eof and apply(select.select, s_args) == s_reply:
-            i = max(0, len(self.cookedq)-n)
-            self.fill_rawq()
-            self.process_rawq()
-            i = string.find(self.cookedq, match, i)
-            if i >= 0:
-                i = i+n
-                buf = self.cookedq[:i]
-                self.cookedq = self.cookedq[i:]
-                return buf
-        return self.read_very_lazy()
-
-    def read_all(self):
-        """Read all data until EOF; block until connection closed."""
-        self.process_rawq()
-        while not self.eof:
-            self.fill_rawq()
-            self.process_rawq()
-        buf = self.cookedq
-        self.cookedq = ''
-        return buf
-
-    def read_some(self):
-        """Read at least one byte of cooked data unless EOF is hit.
-
-        Return '' if EOF is hit.  Block if no data is immediately
-        available.
-
-        """
-        self.process_rawq()
-        while not self.cookedq and not self.eof:
-            self.fill_rawq()
-            self.process_rawq()
-        buf = self.cookedq
-        self.cookedq = ''
-        return buf
-
-    def read_very_eager(self):
-        """Read everything that's possible without blocking in I/O (eager).
-        
-        Raise EOFError if connection closed and no cooked data
-        available.  Return '' if no cooked data available otherwise.
-        Don't block unless in the midst of an IAC sequence.
-
-        """
-        self.process_rawq()
-        while not self.eof and self.sock_avail():
-            self.fill_rawq()
-            self.process_rawq()
-        return self.read_very_lazy()
-
-    def read_eager(self):
-        """Read readily available data.
-
-        Raise EOFError if connection closed and no cooked data
-        available.  Return '' if no cooked data available otherwise.
-        Don't block unless in the midst of an IAC sequence.
-
-        """
-        self.process_rawq()
-        while not self.cookedq and not self.eof and self.sock_avail():
-            self.fill_rawq()
-            self.process_rawq()
-        return self.read_very_lazy()
-
-    def read_lazy(self):
-        """Process and return data that's already in the queues (lazy).
-        
-        Raise EOFError if connection closed and no data available.
-        Return '' if no cooked data available otherwise.  Don't block
-        unless in the midst of an IAC sequence.
-
-        """
-        self.process_rawq()
-        return self.read_very_lazy()
-
-    def read_very_lazy(self):
-        """Return any data available in the cooked queue (very lazy).
-
-        Raise EOFError if connection closed and no data available.
-        Return '' if no cooked data available otherwise.  Don't block.
-
-        """
-        buf = self.cookedq
-        self.cookedq = ''
-        if not buf and self.eof and not self.rawq:
-            raise EOFError, 'telnet connection closed'
-        return buf
-
-    def process_rawq(self):
-        """Transfer from raw queue to cooked queue.
-
-        Set self.eof when connection is closed.  Don't block unless in
-        the midst of an IAC sequence.
-
-        """
-        buf = ''
-        try:
-            while self.rawq:
-                c = self.rawq_getchar()
-                if c == theNULL:
-                    continue
-                if c == "\021":
-                    continue
-                if c != IAC:
-                    buf = buf + c
-                    continue
-                c = self.rawq_getchar()
-                if c == IAC:
-                    buf = buf + c
-                elif c in (DO, DONT):
-                    opt = self.rawq_getchar()
-                    self.msg('IAC %s %d', c == DO and 'DO' or 'DONT', ord(c))
-                    self.sock.send(IAC + WONT + opt)
-                elif c in (WILL, WONT):
-                    opt = self.rawq_getchar()
-                    self.msg('IAC %s %d',
-                             c == WILL and 'WILL' or 'WONT', ord(c))
-                    self.sock.send(IAC + DONT + opt)
-                else:
-                    self.msg('IAC %s not recognized' % `c`)
-        except EOFError: # raised by self.rawq_getchar()
-            pass
-        self.cookedq = self.cookedq + buf
-
-    def rawq_getchar(self):
-        """Get next char from raw queue.
-
-        Block if no data is immediately available.  Raise EOFError
-        when connection is closed.
-
-        """
-        if not self.rawq:
-            self.fill_rawq()
-            if self.eof:
-                raise EOFError
-        c = self.rawq[self.irawq]
-        self.irawq = self.irawq + 1
-        if self.irawq >= len(self.rawq):
-            self.rawq = ''
-            self.irawq = 0
-        return c
-
-    def fill_rawq(self):
-        """Fill raw queue from exactly one recv() system call.
-
-        Block if no data is immediately available.  Set self.eof when
-        connection is closed.
-
-        """
-        if self.irawq >= len(self.rawq):
-            self.rawq = ''
-            self.irawq = 0
-        # The buffer size should be fairly small so as to avoid quadratic
-        # behavior in process_rawq() above
-        buf = self.sock.recv(50)
-        self.msg("recv %s", `buf`)
-        self.eof = (not buf)
-        self.rawq = self.rawq + buf
-
-    def sock_avail(self):
-        """Test whether data is available on the socket."""
-        return select.select([self], [], [], 0) == ([self], [], [])
-
-    def interact(self):
-        """Interaction function, emulates a very dumb telnet client."""
-        if sys.platform == "win32":
-            self.mt_interact()
-            return
-        while 1:
-            rfd, wfd, xfd = select.select([self, sys.stdin], [], [])
-            if self in rfd:
-                try:
-                    text = self.read_eager()
-                except EOFError:
-                    print '*** Connection closed by remote host ***'
-                    break
-                if text:
-                    sys.stdout.write(text)
-                    sys.stdout.flush()
-            if sys.stdin in rfd:
-                line = sys.stdin.readline()
-                if not line:
-                    break
-                self.write(line)
-
-    def mt_interact(self):
-        """Multithreaded version of interact()."""
-        import thread
-        thread.start_new_thread(self.listener, ())
-        while 1:
-            line = sys.stdin.readline()
-            if not line:
-                break
-            self.write(line)
-
-    def listener(self):
-        """Helper for mt_interact() -- this executes in the other thread."""
-        while 1:
-            try:
-                data = self.read_eager()
-            except EOFError:
-                print '*** Connection closed by remote host ***'
-                return
-            if data:
-                sys.stdout.write(data)
-            else:
-                sys.stdout.flush()
-
-    def expect(self, list, timeout=None):
-        """Read until one from a list of a regular expressions matches.
-
-        The first argument is a list of regular expressions, either
-        compiled (re.RegexObject instances) or uncompiled (strings).
-        The optional second argument is a timeout, in seconds; default
-        is no timeout.
-
-        Return a tuple of three items: the index in the list of the
-        first regular expression that matches; the match object
-        returned; and the text read up till and including the match.
-
-        If EOF is read and no text was read, raise EOFError.
-        Otherwise, when nothing matches, return (-1, None, text) where
-        text is the text received so far (may be the empty string if a
-        timeout happened).
-
-        If a regular expression ends with a greedy match (e.g. '.*')
-        or if more than one expression can match the same input, the
-        results are undeterministic, and may depend on the I/O timing.
-
-        """
-        re = None
-        list = list[:]
-        indices = range(len(list))
-        for i in indices:
-            if not hasattr(list[i], "search"):
-                if not re: import re
-                list[i] = re.compile(list[i])
-        while 1:
-            self.process_rawq()
-            for i in indices:
-                m = list[i].search(self.cookedq)
-                if m:
-                    e = m.end()
-                    text = self.cookedq[:e]
-                    self.cookedq = self.cookedq[e:]
-                    return (i, m, text)
-            if self.eof:
-                break
-            if timeout is not None:
-                r, w, x = select.select([self.fileno()], [], [], timeout)
-                if not r:
-                    break
-            self.fill_rawq()
-        text = self.read_very_lazy()
-        if not text and self.eof:
-            raise EOFError
-        return (-1, None, text)
-
-
-def test():
-    """Test program for telnetlib.
-
-    Usage: python telnetlib.py [-d] ... [host [port]]
-
-    Default host is localhost; default port is 23.
-
-    """
-    debuglevel = 0
-    while sys.argv[1:] and sys.argv[1] == '-d':
-        debuglevel = debuglevel+1
-        del sys.argv[1]
-    host = 'localhost'
-    if sys.argv[1:]:
-        host = sys.argv[1]
-    port = 0
-    if sys.argv[2:]:
-        portstr = sys.argv[2]
-        try:
-            port = int(portstr)
-        except ValueError:
-            port = socket.getservbyname(portstr, 'tcp')
-    tn = Telnet()
-    tn.set_debuglevel(debuglevel)
-    tn.open(host, port)
-    tn.interact()
-    tn.close()
-
-if __name__ == '__main__':
-    test()
diff --git a/Lib/dos-8x3/test_arr.py b/Lib/dos-8x3/test_arr.py
deleted file mode 100644
index fb451a9..0000000
--- a/Lib/dos-8x3/test_arr.py
+++ /dev/null
@@ -1,188 +0,0 @@
-#! /usr/bin/env python
-"""Test the arraymodule.
-   Roger E. Masse
-"""
-import array
-from test_support import verbose, TESTFN, unlink, TestFailed
-
-def main():
-
-    testtype('c', 'c')
-
-    for type in (['b', 'h', 'i', 'l', 'f', 'd']):
-        testtype(type, 1)
-
-    unlink(TESTFN)
-
-
-def testoverflow(type, lowerLimit, upperLimit):
-	# should not overflow assigning lower limit
-	if verbose:
-		print "overflow test: array(%s, [%s])" % (`type`, `lowerLimit`)
-	try:
-		a = array.array(type, [lowerLimit])
-	except:
-		raise TestFailed, "array(%s) overflowed assigning %s" %\
-			(`type`, `lowerLimit`)
-	# should overflow assigning less than lower limit
-	if verbose:
-		print "overflow test: array(%s, [%s])" % (`type`, `lowerLimit-1`)
-	try:
-		a = array.array(type, [lowerLimit-1])
-		raise TestFailed, "array(%s) did not overflow assigning %s" %\
-			(`type`, `lowerLimit-1`)
-	except OverflowError:
-		pass
-	# should not overflow assigning upper limit
-	if verbose:
-		print "overflow test: array(%s, [%s])" % (`type`, `upperLimit`)
-	try:
-		a = array.array(type, [upperLimit])
-	except:
-		raise TestFailed, "array(%s) overflowed assigning %s" %\
-			(`type`, `upperLimit`)
-	# should overflow assigning more than upper limit
-	if verbose:
-		print "overflow test: array(%s, [%s])" % (`type`, `upperLimit+1`)
-	try:
-		a = array.array(type, [upperLimit+1])
-		raise TestFailed, "array(%s) did not overflow assigning %s" %\
-			(`type`, `upperLimit+1`)
-	except OverflowError:
-		pass
-
-
-
-def testtype(type, example):
-
-        a = array.array(type)
-        a.append(example)
-        if verbose:
-            print 40*'*'
-            print 'array after append: ', a
-        a.typecode
-        a.itemsize
-        if a.typecode in ('i', 'b', 'h', 'l'):
-            a.byteswap()
-
-        if a.typecode == 'c':
-            f = open(TESTFN, "w")
-            f.write("The quick brown fox jumps over the lazy dog.\n")
-            f.close()
-            f = open(TESTFN, 'r')
-            a.fromfile(f, 10)
-            f.close()
-            if verbose:
-                print 'char array with 10 bytes of TESTFN appended: ', a
-            a.fromlist(['a', 'b', 'c'])
-            if verbose:
-                print 'char array with list appended: ', a
-
-        a.insert(0, example)
-        if verbose:
-            print 'array of %s after inserting another:' % a.typecode, a
-        f = open(TESTFN, 'w')
-        a.tofile(f)
-        f.close()
-        a.tolist()
-        a.tostring()
-        if verbose:
-            print 'array of %s converted to a list: ' % a.typecode, a.tolist()
-        if verbose:
-            print 'array of %s converted to a string: ' \
-                   % a.typecode, `a.tostring()`
-
-        if type == 'c':
-            a = array.array(type, "abcde")
-            a[:-1] = a
-            if a != array.array(type, "abcdee"):
-                raise TestFailed, "array(%s) self-slice-assign (head)" % `type`
-            a = array.array(type, "abcde")
-            a[1:] = a
-            if a != array.array(type, "aabcde"):
-                raise TestFailed, "array(%s) self-slice-assign (tail)" % `type`
-            a = array.array(type, "abcde")
-            a[1:-1] = a
-            if a != array.array(type, "aabcdee"):
-                raise TestFailed, "array(%s) self-slice-assign (cntr)" % `type`
-            if a.index("e") != 5:
-            	raise TestFailed, "array(%s) index-test" % `type`
-            if a.count("a") != 2:
-            	raise TestFailed, "array(%s) count-test" % `type`
-            a.remove("e")
-            if a != array.array(type, "aabcde"):
-            	raise TestFailed, "array(%s) remove-test" % `type`
-            if a.pop(0) != "a":
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            if a.pop(1) != "b":
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            a.extend(array.array(type, "xyz"))
-            if a != array.array(type, "acdexyz"):
-                raise TestFailed, "array(%s) extend-test" % `type`
-            a.pop()
-            a.pop()
-            a.pop()
-            x = a.pop()
-            if x != 'e':
-                raise TestFailed, "array(%s) pop-test" % `type`
-            if a != array.array(type, "acd"):
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            a.reverse()
-            if a != array.array(type, "dca"):
-            	raise TestFailed, "array(%s) reverse-test" % `type`
-        else:
-            a = array.array(type, [1, 2, 3, 4, 5])
-            a[:-1] = a
-            if a != array.array(type, [1, 2, 3, 4, 5, 5]):
-                raise TestFailed, "array(%s) self-slice-assign (head)" % `type`
-            a = array.array(type, [1, 2, 3, 4, 5])
-            a[1:] = a
-            if a != array.array(type, [1, 1, 2, 3, 4, 5]):
-                raise TestFailed, "array(%s) self-slice-assign (tail)" % `type`
-            a = array.array(type, [1, 2, 3, 4, 5])
-            a[1:-1] = a
-            if a != array.array(type, [1, 1, 2, 3, 4, 5, 5]):
-                raise TestFailed, "array(%s) self-slice-assign (cntr)" % `type`
-            if a.index(5) != 5:
-            	raise TestFailed, "array(%s) index-test" % `type`
-            if a.count(1) != 2:
-            	raise TestFailed, "array(%s) count-test" % `type`
-            a.remove(5)
-            if a != array.array(type, [1, 1, 2, 3, 4, 5]):
-            	raise TestFailed, "array(%s) remove-test" % `type`
-            if a.pop(0) != 1:
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            if a.pop(1) != 2:
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            a.extend(array.array(type, [7, 8, 9]))
-            if a != array.array(type, [1, 3, 4, 5, 7, 8, 9]):
-                raise TestFailed, "array(%s) extend-test" % `type`
-            a.pop()
-            a.pop()
-            a.pop()
-            x = a.pop()
-            if x != 5:
-                raise TestFailed, "array(%s) pop-test" % `type`
-            if a != array.array(type, [1, 3, 4]):
-            	raise TestFailed, "array(%s) pop-test" % `type`
-            a.reverse()
-            if a != array.array(type, [4, 3, 1]):
-            	raise TestFailed, "array(%s) reverse-test" % `type`
-
-        # test that overflow exceptions are raised as expected for assignment
-        # to array of specific integral types
-        from math import pow
-        if type in ('b', 'h', 'i', 'l'):
-            # check signed and unsigned versions
-            a = array.array(type)
-            signedLowerLimit = -1 * long(pow(2, a.itemsize * 8 - 1))
-            signedUpperLimit = long(pow(2, a.itemsize * 8 - 1)) - 1L
-            unsignedLowerLimit = 0
-            unsignedUpperLimit = long(pow(2, a.itemsize * 8)) - 1L
-            testoverflow(type, signedLowerLimit, signedUpperLimit)
-            testoverflow(type.upper(), unsignedLowerLimit, unsignedUpperLimit)
-			
-			
-		
-main()
-
diff --git a/Lib/dos-8x3/test_ate.py b/Lib/dos-8x3/test_ate.py
deleted file mode 100644
index 517610b..0000000
--- a/Lib/dos-8x3/test_ate.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# Test the exit module
-from test_support import verbose
-import atexit
-
-def handler1():
-    print "handler1"
-
-def handler2(*args, **kargs):
-    print "handler2", args, kargs
-
-# save any exit functions that may have been registered as part of the
-# test framework
-_exithandlers = atexit._exithandlers
-atexit._exithandlers = []
-
-atexit.register(handler1)
-atexit.register(handler2)
-atexit.register(handler2, 7, kw="abc")
-
-# simulate exit behavior by calling atexit._run_exitfuncs directly...
-atexit._run_exitfuncs()
-
-# restore exit handlers
-atexit._exithandlers = _exithandlers
diff --git a/Lib/dos-8x3/test_aud.py b/Lib/dos-8x3/test_aud.py
deleted file mode 100755
index 900ec58..0000000
--- a/Lib/dos-8x3/test_aud.py
+++ /dev/null
@@ -1,264 +0,0 @@
-# Test audioop.
-import audioop
-from test_support import verbose
-
-def gendata1():
-    return '\0\1\2'
-
-def gendata2():
-    if verbose:
-        print 'getsample'
-    if audioop.getsample('\0\1', 2, 0) == 1:
-        return '\0\0\0\1\0\2'
-    else:
-        return '\0\0\1\0\2\0'
-
-def gendata4():
-    if verbose:
-        print 'getsample'
-    if audioop.getsample('\0\0\0\1', 4, 0) == 1:
-        return '\0\0\0\0\0\0\0\1\0\0\0\2'
-    else:
-        return '\0\0\0\0\1\0\0\0\2\0\0\0'
-
-def testmax(data):
-    if verbose:
-        print 'max'
-    if audioop.max(data[0], 1) <> 2 or \
-              audioop.max(data[1], 2) <> 2 or \
-              audioop.max(data[2], 4) <> 2:
-        return 0
-    return 1
-
-def testminmax(data):
-    if verbose:
-        print 'minmax'
-    if audioop.minmax(data[0], 1) <> (0, 2) or \
-              audioop.minmax(data[1], 2) <> (0, 2) or \
-              audioop.minmax(data[2], 4) <> (0, 2):
-        return 0
-    return 1
-
-def testmaxpp(data):
-    if verbose:
-        print 'maxpp'
-    if audioop.maxpp(data[0], 1) <> 0 or \
-              audioop.maxpp(data[1], 2) <> 0 or \
-              audioop.maxpp(data[2], 4) <> 0:
-        return 0
-    return 1
-
-def testavg(data):
-    if verbose:
-        print 'avg'
-    if audioop.avg(data[0], 1) <> 1 or \
-              audioop.avg(data[1], 2) <> 1 or \
-              audioop.avg(data[2], 4) <> 1:
-        return 0
-    return 1
-
-def testavgpp(data):
-    if verbose:
-        print 'avgpp'
-    if audioop.avgpp(data[0], 1) <> 0 or \
-              audioop.avgpp(data[1], 2) <> 0 or \
-              audioop.avgpp(data[2], 4) <> 0:
-        return 0
-    return 1
-
-def testrms(data):
-    if audioop.rms(data[0], 1) <> 1 or \
-              audioop.rms(data[1], 2) <> 1 or \
-              audioop.rms(data[2], 4) <> 1:
-        return 0
-    return 1
-
-def testcross(data):
-    if verbose:
-        print 'cross'
-    if audioop.cross(data[0], 1) <> 0 or \
-              audioop.cross(data[1], 2) <> 0 or \
-              audioop.cross(data[2], 4) <> 0:
-        return 0
-    return 1
-
-def testadd(data):
-    if verbose:
-        print 'add'
-    data2 = []
-    for d in data:
-        str = ''
-        for s in d:
-            str = str + chr(ord(s)*2)
-        data2.append(str)
-    if audioop.add(data[0], data[0], 1) <> data2[0] or \
-              audioop.add(data[1], data[1], 2) <> data2[1] or \
-              audioop.add(data[2], data[2], 4) <> data2[2]:
-        return 0
-    return 1
-
-def testbias(data):
-    if verbose:
-        print 'bias'
-    # Note: this test assumes that avg() works
-    d1 = audioop.bias(data[0], 1, 100)
-    d2 = audioop.bias(data[1], 2, 100)
-    d4 = audioop.bias(data[2], 4, 100)
-    if audioop.avg(d1, 1) <> 101 or \
-              audioop.avg(d2, 2) <> 101 or \
-              audioop.avg(d4, 4) <> 101:
-        return 0
-    return 1
-
-def testlin2lin(data):
-    if verbose:
-        print 'lin2lin'
-    # too simple: we test only the size
-    for d1 in data:
-        for d2 in data:
-            got = len(d1)/3
-            wtd = len(d2)/3
-            if len(audioop.lin2lin(d1, got, wtd)) <> len(d2):
-                return 0
-    return 1
-
-def testadpcm2lin(data):
-    # Very cursory test
-    if audioop.adpcm2lin('\0\0', 1, None) <> ('\0\0\0\0', (0,0)):
-        return 0
-    return 1
-
-def testlin2adpcm(data):
-    if verbose:
-        print 'lin2adpcm'
-    # Very cursory test
-    if audioop.lin2adpcm('\0\0\0\0', 1, None) <> ('\0\0', (0,0)):
-        return 0
-    return 1
-
-def testlin2ulaw(data):
-    if verbose:
-        print 'lin2ulaw'
-    if audioop.lin2ulaw(data[0], 1) <> '\377\347\333' or \
-              audioop.lin2ulaw(data[1], 2) <> '\377\377\377' or \
-              audioop.lin2ulaw(data[2], 4) <> '\377\377\377':
-        return 0
-    return 1
-
-def testulaw2lin(data):
-    if verbose:
-        print 'ulaw2lin'
-    # Cursory
-    d = audioop.lin2ulaw(data[0], 1)
-    if audioop.ulaw2lin(d, 1) <> data[0]:
-        return 0
-    return 1
-
-def testmul(data):
-    if verbose:
-        print 'mul'
-    data2 = []
-    for d in data:
-        str = ''
-        for s in d:
-            str = str + chr(ord(s)*2)
-        data2.append(str)
-    if audioop.mul(data[0], 1, 2) <> data2[0] or \
-              audioop.mul(data[1],2, 2) <> data2[1] or \
-              audioop.mul(data[2], 4, 2) <> data2[2]:
-        return 0
-    return 1
-
-def testratecv(data):
-    if verbose:
-        print 'ratecv'
-    state = None
-    d1, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
-    d2, state = audioop.ratecv(data[0], 1, 1, 8000, 16000, state)
-    if d1 + d2 != '\000\000\001\001\002\001\000\000\001\001\002':
-        return 0
-    return 1
-
-def testreverse(data):
-    if verbose:
-        print 'reverse'
-    if audioop.reverse(data[0], 1) <> '\2\1\0':
-        return 0
-    return 1
-
-def testtomono(data):
-    if verbose:
-        print 'tomono'
-    data2 = ''
-    for d in data[0]:
-        data2 = data2 + d + d
-    if audioop.tomono(data2, 1, 0.5, 0.5) <> data[0]:
-        return 0
-    return 1
-
-def testtostereo(data):
-    if verbose:
-        print 'tostereo'
-    data2 = ''
-    for d in data[0]:
-        data2 = data2 + d + d
-    if audioop.tostereo(data[0], 1, 1, 1) <> data2:
-        return 0
-    return 1
-
-def testfindfactor(data):
-    if verbose:
-        print 'findfactor'
-    if audioop.findfactor(data[1], data[1]) <> 1.0:
-        return 0
-    return 1
-
-def testfindfit(data):
-    if verbose:
-        print 'findfit'
-    if audioop.findfit(data[1], data[1]) <> (0, 1.0):
-        return 0
-    return 1
-
-def testfindmax(data):
-    if verbose:
-        print 'findmax'
-    if audioop.findmax(data[1], 1) <> 2:
-        return 0
-    return 1
-
-def testgetsample(data):
-    if verbose:
-        print 'getsample'
-    for i in range(3):
-        if audioop.getsample(data[0], 1, i) <> i or \
-                  audioop.getsample(data[1], 2, i) <> i or \
-                  audioop.getsample(data[2], 4, i) <> i:
-            return 0
-    return 1
-
-def testone(name, data):
-    try:
-        func = eval('test'+name)
-    except NameError:
-        print 'No test found for audioop.'+name+'()'
-        return
-    try:
-        rv = func(data)
-    except 'xx':
-        print 'Test FAILED for audioop.'+name+'() (with an exception)'
-        return
-    if not rv:
-        print 'Test FAILED for audioop.'+name+'()'
-
-def testall():
-    data = [gendata1(), gendata2(), gendata4()]
-    names = dir(audioop)
-    # We know there is a routine 'add'
-    routines = []
-    for n in names:
-        if type(eval('audioop.'+n)) == type(audioop.add):
-            routines.append(n)
-    for n in routines:
-        testone(n, data)
-testall()
diff --git a/Lib/dos-8x3/test_aug.py b/Lib/dos-8x3/test_aug.py
deleted file mode 100644
index a01195e..0000000
--- a/Lib/dos-8x3/test_aug.py
+++ /dev/null
@@ -1,232 +0,0 @@
-
-# Augmented assignment test.
-
-x = 2
-x += 1
-x *= 2
-x **= 2
-x -= 8
-x /= 2
-x %= 12
-x &= 2
-x |= 5
-x ^= 1
-
-print x
-
-x = [2]
-x[0] += 1
-x[0] *= 2
-x[0] **= 2
-x[0] -= 8
-x[0] /= 2
-x[0] %= 12
-x[0] &= 2
-x[0] |= 5
-x[0] ^= 1
-
-print x
-
-x = {0: 2}
-x[0] += 1
-x[0] *= 2
-x[0] **= 2
-x[0] -= 8
-x[0] /= 2
-x[0] %= 12
-x[0] &= 2
-x[0] |= 5
-x[0] ^= 1
-
-print x[0]
-
-x = [1,2]
-x += [3,4]
-x *= 2
-
-print x
-
-x = [1, 2, 3]
-y = x
-x[1:2] *= 2
-y[1:2] += [1]
-
-print x
-print x is y
-
-class aug_test:
-	def __init__(self, value):
-		self.val = value
-	def __radd__(self, val):
-		return self.val + val
-	def __add__(self, val):
-		return aug_test(self.val + val)
-
-
-class aug_test2(aug_test):
-	def __iadd__(self, val):
-		self.val = self.val + val
-		return self
-
-class aug_test3(aug_test):
-	def __iadd__(self, val):
-		return aug_test3(self.val + val)
-
-x = aug_test(1)
-y = x
-x += 10
-
-print isinstance(x, aug_test)
-print y is not x 
-print x.val
-
-x = aug_test2(2)
-y = x
-x += 10
-
-print y is x
-print x.val
-
-x = aug_test3(3)
-y = x
-x += 10
-
-print isinstance(x, aug_test3)
-print y is not x
-print x.val
-
-class testall:
-
-	def __add__(self, val):
-		print "__add__ called"
-	def __radd__(self, val):
-		print "__radd__ called"
-	def __iadd__(self, val):
-		print "__iadd__ called"
-		return self
-
-	def __sub__(self, val):
-		print "__sub__ called"
-	def __rsub__(self, val):
-		print "__rsub__ called"
-	def __isub__(self, val):
-		print "__isub__ called"
-		return self
-
-	def __mul__(self, val):
-		print "__mul__ called"
-	def __rmul__(self, val):
-		print "__rmul__ called"
-	def __imul__(self, val):
-		print "__imul__ called"
-		return self
-
-	def __div__(self, val):
-		print "__div__ called"
-	def __rdiv__(self, val):
-		print "__rdiv__ called"
-	def __idiv__(self, val):
-		print "__idiv__ called"
-		return self
-
-	def __mod__(self, val):
-		print "__mod__ called"
-	def __rmod__(self, val):
-		print "__rmod__ called"
-	def __imod__(self, val):
-		print "__imod__ called"
-		return self
-
-	def __pow__(self, val):
-		print "__pow__ called"
-	def __rpow__(self, val):
-		print "__rpow__ called"
-	def __ipow__(self, val):
-		print "__ipow__ called"
-		return self
-
-	def __or__(self, val):
-		print "__or__ called"
-	def __ror__(self, val):
-		print "__ror__ called"
-	def __ior__(self, val):
-		print "__ior__ called"
-		return self
-
-	def __and__(self, val):
-		print "__and__ called"
-	def __rand__(self, val):
-		print "__rand__ called"
-	def __iand__(self, val):
-		print "__iand__ called"
-		return self
-
-	def __xor__(self, val):
-		print "__xor__ called"
-	def __rxor__(self, val):
-		print "__rxor__ called"
-	def __ixor__(self, val):
-		print "__ixor__ called"
-		return self
-
-	def __rshift__(self, val):
-		print "__rshift__ called"
-	def __rrshift__(self, val):
-		print "__rrshift__ called"
-	def __irshift__(self, val):
-		print "__irshift__ called"
-		return self
-
-	def __lshift__(self, val):
-		print "__lshift__ called"
-	def __rlshift__(self, val):
-		print "__rlshift__ called"
-	def __ilshift__(self, val):
-		print "__ilshift__ called"
-		return self
-
-x = testall()
-x + 1
-1 + x
-x += 1
-
-x - 1
-1 - x
-x -= 1
-
-x * 1
-1 * x
-x *= 1
-
-x / 1
-1 / x
-x /= 1
-
-x % 1
-1 % x
-x %= 1
-
-x ** 1
-1 ** x
-x **= 1
-
-x | 1
-1 | x
-x |= 1
-
-x & 1
-1 & x
-x &= 1
-
-x ^ 1
-1 ^ x
-x ^= 1
-
-x >> 1
-1 >> x
-x >>= 1
-
-x << 1
-1 << x
-x <<= 1
-
diff --git a/Lib/dos-8x3/test_bin.py b/Lib/dos-8x3/test_bin.py
deleted file mode 100644
index 52f817b..0000000
--- a/Lib/dos-8x3/test_bin.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""Test the binascii C module."""
-
-from test_support import verbose
-import binascii
-
-# Show module doc string
-print binascii.__doc__
-
-# Show module exceptions
-print binascii.Error
-print binascii.Incomplete
-
-# Check presence and display doc strings of all functions
-funcs = []
-for suffix in "base64", "hqx", "uu":
-    prefixes = ["a2b_", "b2a_"]
-    if suffix == "hqx":
-        prefixes.extend(["crc_", "rlecode_", "rledecode_"])
-    for prefix in prefixes:
-        name = prefix + suffix
-        funcs.append(getattr(binascii, name))
-for func in funcs:
-    print "%-15s: %s" % (func.__name__, func.__doc__)
-
-# Create binary test data
-testdata = "The quick brown fox jumps over the lazy dog.\r\n"
-for i in range(256):
-    # Be slow so we don't depend on other modules
-    testdata = testdata + chr(i)
-testdata = testdata + "\r\nHello world.\n"
-
-# Test base64 with valid data
-print "base64 test"
-MAX_BASE64 = 57
-lines = []
-for i in range(0, len(testdata), MAX_BASE64):
-    b = testdata[i:i+MAX_BASE64]
-    a = binascii.b2a_base64(b)
-    lines.append(a)
-    print a,
-res = ""
-for line in lines:
-    b = binascii.a2b_base64(line)
-    res = res + b
-assert res == testdata
-
-# Test base64 with random invalid characters sprinkled throughout
-# (This requires a new version of binascii.)
-fillers = ""
-valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/"
-for i in range(256):
-    c = chr(i)
-    if c not in valid:
-        fillers = fillers + c
-def addnoise(line):
-    noise = fillers
-    ratio = len(line) / len(noise)
-    res = ""
-    while line and noise:
-        if len(line) / len(noise) > ratio:
-            c, line = line[0], line[1:]
-        else:
-            c, noise = noise[0], noise[1:]
-        res = res + c
-    return res + noise + line
-res = ""
-for line in map(addnoise, lines):
-    b = binascii.a2b_base64(line)
-    res = res + b
-assert res == testdata
-
-# Test uu
-print "uu test"
-MAX_UU = 45
-lines = []
-for i in range(0, len(testdata), MAX_UU):
-    b = testdata[i:i+MAX_UU]
-    a = binascii.b2a_uu(b)
-    lines.append(a)
-    print a,
-res = ""
-for line in lines:
-    b = binascii.a2b_uu(line)
-    res = res + b
-assert res == testdata
-
-# Test crc32()
-crc = binascii.crc32("Test the CRC-32 of")
-crc = binascii.crc32(" this string.", crc)
-if crc != 1571220330:
-    print "binascii.crc32() failed."
-
-# The hqx test is in test_binhex.py
-
-# test hexlification
-s = '{s\005\000\000\000worldi\002\000\000\000s\005\000\000\000helloi\001\000\000\0000'
-t = binascii.b2a_hex(s)
-u = binascii.a2b_hex(t)
-if s <> u:
-    print 'binascii hexlification failed'
-try:
-    binascii.a2b_hex(t[:-1])
-except TypeError:
-    pass
-else:
-    print 'expected TypeError not raised'
-try:
-    binascii.a2b_hex(t[:-1] + 'q')
-except TypeError:
-    pass
-else:
-    print 'expected TypeError not raised'
diff --git a/Lib/dos-8x3/test_bsd.py b/Lib/dos-8x3/test_bsd.py
deleted file mode 100644
index e5780ea..0000000
--- a/Lib/dos-8x3/test_bsd.py
+++ /dev/null
@@ -1,74 +0,0 @@
-#! /usr/bin/env python
-"""Test script for the bsddb C module
-   Roger E. Masse
-"""
-
-import os
-import bsddb
-import tempfile
-from test_support import verbose
-
-def test(openmethod, what):
-
-    if verbose:
-        print '\nTesting: ', what
-        
-    fname = tempfile.mktemp()
-    f = openmethod(fname, 'c')
-    if verbose:
-        print 'creation...'
-    f['0'] = ''
-    f['a'] = 'Guido'
-    f['b'] = 'van'
-    f['c'] = 'Rossum'
-    f['d'] = 'invented'
-    f['f'] = 'Python'
-    if verbose:
-        print '%s %s %s' % (f['a'], f['b'], f['c'])
-
-    if what == 'BTree' :
-        if verbose:
-            print 'key ordering...'
-        f.set_location(f.first()[0])
-        while 1:
-            try:
-                rec = f.next()
-            except KeyError:
-                if rec <> f.last():
-                    print 'Error, last <> last!'
-                f.previous()
-                break
-            if verbose:
-                print rec
-        if not f.has_key('a'):
-            print 'Error, missing key!'
-
-    f.sync()
-    f.close()
-    if verbose:
-        print 'modification...'
-    f = openmethod(fname, 'w')
-    f['d'] = 'discovered'
-
-    if verbose:
-        print 'access...'
-    for key in f.keys():
-        word = f[key]
-        if verbose:
-            print word
-
-    f.close()
-    try:
-        os.remove(fname)
-    except os.error:
-        pass
-
-types = [(bsddb.btopen, 'BTree'),
-         (bsddb.hashopen, 'Hash Table'),
-         # (bsddb.rnopen,'Record Numbers'), 'put' for RECNO for bsddb 1.85
-         #                                   appears broken... at least on
-         #                                   Solaris Intel - rmasse 1/97
-         ]
-
-for type in types:
-    test(type[0], type[1])
diff --git a/Lib/dos-8x3/test_bui.py b/Lib/dos-8x3/test_bui.py
deleted file mode 100755
index 33fef8d..0000000
--- a/Lib/dos-8x3/test_bui.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# Python test set -- part 4, built-in functions
-
-from test_support import *
-
-print '4. Built-in functions'
-
-print 'test_b1'
-unload('test_b1')
-import test_b1
-
-print 'test_b2'
-unload('test_b2')
-import test_b2
diff --git a/Lib/dos-8x3/test_cfg.py b/Lib/dos-8x3/test_cfg.py
deleted file mode 100644
index 4bdbc69..0000000
--- a/Lib/dos-8x3/test_cfg.py
+++ /dev/null
@@ -1,141 +0,0 @@
-import ConfigParser
-import StringIO
-
-def basic(src):
-    print
-    print "Testing basic accessors..."
-    cf = ConfigParser.ConfigParser()
-    sio = StringIO.StringIO(src)
-    cf.readfp(sio)
-    L = cf.sections()
-    L.sort()
-    print L
-    for s in L:
-        print "%s: %s" % (s, cf.options(s))
-
-    # The use of spaces in the section names serves as a regression test for
-    # SourceForge bug #115357.
-    # http://sourceforge.net/bugs/?func=detailbug&group_id=5470&bug_id=115357
-    print `cf.get('Foo Bar', 'foo', raw=1)`
-    print `cf.get('Spacey Bar', 'foo', raw=1)`
-    print `cf.get('Commented Bar', 'foo', raw=1)`
-
-    if '__name__' in cf.options("Foo Bar"):
-        print '__name__ "option" should not be exposed by the API!'
-    else:
-        print '__name__ "option" properly hidden by the API.'
-
-def interpolation(src):
-    print
-    print "Testing value interpolation..."
-    cf = ConfigParser.ConfigParser({"getname": "%(__name__)s"})
-    sio = StringIO.StringIO(src)
-    cf.readfp(sio)
-    print `cf.get("Foo", "getname")`
-    print `cf.get("Foo", "bar")`
-    print `cf.get("Foo", "bar9")`
-    print `cf.get("Foo", "bar10")`
-    expect_get_error(cf, ConfigParser.InterpolationDepthError, "Foo", "bar11")
-
-def parse_errors():
-    print
-    print "Testing for parsing errors..."
-    expect_parse_error(ConfigParser.ParsingError,
-                       """[Foo]\n  extra-spaces: splat\n""")
-    expect_parse_error(ConfigParser.ParsingError,
-                       """[Foo]\n  extra-spaces= splat\n""")
-    expect_parse_error(ConfigParser.ParsingError,
-                       """[Foo]\noption-without-value\n""")
-    expect_parse_error(ConfigParser.ParsingError,
-                       """[Foo]\n:value-without-option-name\n""")
-    expect_parse_error(ConfigParser.ParsingError,
-                       """[Foo]\n=value-without-option-name\n""")
-    expect_parse_error(ConfigParser.MissingSectionHeaderError,
-                       """No Section!\n""")
-
-def query_errors():
-    print
-    print "Testing query interface..."
-    cf = ConfigParser.ConfigParser()
-    print cf.sections()
-    print "Has section 'Foo'?", cf.has_section("Foo")
-    try:
-        cf.options("Foo")
-    except ConfigParser.NoSectionError, e:
-        print "Caught expected NoSectionError:", e
-    else:
-        print "Failed to catch expected NoSectionError from options()"
-    try:
-        cf.set("foo", "bar", "value")
-    except ConfigParser.NoSectionError, e:
-        print "Caught expected NoSectionError:", e
-    else:
-        print "Failed to catch expected NoSectionError from set()"
-    expect_get_error(cf, ConfigParser.NoSectionError, "foo", "bar")
-    cf.add_section("foo")
-    expect_get_error(cf, ConfigParser.NoOptionError, "foo", "bar")
-
-def weird_errors():
-    print
-    print "Testing miscellaneous error conditions..."
-    cf = ConfigParser.ConfigParser()
-    cf.add_section("Foo")
-    try:
-        cf.add_section("Foo")
-    except ConfigParser.DuplicateSectionError, e:
-        print "Caught expected DuplicateSectionError:", e
-    else:
-        print "Failed to catch expected DuplicateSectionError"
-
-def expect_get_error(cf, exctype, section, option, raw=0):
-    try:
-        cf.get(section, option, raw=raw)
-    except exctype, e:
-        print "Caught expected", exctype.__name__, ":"
-        print e
-    else:
-        print "Failed to catch expected", exctype.__name__
-
-def expect_parse_error(exctype, src):
-    cf = ConfigParser.ConfigParser()
-    sio = StringIO.StringIO(src)
-    try:
-        cf.readfp(sio)
-    except exctype, e:
-        print "Caught expected exception:", e
-    else:
-        print "Failed to catch expected", exctype.__name__
-
-basic(r"""
-[Foo Bar]
-foo=bar
-[Spacey Bar]
-foo = bar 
-[Commented Bar]
-foo: bar ; comment
-""")
-interpolation(r"""
-[Foo]
-bar=something %(with1)s interpolation (1 step)
-bar9=something %(with9)s lots of interpolation (9 steps)
-bar10=something %(with10)s lots of interpolation (10 steps)
-bar11=something %(with11)s lots of interpolation (11 steps)
-with11=%(with10)s
-with10=%(with9)s
-with9=%(with8)s
-with8=%(with7)s
-with7=%(with6)s
-with6=%(with5)s
-with5=%(with4)s
-with4=%(with3)s
-with3=%(with2)s
-with2=%(with1)s
-with1=with
-
-[Mutual Recursion]
-foo=%(bar)s
-bar=%(foo)s
-""")
-parse_errors()
-query_errors()
-weird_errors()
diff --git a/Lib/dos-8x3/test_cla.py b/Lib/dos-8x3/test_cla.py
deleted file mode 100644
index 43c1d3b..0000000
--- a/Lib/dos-8x3/test_cla.py
+++ /dev/null
@@ -1,219 +0,0 @@
-"Test the functionality of Python classes implementing operators."
-
-
-testmeths = [
-
-# Binary operations
-    "add",
-    "radd",
-    "sub",
-    "rsub",
-    "mul",
-    "rmul",
-    "div",
-    "rdiv",
-    "mod",
-    "rmod",
-    "divmod",
-    "rdivmod",
-    "pow",
-    "rpow",
-    "rshift",
-    "rrshift",
-    "lshift",
-    "rlshift",
-    "and",
-    "rand",
-    "or",
-    "ror",
-    "xor",
-    "rxor",
-
-# List/dict operations
-    "contains",
-    "getitem",
-    "getslice",
-    "setitem",
-    "setslice",
-    "delitem",
-    "delslice",
-
-# Unary operations
-    "neg",
-    "pos",
-    "abs",
-    "int",
-    "long",
-    "float",
-    "oct",
-    "hex",
-
-# generic operations
-    "init",
-    "del",
-    ]
-
-# These need to return something other than None
-#    "coerce",
-#    "hash",
-#    "str",
-#    "repr",
-
-# These are separate because they can influence the test of other methods.
-#    "getattr",
-#    "setattr",
-#    "delattr",
-
-class AllTests:
-    def __coerce__(self, *args):
-        print "__coerce__:", args
-        return (self,) + args 
-
-    def __hash__(self, *args):
-        print "__hash__:", args
-        return hash(id(self))
-
-    def __str__(self, *args):
-        print "__str__:", args
-        return "AllTests"
-
-    def __repr__(self, *args):
-        print "__repr__:", args
-        return "AllTests"
-
-    def __cmp__(self, *args):
-        print "__cmp__:", args
-        return 0
-
-for method in testmeths:
-    exec("""def __%(method)s__(self, *args):
-                print "__%(method)s__:", args
-"""%locals(), AllTests.__dict__);
-
-# this also tests __init__ of course.
-testme = AllTests()
-
-# Binary operations
-
-testme + 1
-1 + testme
-
-testme - 1
-1 - testme
-
-testme * 1
-1 * testme
-
-testme / 1
-1 / testme
-
-testme % 1
-1 % testme
-
-divmod(testme,1)
-divmod(1, testme)
-
-testme ** 1
-1 ** testme
-
-testme >> 1
-1 >> testme
-
-testme << 1
-1 << testme
-
-testme & 1
-1 & testme
-
-testme | 1
-1 | testme
-
-testme ^ 1
-1 ^ testme
-
-
-# List/dict operations
-
-1 in testme
-
-testme[1]
-testme[1] = 1
-del testme[1]
-
-testme[:42]
-testme[:42] = "The Answer"
-del testme[:42]
-
-testme[2:1024:10]
-testme[2:1024:10] = "A lot"
-del testme[2:1024:10]
-
-testme[:42, ..., :24:, 24, 100]
-testme[:42, ..., :24:, 24, 100] = "Strange"
-del testme[:42, ..., :24:, 24, 100]
-
-
-# Now remove the slice hooks to see if converting normal slices to slice
-# object works.
-
-del AllTests.__getslice__
-del AllTests.__setslice__
-del AllTests.__delslice__
-
-testme[:42]
-testme[:42] = "The Answer"
-del testme[:42]
-
-
-# Unary operations
-
--testme
-+testme
-abs(testme)
-int(testme)
-long(testme)
-float(testme)
-oct(testme)
-hex(testme)
-
-
-# And the rest...
-
-hash(testme)
-repr(testme)
-str(testme)
-
-testme == 1
-testme < 1
-testme > 1
-testme <> 1
-testme != 1
-1 == testme
-1 < testme
-1 > testme
-1 <> testme
-1 != testme
-
-# This test has to be last (duh.)
-
-del testme
-
-
-# Interfering tests
-
-class ExtraTests:
-	def __getattr__(self, *args):
-		print "__getattr__:", args
-		return "SomeVal"
-
-	def __setattr__(self, *args):
-		print "__setattr__:", args
-
-	def __delattr__(self, *args):
-		print "__delattr__:", args
-
-testme = ExtraTests()
-testme.spam
-testme.eggs = "spam, spam, spam and ham"
-del testme.cardinal
-
diff --git a/Lib/dos-8x3/test_cma.py b/Lib/dos-8x3/test_cma.py
deleted file mode 100644
index 509c739..0000000
--- a/Lib/dos-8x3/test_cma.py
+++ /dev/null
@@ -1,35 +0,0 @@
-#! /usr/bin/env python
-""" Simple test script for cmathmodule.c
-    Roger E. Masse
-"""
-import cmath
-from test_support import verbose
-
-testdict = {'acos' : 1.0,
-            'acosh' : 1.0,
-            'asin' : 1.0,
-            'asinh' : 1.0,
-            'atan' : 0.2,
-            'atanh' : 0.2,
-            'cos' : 1.0,
-            'cosh' : 1.0,
-            'exp' : 1.0,
-            'log' : 1.0,
-            'log10' : 1.0,
-            'sin' : 1.0,
-            'sinh' : 1.0,
-            'sqrt' : 1.0,
-            'tan' : 1.0,
-            'tanh' : 1.0}
-
-for func in testdict.keys():
-    f = getattr(cmath, func)
-    r = f(testdict[func])
-    if verbose:
-        print 'Calling %s(%f) = %f' % (func, testdict[func], abs(r))
-
-p = cmath.pi
-e = cmath.e
-if verbose:
-    print 'PI = ', abs(p)
-    print 'E = ', abs(e)
diff --git a/Lib/dos-8x3/test_com.py b/Lib/dos-8x3/test_com.py
deleted file mode 100644
index 8905864..0000000
--- a/Lib/dos-8x3/test_com.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from test_support import verbose, TestFailed
-
-if verbose:
-    print 'Running test on duplicate arguments'
-
-try:
-    exec('def f(a, a): pass')
-    raise TestFailed, "duplicate arguments"
-except SyntaxError:
-    pass
-
-try:
-    exec('def f(a = 0, a = 1): pass')
-    raise TestFailed, "duplicate keyword arguments"
-except SyntaxError:
-    pass
diff --git a/Lib/dos-8x3/test_con.py b/Lib/dos-8x3/test_con.py
deleted file mode 100644
index 355135f..0000000
--- a/Lib/dos-8x3/test_con.py
+++ /dev/null
@@ -1,168 +0,0 @@
-from test_support import TestFailed
-
-class base_set:
-
-	def __init__(self, el):
-		self.el = el
-
-class set(base_set):
-
-	def __contains__(self, el):
-		return self.el == el
-
-class seq(base_set):
-
-	def __getitem__(self, n):
-		return [self.el][n]
-
-def check(ok, *args):
-    if not ok:
-        raise TestFailed, " ".join(map(str, args))
-
-a = base_set(1)
-b = set(1)
-c = seq(1)
-
-check(1 in b, "1 not in set(1)")
-check(0 not in b, "0 in set(1)")
-check(1 in c, "1 not in seq(1)")
-check(0 not in c, "0 in seq(1)")
-
-try:
-	1 in a
-	check(0, "in base_set did not raise error")
-except AttributeError:
-	pass
-
-try:
-	1 not in a
-	check(0, "not in base_set did not raise error")
-except AttributeError:
-	pass
-
-# Test char in string
-
-check('c' in 'abc', "'c' not in 'abc'")
-check('d' not in 'abc', "'d' in 'abc'")
-
-try:
-	'' in 'abc'
-	check(0, "'' in 'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	'ab' in 'abc'
-	check(0, "'ab' in 'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	None in 'abc'
-	check(0, "None in 'abc' did not raise error")
-except TypeError:
-	pass
-
-# Test char in Unicode
-
-check('c' in u'abc', "'c' not in u'abc'")
-check('d' not in u'abc', "'d' in u'abc'")
-
-try:
-	'' in u'abc'
-	check(0, "'' in u'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	'ab' in u'abc'
-	check(0, "'ab' in u'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	None in u'abc'
-	check(0, "None in u'abc' did not raise error")
-except TypeError:
-	pass
-
-# Test Unicode char in Unicode
-
-check(u'c' in u'abc', "u'c' not in u'abc'")
-check(u'd' not in u'abc', "u'd' in u'abc'")
-
-try:
-	u'' in u'abc'
-	check(0, "u'' in u'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	u'ab' in u'abc'
-	check(0, "u'ab' in u'abc' did not raise error")
-except TypeError:
-	pass
-
-# Test Unicode char in string
-
-check(u'c' in 'abc', "u'c' not in 'abc'")
-check(u'd' not in 'abc', "u'd' in 'abc'")
-
-try:
-	u'' in 'abc'
-	check(0, "u'' in 'abc' did not raise error")
-except TypeError:
-	pass
-
-try:
-	u'ab' in 'abc'
-	check(0, "u'ab' in 'abc' did not raise error")
-except TypeError:
-	pass
-
-# A collection of tests on builtin sequence types
-a = range(10)
-for i in a:
-	check(i in a, "%s not in %s" % (`i`, `a`))
-check(16 not in a, "16 not in %s" % `a`)
-check(a not in a, "%s not in %s" % (`a`, `a`))
-
-a = tuple(a)
-for i in a:
-	check(i in a, "%s not in %s" % (`i`, `a`))
-check(16 not in a, "16 not in %s" % `a`)
-check(a not in a, "%s not in %s" % (`a`, `a`))
-
-class Deviant1:
-	"""Behaves strangely when compared
-
-	This class is designed to make sure that the contains code
-	works when the list is modified during the check.
-	"""
-
-	aList = range(15)
-	
-	def __cmp__(self, other):
-		if other == 12:
-			self.aList.remove(12)
-			self.aList.remove(13)
-			self.aList.remove(14)
-		return 1
-
-check(Deviant1() not in Deviant1.aList, "Deviant1 failed")
-
-class Deviant2:
-	"""Behaves strangely when compared
-
-	This class raises an exception during comparison.  That in
-	turn causes the comparison to fail with a TypeError.
-	"""
-
-	def __cmp__(self, other):
-		if other == 4:
-			raise RuntimeError, "gotcha"
-
-try:
-	check(Deviant2() not in a, "oops")
-except TypeError:
-	pass
diff --git a/Lib/dos-8x3/test_coo.py b/Lib/dos-8x3/test_coo.py
deleted file mode 100644
index a275cf2..0000000
--- a/Lib/dos-8x3/test_coo.py
+++ /dev/null
@@ -1,40 +0,0 @@
-
-# Simple test suite for Cookie.py
-
-import Cookie
-
-# Currently this only tests SimpleCookie
-
-cases = [
-    ('chips=ahoy; vienna=finger', {'chips':'ahoy', 'vienna':'finger'}),
-    ('keebler="E=mc2; L=\\"Loves\\"; fudge=\\012;";',
-     {'keebler' : 'E=mc2; L="Loves"; fudge=\012;'}),    
-    ] 
-
-for data, dict in cases:
-    C = Cookie.SimpleCookie() ; C.load(data)
-    print repr(C)
-    print str(C)
-    for k, v in dict.items():
-        print ' ', k, repr( C[k].value ), repr(v)
-        assert C[k].value == v
-        print C[k]
-
-C = Cookie.SimpleCookie()
-C.load('Customer="WILE_E_COYOTE"; Version=1; Path=/acme')
-
-assert C['Customer'].value == 'WILE_E_COYOTE'
-assert C['Customer']['version'] == '1'
-assert C['Customer']['path'] == '/acme'
-
-print C.output(['path'])
-print C.js_output()
-print C.js_output(['path'])
-
-# Try cookie with quoted meta-data
-C = Cookie.SimpleCookie()
-C.load('Customer="WILE_E_COYOTE"; Version="1"; Path="/acme"')
-assert C['Customer'].value == 'WILE_E_COYOTE'
-assert C['Customer']['version'] == '1'
-assert C['Customer']['path'] == '/acme'
-
diff --git a/Lib/dos-8x3/test_cop.py b/Lib/dos-8x3/test_cop.py
deleted file mode 100644
index 0324d92..0000000
--- a/Lib/dos-8x3/test_cop.py
+++ /dev/null
@@ -1,35 +0,0 @@
-import copy_reg
-
-class C:
-    pass
-
-
-try:
-    copy_reg.pickle(C, None, None)
-except TypeError, e:
-    print "Caught expected TypeError:"
-    print e
-else:
-    print "Failed to catch expected TypeError when registering a class type."
-
-
-print
-try:
-    copy_reg.pickle(type(1), "not a callable")
-except TypeError, e:
-    print "Caught expected TypeError:"
-    print e
-else:
-    print "Failed to catch TypeError " \
-          "when registering a non-callable reduction function."
-
-
-print
-try:
-    copy_reg.pickle(type(1), int, "not a callable")
-except TypeError, e:
-    print "Caught expected TypeError:"
-    print e
-else:
-    print "Failed to catch TypeError " \
-          "when registering a non-callable constructor."
diff --git a/Lib/dos-8x3/test_cpi.py b/Lib/dos-8x3/test_cpi.py
deleted file mode 100644
index f2aa0fe..0000000
--- a/Lib/dos-8x3/test_cpi.py
+++ /dev/null
@@ -1,5 +0,0 @@
-# Test the cPickle module
-
-import cPickle
-import test_pickle
-test_pickle.dotest(cPickle)
diff --git a/Lib/dos-8x3/test_cry.py b/Lib/dos-8x3/test_cry.py
deleted file mode 100644
index 0685c95..0000000
--- a/Lib/dos-8x3/test_cry.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#! /usr/bin/env python
-"""Simple test script for cryptmodule.c
-   Roger E. Masse
-"""
-
-from test_support import verbose    
-import crypt
-
-c = crypt.crypt('mypassword', 'ab')
-if verbose:
-    print 'Test encryption: ', c
diff --git a/Lib/dos-8x3/test_dos.py b/Lib/dos-8x3/test_dos.py
deleted file mode 100644
index ffa3ef7..0000000
--- a/Lib/dos-8x3/test_dos.py
+++ /dev/null
@@ -1,49 +0,0 @@
-import dospath
-import string
-import os
-
-errors = 0
-
-def tester(fn, wantResult):
-	fn = string.replace(fn, "\\", "\\\\")
-	gotResult = eval(fn)
-	if wantResult != gotResult:
-		print "error!"
-		print "evaluated: " + str(fn)
-		print "should be: " + str(wantResult)
-		print " returned: " + str(gotResult)
-		print ""
-		global errors
-		errors = errors + 1
-
-tester('dospath.splitdrive("c:\\foo\\bar")', ('c:', '\\foo\\bar'))
-tester('dospath.splitdrive("c:/foo/bar")', ('c:', '/foo/bar'))
-
-tester('dospath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
-tester('dospath.split("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint\\foo', 'bar'))
-
-tester('dospath.split("c:\\")', ('c:\\', ''))
-tester('dospath.split("\\\\conky\\mountpoint\\")', ('\\\\conky\\mountpoint', ''))
-
-tester('dospath.split("c:/")', ('c:/', ''))
-tester('dospath.split("//conky/mountpoint/")', ('//conky/mountpoint', ''))
-
-tester('dospath.isabs("c:\\")', 1)
-tester('dospath.isabs("\\\\conky\\mountpoint\\")', 1)
-tester('dospath.isabs("\\foo")', 1)
-tester('dospath.isabs("\\foo\\bar")', 1)
-
-tester('dospath.abspath("C:\\")', "C:\\")
-
-tester('dospath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])',
-       "/home/swen")
-tester('dospath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])',
-       "\\home\\swen\\")
-tester('dospath.commonprefix(["/home/swen/spam", "/home/swen/spam"])',
-       "/home/swen/spam")
-
-if errors:
-	print str(errors) + " errors."
-else:
-	print "No errors.  Thank your lucky stars."
-
diff --git a/Lib/dos-8x3/test_err.py b/Lib/dos-8x3/test_err.py
deleted file mode 100644
index cb1e729..0000000
--- a/Lib/dos-8x3/test_err.py
+++ /dev/null
@@ -1,49 +0,0 @@
-#! /usr/bin/env python
-"""Test the errno module
-   Roger E. Masse
-"""
-
-import errno
-from test_support import verbose
-
-errors = ['E2BIG', 'EACCES', 'EADDRINUSE', 'EADDRNOTAVAIL', 'EADV',
-          'EAFNOSUPPORT', 'EAGAIN', 'EALREADY', 'EBADE', 'EBADF',
-          'EBADFD', 'EBADMSG', 'EBADR', 'EBADRQC', 'EBADSLT',
-          'EBFONT', 'EBUSY', 'ECHILD', 'ECHRNG', 'ECOMM',
-          'ECONNABORTED', 'ECONNREFUSED', 'ECONNRESET',
-          'EDEADLK', 'EDEADLOCK', 'EDESTADDRREQ', 'EDOM',
-          'EDQUOT', 'EEXIST', 'EFAULT', 'EFBIG', 'EHOSTDOWN',
-          'EHOSTUNREACH', 'EIDRM', 'EILSEQ', 'EINPROGRESS',
-          'EINTR', 'EINVAL', 'EIO', 'EISCONN', 'EISDIR',
-          'EL2HLT', 'EL2NSYNC', 'EL3HLT', 'EL3RST', 'ELIBACC',
-          'ELIBBAD', 'ELIBEXEC', 'ELIBMAX', 'ELIBSCN', 'ELNRNG',
-          'ELOOP', 'EMFILE', 'EMLINK', 'EMSGSIZE', 'EMULTIHOP',
-          'ENAMETOOLONG', 'ENETDOWN', 'ENETRESET', 'ENETUNREACH',
-          'ENFILE', 'ENOANO', 'ENOBUFS', 'ENOCSI', 'ENODATA',
-          'ENODEV', 'ENOENT', 'ENOEXEC', 'ENOLCK', 'ENOLINK',
-          'ENOMEM', 'ENOMSG', 'ENONET', 'ENOPKG', 'ENOPROTOOPT',
-          'ENOSPC', 'ENOSR', 'ENOSTR', 'ENOSYS', 'ENOTBLK',
-          'ENOTCONN', 'ENOTDIR', 'ENOTEMPTY', 'ENOTOBACCO', 'ENOTSOCK',
-          'ENOTTY', 'ENOTUNIQ', 'ENXIO', 'EOPNOTSUPP',
-          'EOVERFLOW', 'EPERM', 'EPFNOSUPPORT', 'EPIPE',
-          'EPROTO', 'EPROTONOSUPPORT', 'EPROTOTYPE',
-          'ERANGE', 'EREMCHG', 'EREMOTE', 'ERESTART',
-          'EROFS', 'ESHUTDOWN', 'ESOCKTNOSUPPORT', 'ESPIPE',
-          'ESRCH', 'ESRMNT', 'ESTALE', 'ESTRPIPE', 'ETIME',
-          'ETIMEDOUT', 'ETOOMANYREFS', 'ETXTBSY', 'EUNATCH',
-          'EUSERS', 'EWOULDBLOCK', 'EXDEV', 'EXFULL']
-
-#
-# This is is a wee bit bogus since the module only conditionally adds
-# errno constants if they have been defined by errno.h  However, this
-# test seems to work on SGI, Sparc & intel Solaris, and linux.
-#
-for error in errors:
-    try:
-        a = getattr(errno, error)
-    except AttributeError:
-        if verbose:
-            print '%s: not found' % error
-    else:
-        if verbose:
-            print '%s: %d' % (error, a)
diff --git a/Lib/dos-8x3/test_exc.py b/Lib/dos-8x3/test_exc.py
deleted file mode 100755
index 076f470..0000000
--- a/Lib/dos-8x3/test_exc.py
+++ /dev/null
@@ -1,170 +0,0 @@
-# Python test set -- part 5, built-in exceptions
-
-from test_support import *
-from types import ClassType
-
-print '5. Built-in exceptions'
-# XXX This is not really enough, each *operation* should be tested!
-
-def test_raise_catch(exc):
-    try:
-        raise exc, "spam"
-    except exc, err:
-        buf = str(err)
-    try:
-        raise exc("spam")
-    except exc, err:
-        buf = str(err)
-    print buf
-
-def r(thing):
-    test_raise_catch(thing)
-    if isinstance(thing, ClassType):
-        print thing.__name__
-    else:
-        print thing
-
-r(AttributeError)
-import sys
-try: x = sys.undefined_attribute
-except AttributeError: pass
-
-r(EOFError)
-import sys
-fp = open(TESTFN, 'w')
-fp.close()
-fp = open(TESTFN, 'r')
-savestdin = sys.stdin
-try:
-        try:
-                sys.stdin = fp
-                x = raw_input()
-        except EOFError:
-                pass
-finally:
-        sys.stdin = savestdin
-        fp.close()
-
-r(IOError)
-try: open('this file does not exist', 'r')
-except IOError: pass
-
-r(ImportError)
-try: import undefined_module
-except ImportError: pass
-
-r(IndexError)
-x = []
-try: a = x[10]
-except IndexError: pass
-
-r(KeyError)
-x = {}
-try: a = x['key']
-except KeyError: pass
-
-r(KeyboardInterrupt)
-print '(not testable in a script)'
-
-r(MemoryError)
-print '(not safe to test)'
-
-r(NameError)
-try: x = undefined_variable
-except NameError: pass
-
-r(OverflowError)
-x = 1
-try:
-        while 1: x = x+x
-except OverflowError: pass
-
-r(RuntimeError)
-print '(not used any more?)'
-
-r(SyntaxError)
-try: exec '/\n'
-except SyntaxError: pass
-
-# make sure the right exception message is raised for each of these
-# code fragments:
-
-def ckmsg(src, msg):
-    try:
-        compile(src, '<fragment>', 'exec')
-    except SyntaxError, e:
-        print e.msg
-        if e.msg == msg:
-            print "ok"
-        else:
-            print "expected:", msg
-    else:
-        print "failed to get expected SyntaxError"
-
-s = '''\
-while 1:
-    try:
-        continue
-    except:
-        pass
-'''
-ckmsg(s, "'continue' not supported inside 'try' clause")
-s = '''\
-while 1:
-    try:
-        continue
-    finally:
-        pass
-'''
-ckmsg(s, "'continue' not supported inside 'try' clause")
-s = '''\
-while 1:
-    try:
-        if 1:
-            continue
-    finally:
-        pass
-'''
-ckmsg(s, "'continue' not supported inside 'try' clause")
-s = '''\
-try:
-    continue
-except:
-    pass
-'''
-ckmsg(s, "'continue' not properly in loop")
-ckmsg("continue\n", "'continue' not properly in loop")
-
-r(IndentationError)
-
-r(TabError)
-# can only be tested under -tt, and is the only test for -tt
-#try: compile("try:\n\t1/0\n    \t1/0\nfinally:\n pass\n", '<string>', 'exec')
-#except TabError: pass
-#else: raise TestFailed
-
-r(SystemError)
-print '(hard to reproduce)'
-
-r(SystemExit)
-import sys
-try: sys.exit(0)
-except SystemExit: pass
-
-r(TypeError)
-try: [] + ()
-except TypeError: pass
-
-r(ValueError)
-try: x = chr(10000)
-except ValueError: pass
-
-r(ZeroDivisionError)
-try: x = 1/0
-except ZeroDivisionError: pass
-
-r(Exception)
-try: x = 1/0
-except Exception, e: pass
-
-unlink(TESTFN)
diff --git a/Lib/dos-8x3/test_ext.py b/Lib/dos-8x3/test_ext.py
deleted file mode 100644
index de2312b..0000000
--- a/Lib/dos-8x3/test_ext.py
+++ /dev/null
@@ -1,146 +0,0 @@
-from UserList import UserList
-
-def f(*a, **k):
-    print a, k
-
-def g(x, *y, **z):
-    print x, y, z
-
-def h(j=1, a=2, h=3):
-    print j, a, h
-
-f()
-f(1)
-f(1, 2)
-f(1, 2, 3)
-
-f(1, 2, 3, *(4, 5))
-f(1, 2, 3, *[4, 5])
-f(1, 2, 3, *UserList([4, 5]))
-f(1, 2, 3, **{'a':4, 'b':5})
-f(1, 2, 3, *(4, 5), **{'a':6, 'b':7})
-f(1, 2, 3, x=4, y=5, *(6, 7), **{'a':8, 'b':9})
-
-try:
-    g()
-except TypeError, err:
-    print "TypeError:", err
-else:
-    print "should raise TypeError: not enough arguments; expected 1, got 0"
-    
-try:
-    g(*())
-except TypeError, err:
-    print "TypeError:", err
-else:
-    print "should raise TypeError: not enough arguments; expected 1, got 0"
-    
-try:
-    g(*(), **{})
-except TypeError, err:
-    print "TypeError:", err
-else:
-    print "should raise TypeError: not enough arguments; expected 1, got 0"
-    
-g(1)
-g(1, 2)
-g(1, 2, 3)
-g(1, 2, 3, *(4, 5))
-class Nothing: pass
-try:
-    g(*Nothing())
-except AttributeError, attr:
-    pass
-else:
-    print "should raise AttributeError: __len__"
-
-class Nothing:
-    def __len__(self):
-        return 5
-try:
-    g(*Nothing())
-except AttributeError, attr:
-    pass
-else:
-    print "should raise AttributeError: __getitem__"
-    
-class Nothing:
-    def __len__(self):
-        return 5
-    def __getitem__(self, i):
-        if i < 3:
-            return i
-        else:
-            raise IndexError, i
-g(*Nothing())
-
-# make sure the function call doesn't stomp on the dictionary?
-d = {'a': 1, 'b': 2, 'c': 3}
-d2 = d.copy()
-assert d == d2
-g(1, d=4, **d)
-print d
-print d2
-assert d == d2, "function call modified dictionary"
-
-# what about willful misconduct?
-def saboteur(**kw):
-    kw['x'] = locals() # yields a cyclic kw
-    return kw
-d = {}
-kw = saboteur(a=1, **d)
-assert d == {}
-# break the cycle
-del kw['x']
-        
-try:
-    g(1, 2, 3, **{'x':4, 'y':5})
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: keyword parameter redefined"
-    
-try:
-    g(1, 2, 3, a=4, b=5, *(6, 7), **{'a':8, 'b':9})
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: keyword parameter redefined"
-
-try:
-    f(**{1:2})
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: keywords must be strings"
-
-try:
-    h(**{'e': 2})
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: unexpected keyword argument: e"
-
-try:
-    h(*h)
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: * argument must be a tuple"
-
-try:
-    h(**h)
-except TypeError, err:
-    print err
-else:
-    print "should raise TypeError: ** argument must be a dictionary"
-
-def f2(*a, **b):
-    return a, b
-
-d = {}
-for i in range(512):
-    key = 'k%d' % i
-    d[key] = i
-a, b = f2(1, *(2, 3), **d)
-print len(a), len(b), b == d
diff --git a/Lib/dos-8x3/test_fcn.py b/Lib/dos-8x3/test_fcn.py
deleted file mode 100644
index a1da0dd..0000000
--- a/Lib/dos-8x3/test_fcn.py
+++ /dev/null
@@ -1,36 +0,0 @@
-#! /usr/bin/env python
-"""Test program for the fcntl C module.
-   Roger E. Masse
-"""
-import struct
-import fcntl
-import FCNTL
-import os, sys
-from test_support import verbose
-
-filename = '/tmp/delete-me'
-
-# the example from the library docs
-f = open(filename,'w')
-rv = fcntl.fcntl(f.fileno(), FCNTL.F_SETFL, os.O_NONBLOCK)
-if verbose:
-    print 'Status from fnctl with O_NONBLOCK: ', rv
-    
-if sys.platform in ('netbsd1', 'Darwin1.2',
-                    'freebsd2', 'freebsd3', 'freebsd4', 'freebsd5',
-                    'bsdos2', 'bsdos3', 'bsdos4',
-                    'openbsd', 'openbsd2'):
-    lockdata = struct.pack('lxxxxlxxxxlhh', 0, 0, 0, FCNTL.F_WRLCK, 0)
-elif sys.platform in ['aix3', 'aix4', 'hp-uxB']:
-    lockdata = struct.pack('hhlllii', FCNTL.F_WRLCK, 0, 0, 0, 0, 0, 0)
-else:
-    lockdata = struct.pack('hhllhh', FCNTL.F_WRLCK, 0, 0, 0, 0, 0)
-if verbose:
-    print 'struct.pack: ', `lockdata`
-    
-rv = fcntl.fcntl(f.fileno(), FCNTL.F_SETLKW, lockdata)
-if verbose:
-    print 'String from fcntl with F_SETLKW: ', `rv`
-
-f.close()
-os.unlink(filename)
diff --git a/Lib/dos-8x3/test_fil.py b/Lib/dos-8x3/test_fil.py
deleted file mode 100644
index 4ad5c95..0000000
--- a/Lib/dos-8x3/test_fil.py
+++ /dev/null
@@ -1,45 +0,0 @@
-from test_support import TESTFN
-from UserList import UserList
-
-# verify writelines with instance sequence
-l = UserList(['1', '2'])
-f = open(TESTFN, 'wb')
-f.writelines(l)
-f.close()
-f = open(TESTFN, 'rb')
-buf = f.read()
-f.close()
-assert buf == '12'
-
-# verify writelines with integers
-f = open(TESTFN, 'wb')
-try:
-    f.writelines([1, 2, 3])
-except TypeError:
-    pass
-else:
-    print "writelines accepted sequence of integers"
-f.close()
-
-# verify writelines with integers in UserList
-f = open(TESTFN, 'wb')
-l = UserList([1,2,3])
-try:
-    f.writelines(l)
-except TypeError:
-    pass
-else:
-    print "writelines accepted sequence of integers"
-f.close()
-
-# verify writelines with non-string object
-class NonString: pass
-
-f = open(TESTFN, 'wb')
-try:
-    f.writelines([NonString(), NonString()])
-except TypeError:
-    pass
-else:
-    print "writelines accepted sequence of non-string objects"
-f.close()
diff --git a/Lib/dos-8x3/test_for.py b/Lib/dos-8x3/test_for.py
deleted file mode 100644
index 4fd2662..0000000
--- a/Lib/dos-8x3/test_for.py
+++ /dev/null
@@ -1,78 +0,0 @@
-"""This test checks for correct fork() behavior.
-
-We want fork1() semantics -- only the forking thread survives in the
-child after a fork().
-
-On some systems (e.g. Solaris without posix threads) we find that all
-active threads survive in the child after a fork(); this is an error.
-
-On BeOS, you CANNOT mix threads and fork(), the behaviour is undefined.
-That's OK, fork() is a grotesque hack anyway. ;-) [cjh]
-
-"""
-
-import os, sys, time, thread
-from test_support import TestSkipped
-
-try:
-    if os.uname()[0] == "BeOS":
-        raise TestSkipped, "can't mix os.fork with threads on BeOS"
-except AttributeError:
-    pass
-
-try:
-    os.fork
-except AttributeError:
-    raise TestSkipped, "os.fork not defined -- skipping test_fork1"
-
-LONGSLEEP = 2
-
-SHORTSLEEP = 0.5
-
-NUM_THREADS = 4
-
-alive = {}
-
-stop = 0
-
-def f(id):
-    while not stop:
-        alive[id] = os.getpid()
-        try:
-            time.sleep(SHORTSLEEP)
-        except IOError:
-            pass
-
-def main():
-    for i in range(NUM_THREADS):
-        thread.start_new(f, (i,))
-
-    time.sleep(LONGSLEEP)
-
-    a = alive.keys()
-    a.sort()
-    assert a == range(NUM_THREADS)
-
-    prefork_lives = alive.copy()
-
-    cpid = os.fork()
-
-    if cpid == 0:
-        # Child
-        time.sleep(LONGSLEEP)
-        n = 0
-        for key in alive.keys():
-            if alive[key] != prefork_lives[key]:
-                n = n+1
-        os._exit(n)
-    else:
-        # Parent
-        spid, status = os.waitpid(cpid, 0)
-        assert spid == cpid
-        assert status == 0, "cause = %d, exit = %d" % (status&0xff, status>>8)
-        global stop
-        # Tell threads to die
-        stop = 1
-        time.sleep(2*SHORTSLEEP) # Wait for threads to die
-
-main()
diff --git a/Lib/dos-8x3/test_gdb.py b/Lib/dos-8x3/test_gdb.py
deleted file mode 100644
index 030218e..0000000
--- a/Lib/dos-8x3/test_gdb.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#! /usr/bin/env python
-"""Test script for the gdbm module
-   Roger E. Masse
-"""
-    
-import gdbm
-from gdbm import error
-from test_support import verbose, TestFailed
-
-filename= '/tmp/delete_me'
-
-g = gdbm.open(filename, 'c')
-g['a'] = 'b'
-g['12345678910'] = '019237410982340912840198242'
-a = g.keys()
-if verbose:
-    print 'Test gdbm file keys: ', a
-    
-g.has_key('a')
-g.close()
-try:
-    g['a']
-except error:
-    pass
-else:
-    raise TestFailed, "expected gdbm.error accessing closed database"
-g = gdbm.open(filename, 'r')
-g.close()
-g = gdbm.open(filename, 'rw')
-g.close()
-g = gdbm.open(filename, 'w')
-g.close()
-g = gdbm.open(filename, 'n')
-g.close()
-
-try:
-    import os
-    os.unlink(filename)
-except:
-    pass
diff --git a/Lib/dos-8x3/test_get.py b/Lib/dos-8x3/test_get.py
deleted file mode 100644
index 3927c1c..0000000
--- a/Lib/dos-8x3/test_get.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# test_getopt.py
-# David Goodger <dgoodger@bigfoot.com> 2000-08-19
-
-import getopt
-from getopt import GetoptError
-from test_support import verbose
-
-def expectException(teststr, expected, failure=AssertionError):
-    """Executes a statement passed in teststr, and raises an exception
-       (failure) if the expected exception is *not* raised."""
-    try:
-        exec teststr
-    except expected:
-        pass
-    else:
-        raise failure
-
-if verbose:
-    print 'Running tests on getopt.short_has_arg'
-assert getopt.short_has_arg('a', 'a:')
-assert not getopt.short_has_arg('a', 'a')
-expectException("tmp = getopt.short_has_arg('a', 'b')", GetoptError)
-expectException("tmp = getopt.short_has_arg('a', '')", GetoptError)
-
-if verbose:
-    print 'Running tests on getopt.long_has_args'
-has_arg, option = getopt.long_has_args('abc', ['abc='])
-assert has_arg
-assert option == 'abc'
-has_arg, option = getopt.long_has_args('abc', ['abc'])
-assert not has_arg
-assert option == 'abc'
-has_arg, option = getopt.long_has_args('abc', ['abcd'])
-assert not has_arg
-assert option == 'abcd'
-expectException("has_arg, option = getopt.long_has_args('abc', ['def'])",
-                GetoptError)
-expectException("has_arg, option = getopt.long_has_args('abc', [])",
-                GetoptError)
-expectException("has_arg, option = " + \
-                     "getopt.long_has_args('abc', ['abcd','abcde'])",
-                GetoptError)
-
-if verbose:
-    print 'Running tests on getopt.do_shorts'
-opts, args = getopt.do_shorts([], 'a', 'a', [])
-assert opts == [('-a', '')]
-assert args == []
-opts, args = getopt.do_shorts([], 'a1', 'a:', [])
-assert opts == [('-a', '1')]
-assert args == []
-#opts, args = getopt.do_shorts([], 'a=1', 'a:', [])
-#assert opts == [('-a', '1')]
-#assert args == []
-opts, args = getopt.do_shorts([], 'a', 'a:', ['1'])
-assert opts == [('-a', '1')]
-assert args == []
-opts, args = getopt.do_shorts([], 'a', 'a:', ['1', '2'])
-assert opts == [('-a', '1')]
-assert args == ['2']
-expectException("opts, args = getopt.do_shorts([], 'a1', 'a', [])",
-                GetoptError)
-expectException("opts, args = getopt.do_shorts([], 'a', 'a:', [])",
-                GetoptError)
-
-if verbose:
-    print 'Running tests on getopt.do_longs'
-opts, args = getopt.do_longs([], 'abc', ['abc'], [])
-assert opts == [('--abc', '')]
-assert args == []
-opts, args = getopt.do_longs([], 'abc=1', ['abc='], [])
-assert opts == [('--abc', '1')]
-assert args == []
-opts, args = getopt.do_longs([], 'abc=1', ['abcd='], [])
-assert opts == [('--abcd', '1')]
-assert args == []
-expectException("opts, args = getopt.do_longs([], 'abc=1', ['abc'], [])",
-                GetoptError)
-expectException("opts, args = getopt.do_longs([], 'abc', ['abc='], [])",
-                GetoptError)
-
-# note: the empty string between '-a' and '--beta' is significant:
-# it simulates an empty string option argument ('-a ""') on the command line.
-cmdline = ['-a', '1', '-b', '--alpha=2', '--beta', '-a', '3', '-a', '',
-           '--beta', 'arg1', 'arg2']
-
-if verbose:
-    print 'Running tests on getopt.getopt'
-opts, args = getopt.getopt(cmdline, 'a:b', ['alpha=', 'beta'])
-assert opts == [('-a', '1'), ('-b', ''), ('--alpha', '2'), ('--beta', ''),
-                ('-a', '3'), ('-a', ''), ('--beta', '')]
-# Note ambiguity of ('-b', '') and ('-a', '') above. This must be
-# accounted for in the code that calls getopt().
-assert args == ['arg1', 'arg2']
-
-expectException(
-    "opts, args = getopt.getopt(cmdline, 'a:b', ['alpha', 'beta'])",
-    GetoptError)
-
-if verbose:
-    print "Module getopt: tests completed successfully."
diff --git a/Lib/dos-8x3/test_gra.py b/Lib/dos-8x3/test_gra.py
deleted file mode 100755
index 0ca5a46..0000000
--- a/Lib/dos-8x3/test_gra.py
+++ /dev/null
@@ -1,649 +0,0 @@
-# Python test set -- part 1, grammar.
-# This just tests whether the parser accepts them all.
-
-from test_support import *
-
-print '1. Parser'
-
-print '1.1 Tokens'
-
-print '1.1.1 Backslashes'
-
-# Backslash means line continuation:
-x = 1 \
-+ 1
-if x <> 2: raise TestFailed, 'backslash for line continuation'
-
-# Backslash does not means continuation in comments :\
-x = 0
-if x <> 0: raise TestFailed, 'backslash ending comment'
-
-print '1.1.2 Numeric literals'
-
-print '1.1.2.1 Plain integers'
-if 0xff <> 255: raise TestFailed, 'hex int'
-if 0377 <> 255: raise TestFailed, 'octal int'
-if  2147483647   != 017777777777: raise TestFailed, 'large positive int'
-try:
-	from sys import maxint
-except ImportError:
-	maxint = 2147483647
-if maxint == 2147483647:
-	if -2147483647-1 != 020000000000: raise TestFailed, 'max negative int'
-	# XXX -2147483648
-	if 037777777777 != -1: raise TestFailed, 'oct -1'
-	if 0xffffffff != -1: raise TestFailed, 'hex -1'
-	for s in '2147483648', '040000000000', '0x100000000':
-		try:
-			x = eval(s)
-		except OverflowError:
-			continue
-##		raise TestFailed, \
-		print \
-			  'No OverflowError on huge integer literal ' + `s`
-elif eval('maxint == 9223372036854775807'):
-	if eval('-9223372036854775807-1 != 01000000000000000000000'):
-		raise TestFailed, 'max negative int'
-	if eval('01777777777777777777777') != -1: raise TestFailed, 'oct -1'
-	if eval('0xffffffffffffffff') != -1: raise TestFailed, 'hex -1'
-	for s in '9223372036854775808', '02000000000000000000000', \
-		 '0x10000000000000000':
-		try:
-			x = eval(s)
-		except OverflowError:
-			continue
-		raise TestFailed, \
-			  'No OverflowError on huge integer literal ' + `s`
-else:
-	print 'Weird maxint value', maxint
-
-print '1.1.2.2 Long integers'
-x = 0L
-x = 0l
-x = 0xffffffffffffffffL
-x = 0xffffffffffffffffl
-x = 077777777777777777L
-x = 077777777777777777l
-x = 123456789012345678901234567890L
-x = 123456789012345678901234567890l
-
-print '1.1.2.3 Floating point'
-x = 3.14
-x = 314.
-x = 0.314
-# XXX x = 000.314
-x = .314
-x = 3e14
-x = 3E14
-x = 3e-14
-x = 3e+14
-x = 3.e14
-x = .3e14
-x = 3.1e4
-
-print '1.1.3 String literals'
-
-##def assert(s):
-##	if not s: raise TestFailed, 'see traceback'
-
-x = ''; y = ""; assert(len(x) == 0 and x == y)
-x = '\''; y = "'"; assert(len(x) == 1 and x == y and ord(x) == 39)
-x = '"'; y = "\""; assert(len(x) == 1 and x == y and ord(x) == 34)
-x = "doesn't \"shrink\" does it"
-y = 'doesn\'t "shrink" does it'
-assert(len(x) == 24 and x == y)
-x = "does \"shrink\" doesn't it"
-y = 'does "shrink" doesn\'t it'
-assert(len(x) == 24 and x == y)
-x = """
-The "quick"
-brown fox
-jumps over
-the 'lazy' dog.
-"""
-y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n'
-assert(x == y)
-y = '''
-The "quick"
-brown fox
-jumps over
-the 'lazy' dog.
-'''; assert(x == y)
-y = "\n\
-The \"quick\"\n\
-brown fox\n\
-jumps over\n\
-the 'lazy' dog.\n\
-"; assert(x == y)
-y = '\n\
-The \"quick\"\n\
-brown fox\n\
-jumps over\n\
-the \'lazy\' dog.\n\
-'; assert(x == y)
-
-
-print '1.2 Grammar'
-
-print 'single_input' # NEWLINE | simple_stmt | compound_stmt NEWLINE
-# XXX can't test in a script -- this rule is only used when interactive
-
-print 'file_input' # (NEWLINE | stmt)* ENDMARKER
-# Being tested as this very moment this very module
-
-print 'expr_input' # testlist NEWLINE
-# XXX Hard to test -- used only in calls to input()
-
-print 'eval_input' # testlist ENDMARKER
-x = eval('1, 0 or 1')
-
-print 'funcdef'
-### 'def' NAME parameters ':' suite
-### parameters: '(' [varargslist] ')'
-### varargslist: (fpdef ['=' test] ',')* ('*' NAME [',' ('**'|'*' '*') NAME]
-###            | ('**'|'*' '*') NAME)
-###            | fpdef ['=' test] (',' fpdef ['=' test])* [',']  
-### fpdef: NAME | '(' fplist ')'
-### fplist: fpdef (',' fpdef)* [',']
-### arglist: (argument ',')* (argument | *' test [',' '**' test] | '**' test)
-### argument: [test '='] test	# Really [keyword '='] test
-def f1(): pass
-f1()
-f1(*())
-f1(*(), **{})
-def f2(one_argument): pass
-def f3(two, arguments): pass
-def f4(two, (compound, (argument, list))): pass
-def a1(one_arg,): pass
-def a2(two, args,): pass
-def v0(*rest): pass
-def v1(a, *rest): pass
-def v2(a, b, *rest): pass
-def v3(a, (b, c), *rest): pass
-def d01(a=1): pass
-d01()
-d01(1)
-d01(*(1,))
-d01(**{'a':2})
-def d11(a, b=1): pass
-d11(1)
-d11(1, 2)
-d11(1, **{'b':2})
-def d21(a, b, c=1): pass
-d21(1, 2)
-d21(1, 2, 3)
-d21(*(1, 2, 3))
-d21(1, *(2, 3))
-d21(1, 2, *(3,))
-d21(1, 2, **{'c':3})
-def d02(a=1, b=2): pass
-d02()
-d02(1)
-d02(1, 2)
-d02(*(1, 2))
-d02(1, *(2,))
-d02(1, **{'b':2})
-d02(**{'a': 1, 'b': 2})
-def d12(a, b=1, c=2): pass
-d12(1)
-d12(1, 2)
-d12(1, 2, 3)
-def d22(a, b, c=1, d=2): pass
-d22(1, 2)
-d22(1, 2, 3)
-d22(1, 2, 3, 4)
-def d01v(a=1, *rest): pass
-d01v()
-d01v(1)
-d01v(1, 2)
-d01v(*(1, 2, 3, 4))
-d01v(*(1,))
-d01v(**{'a':2})
-def d11v(a, b=1, *rest): pass
-d11v(1)
-d11v(1, 2)
-d11v(1, 2, 3)
-def d21v(a, b, c=1, *rest): pass
-d21v(1, 2)
-d21v(1, 2, 3)
-d21v(1, 2, 3, 4)
-d21v(*(1, 2, 3, 4))
-d21v(1, 2, **{'c': 3})
-def d02v(a=1, b=2, *rest): pass
-d02v()
-d02v(1)
-d02v(1, 2)
-d02v(1, 2, 3)
-d02v(1, *(2, 3, 4))
-d02v(**{'a': 1, 'b': 2})
-def d12v(a, b=1, c=2, *rest): pass
-d12v(1)
-d12v(1, 2)
-d12v(1, 2, 3)
-d12v(1, 2, 3, 4)
-d12v(*(1, 2, 3, 4))
-d12v(1, 2, *(3, 4, 5))
-d12v(1, *(2,), **{'c': 3})
-def d22v(a, b, c=1, d=2, *rest): pass
-d22v(1, 2)
-d22v(1, 2, 3)
-d22v(1, 2, 3, 4)
-d22v(1, 2, 3, 4, 5)
-d22v(*(1, 2, 3, 4))
-d22v(1, 2, *(3, 4, 5))
-d22v(1, *(2, 3), **{'d': 4})
-
-### stmt: simple_stmt | compound_stmt
-# Tested below
-
-### simple_stmt: small_stmt (';' small_stmt)* [';']
-print 'simple_stmt'
-x = 1; pass; del x
-
-### small_stmt: expr_stmt | print_stmt  | pass_stmt | del_stmt | flow_stmt | import_stmt | global_stmt | access_stmt | exec_stmt
-# Tested below
-
-print 'expr_stmt' # (exprlist '=')* exprlist
-1
-1, 2, 3
-x = 1
-x = 1, 2, 3
-x = y = z = 1, 2, 3
-x, y, z = 1, 2, 3
-abc = a, b, c = x, y, z = xyz = 1, 2, (3, 4)
-# NB these variables are deleted below
-
-print 'print_stmt' # 'print' (test ',')* [test]
-print 1, 2, 3
-print 1, 2, 3,
-print
-print 0 or 1, 0 or 1,
-print 0 or 1
-
-print 'extended print_stmt' # 'print' '>>' test ','
-import sys
-print >> sys.stdout, 1, 2, 3
-print >> sys.stdout, 1, 2, 3,
-print >> sys.stdout
-print >> sys.stdout, 0 or 1, 0 or 1,
-print >> sys.stdout, 0 or 1
-
-# test printing to an instance
-class Gulp:
-	def write(self, msg): pass
-
-gulp = Gulp()
-print >> gulp, 1, 2, 3
-print >> gulp, 1, 2, 3,
-print >> gulp
-print >> gulp, 0 or 1, 0 or 1,
-print >> gulp, 0 or 1
-
-# test print >> None
-def driver():
-	oldstdout = sys.stdout
-	sys.stdout = Gulp()
-	try:
-		tellme(Gulp())
-		tellme()
-	finally:
-		sys.stdout = oldstdout
-
-# we should see this once
-def tellme(file=sys.stdout):
-	print >> file, 'hello world'
-
-driver()
-
-# we should not see this at all
-def tellme(file=None):
-	print >> file, 'goodbye universe'
-
-driver()
-
-# syntax errors
-def check_syntax(statement):
-	try:
-		compile(statement, '<string>', 'exec')
-	except SyntaxError:
-		pass
-	else:
-		print 'Missing SyntaxError: "%s"' % statement
-check_syntax('print ,')
-check_syntax('print >> x,')
-
-print 'del_stmt' # 'del' exprlist
-del abc
-del x, y, (z, xyz)
-
-print 'pass_stmt' # 'pass'
-pass
-
-print 'flow_stmt' # break_stmt | continue_stmt | return_stmt | raise_stmt
-# Tested below
-
-print 'break_stmt' # 'break'
-while 1: break
-
-print 'continue_stmt' # 'continue'
-i = 1
-while i: i = 0; continue
-
-print 'return_stmt' # 'return' [testlist]
-def g1(): return
-def g2(): return 1
-g1()
-x = g2()
-
-print 'raise_stmt' # 'raise' test [',' test]
-try: raise RuntimeError, 'just testing'
-except RuntimeError: pass
-try: raise KeyboardInterrupt
-except KeyboardInterrupt: pass
-
-print 'import_stmt' # 'import' NAME (',' NAME)* | 'from' NAME 'import' ('*' | NAME (',' NAME)*)
-import sys
-import time, sys
-from time import time
-from sys import *
-from sys import path, argv
-
-print 'global_stmt' # 'global' NAME (',' NAME)*
-def f():
-	global a
-	global a, b
-	global one, two, three, four, five, six, seven, eight, nine, ten
-
-print 'exec_stmt' # 'exec' expr ['in' expr [',' expr]]
-def f():
-	z = None
-	del z
-	exec 'z=1+1\n'
-	if z <> 2: raise TestFailed, 'exec \'z=1+1\'\\n'
-	del z
-	exec 'z=1+1'
-	if z <> 2: raise TestFailed, 'exec \'z=1+1\''
-	z = None
-	del z
-	exec u'z=1+1\n'
-	if z <> 2: raise TestFailed, 'exec u\'z=1+1\'\\n'
-	del z
-	exec u'z=1+1'
-	if z <> 2: raise TestFailed, 'exec u\'z=1+1\''
-f()
-g = {}
-exec 'z = 1' in g
-if g.has_key('__builtins__'): del g['__builtins__']
-if g <> {'z': 1}: raise TestFailed, 'exec \'z = 1\' in g'
-g = {}
-l = {}
-exec 'global a; a = 1; b = 2' in g, l
-if g.has_key('__builtins__'): del g['__builtins__']
-if l.has_key('__builtins__'): del l['__builtins__']
-if (g, l) <> ({'a':1}, {'b':2}): raise TestFailed, 'exec ... in g, l'
-
-
-### compound_stmt: if_stmt | while_stmt | for_stmt | try_stmt | funcdef | classdef
-# Tested below
-
-print 'if_stmt' # 'if' test ':' suite ('elif' test ':' suite)* ['else' ':' suite]
-if 1: pass
-if 1: pass
-else: pass
-if 0: pass
-elif 0: pass
-if 0: pass
-elif 0: pass
-elif 0: pass
-elif 0: pass
-else: pass
-
-print 'while_stmt' # 'while' test ':' suite ['else' ':' suite]
-while 0: pass
-while 0: pass
-else: pass
-
-print 'for_stmt' # 'for' exprlist 'in' exprlist ':' suite ['else' ':' suite]
-for i in 1, 2, 3: pass
-for i, j, k in (): pass
-else: pass
-class Squares:
-	def __init__(self, max):
-		self.max = max
-		self.sofar = []
-	def __len__(self): return len(self.sofar)
-	def __getitem__(self, i):
-		if not 0 <= i < self.max: raise IndexError
-		n = len(self.sofar)
-		while n <= i:
-			self.sofar.append(n*n)
-			n = n+1
-		return self.sofar[i]
-n = 0
-for x in Squares(10): n = n+x
-if n != 285: raise TestFailed, 'for over growing sequence'
-
-print 'try_stmt'
-### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
-###         | 'try' ':' suite 'finally' ':' suite
-### except_clause: 'except' [expr [',' expr]]
-try:
-	1/0
-except ZeroDivisionError:
-	pass
-else:
-	pass
-try: 1/0
-except EOFError: pass
-except TypeError, msg: pass
-except RuntimeError, msg: pass
-except: pass
-else: pass
-try: 1/0
-except (EOFError, TypeError, ZeroDivisionError): pass
-try: 1/0
-except (EOFError, TypeError, ZeroDivisionError), msg: pass
-try: pass
-finally: pass
-
-print 'suite' # simple_stmt | NEWLINE INDENT NEWLINE* (stmt NEWLINE*)+ DEDENT
-if 1: pass
-if 1:
-	pass
-if 1:
-	#
-	#
-	#
-	pass
-	pass
-	#
-	pass
-	#
-
-print 'test'
-### and_test ('or' and_test)*
-### and_test: not_test ('and' not_test)*
-### not_test: 'not' not_test | comparison
-if not 1: pass
-if 1 and 1: pass
-if 1 or 1: pass
-if not not not 1: pass
-if not 1 and 1 and 1: pass
-if 1 and 1 or 1 and 1 and 1 or not 1 and 1: pass
-
-print 'comparison'
-### comparison: expr (comp_op expr)*
-### comp_op: '<'|'>'|'=='|'>='|'<='|'<>'|'!='|'in'|'not' 'in'|'is'|'is' 'not'
-if 1: pass
-x = (1 == 1)
-if 1 == 1: pass
-if 1 != 1: pass
-if 1 <> 1: pass
-if 1 < 1: pass
-if 1 > 1: pass
-if 1 <= 1: pass
-if 1 >= 1: pass
-if 1 is 1: pass
-if 1 is not 1: pass
-if 1 in (): pass
-if 1 not in (): pass
-if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass
-
-print 'binary mask ops'
-x = 1 & 1
-x = 1 ^ 1
-x = 1 | 1
-
-print 'shift ops'
-x = 1 << 1
-x = 1 >> 1
-x = 1 << 1 >> 1
-
-print 'additive ops'
-x = 1
-x = 1 + 1
-x = 1 - 1 - 1
-x = 1 - 1 + 1 - 1 + 1
-
-print 'multiplicative ops'
-x = 1 * 1
-x = 1 / 1
-x = 1 % 1
-x = 1 / 1 * 1 % 1
-
-print 'unary ops'
-x = +1
-x = -1
-x = ~1
-x = ~1 ^ 1 & 1 | 1 & 1 ^ -1
-x = -1*1/1 + 1*1 - ---1*1
-
-print 'selectors'
-### trailer: '(' [testlist] ')' | '[' subscript ']' | '.' NAME
-### subscript: expr | [expr] ':' [expr]
-f1()
-f2(1)
-f2(1,)
-f3(1, 2)
-f3(1, 2,)
-f4(1, (2, (3, 4)))
-v0()
-v0(1)
-v0(1,)
-v0(1,2)
-v0(1,2,3,4,5,6,7,8,9,0)
-v1(1)
-v1(1,)
-v1(1,2)
-v1(1,2,3)
-v1(1,2,3,4,5,6,7,8,9,0)
-v2(1,2)
-v2(1,2,3)
-v2(1,2,3,4)
-v2(1,2,3,4,5,6,7,8,9,0)
-v3(1,(2,3))
-v3(1,(2,3),4)
-v3(1,(2,3),4,5,6,7,8,9,0)
-print
-import sys, time
-c = sys.path[0]
-x = time.time()
-x = sys.modules['time'].time()
-a = '01234'
-c = a[0]
-c = a[-1]
-s = a[0:5]
-s = a[:5]
-s = a[0:]
-s = a[:]
-s = a[-5:]
-s = a[:-1]
-s = a[-4:-3]
-
-print 'atoms'
-### atom: '(' [testlist] ')' | '[' [testlist] ']' | '{' [dictmaker] '}' | '`' testlist '`' | NAME | NUMBER | STRING
-### dictmaker: test ':' test (',' test ':' test)* [',']
-
-x = (1)
-x = (1 or 2 or 3)
-x = (1 or 2 or 3, 2, 3)
-
-x = []
-x = [1]
-x = [1 or 2 or 3]
-x = [1 or 2 or 3, 2, 3]
-x = []
-
-x = {}
-x = {'one': 1}
-x = {'one': 1,}
-x = {'one' or 'two': 1 or 2}
-x = {'one': 1, 'two': 2}
-x = {'one': 1, 'two': 2,}
-x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5, 'six': 6}
-
-x = `x`
-x = `1 or 2 or 3`
-x = x
-x = 'x'
-x = 123
-
-### exprlist: expr (',' expr)* [',']
-### testlist: test (',' test)* [',']
-# These have been exercised enough above
-
-print 'classdef' # 'class' NAME ['(' testlist ')'] ':' suite
-class B: pass
-class C1(B): pass
-class C2(B): pass
-class D(C1, C2, B): pass
-class C:
-	def meth1(self): pass
-	def meth2(self, arg): pass
-	def meth3(self, a1, a2): pass
-
-# list comprehension tests
-nums = [1, 2, 3, 4, 5]
-strs = ["Apple", "Banana", "Coconut"]
-spcs = ["  Apple", " Banana ", "Coco  nut  "]
-
-print [s.strip() for s in spcs]
-print [3 * x for x in nums]
-print [x for x in nums if x > 2]
-print [(i, s) for i in nums for s in strs]
-print [(i, s) for i in nums for s in [f for f in strs if "n" in f]]
-try:
-    eval("[i, s for i in nums for s in strs]")
-    print "FAIL: should have raised a SyntaxError!"
-except SyntaxError:
-    print "good: got a SyntaxError as expected"
-
-try:
-    eval("[x if y]")
-    print "FAIL: should have raised a SyntaxError!"
-except SyntaxError:
-        print "good: got a SyntaxError as expected"
-
-suppliers = [
-  (1, "Boeing"),
-  (2, "Ford"),
-  (3, "Macdonalds")
-]
-
-parts = [
-  (10, "Airliner"),
-  (20, "Engine"),
-  (30, "Cheeseburger")
-]
-
-suppart = [
-  (1, 10), (1, 20), (2, 20), (3, 30)
-]
-
-print [
-  (sname, pname)
-    for (sno, sname) in suppliers
-      for (pno, pname) in parts
-        for (sp_sno, sp_pno) in suppart
-          if sno == sp_sno and pno == sp_pno
-]
diff --git a/Lib/dos-8x3/test_gzi.py b/Lib/dos-8x3/test_gzi.py
deleted file mode 100644
index 2366d02..0000000
--- a/Lib/dos-8x3/test_gzi.py
+++ /dev/null
@@ -1,54 +0,0 @@
-
-import sys, os
-import gzip, tempfile
-
-filename = tempfile.mktemp()
-
-data1 = """  int length=DEFAULTALLOC, err = Z_OK;
-  PyObject *RetVal;
-  int flushmode = Z_FINISH;
-  unsigned long start_total_out;
-
-"""
-
-data2 = """/* zlibmodule.c -- gzip-compatible data compression */
-/* See http://www.cdrom.com/pub/infozip/zlib/ */
-/* See http://www.winimage.com/zLibDll for Windows */
-"""
-
-f = gzip.GzipFile(filename, 'wb') ; f.write(data1 * 50) ; f.close()
-
-f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
-assert d == data1*50
-
-# Append to the previous file
-f = gzip.GzipFile(filename, 'ab') ; f.write(data2 * 15) ; f.close()
-
-f = gzip.GzipFile(filename, 'rb') ; d = f.read() ; f.close()
-assert d == (data1*50) + (data2*15)
-
-# Try .readline() with varying line lengths
-
-f = gzip.GzipFile(filename, 'rb')
-line_length = 0
-while 1:
-    L = f.readline( line_length )
-    if L == "" and line_length != 0: break
-    assert len(L) <= line_length
-    line_length = (line_length + 1) % 50
-f.close()
-
-# Try .readlines() 
-
-f = gzip.GzipFile(filename, 'rb')
-L = f.readlines()
-f.close()
-
-f = gzip.GzipFile(filename, 'rb')
-while 1:
-    L = f.readlines(150)
-    if L == []: break    
-f.close()
-
-
-os.unlink( filename )
diff --git a/Lib/dos-8x3/test_has.py b/Lib/dos-8x3/test_has.py
deleted file mode 100644
index 51b4c33..0000000
--- a/Lib/dos-8x3/test_has.py
+++ /dev/null
@@ -1,26 +0,0 @@
-# test the invariant that
-#   iff a==b then hash(a)==hash(b)
-#
-
-import test_support
-
-
-def same_hash(*objlist):
-	# hash each object given an raise TestFailed if
-	# the hash values are not all the same
-	hashed = map(hash, objlist)
-	for h in hashed[1:]:
-		if h != hashed[0]:
-			raise TestFailed, "hashed values differ: %s" % `objlist`
-
-
-
-same_hash(1, 1L, 1.0, 1.0+0.0j)
-same_hash(int(1), long(1), float(1), complex(1))
-
-same_hash(long(1.23e300), float(1.23e300))
-
-same_hash(float(0.5), complex(0.5, 0.0))
-
-
-
diff --git a/Lib/dos-8x3/test_ima.py b/Lib/dos-8x3/test_ima.py
deleted file mode 100644
index 6b144c6..0000000
--- a/Lib/dos-8x3/test_ima.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#! /usr/bin/env python
-
-"""Test script for the imageop module.  This has the side
-   effect of partially testing the imgfile module as well.
-   Roger E. Masse
-"""
-
-from test_support import verbose, unlink
-
-import imageop, uu
-
-def main(use_rgbimg=1):
-
-    # Create binary test files
-    uu.decode(get_qualified_path('testrgb.uue'), 'test.rgb')
-
-    if use_rgbimg:
-        image, width, height = getrgbimage('test.rgb')
-    else:
-        image, width, height = getimage('test.rgb')
-        
-    # Return the selected part of image, which should by width by height
-    # in size and consist of pixels of psize bytes.
-    if verbose:
-        print 'crop'
-    newimage = imageop.crop (image, 4, width, height, 0, 0, 1, 1)
-
-    # Return image scaled to size newwidth by newheight. No interpolation
-    # is done, scaling is done by simple-minded pixel duplication or removal.
-    # Therefore, computer-generated images or dithered images will
-    # not look nice after scaling. 
-    if verbose:
-        print 'scale'
-    scaleimage = imageop.scale(image, 4, width, height, 1, 1)
-
-    # Run a vertical low-pass filter over an image. It does so by computing
-    # each destination pixel as the average of two vertically-aligned source
-    # pixels. The main use of this routine is to forestall excessive flicker
-    # if the image two vertically-aligned source pixels,  hence the name. 
-    if verbose:
-        print 'tovideo'
-    videoimage = imageop.tovideo (image, 4, width, height)
-
-    # Convert an rgb image to an 8 bit rgb
-    if verbose:
-        print 'rgb2rgb8'
-    greyimage = imageop.rgb2rgb8(image, width, height)
-
-    # Convert an 8 bit rgb image to a 24 bit rgb image
-    if verbose:
-        print 'rgb82rgb'
-    image = imageop.rgb82rgb(greyimage, width, height)
-    
-    # Convert an rgb image to an 8 bit greyscale image
-    if verbose:
-        print 'rgb2grey'
-    greyimage = imageop.rgb2grey(image, width, height)
-
-    # Convert an 8 bit greyscale image to a 24 bit rgb image
-    if verbose:
-        print 'grey2rgb'
-    image = imageop.grey2rgb(greyimage, width, height)
-    
-    # Convert a 8-bit deep greyscale image to a 1-bit deep image by
-    # thresholding all the pixels. The resulting image is tightly packed
-    # and is probably only useful as an argument to mono2grey. 
-    if verbose:
-        print 'grey2mono'
-    monoimage = imageop.grey2mono (greyimage, width, height, 0) 
-
-    # monoimage, width, height = getimage('monotest.rgb')
-    # Convert a 1-bit monochrome image to an 8 bit greyscale or color image.
-    # All pixels that are zero-valued on input get value p0 on output and
-    # all one-value input pixels get value p1 on output. To convert a
-    # monochrome  black-and-white image to greyscale pass the values 0 and
-    # 255 respectively.
-    if verbose:
-        print 'mono2grey'
-    greyimage = imageop.mono2grey (monoimage, width, height, 0, 255)
-
-    # Convert an 8-bit greyscale image to a 1-bit monochrome image using a
-    # (simple-minded) dithering algorithm.
-    if verbose:
-        print 'dither2mono'
-    monoimage = imageop.dither2mono (greyimage, width, height)
-
-    # Convert an 8-bit greyscale image to a 4-bit greyscale image without
-    # dithering. 
-    if verbose:
-        print 'grey2grey4'
-    grey4image = imageop.grey2grey4 (greyimage, width, height) 
-
-    # Convert an 8-bit greyscale image to a 2-bit greyscale image without
-    # dithering. 
-    if verbose:
-        print 'grey2grey2'
-    grey2image = imageop.grey2grey2 (greyimage, width, height) 
-
-    # Convert an 8-bit greyscale image to a 2-bit greyscale image with
-    # dithering. As for dither2mono, the dithering algorithm is currently
-    # very simple. 
-    if verbose:
-        print 'dither2grey2'
-    grey2image = imageop.dither2grey2 (greyimage, width, height) 
-
-    # Convert a 4-bit greyscale image to an 8-bit greyscale image. 
-    if verbose:
-        print 'grey42grey'
-    greyimage = imageop.grey42grey (grey4image, width, height) 
-
-    # Convert a 2-bit greyscale image to an 8-bit greyscale image. 
-    if verbose:
-        print 'grey22grey'
-    image = imageop.grey22grey (grey2image, width, height)
-
-    # Cleanup
-    unlink('test.rgb')
-
-def getrgbimage(name):
-    """return a tuple consisting of image (in 'imgfile' format but
-    using rgbimg instead) width and height"""
-
-    import rgbimg
-
-    try:
-        sizes = rgbimg.sizeofimage(name)
-    except rgbimg.error:
-        name = get_qualified_path(name)
-        sizes = rgbimg.sizeofimage(name)
-    if verbose:
-        print 'rgbimg opening test image: %s, sizes: %s' % (name, str(sizes))
-
-    image = rgbimg.longimagedata(name)
-    return (image, sizes[0], sizes[1])
-  
-def getimage(name):
-    """return a tuple consisting of
-       image (in 'imgfile' format) width and height
-    """
-
-    import imgfile
-  
-    try:
-        sizes = imgfile.getsizes(name)
-    except imgfile.error:
-        name = get_qualified_path(name)
-        sizes = imgfile.getsizes(name)
-    if verbose:
-        print 'imgfile opening test image: %s, sizes: %s' % (name, str(sizes))
-
-    image = imgfile.read(name)
-    return (image, sizes[0], sizes[1])
-
-def get_qualified_path(name):
-    """ return a more qualified path to name"""
-    import sys
-    import os
-    path = sys.path
-    try:
-        path = [os.path.dirname(__file__)] + path
-    except NameError:
-        pass
-    for dir in path:
-        fullname = os.path.join(dir, name)
-        if os.path.exists(fullname):
-            return fullname
-    return name
-
-# rgbimg (unlike imgfile) is portable to platforms other than SGI.
-# So we prefer to use it.
-main(use_rgbimg=1)
diff --git a/Lib/dos-8x3/test_img.py b/Lib/dos-8x3/test_img.py
deleted file mode 100644
index b074320..0000000
--- a/Lib/dos-8x3/test_img.py
+++ /dev/null
@@ -1,117 +0,0 @@
-#! /usr/bin/env python
-
-"""Simple test script for imgfile.c
-   Roger E. Masse
-"""
-
-from test_support import verbose, unlink, findfile
-
-import imgfile, uu, os
-
-    
-def main():
-
-    uu.decode(findfile('testrgb.uue'), 'test.rgb')
-    uu.decode(findfile('greyrgb.uue'), 'greytest.rgb')
-
-    # Test a 3 byte color image
-    testimage('test.rgb')
-    
-    # Test a 1 byte greyscale image
-    testimage('greytest.rgb')
-
-    unlink('test.rgb')
-    unlink('greytest.rgb')
-
-def testimage(name):
-    """Run through the imgfile's battery of possible methods
-       on the image passed in name.
-    """
-
-    import sys
-    import os
-    import string
-
-    outputfile = '/tmp/deleteme'
-
-    # try opening the name directly
-    try:
-        # This function returns a tuple (x, y, z) where x and y are the size
-        # of the image in pixels and z is the number of bytes per pixel. Only
-        # 3 byte RGB pixels and 1 byte greyscale pixels are supported.
-        sizes = imgfile.getsizes(name)
-    except imgfile.error:
-        # get a more qualified path component of the script...
-        if __name__ == '__main__':
-            ourname = sys.argv[0]
-        else: # ...or the full path of the module
-            ourname = sys.modules[__name__].__file__
-
-        parts = string.splitfields(ourname, os.sep)
-        parts[-1] = name
-        name = string.joinfields(parts, os.sep)
-        sizes = imgfile.getsizes(name)
-    if verbose:
-        print 'Opening test image: %s, sizes: %s' % (name, str(sizes))
-    # This function reads and decodes the image on the specified file,
-    # and returns it as a python string. The string has either 1 byte
-    # greyscale pixels or 4 byte RGBA pixels. The bottom left pixel
-    # is the first in the string. This format is suitable to pass
-    # to gl.lrectwrite, for instance. 
-    image = imgfile.read(name)
-    
-    # This function writes the RGB or greyscale data in data to
-    # image file file. x and y give the size of the image, z is
-    # 1 for 1 byte greyscale images or 3 for RGB images (which
-    # are stored as 4 byte values of which only the lower three
-    # bytes are used). These are the formats returned by gl.lrectread. 
-    if verbose:
-        print 'Writing output file'
-    imgfile.write (outputfile, image, sizes[0], sizes[1], sizes[2]) 
-   
-
-    if verbose:
-        print 'Opening scaled test image: %s, sizes: %s' % (name, str(sizes))
-    # This function is identical to read but it returns an image that
-    # is scaled to the given x and y sizes. If the filter and blur
-    # parameters are omitted scaling is done by simply dropping
-    # or duplicating pixels, so the result will be less than perfect,
-    # especially for computer-generated images.  Alternatively,
-    # you can specify a filter to use to smoothen the image after
-    # scaling. The filter forms supported are 'impulse', 'box',
-    # 'triangle', 'quadratic' and 'gaussian'. If a filter is
-    # specified blur is an optional parameter specifying the
-    # blurriness of the filter. It defaults to 1.0.  readscaled
-    # makes no attempt to keep the aspect ratio correct, so that
-    # is the users' responsibility.
-    if verbose:
-        print 'Filtering with "impulse"'
-    simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'impulse', 2.0)
-
-    # This function sets a global flag which defines whether the
-    # scan lines of the image are read or written from bottom to
-    # top (flag is zero, compatible with SGI GL) or from top to
-    # bottom(flag is one, compatible with X). The default is zero. 
-    if verbose:
-        print 'Switching to X compatibility'
-    imgfile.ttob (1) 
-
-    if verbose:
-        print 'Filtering with "triangle"'
-    simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'triangle', 3.0)
-    if verbose:
-        print 'Switching back to SGI compatibility'
-    imgfile.ttob (0) 
-    
-    if verbose: print 'Filtering with "quadratic"'
-    simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'quadratic')
-    if verbose: print 'Filtering with "gaussian"'
-    simage = imgfile.readscaled (name, sizes[0]/2, sizes[1]/2, 'gaussian', 1.0)
-
-    if verbose:
-        print 'Writing output file'
-    imgfile.write (outputfile, simage, sizes[0]/2, sizes[1]/2, sizes[2]) 
-
-    os.unlink(outputfile)
-
-main()
diff --git a/Lib/dos-8x3/test_imp.py b/Lib/dos-8x3/test_imp.py
deleted file mode 100644
index c7ab753..0000000
--- a/Lib/dos-8x3/test_imp.py
+++ /dev/null
@@ -1,44 +0,0 @@
-from test_support import TESTFN
-
-import os
-import random
-
-source = TESTFN + ".py"
-pyc = TESTFN + ".pyc"
-pyo = TESTFN + ".pyo"
-
-f = open(source, "w")
-print >> f, "# This will test Python's ability to import a .py file"
-a = random.randrange(1000)
-b = random.randrange(1000)
-print >> f, "a =", a
-print >> f, "b =", b
-f.close()
-
-try:
-    try:
-        mod = __import__(TESTFN)
-    except ImportError, err:
-        raise ValueError, "import from .py failed: %s" % err
-
-    if mod.a != a or mod.b != b:
-        print a, "!=", mod.a
-        print b, "!=", mod.b
-        raise ValueError, "module loaded (%s) but contents invalid" % mod
-finally:
-    os.unlink(source)
-
-try:
-    try:
-        reload(mod)
-    except ImportError, err:
-        raise ValueError, "import from .pyc/.pyo failed: %s" % err
-finally:
-    try:
-        os.unlink(pyc)
-    except os.error:
-        pass
-    try:
-        os.unlink(pyo)
-    except os.error:
-        pass
diff --git a/Lib/dos-8x3/test_lar.py b/Lib/dos-8x3/test_lar.py
deleted file mode 100644
index 5b65237..0000000
--- a/Lib/dos-8x3/test_lar.py
+++ /dev/null
@@ -1,129 +0,0 @@
-#!python
-
-#----------------------------------------------------------------------
-# test largefile support on system where this makes sense
-#
-#XXX how to only run this when support is there
-#XXX how to only optionally run this, it will take along time
-#----------------------------------------------------------------------
-
-import test_support
-import os, struct, stat, sys
-
-
-# only run if the current system support large files
-f = open(test_support.TESTFN, 'w')
-try:
-	# 2**31 == 2147483648
-	f.seek(2147483649L)
-except OverflowError:
-	raise test_support.TestSkipped, "platform does not have largefile support"
-else:
-	f.close()
-
-
-# create >2GB file (2GB = 2147483648 bytes)
-size = 2500000000L
-name = test_support.TESTFN
-
-
-# on Windows this test comsumes large resources:
-#  it takes a long time to build the >2GB file and takes >2GB of disk space
-# therefore test_support.use_large_resources must be defined to run this test
-if sys.platform[:3] == 'win' and not test_support.use_large_resources:
-	raise test_support.TestSkipped, \
-		"test requires %s bytes and a long time to run" % str(size)
-
-
-
-def expect(got_this, expect_this):
-	if test_support.verbose:
-		print '%s =?= %s ...' % (`got_this`, `expect_this`),
-	if got_this != expect_this:
-		if test_support.verbose:
-			print 'no'
-		raise test_support.TestFailed, 'got %s, but expected %s' %\
-			(str(got_this), str(expect_this))
-	else:
-		if test_support.verbose:
-			print 'yes'
-
-
-# test that each file function works as expected for a large (i.e. >2GB, do
-# we have to check >4GB) files
-
-if test_support.verbose:
-	print 'create large file via seek (may be sparse file) ...'
-f = open(name, 'w')
-f.seek(size)
-f.write('a')
-f.flush()
-expect(os.fstat(f.fileno())[stat.ST_SIZE], size+1)
-if test_support.verbose:
-	print 'check file size with os.fstat'
-f.close()
-if test_support.verbose:
-	print 'check file size with os.stat'
-expect(os.stat(name)[stat.ST_SIZE], size+1)
-
-if test_support.verbose:
-	print 'play around with seek() and read() with the built largefile'
-f = open(name, 'r')
-expect(f.tell(), 0)
-expect(f.read(1), '\000')
-expect(f.tell(), 1)
-f.seek(0)
-expect(f.tell(), 0)
-f.seek(0, 0)
-expect(f.tell(), 0)
-f.seek(42)
-expect(f.tell(), 42)
-f.seek(42, 0)
-expect(f.tell(), 42)
-f.seek(42, 1)
-expect(f.tell(), 84)
-f.seek(0, 1)
-expect(f.tell(), 84)
-f.seek(0, 2) # seek from the end
-expect(f.tell(), size + 1 + 0)
-f.seek(-10, 2)
-expect(f.tell(), size + 1 - 10)
-f.seek(-size-1, 2)
-expect(f.tell(), 0)
-f.seek(size)
-expect(f.tell(), size)
-expect(f.read(1), 'a') # the 'a' that was written at the end of the file above
-f.close()
-
-if test_support.verbose:
-	print 'play around with os.lseek() with the built largefile'
-f = open(name, 'r')
-expect(os.lseek(f.fileno(), 0, 0), 0)
-expect(os.lseek(f.fileno(), 42, 0), 42)
-expect(os.lseek(f.fileno(), 42, 1), 84)
-expect(os.lseek(f.fileno(), 0, 1), 84)
-expect(os.lseek(f.fileno(), 0, 2), size+1+0)
-expect(os.lseek(f.fileno(), -10, 2), size+1-10)
-expect(os.lseek(f.fileno(), -size-1, 2), 0)
-expect(os.lseek(f.fileno(), size, 0), size)
-expect(f.read(1), 'a') # the 'a' that was written at the end of the file above
-f.close()
-
-
-# XXX add tests for truncate if it exists
-# XXX has truncate ever worked on Windows? specifically on WinNT I get:
-#     "IOError: [Errno 13] Permission denied"
-##try:
-##	newsize = size - 10
-##	f.seek(newsize)
-##	f.truncate()
-##	expect(f.tell(), newsize)
-##	newsize = newsize - 1
-##	f.seek(0)
-##	f.truncate(newsize)
-##	expect(f.tell(), newsize)
-##except AttributeError:
-##	pass
-
-os.unlink(name)
-
diff --git a/Lib/dos-8x3/test_lin.py b/Lib/dos-8x3/test_lin.py
deleted file mode 100644
index 7924a24..0000000
--- a/Lib/dos-8x3/test_lin.py
+++ /dev/null
@@ -1,89 +0,0 @@
-from test_support import verbose, findfile, TestFailed, TestSkipped
-
-import errno
-import fcntl
-import linuxaudiodev
-import os
-import sys
-import select
-import sunaudio
-import time
-import audioop
-
-SND_FORMAT_MULAW_8 = 1
-
-def play_sound_file(path):
-    fp = open(path, 'r')
-    size, enc, rate, nchannels, extra = sunaudio.gethdr(fp)
-    data = fp.read()
-    fp.close()
-
-    if enc != SND_FORMAT_MULAW_8:
-        print "Expect .au file with 8-bit mu-law samples"
-        return
-
-    try:
-        a = linuxaudiodev.open('w')
-    except linuxaudiodev.error, msg:
-        if msg[0] in (errno.EACCES, errno.ENODEV):
-            raise TestSkipped, msg
-        raise TestFailed, msg
-
-    # convert the data to 16-bit signed
-    data = audioop.ulaw2lin(data, 2)
-
-    # set the data format
-    if sys.byteorder == 'little':
-        fmt = linuxaudiodev.AFMT_S16_LE
-    else:
-        fmt = linuxaudiodev.AFMT_S16_BE
-
-    # at least check that these methods can be invoked
-    a.bufsize()
-    a.obufcount()
-    a.obuffree()
-    a.getptr()
-    a.fileno()
-
-    # set parameters based on .au file headers
-    a.setparameters(rate, 16, nchannels, fmt)
-    a.write(data)
-    a.flush()
-    a.close()
-
-def test_errors():
-    a = linuxaudiodev.open("w")
-    size = 8
-    fmt = linuxaudiodev.AFMT_U8
-    rate = 8000
-    nchannels = 1
-    try:
-        a.setparameters(-1, size, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, -2, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, 3, fmt)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, nchannels, 177)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, size, nchannels, linuxaudiodev.AFMT_U16_LE)
-    except ValueError, msg:
-        print msg
-    try:
-        a.setparameters(rate, 16, nchannels, fmt)
-    except ValueError, msg:
-        print msg
-
-def test():
-    play_sound_file(findfile('audiotest.au'))
-    test_errors()
-
-test()
diff --git a/Lib/dos-8x3/test_lon.py b/Lib/dos-8x3/test_lon.py
deleted file mode 100644
index 6a1f117..0000000
--- a/Lib/dos-8x3/test_lon.py
+++ /dev/null
@@ -1,260 +0,0 @@
-from test_support import TestFailed, verbose
-from string import join
-from random import random, randint
-
-# SHIFT should match the value in longintrepr.h for best testing.
-SHIFT = 15
-BASE = 2 ** SHIFT
-MASK = BASE - 1
-
-# Max number of base BASE digits to use in test cases.  Doubling
-# this will at least quadruple the runtime.
-MAXDIGITS = 10
-
-# build some special values
-special = map(long, [0, 1, 2, BASE, BASE >> 1])
-special.append(0x5555555555555555L)
-special.append(0xaaaaaaaaaaaaaaaaL)
-#  some solid strings of one bits
-p2 = 4L  # 0 and 1 already added
-for i in range(2*SHIFT):
-    special.append(p2 - 1)
-    p2 = p2 << 1
-del p2
-# add complements & negations
-special = special + map(lambda x: ~x, special) + \
-                    map(lambda x: -x, special)
-
-# ------------------------------------------------------------ utilities
-
-# Use check instead of assert so the test still does something
-# under -O.
-
-def check(ok, *args):
-    if not ok:
-        raise TestFailed, join(map(str, args), " ")
-
-# Get quasi-random long consisting of ndigits digits (in base BASE).
-# quasi == the most-significant digit will not be 0, and the number
-# is constructed to contain long strings of 0 and 1 bits.  These are
-# more likely than random bits to provoke digit-boundary errors.
-# The sign of the number is also random.
-
-def getran(ndigits):
-    assert ndigits > 0
-    nbits_hi = ndigits * SHIFT
-    nbits_lo = nbits_hi - SHIFT + 1
-    answer = 0L
-    nbits = 0
-    r = int(random() * (SHIFT * 2)) | 1  # force 1 bits to start
-    while nbits < nbits_lo:
-        bits = (r >> 1) + 1
-        bits = min(bits, nbits_hi - nbits)
-        assert 1 <= bits <= SHIFT
-        nbits = nbits + bits
-        answer = answer << bits
-        if r & 1:
-            answer = answer | ((1 << bits) - 1)
-        r = int(random() * (SHIFT * 2))
-    assert nbits_lo <= nbits <= nbits_hi
-    if random() < 0.5:
-        answer = -answer
-    return answer
-
-# Get random long consisting of ndigits random digits (relative to base
-# BASE).  The sign bit is also random.
-
-def getran2(ndigits):
-    answer = 0L
-    for i in range(ndigits):
-        answer = (answer << SHIFT) | randint(0, MASK)
-    if random() < 0.5:
-        answer = -answer
-    return answer
-
-# --------------------------------------------------------------- divmod
-
-def test_division_2(x, y):
-    q, r = divmod(x, y)
-    q2, r2 = x/y, x%y
-    pab, pba = x*y, y*x
-    check(pab == pba, "multiplication does not commute for", x, y)
-    check(q == q2, "divmod returns different quotient than / for", x, y)
-    check(r == r2, "divmod returns different mod than % for", x, y)
-    check(x == q*y + r, "x != q*y + r after divmod on", x, y)
-    if y > 0:
-        check(0 <= r < y, "bad mod from divmod on", x, y)
-    else:
-        check(y < r <= 0, "bad mod from divmod on", x, y)
-
-def test_division(maxdigits=MAXDIGITS):
-    print "long / * % divmod"
-    digits = range(1, maxdigits+1)
-    for lenx in digits:
-        x = getran(lenx)
-        for leny in digits:
-            y = getran(leny) or 1L
-            test_division_2(x, y)
-
-# -------------------------------------------------------------- ~ & | ^
-
-def test_bitop_identities_1(x):
-    check(x & 0 == 0, "x & 0 != 0 for", x)
-    check(x | 0 == x, "x | 0 != x for", x)
-    check(x ^ 0 == x, "x ^ 0 != x for", x)
-    check(x & -1 == x, "x & -1 != x for", x)
-    check(x | -1 == -1, "x | -1 != -1 for", x)
-    check(x ^ -1 == ~x, "x ^ -1 != ~x for", x)
-    check(x == ~~x, "x != ~~x for", x)
-    check(x & x == x, "x & x != x for", x)
-    check(x | x == x, "x | x != x for", x)
-    check(x ^ x == 0, "x ^ x != 0 for", x)
-    check(x & ~x == 0, "x & ~x != 0 for", x)
-    check(x | ~x == -1, "x | ~x != -1 for", x)
-    check(x ^ ~x == -1, "x ^ ~x != -1 for", x)
-    check(-x == 1 + ~x == ~(x-1), "not -x == 1 + ~x == ~(x-1) for", x)
-    for n in range(2*SHIFT):
-        p2 = 2L ** n
-        check(x << n >> n == x, "x << n >> n != x for", x, n)
-        check(x / p2 == x >> n, "x / p2 != x >> n for x n p2", x, n, p2)
-        check(x * p2 == x << n, "x * p2 != x << n for x n p2", x, n, p2)
-        check(x & -p2 == x >> n << n == x & ~(p2 - 1),
-            "not x & -p2 == x >> n << n == x & ~(p2 - 1) for x n p2",
-            x, n, p2)
-
-def test_bitop_identities_2(x, y):
-    check(x & y == y & x, "x & y != y & x for", x, y)
-    check(x | y == y | x, "x | y != y | x for", x, y)
-    check(x ^ y == y ^ x, "x ^ y != y ^ x for", x, y)
-    check(x ^ y ^ x == y, "x ^ y ^ x != y for", x, y)
-    check(x & y == ~(~x | ~y), "x & y != ~(~x | ~y) for", x, y)
-    check(x | y == ~(~x & ~y), "x | y != ~(~x & ~y) for", x, y)
-    check(x ^ y == (x | y) & ~(x & y),
-         "x ^ y != (x | y) & ~(x & y) for", x, y)
-    check(x ^ y == (x & ~y) | (~x & y),
-         "x ^ y == (x & ~y) | (~x & y) for", x, y)
-    check(x ^ y == (x | y) & (~x | ~y),
-         "x ^ y == (x | y) & (~x | ~y) for", x, y)
-
-def test_bitop_identities_3(x, y, z):
-    check((x & y) & z == x & (y & z),
-         "(x & y) & z != x & (y & z) for", x, y, z)
-    check((x | y) | z == x | (y | z),
-         "(x | y) | z != x | (y | z) for", x, y, z)
-    check((x ^ y) ^ z == x ^ (y ^ z),
-         "(x ^ y) ^ z != x ^ (y ^ z) for", x, y, z)
-    check(x & (y | z) == (x & y) | (x & z),
-         "x & (y | z) != (x & y) | (x & z) for", x, y, z)
-    check(x | (y & z) == (x | y) & (x | z),
-         "x | (y & z) != (x | y) & (x | z) for", x, y, z)
-
-def test_bitop_identities(maxdigits=MAXDIGITS):
-    print "long bit-operation identities"
-    for x in special:
-        test_bitop_identities_1(x)
-    digits = range(1, maxdigits+1)
-    for lenx in digits:
-        x = getran(lenx)
-        test_bitop_identities_1(x)
-        for leny in digits:
-            y = getran(leny)
-            test_bitop_identities_2(x, y)
-            test_bitop_identities_3(x, y, getran((lenx + leny)/2))
-
-# ------------------------------------------------- hex oct repr str atol
-
-def slow_format(x, base):
-    if (x, base) == (0, 8):
-        # this is an oddball!
-        return "0L"
-    digits = []
-    sign = 0
-    if x < 0:
-        sign, x = 1, -x
-    while x:
-        x, r = divmod(x, base)
-        digits.append(int(r))
-    digits.reverse()
-    digits = digits or [0]
-    return '-'[:sign] + \
-           {8: '0', 10: '', 16: '0x'}[base] + \
-           join(map(lambda i: "0123456789ABCDEF"[i], digits), '') + \
-           "L"
-
-def test_format_1(x):
-    from string import atol
-    for base, mapper in (8, oct), (10, repr), (16, hex):
-        got = mapper(x)
-        expected = slow_format(x, base)
-        check(got == expected, mapper.__name__, "returned",
-              got, "but expected", expected, "for", x)
-        check(atol(got, 0) == x, 'atol("%s", 0) !=' % got, x)
-    # str() has to be checked a little differently since there's no
-    # trailing "L"
-    got = str(x)
-    expected = slow_format(x, 10)[:-1]
-    check(got == expected, mapper.__name__, "returned",
-          got, "but expected", expected, "for", x)
-
-def test_format(maxdigits=MAXDIGITS):
-    print "long str/hex/oct/atol"
-    for x in special:
-        test_format_1(x)
-    for i in range(10):
-        for lenx in range(1, maxdigits+1):
-            x = getran(lenx)
-            test_format_1(x)
-
-# ----------------------------------------------------------------- misc
-
-def test_misc(maxdigits=MAXDIGITS):
-    print "long miscellaneous operations"
-    import sys
-
-    # check the extremes in int<->long conversion
-    hugepos = sys.maxint
-    hugeneg = -hugepos - 1
-    hugepos_aslong = long(hugepos)
-    hugeneg_aslong = long(hugeneg)
-    check(hugepos == hugepos_aslong, "long(sys.maxint) != sys.maxint")
-    check(hugeneg == hugeneg_aslong,
-        "long(-sys.maxint-1) != -sys.maxint-1")
-
-    # long -> int should not fail for hugepos_aslong or hugeneg_aslong
-    try:
-        check(int(hugepos_aslong) == hugepos,
-              "converting sys.maxint to long and back to int fails")
-    except OverflowError:
-        raise TestFailed, "int(long(sys.maxint)) overflowed!"
-    try:
-        check(int(hugeneg_aslong) == hugeneg,
-              "converting -sys.maxint-1 to long and back to int fails")
-    except OverflowError:
-        raise TestFailed, "int(long(-sys.maxint-1)) overflowed!"
-
-    # but long -> int should overflow for hugepos+1 and hugeneg-1
-    x = hugepos_aslong + 1
-    try:
-        int(x)
-        raise ValueError
-    except OverflowError:
-        pass
-    except:
-        raise TestFailed, "int(long(sys.maxint) + 1) didn't overflow"
-
-    x = hugeneg_aslong - 1
-    try:
-        int(x)
-        raise ValueError
-    except OverflowError:
-        pass
-    except:
-        raise TestFailed, "int(long(-sys.maxint-1) - 1) didn't overflow"
-
-# ---------------------------------------------------------------- do it
-
-test_division()
-test_bitop_identities()
-test_format()
-test_misc()
-
diff --git a/Lib/dos-8x3/test_mat.py b/Lib/dos-8x3/test_mat.py
deleted file mode 100644
index b7fde0a..0000000
--- a/Lib/dos-8x3/test_mat.py
+++ /dev/null
@@ -1,195 +0,0 @@
-# Python test set -- math module
-# XXXX Should not do tests around zero only
-
-from test_support import *
-
-seps='1e-05'
-eps = eval(seps)
-print 'math module, testing with eps', seps
-import math
-
-def testit(name, value, expected):
-	if abs(value-expected) > eps:
-		raise TestFailed, '%s returned %f, expected %f'%\
-		      (name, value, expected)
-
-print 'constants'
-testit('pi', math.pi, 3.1415926)
-testit('e', math.e, 2.7182818)
-
-print 'acos'
-testit('acos(-1)', math.acos(-1), math.pi)
-testit('acos(0)', math.acos(0), math.pi/2)
-testit('acos(1)', math.acos(1), 0)
-
-print 'asin'
-testit('asin(-1)', math.asin(-1), -math.pi/2)
-testit('asin(0)', math.asin(0), 0)
-testit('asin(1)', math.asin(1), math.pi/2)
-
-print 'atan'
-testit('atan(-1)', math.atan(-1), -math.pi/4)
-testit('atan(0)', math.atan(0), 0)
-testit('atan(1)', math.atan(1), math.pi/4)
-
-print 'atan2'
-testit('atan2(-1, 0)', math.atan2(-1, 0), -math.pi/2)
-testit('atan2(-1, 1)', math.atan2(-1, 1), -math.pi/4)
-testit('atan2(0, 1)', math.atan2(0, 1), 0)
-testit('atan2(1, 1)', math.atan2(1, 1), math.pi/4)
-testit('atan2(1, 0)', math.atan2(1, 0), math.pi/2)
-
-print 'ceil'
-testit('ceil(0.5)', math.ceil(0.5), 1)
-testit('ceil(1.0)', math.ceil(1.0), 1)
-testit('ceil(1.5)', math.ceil(1.5), 2)
-testit('ceil(-0.5)', math.ceil(-0.5), 0)
-testit('ceil(-1.0)', math.ceil(-1.0), -1)
-testit('ceil(-1.5)', math.ceil(-1.5), -1)
-
-print 'cos'
-testit('cos(-pi/2)', math.cos(-math.pi/2), 0)
-testit('cos(0)', math.cos(0), 1)
-testit('cos(pi/2)', math.cos(math.pi/2), 0)
-testit('cos(pi)', math.cos(math.pi), -1)
-
-print 'cosh'
-testit('cosh(0)', math.cosh(0), 1)
-testit('cosh(2)-2*cosh(1)**2', math.cosh(2)-2*math.cosh(1)**2, -1) # Thanks to Lambert
-
-print 'exp'
-testit('exp(-1)', math.exp(-1), 1/math.e)
-testit('exp(0)', math.exp(0), 1)
-testit('exp(1)', math.exp(1), math.e)
-
-print 'fabs'
-testit('fabs(-1)', math.fabs(-1), 1)
-testit('fabs(0)', math.fabs(0), 0)
-testit('fabs(1)', math.fabs(1), 1)
-
-print 'floor'
-testit('floor(0.5)', math.floor(0.5), 0)
-testit('floor(1.0)', math.floor(1.0), 1)
-testit('floor(1.5)', math.floor(1.5), 1)
-testit('floor(-0.5)', math.floor(-0.5), -1)
-testit('floor(-1.0)', math.floor(-1.0), -1)
-testit('floor(-1.5)', math.floor(-1.5), -2)
-
-print 'fmod'
-testit('fmod(10,1)', math.fmod(10,1), 0)
-testit('fmod(10,0.5)', math.fmod(10,0.5), 0)
-testit('fmod(10,1.5)', math.fmod(10,1.5), 1)
-testit('fmod(-10,1)', math.fmod(-10,1), 0)
-testit('fmod(-10,0.5)', math.fmod(-10,0.5), 0)
-testit('fmod(-10,1.5)', math.fmod(-10,1.5), -1)
-
-print 'frexp'
-def testfrexp(name, (mant, exp), (emant, eexp)):
-	if abs(mant-emant) > eps or exp <> eexp:
-		raise TestFailed, '%s returned %s, expected %s'%\
-		      (name, `mant, exp`, `emant,eexp`)
-
-testfrexp('frexp(-1)', math.frexp(-1), (-0.5, 1))
-testfrexp('frexp(0)', math.frexp(0), (0, 0))
-testfrexp('frexp(1)', math.frexp(1), (0.5, 1))
-testfrexp('frexp(2)', math.frexp(2), (0.5, 2))
-
-print 'hypot'
-testit('hypot(0,0)', math.hypot(0,0), 0)
-testit('hypot(3,4)', math.hypot(3,4), 5)
-
-print 'ldexp'
-testit('ldexp(0,1)', math.ldexp(0,1), 0)
-testit('ldexp(1,1)', math.ldexp(1,1), 2)
-testit('ldexp(1,-1)', math.ldexp(1,-1), 0.5)
-testit('ldexp(-1,1)', math.ldexp(-1,1), -2)
-
-print 'log'
-testit('log(1/e)', math.log(1/math.e), -1)
-testit('log(1)', math.log(1), 0)
-testit('log(e)', math.log(math.e), 1)
-
-print 'log10'
-testit('log10(0.1)', math.log10(0.1), -1)
-testit('log10(1)', math.log10(1), 0)
-testit('log10(10)', math.log10(10), 1)
-
-print 'modf'
-def testmodf(name, (v1, v2), (e1, e2)):
-	if abs(v1-e1) > eps or abs(v2-e2):
-		raise TestFailed, '%s returned %s, expected %s'%\
-		      (name, `v1,v2`, `e1,e2`)
-
-testmodf('modf(1.5)', math.modf(1.5), (0.5, 1.0))
-testmodf('modf(-1.5)', math.modf(-1.5), (-0.5, -1.0))
-
-print 'pow'
-testit('pow(0,1)', math.pow(0,1), 0)
-testit('pow(1,0)', math.pow(1,0), 1)
-testit('pow(2,1)', math.pow(2,1), 2)
-testit('pow(2,-1)', math.pow(2,-1), 0.5)
-
-print 'sin'
-testit('sin(0)', math.sin(0), 0)
-testit('sin(pi/2)', math.sin(math.pi/2), 1)
-testit('sin(-pi/2)', math.sin(-math.pi/2), -1)
-
-print 'sinh'
-testit('sinh(0)', math.sinh(0), 0)
-testit('sinh(1)**2-cosh(1)**2', math.sinh(1)**2-math.cosh(1)**2, -1)
-testit('sinh(1)+sinh(-1)', math.sinh(1)+math.sinh(-1), 0)
-
-print 'sqrt'
-testit('sqrt(0)', math.sqrt(0), 0)
-testit('sqrt(1)', math.sqrt(1), 1)
-testit('sqrt(4)', math.sqrt(4), 2)
-
-print 'tan'
-testit('tan(0)', math.tan(0), 0)
-testit('tan(pi/4)', math.tan(math.pi/4), 1)
-testit('tan(-pi/4)', math.tan(-math.pi/4), -1)
-
-print 'tanh'
-testit('tanh(0)', math.tanh(0), 0)
-testit('tanh(1)+tanh(-1)', math.tanh(1)+math.tanh(-1), 0)
-
-# RED_FLAG 16-Oct-2000 Tim
-# While 2.0 is more consistent about exceptions than previous releases, it
-# still fails this part of the test on some platforms.  For now, we only
-# *run* test_exceptions() in verbose mode, so that this isn't normally
-# tested.
-
-def test_exceptions():
-    print 'exceptions'
-    try:
-        x = math.exp(-1000000000)
-    except:
-        # mathmodule.c is failing to weed out underflows from libm, or
-        # we've got an fp format with huge dynamic range
-        raise TestFailed("underflowing exp() should not have raised "
-                         "an exception")
-    if x != 0:
-        raise TestFailed("underflowing exp() should have returned 0")
-
-    # If this fails, probably using a strict IEEE-754 conforming libm, and x
-    # is +Inf afterwards.  But Python wants overflows detected by default.
-    try:
-        x = math.exp(1000000000)
-    except OverflowError:
-        pass
-    else:
-        raise TestFailed("overflowing exp() didn't trigger OverflowError")
-
-    # If this fails, it could be a puzzle.  One odd possibility is that
-    # mathmodule.c's CHECK() macro is getting confused while comparing
-    # Inf (HUGE_VAL) to a NaN, and artificially setting errno to ERANGE
-    # as a result (and so raising OverflowError instead).
-    try:
-        x = math.sqrt(-1.0)
-    except ValueError:
-        pass
-    else:
-        raise TestFailed("sqrt(-1) didn't raise ValueError")
-
-if verbose:
-    test_exceptions()
diff --git a/Lib/dos-8x3/test_mim.py b/Lib/dos-8x3/test_mim.py
deleted file mode 100644
index 8b74421..0000000
--- a/Lib/dos-8x3/test_mim.py
+++ /dev/null
@@ -1,170 +0,0 @@
-"""Test program for MimeWriter module.
-
-The test program was too big to comfortably fit in the MimeWriter
-class, so it's here in its own file.
-
-This should generate Barry's example, modulo some quotes and newlines.
-
-"""
-
-
-from MimeWriter import MimeWriter
-
-SELLER = '''\
-INTERFACE Seller-1;
-
-TYPE Seller = OBJECT
-    DOCUMENTATION "A simple Seller interface to test ILU"
-    METHODS
-            price():INTEGER,
-    END;
-'''
-
-BUYER = '''\
-class Buyer:
-    def __setup__(self, maxprice):
-        self._maxprice = maxprice
-
-    def __main__(self, kos):
-        """Entry point upon arrival at a new KOS."""
-        broker = kos.broker()
-        # B4 == Barry's Big Bass Business :-)
-        seller = broker.lookup('Seller_1.Seller', 'B4')
-        if seller:
-            price = seller.price()
-            print 'Seller wants $', price, '... '
-            if price > self._maxprice:
-                print 'too much!'
-            else:
-                print "I'll take it!"
-        else:
-            print 'no seller found here'
-'''                                     # Don't ask why this comment is here
-
-STATE = '''\
-# instantiate a buyer instance and put it in a magic place for the KOS
-# to find.
-__kp__ = Buyer()
-__kp__.__setup__(500)
-'''
-
-SIMPLE_METADATA = [
-        ("Interpreter", "python"),
-        ("Interpreter-Version", "1.3"),
-        ("Owner-Name", "Barry Warsaw"),
-        ("Owner-Rendezvous", "bwarsaw@cnri.reston.va.us"),
-        ("Home-KSS", "kss.cnri.reston.va.us"),
-        ("Identifier", "hdl://cnri.kss/my_first_knowbot"),
-        ("Launch-Date", "Mon Feb 12 16:39:03 EST 1996"),
-        ]
-
-COMPLEX_METADATA = [
-        ("Metadata-Type", "complex"),
-        ("Metadata-Key", "connection"),
-        ("Access", "read-only"),
-        ("Connection-Description", "Barry's Big Bass Business"),
-        ("Connection-Id", "B4"),
-        ("Connection-Direction", "client"),
-        ]
-
-EXTERNAL_METADATA = [
-        ("Metadata-Type", "complex"),
-        ("Metadata-Key", "generic-interface"),
-        ("Access", "read-only"),
-        ("Connection-Description", "Generic Interface for All Knowbots"),
-        ("Connection-Id", "generic-kp"),
-        ("Connection-Direction", "client"),
-        ]
-
-
-def main():
-    import sys
-
-    # Toplevel headers
-    
-    toplevel = MimeWriter(sys.stdout)
-    toplevel.addheader("From", "bwarsaw@cnri.reston.va.us")
-    toplevel.addheader("Date", "Mon Feb 12 17:21:48 EST 1996")
-    toplevel.addheader("To", "kss-submit@cnri.reston.va.us")
-    toplevel.addheader("MIME-Version", "1.0")
-
-    # Toplevel body parts
-    
-    f = toplevel.startmultipartbody("knowbot", "801spam999",
-                                    [("version", "0.1")], prefix=0)
-    f.write("This is a multi-part message in MIME format.\n")
-
-    # First toplevel body part: metadata
-
-    md = toplevel.nextpart()
-    md.startmultipartbody("knowbot-metadata", "802spam999")
-
-    # Metadata part 1
-    
-    md1 = md.nextpart()
-    md1.addheader("KP-Metadata-Type", "simple")
-    md1.addheader("KP-Access", "read-only")
-    m = MimeWriter(md1.startbody("message/rfc822"))
-    for key, value in SIMPLE_METADATA:
-        m.addheader("KPMD-" + key, value)
-    m.flushheaders()
-    del md1
-
-    # Metadata part 2
-
-    md2 = md.nextpart()
-    for key, value in COMPLEX_METADATA:
-        md2.addheader("KP-" + key, value)
-    f = md2.startbody("text/isl")
-    f.write(SELLER)
-    del md2
-
-    # Metadata part 3
-
-    md3 = md.nextpart()
-    f = md3.startbody("message/external-body",
-                      [("access-type", "URL"),
-                       ("URL", "hdl://cnri.kss/generic-knowbot")])
-    m = MimeWriter(f)
-    for key, value in EXTERNAL_METADATA:
-        md3.addheader("KP-" + key, value)
-    md3.startbody("text/isl")
-    # Phantom body doesn't need to be written
-
-    md.lastpart()
-
-    # Second toplevel body part: code
-
-    code = toplevel.nextpart()
-    code.startmultipartbody("knowbot-code", "803spam999")
-
-    # Code: buyer program source
-
-    buyer = code.nextpart()
-    buyer.addheader("KP-Module-Name", "BuyerKP")
-    f = buyer.startbody("text/plain")
-    f.write(BUYER)
-
-    code.lastpart()
-
-    # Third toplevel body part: state
-
-    state = toplevel.nextpart()
-    state.addheader("KP-Main-Module", "main")
-    state.startmultipartbody("knowbot-state", "804spam999")
-
-    # State: a bunch of assignments
-
-    st = state.nextpart()
-    st.addheader("KP-Module-Name", "main")
-    f = st.startbody("text/plain")
-    f.write(STATE)
-
-    state.lastpart()
-
-    # End toplevel body parts
-
-    toplevel.lastpart()
-
-
-main()
diff --git a/Lib/dos-8x3/test_min.py b/Lib/dos-8x3/test_min.py
deleted file mode 100644
index 7afdf5d..0000000
--- a/Lib/dos-8x3/test_min.py
+++ /dev/null
@@ -1,413 +0,0 @@
-# test for xml.dom.minidom
-
-from xml.dom.minidom import parse, Node, Document, parseString
-import xml.parsers.expat
-
-import os.path
-import sys
-import traceback
-from test_support import verbose
-
-if __name__ == "__main__":
-    base = sys.argv[0]
-else:
-    base = __file__
-tstfile = os.path.join(os.path.dirname(base), "test.xml")
-del base
-
-def confirm(test, testname = "Test"):
-    if test: 
-        print "Passed " + testname
-    else: 
-        print "Failed " + testname
-        raise Exception
-
-Node._debug = 1
-
-def testParseFromFile():
-    from StringIO import StringIO
-    dom = parse(StringIO(open(tstfile).read()))
-    dom.unlink()
-    confirm(isinstance(dom,Document))
-
-def testGetElementsByTagName():
-    dom = parse(tstfile)
-    confirm(dom.getElementsByTagName("LI") == \
-            dom.documentElement.getElementsByTagName("LI"))
-    dom.unlink()
-
-def testInsertBefore():
-    dom = parse(tstfile)
-    docel = dom.documentElement
-    #docel.insertBefore( dom.createProcessingInstruction("a", "b"),
-    #                        docel.childNodes[1])
-                            
-    #docel.insertBefore( dom.createProcessingInstruction("a", "b"),
-    #                        docel.childNodes[0])
-
-    #confirm( docel.childNodes[0].tet == "a")
-    #confirm( docel.childNodes[2].tet == "a")
-    dom.unlink()
-
-def testAppendChild():
-    dom = parse(tstfile)
-    dom.documentElement.appendChild(dom.createComment(u"Hello"))
-    confirm(dom.documentElement.childNodes[-1].nodeName == "#comment")
-    confirm(dom.documentElement.childNodes[-1].data == "Hello")
-    dom.unlink()
-
-def testNonZero():
-    dom = parse(tstfile)
-    confirm(dom)# should not be zero
-    dom.appendChild(dom.createComment("foo"))
-    confirm(not dom.childNodes[-1].childNodes)
-    dom.unlink()
-
-def testUnlink():
-    dom = parse(tstfile)
-    dom.unlink()
-
-def testElement():
-    dom = Document()
-    dom.appendChild(dom.createElement("abc"))
-    confirm(dom.documentElement)
-    dom.unlink()
-
-def testAAA():
-    dom = parseString("<abc/>")
-    el = dom.documentElement
-    el.setAttribute("spam", "jam2")
-    dom.unlink()
-
-def testAAB():
-    dom = parseString("<abc/>")
-    el = dom.documentElement
-    el.setAttribute("spam", "jam")
-    el.setAttribute("spam", "jam2")
-    dom.unlink()
-
-def testAddAttr():
-    dom = Document()
-    child = dom.appendChild(dom.createElement("abc"))
-
-    child.setAttribute("def", "ghi")
-    confirm(child.getAttribute("def") == "ghi")
-    confirm(child.attributes["def"].value == "ghi")
-
-    child.setAttribute("jkl", "mno")
-    confirm(child.getAttribute("jkl") == "mno")
-    confirm(child.attributes["jkl"].value == "mno")
-
-    confirm(len(child.attributes) == 2)
-
-    child.setAttribute("def", "newval")
-    confirm(child.getAttribute("def") == "newval")
-    confirm(child.attributes["def"].value == "newval")
-
-    confirm(len(child.attributes) == 2)
-    dom.unlink()
-
-def testDeleteAttr():
-    dom = Document()
-    child = dom.appendChild(dom.createElement("abc"))
-
-    confirm(len(child.attributes) == 0)
-    child.setAttribute("def", "ghi")
-    confirm(len(child.attributes) == 1)
-    del child.attributes["def"]
-    confirm(len(child.attributes) == 0)
-    dom.unlink()
-
-def testRemoveAttr():
-    dom = Document()
-    child = dom.appendChild(dom.createElement("abc"))
-
-    child.setAttribute("def", "ghi")
-    confirm(len(child.attributes) == 1)
-    child.removeAttribute("def")
-    confirm(len(child.attributes) == 0)
-
-    dom.unlink()
-
-def testRemoveAttrNS():
-    dom = Document()
-    child = dom.appendChild(
-            dom.createElementNS("http://www.python.org", "python:abc"))
-    child.setAttributeNS("http://www.w3.org", "xmlns:python", 
-                                            "http://www.python.org")
-    child.setAttributeNS("http://www.python.org", "python:abcattr", "foo")
-    confirm(len(child.attributes) == 2)
-    child.removeAttributeNS("http://www.python.org", "abcattr")
-    confirm(len(child.attributes) == 1)
-
-    dom.unlink()
-    
-def testRemoveAttributeNode():
-    dom = Document()
-    child = dom.appendChild(dom.createElement("foo"))
-    child.setAttribute("spam", "jam")
-    confirm(len(child.attributes) == 1)
-    node = child.getAttributeNode("spam")
-    child.removeAttributeNode(node)
-    confirm(len(child.attributes) == 0)
-
-    dom.unlink()
-
-def testChangeAttr():
-    dom = parseString("<abc/>")
-    el = dom.documentElement
-    el.setAttribute("spam", "jam")
-    confirm(len(el.attributes) == 1)
-    el.setAttribute("spam", "bam")
-    confirm(len(el.attributes) == 1)
-    el.attributes["spam"] = "ham"
-    confirm(len(el.attributes) == 1)
-    el.setAttribute("spam2", "bam")
-    confirm(len(el.attributes) == 2)
-    el.attributes[ "spam2"] = "bam2"
-    confirm(len(el.attributes) == 2)
-    dom.unlink()
-
-def testGetAttrList():
-    pass
-
-def testGetAttrValues(): pass
-
-def testGetAttrLength(): pass
-
-def testGetAttribute(): pass
-
-def testGetAttributeNS(): pass
-
-def testGetAttributeNode(): pass
-
-def testGetElementsByTagNameNS(): pass
-
-def testGetEmptyNodeListFromElementsByTagNameNS(): pass
-
-def testElementReprAndStr():
-    dom = Document()
-    el = dom.appendChild(dom.createElement("abc"))
-    string1 = repr(el)
-    string2 = str(el)
-    confirm(string1 == string2)
-    dom.unlink()
-
-# commented out until Fredrick's fix is checked in
-def _testElementReprAndStrUnicode():
-    dom = Document()
-    el = dom.appendChild(dom.createElement(u"abc"))
-    string1 = repr(el)
-    string2 = str(el)
-    confirm(string1 == string2)
-    dom.unlink()
-
-# commented out until Fredrick's fix is checked in
-def _testElementReprAndStrUnicodeNS():
-    dom = Document()
-    el = dom.appendChild(
-        dom.createElementNS(u"http://www.slashdot.org", u"slash:abc"))
-    string1 = repr(el)
-    string2 = str(el)
-    confirm(string1 == string2)
-    confirm(string1.find("slash:abc") != -1)
-    dom.unlink()
-    confirm(len(Node.allnodes) == 0)
-
-def testAttributeRepr():
-    dom = Document()
-    el = dom.appendChild(dom.createElement(u"abc"))
-    node = el.setAttribute("abc", "def")
-    confirm(str(node) == repr(node))
-    dom.unlink()
-    confirm(len(Node.allnodes) == 0)
-
-def testTextNodeRepr(): pass
-
-def testWriteXML():
-    str = '<a b="c"/>'
-    dom = parseString(str)
-    domstr = dom.toxml()
-    dom.unlink()
-    confirm(str == domstr)
-    confirm(len(Node.allnodes) == 0)
-
-def testProcessingInstruction(): pass
-
-def testProcessingInstructionRepr(): pass
-
-def testTextRepr(): pass
-
-def testWriteText(): pass
-
-def testDocumentElement(): pass
-
-def testTooManyDocumentElements(): pass
-
-def testCreateElementNS(): pass
-
-def testCreatAttributeNS(): pass
-
-def testParse(): pass
-
-def testParseString(): pass
-
-def testComment(): pass
-
-def testAttrListItem(): pass
-
-def testAttrListItems(): pass
-
-def testAttrListItemNS(): pass
-
-def testAttrListKeys(): pass
-
-def testAttrListKeysNS(): pass
-
-def testAttrListValues(): pass
-
-def testAttrListLength(): pass
-
-def testAttrList__getitem__(): pass
-
-def testAttrList__setitem__(): pass
-
-def testSetAttrValueandNodeValue(): pass
-
-def testParseElement(): pass
-
-def testParseAttributes(): pass
-
-def testParseElementNamespaces(): pass
-
-def testParseAttributeNamespaces(): pass
-
-def testParseProcessingInstructions(): pass
-
-def testChildNodes(): pass
-
-def testFirstChild(): pass
-
-def testHasChildNodes(): pass
-
-def testCloneElementShallow(): pass
-
-def testCloneElementShallowCopiesAttributes(): pass
-
-def testCloneElementDeep(): pass
-
-def testCloneDocumentShallow(): pass
-
-def testCloneDocumentDeep(): pass
-
-def testCloneAttributeShallow(): pass
-
-def testCloneAttributeDeep(): pass
-
-def testClonePIShallow(): pass
-
-def testClonePIDeep(): pass
-
-def testSiblings():
-    doc = parseString("<doc><?pi?>text?<elm/></doc>")
-    root = doc.documentElement
-    (pi, text, elm) = root.childNodes
-
-    confirm(pi.nextSibling is text and 
-            pi.previousSibling is None and 
-            text.nextSibling is elm and 
-            text.previousSibling is pi and 
-            elm.nextSibling is None and 
-            elm.previousSibling is text, "testSiblings")
-
-    doc.unlink()
-
-def testParents():
-    doc = parseString("<doc><elm1><elm2/><elm2><elm3/></elm2></elm1></doc>")
-    root = doc.documentElement
-    elm1 = root.childNodes[0]
-    (elm2a, elm2b) = elm1.childNodes
-    elm3 = elm2b.childNodes[0]
-
-    confirm(root.parentNode is doc and
-            elm1.parentNode is root and
-            elm2a.parentNode is elm1 and
-            elm2b.parentNode is elm1 and
-            elm3.parentNode is elm2b, "testParents")
-
-    doc.unlink()
-
-def testSAX2DOM():
-    from xml.dom import pulldom
-
-    sax2dom = pulldom.SAX2DOM()
-    sax2dom.startDocument()
-    sax2dom.startElement("doc", {})
-    sax2dom.characters("text")
-    sax2dom.startElement("subelm", {})
-    sax2dom.characters("text")
-    sax2dom.endElement("subelm")
-    sax2dom.characters("text")    
-    sax2dom.endElement("doc")
-    sax2dom.endDocument()
-
-    doc = sax2dom.document
-    root = doc.documentElement
-    (text1, elm1, text2) = root.childNodes
-    text3 = elm1.childNodes[0]
-
-    confirm(text1.previousSibling is None and
-            text1.nextSibling is elm1 and
-            elm1.previousSibling is text1 and
-            elm1.nextSibling is text2 and
-            text2.previousSibling is elm1 and
-            text2.nextSibling is None and
-            text3.previousSibling is None and
-            text3.nextSibling is None, "testSAX2DOM - siblings")
-
-    confirm(root.parentNode is doc and
-            text1.parentNode is root and
-            elm1.parentNode is root and
-            text2.parentNode is root and
-            text3.parentNode is elm1, "testSAX2DOM - parents")
-            
-    doc.unlink()
-
-# --- MAIN PROGRAM
-    
-names = globals().keys()
-names.sort()
-
-works = 1
-
-for name in names:
-    if name.startswith("test"):
-        func = globals()[name]
-        try:
-            func()
-            print "Test Succeeded", name
-            confirm(len(Node.allnodes) == 0,
-                    "assertion: len(Node.allnodes) == 0")
-            if len(Node.allnodes):
-                print "Garbage left over:"
-                if verbose:
-                    print Node.allnodes.items()[0:10]
-                else:
-                    # Don't print specific nodes if repeatable results
-                    # are needed
-                    print len(Node.allnodes)
-            Node.allnodes = {}
-        except Exception, e:
-            works = 0
-            print "Test Failed: ", name
-            traceback.print_exception(*sys.exc_info())
-            print `e`
-            Node.allnodes = {}
-
-if works:
-    print "All tests succeeded"
-else:
-    print "\n\n\n\n************ Check for failures!"
-
-Node.debug = None # Delete debug output collected in a StringIO object
-Node._debug = 0   # And reset debug mode
diff --git a/Lib/dos-8x3/test_mma.py b/Lib/dos-8x3/test_mma.py
deleted file mode 100644
index 449c674..0000000
--- a/Lib/dos-8x3/test_mma.py
+++ /dev/null
@@ -1,121 +0,0 @@
-
-import mmap
-import string, os, re, sys
-
-PAGESIZE = mmap.PAGESIZE
-
-def test_both():
-    "Test mmap module on Unix systems and Windows"
-    
-    # Create an mmap'ed file
-    f = open('foo', 'w+')
-    
-    # Write 2 pages worth of data to the file
-    f.write('\0'* PAGESIZE)
-    f.write('foo')
-    f.write('\0'* (PAGESIZE-3) )
-
-    m = mmap.mmap(f.fileno(), 2 * PAGESIZE)
-    f.close()
-    
-    # Simple sanity checks
-    print '  Position of foo:', string.find(m, 'foo') / float(PAGESIZE), 'pages'
-    assert string.find(m, 'foo') == PAGESIZE
-    
-    print '  Length of file:', len(m) / float(PAGESIZE), 'pages'
-    assert len(m) == 2*PAGESIZE
-
-    print '  Contents of byte 0:', repr(m[0])
-    assert m[0] == '\0'
-    print '  Contents of first 3 bytes:', repr(m[0:3])
-    assert m[0:3] == '\0\0\0'
-    
-    # Modify the file's content
-    print "\n  Modifying file's content..."
-    m[0] = '3'
-    m[PAGESIZE +3: PAGESIZE +3+3]='bar'
-    
-    # Check that the modification worked
-    print '  Contents of byte 0:', repr(m[0])
-    assert m[0] == '3'
-    print '  Contents of first 3 bytes:', repr(m[0:3])
-    assert m[0:3] == '3\0\0'
-    print '  Contents of second page:',  repr(m[PAGESIZE-1 : PAGESIZE + 7])
-    assert m[PAGESIZE-1 : PAGESIZE + 7] == '\0foobar\0'
-    
-    m.flush()
-
-    # Test doing a regular expression match in an mmap'ed file
-    match=re.search('[A-Za-z]+', m)
-    if match == None:
-        print '  ERROR: regex match on mmap failed!'
-    else:
-        start, end = match.span(0)
-        length = end - start               
-
-        print '  Regex match on mmap (page start, length of match):',
-        print start / float(PAGESIZE), length
-        
-        assert start == PAGESIZE
-        assert end == PAGESIZE + 6
-
-    # test seeking around (try to overflow the seek implementation)
-    m.seek(0,0)
-    print '  Seek to zeroth byte'
-    assert m.tell() == 0
-    m.seek(42,1)
-    print '  Seek to 42nd byte'
-    assert m.tell() == 42
-    m.seek(0,2)
-    print '  Seek to last byte'
-    assert m.tell() == len(m)
-
-    print '  Try to seek to negative position...'
-    try:
-        m.seek(-1)
-    except ValueError:
-        pass
-    else:
-        assert 0, 'expected a ValueError but did not get it'
-
-    print '  Try to seek beyond end of mmap...'
-    try:
-        m.seek(1,2)
-    except ValueError:
-        pass
-    else:
-        assert 0, 'expected a ValueError but did not get it'
-
-    print '  Try to seek to negative position...'
-    try:
-        m.seek(-len(m)-1,2)
-    except ValueError:
-        pass
-    else:
-        assert 0, 'expected a ValueError but did not get it'
-
-    # Try resizing map
-    print '  Attempting resize()'
-    try:
-        m.resize( 512 )
-    except SystemError:
-        # resize() not supported
-        # No messages are printed, since the output of this test suite
-        # would then be different across platforms.
-        pass
-    else:
-        # resize() is supported
-        assert len(m) == 512, "len(m) is %d, but expecting 512" % (len(m),)
-        # Check that we can no longer seek beyond the new size.
-        try:
-            m.seek(513,0)
-        except ValueError:
-            pass
-        else:
-            assert 0, 'Could seek beyond the new size'
-    
-    m.close()
-    os.unlink("foo")
-    print ' Test passed'
-
-test_both()
diff --git a/Lib/dos-8x3/test_ntp.py b/Lib/dos-8x3/test_ntp.py
deleted file mode 100644
index 11f2f44..0000000
--- a/Lib/dos-8x3/test_ntp.py
+++ /dev/null
@@ -1,51 +0,0 @@
-import ntpath
-import string
-import os
-
-errors = 0
-
-def tester(fn, wantResult):
-	fn = string.replace(fn, "\\", "\\\\")
-	gotResult = eval(fn)
-	if wantResult != gotResult:
-		print "error!"
-		print "evaluated: " + str(fn)
-		print "should be: " + str(wantResult)
-		print " returned: " + str(gotResult)
-		print ""
-		global errors
-		errors = errors + 1
-
-tester('ntpath.splitdrive("c:\\foo\\bar")', ('c:', '\\foo\\bar'))
-tester('ntpath.splitunc("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint', '\\foo\\bar'))
-tester('ntpath.splitdrive("c:/foo/bar")', ('c:', '/foo/bar'))
-tester('ntpath.splitunc("//conky/mountpoint/foo/bar")', ('//conky/mountpoint', '/foo/bar'))
-
-tester('ntpath.split("c:\\foo\\bar")', ('c:\\foo', 'bar'))
-tester('ntpath.split("\\\\conky\\mountpoint\\foo\\bar")', ('\\\\conky\\mountpoint\\foo', 'bar'))
-
-tester('ntpath.split("c:\\")', ('c:\\', ''))
-tester('ntpath.split("\\\\conky\\mountpoint\\")', ('\\\\conky\\mountpoint', ''))
-
-tester('ntpath.split("c:/")', ('c:/', ''))
-tester('ntpath.split("//conky/mountpoint/")', ('//conky/mountpoint', ''))
-
-tester('ntpath.isabs("c:\\")', 1)
-tester('ntpath.isabs("\\\\conky\\mountpoint\\")', 1)
-tester('ntpath.isabs("\\foo")', 1)
-tester('ntpath.isabs("\\foo\\bar")', 1)
-
-tester('ntpath.abspath("C:\\")', "C:\\")
-
-tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])',
-       "/home/swen")
-tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])',
-       "\\home\\swen\\")
-tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])',
-       "/home/swen/spam")
-
-if errors:
-	print str(errors) + " errors."
-else:
-	print "No errors.  Thank your lucky stars."
-
diff --git a/Lib/dos-8x3/test_opc.py b/Lib/dos-8x3/test_opc.py
deleted file mode 100755
index bdace26..0000000
--- a/Lib/dos-8x3/test_opc.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Python test set -- part 2, opcodes
-
-from test_support import *
-
-
-print '2. Opcodes'
-print 'XXX Not yet fully implemented'
-
-print '2.1 try inside for loop'
-n = 0
-for i in range(10):
-        n = n+i
-        try: 1/0
-        except NameError: pass
-        except ZeroDivisionError: pass
-        except TypeError: pass
-        try: pass
-        except: pass
-        try: pass
-        finally: pass
-        n = n+i
-if n <> 90:
-        raise TestFailed, 'try inside for'
-
-
-print '2.2 raise class exceptions'
-
-class AClass: pass
-class BClass(AClass): pass
-class CClass: pass
-class DClass(AClass):
-    def __init__(self, ignore):
-        pass
-
-try: raise AClass()
-except: pass
-
-try: raise AClass()
-except AClass: pass
-
-try: raise BClass()
-except AClass: pass
-
-try: raise BClass()
-except CClass: raise TestFailed
-except: pass
-
-a = AClass()
-b = BClass()
-
-try: raise AClass, b
-except BClass, v:
-        if v != b: raise TestFailed
-else: raise TestFailed
-
-try: raise b
-except AClass, v:
-        if v != b: raise TestFailed
-
-# not enough arguments
-try:  raise BClass, a
-except TypeError: pass
-
-try:  raise DClass, a
-except DClass, v:
-    if not isinstance(v, DClass):
-        raise TestFailed
-
-print '2.3 comparing function objects'
-
-f = eval('lambda: None')
-g = eval('lambda: None')
-if f != g: raise TestFailed
-
-f = eval('lambda a: a')
-g = eval('lambda a: a')
-if f != g: raise TestFailed
-
-f = eval('lambda a=1: a')
-g = eval('lambda a=1: a')
-if f != g: raise TestFailed
-
-f = eval('lambda: 0')
-g = eval('lambda: 1')
-if f == g: raise TestFailed
-
-f = eval('lambda: None')
-g = eval('lambda a: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a: None')
-g = eval('lambda b: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a: None')
-g = eval('lambda a=None: None')
-if f == g: raise TestFailed
-
-f = eval('lambda a=0: None')
-g = eval('lambda a=1: None')
-if f == g: raise TestFailed
diff --git a/Lib/dos-8x3/test_ope.py b/Lib/dos-8x3/test_ope.py
deleted file mode 100755
index 723e57c..0000000
--- a/Lib/dos-8x3/test_ope.py
+++ /dev/null
@@ -1,22 +0,0 @@
-# Test to see if openpty works. (But don't worry if it isn't available.)
-
-import os
-from test_support import verbose, TestFailed, TestSkipped
-
-try:
-    if verbose:
-        print "Calling os.openpty()"
-    master, slave = os.openpty()
-    if verbose:
-        print "(master, slave) = (%d, %d)"%(master, slave)
-except AttributeError:
-    raise TestSkipped, "No openpty() available."
-
-if not os.isatty(master):
-    raise TestFailed, "Master-end of pty is not a terminal."
-if not os.isatty(slave):
-    raise TestFailed, "Slave-end of pty is not a terminal."
-
-os.write(slave, 'Ping!')
-print os.read(master, 1024)
-
diff --git a/Lib/dos-8x3/test_par.py b/Lib/dos-8x3/test_par.py
deleted file mode 100644
index bc41de4..0000000
--- a/Lib/dos-8x3/test_par.py
+++ /dev/null
@@ -1,178 +0,0 @@
-import os.path
-import parser
-import pprint
-import sys
-
-from parser import expr, suite, sequence2ast
-from test_support import verbose
-
-#
-#  First, we test that we can generate trees from valid source fragments,
-#  and that these valid trees are indeed allowed by the tree-loading side
-#  of the parser module.
-#
-
-def roundtrip(f, s):
-    st1 = f(s)
-    t = st1.totuple()
-    st2 = parser.sequence2ast(t)
-
-def roundtrip_fromfile(filename):
-    roundtrip(suite, open(filename).read())
-
-def test_expr(s):
-    print "expr:", s
-    roundtrip(expr, s)
-
-def test_suite(s):
-    print "suite:", s
-    roundtrip(suite, s)
-
-
-print "Expressions:"
-
-test_expr("foo(1)")
-test_expr("[1, 2, 3]")
-test_expr("[x**3 for x in range(20)]")
-test_expr("[x**3 for x in range(20) if x % 3]")
-test_expr("foo(*args)")
-test_expr("foo(*args, **kw)")
-test_expr("foo(**kw)")
-test_expr("foo(key=value)")
-test_expr("foo(key=value, *args)")
-test_expr("foo(key=value, *args, **kw)")
-test_expr("foo(key=value, **kw)")
-test_expr("foo(a, b, c, *args)")
-test_expr("foo(a, b, c, *args, **kw)")
-test_expr("foo(a, b, c, **kw)")
-test_expr("foo + bar")
-
-print
-print "Statements:"
-test_suite("print")
-test_suite("print 1")
-test_suite("print 1,")
-test_suite("print >>fp")
-test_suite("print >>fp, 1")
-test_suite("print >>fp, 1,")
-
-# expr_stmt
-test_suite("a")
-test_suite("a = b")
-test_suite("a = b = c = d = e")
-test_suite("a += b")
-test_suite("a -= b")
-test_suite("a *= b")
-test_suite("a /= b")
-test_suite("a %= b")
-test_suite("a &= b")
-test_suite("a |= b")
-test_suite("a ^= b")
-test_suite("a <<= b")
-test_suite("a >>= b")
-test_suite("a **= b")
-
-#d = os.path.dirname(os.__file__)
-#roundtrip_fromfile(os.path.join(d, "os.py"))
-#roundtrip_fromfile(os.path.join(d, "test", "test_parser.py"))
-
-#
-#  Second, we take *invalid* trees and make sure we get ParserError
-#  rejections for them.
-#
-
-print
-print "Invalid parse trees:"
-
-def check_bad_tree(tree, label):
-    print
-    print label
-    try:
-        sequence2ast(tree)
-    except parser.ParserError:
-        print "caught expected exception for invalid tree"
-        pass
-    else:
-        print "test failed: did not properly detect invalid tree:"
-        pprint.pprint(tree)
-
-
-# not even remotely valid:
-check_bad_tree((1, 2, 3), "<junk>")
-
-# print >>fp,
-tree = \
-(257,
- (264,
-  (265,
-   (266,
-    (268,
-     (1, 'print'),
-     (35, '>>'),
-     (290,
-      (291,
-       (292,
-        (293,
-         (295,
-          (296,
-           (297,
-            (298, (299, (300, (301, (302, (303, (1, 'fp')))))))))))))),
-     (12, ','))),
-   (4, ''))),
- (0, ''))
-
-check_bad_tree(tree, "print >>fp,")
-
-# a,,c
-tree = \
-(258,
- (311,
-  (290,
-   (291,
-    (292,
-     (293,
-      (295,
-       (296, (297, (298, (299, (300, (301, (302, (303, (1, 'a')))))))))))))),
-  (12, ','),
-  (12, ','),
-  (290,
-   (291,
-    (292,
-     (293,
-      (295,
-       (296, (297, (298, (299, (300, (301, (302, (303, (1, 'c'))))))))))))))),
- (4, ''),
- (0, ''))
-
-check_bad_tree(tree, "a,,c")
-
-# a $= b
-tree = \
-(257,
- (264,
-  (265,
-   (266,
-    (267,
-     (312,
-      (291,
-       (292,
-        (293,
-         (294,
-          (296,
-           (297,
-            (298,
-             (299, (300, (301, (302, (303, (304, (1, 'a'))))))))))))))),
-     (268, (37, '$=')),
-     (312,
-      (291,
-       (292,
-        (293,
-         (294,
-          (296,
-           (297,
-            (298,
-             (299, (300, (301, (302, (303, (304, (1, 'b'))))))))))))))))),
-   (4, ''))),
- (0, ''))
-
-check_bad_tree(tree, "a $= b")
diff --git a/Lib/dos-8x3/test_pic.py b/Lib/dos-8x3/test_pic.py
deleted file mode 100644
index 3c81fdd..0000000
--- a/Lib/dos-8x3/test_pic.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# Test the pickle module
-
-# break into multiple strings to please font-lock-mode
-DATA = """(lp0
-I0
-aL1L
-aF2.0
-ac__builtin__
-complex
-p1
-""" \
-"""(F3.0
-F0.0
-tp2
-Rp3
-a(S'abc'
-p4
-g4
-""" \
-"""(i__main__
-C
-p5
-""" \
-"""(dp6
-S'foo'
-p7
-I1
-sS'bar'
-p8
-I2
-sbg5
-tp9
-ag9
-aI5
-a.
-"""
-
-BINDATA = ']q\000(K\000L1L\012G@\000\000\000\000\000\000\000c__builtin__\012complex\012q\001(G@\010\000\000\000\000\000\000G\000\000\000\000\000\000\000\000tq\002Rq\003(U\003abcq\004h\004(c__main__\012C\012q\005oq\006}q\007(U\003fooq\010K\001U\003barq\011K\002ubh\006tq\012h\012K\005e.'
-
-class C:
-    def __cmp__(self, other):
-        return cmp(self.__dict__, other.__dict__)
-
-import __main__
-__main__.C = C
-
-def dotest(pickle):
-    c = C()
-    c.foo = 1
-    c.bar = 2
-    x = [0, 1L, 2.0, 3.0+0j]
-    y = ('abc', 'abc', c, c)
-    x.append(y)
-    x.append(y)
-    x.append(5)
-    r = []
-    r.append(r)
-    print "dumps()"
-    s = pickle.dumps(x)
-    print "loads()"
-    x2 = pickle.loads(s)
-    if x2 == x: print "ok"
-    else: print "bad"
-    print "loads() DATA"
-    x2 = pickle.loads(DATA)
-    if x2 == x: print "ok"
-    else: print "bad"
-    print "dumps() binary"
-    s = pickle.dumps(x, 1)
-    print "loads() binary"
-    x2 = pickle.loads(s)
-    if x2 == x: print "ok"
-    else: print "bad"
-    print "loads() BINDATA"
-    x2 = pickle.loads(BINDATA)
-    if x2 == x: print "ok"
-    else: print "bad"
-    s = pickle.dumps(r)
-    print "dumps() RECURSIVE"
-    x2 = pickle.loads(s)
-    if x2 == r: print "ok"
-    else: print "bad"
-    # don't create cyclic garbage
-    del x2[0]
-    del r[0]
-
-    # Test protection against closed files
-    import tempfile, os
-    fn = tempfile.mktemp()
-    f = open(fn, "w")
-    f.close()
-    try:
-        pickle.dump(123, f)
-    except ValueError:
-        pass
-    else:
-        print "dump to closed file should raise ValueError"
-    f = open(fn, "r")
-    f.close()
-    try:
-        pickle.load(f)
-    except ValueError:
-        pass
-    else:
-        print "load from closed file should raise ValueError"
-    os.remove(fn)
-
-    # Test specific bad cases
-    for i in range(10):
-        try:
-            x = pickle.loads('garyp')
-        except KeyError, y:
-            # pickle
-            del y
-        except pickle.BadPickleGet, y:
-            # cPickle
-            del y
-        else:
-            print "unexpected success!"
-            break
-
-    # Test insecure strings
-    insecure = ["abc", "2 + 2", # not quoted
-                "'abc' + 'def'", # not a single quoted string
-                "'abc", # quote is not closed
-                "'abc\"", # open quote and close quote don't match
-                "'abc'   ?", # junk after close quote
-                # some tests of the quoting rules
-                "'abc\"\''",
-                "'\\\\a\'\'\'\\\'\\\\\''",
-                ]
-    for s in insecure:
-        buf = "S" + s + "\012p0\012."
-        try:
-            x = pickle.loads(buf)
-        except ValueError:
-            pass
-        else:
-            print "accepted insecure string: %s" % repr(buf)
-        
-
-import pickle
-dotest(pickle)
diff --git a/Lib/dos-8x3/test_pol.py b/Lib/dos-8x3/test_pol.py
deleted file mode 100644
index 82d8372..0000000
--- a/Lib/dos-8x3/test_pol.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# Test case for the os.poll() function
-    
-import sys, os, select, random
-from test_support import verbose, TestSkipped, TESTFN
-
-try:
-    select.poll
-except AttributeError:
-    raise TestSkipped, "select.poll not defined -- skipping test_poll"
-
-
-def find_ready_matching(ready, flag):
-    match = []
-    for fd, mode in ready:
-        if mode & flag:
-            match.append(fd)
-    return match
-
-def test_poll1():
-    """Basic functional test of poll object
-
-    Create a bunch of pipe and test that poll works with them.
-    """
-    print 'Running poll test 1'
-    p = select.poll()
-
-    NUM_PIPES = 12
-    MSG = " This is a test."
-    MSG_LEN = len(MSG)
-    readers = []
-    writers = []
-    r2w = {}
-    w2r = {}
-
-    for i in range(NUM_PIPES):
-        rd, wr = os.pipe()
-        p.register(rd, select.POLLIN)
-        p.register(wr, select.POLLOUT)
-        readers.append(rd)
-        writers.append(wr)
-        r2w[rd] = wr
-        w2r[wr] = rd
-
-    while writers:
-        ready = p.poll()
-        ready_writers = find_ready_matching(ready, select.POLLOUT)
-        if not ready_writers:
-            raise RuntimeError, "no pipes ready for writing"
-        wr = random.choice(ready_writers)
-        os.write(wr, MSG)
-
-        ready = p.poll()
-        ready_readers = find_ready_matching(ready, select.POLLIN)
-        if not ready_readers:
-            raise RuntimeError, "no pipes ready for reading"
-        rd = random.choice(ready_readers)
-        buf = os.read(rd, MSG_LEN)
-        assert len(buf) == MSG_LEN
-        print buf
-        os.close(r2w[rd]) ; os.close( rd )
-        p.unregister( r2w[rd] )
-        p.unregister( rd )
-        writers.remove(r2w[rd])
-
-    poll_unit_tests()
-    print 'Poll test 1 complete'
-
-def poll_unit_tests():
-    # returns NVAL for invalid file descriptor
-    FD = 42
-    try:
-        os.close(FD)
-    except OSError:
-        pass
-    p = select.poll()
-    p.register(FD)
-    r = p.poll()
-    assert r[0] == (FD, select.POLLNVAL)
-
-    f = open(TESTFN, 'w')
-    fd = f.fileno()
-    p = select.poll()
-    p.register(f)
-    r = p.poll()
-    assert r[0][0] == fd
-    f.close()
-    r = p.poll()
-    assert r[0] == (fd, select.POLLNVAL)
-    os.unlink(TESTFN)
-
-    # type error for invalid arguments
-    p = select.poll()
-    try:
-        p.register(p)
-    except TypeError:
-        pass
-    else:
-        print "Bogus register call did not raise TypeError"
-    try:
-        p.unregister(p)
-    except TypeError:
-        pass
-    else:
-        print "Bogus unregister call did not raise TypeError"
-
-    # can't unregister non-existent object
-    p = select.poll()
-    try:
-        p.unregister(3)
-    except KeyError:
-        pass
-    else:
-        print "Bogus unregister call did not raise KeyError"
-
-    # Test error cases
-    pollster = select.poll()
-    class Nope:
-        pass
-
-    class Almost:
-        def fileno(self):
-            return 'fileno'
-
-    try:
-        pollster.register( Nope(), 0 )
-    except TypeError: pass
-    else: print 'expected TypeError exception, not raised'
-
-    try:
-        pollster.register( Almost(), 0 )
-    except TypeError: pass
-    else: print 'expected TypeError exception, not raised'
-
-
-# Another test case for poll().  This is copied from the test case for
-# select(), modified to use poll() instead.
-
-def test_poll2():
-    print 'Running poll test 2'
-    cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
-    p = os.popen(cmd, 'r')
-    pollster = select.poll()
-    pollster.register( p, select.POLLIN )
-    for tout in (0, 1000, 2000, 4000, 8000, 16000) + (-1,)*10:
-        if verbose:
-            print 'timeout =', tout
-        fdlist = pollster.poll(tout)
-        if (fdlist == []):
-            continue
-        fd, flags = fdlist[0]
-        if flags & select.POLLHUP:
-            line = p.readline()
-            if line != "":
-                print 'error: pipe seems to be closed, but still returns data'
-            continue
-
-        elif flags & select.POLLIN:
-            line = p.readline()
-            if verbose:
-                print `line`
-            if not line:
-                if verbose:
-                    print 'EOF'
-                break
-            continue
-        else:
-            print 'Unexpected return value from select.poll:', fdlist
-    p.close()
-    print 'Poll test 2 complete'
-
-test_poll1()
-test_poll2()
diff --git a/Lib/dos-8x3/test_pop.py b/Lib/dos-8x3/test_pop.py
deleted file mode 100644
index 1215847..0000000
--- a/Lib/dos-8x3/test_pop.py
+++ /dev/null
@@ -1,65 +0,0 @@
-#! /usr/bin/env python
-"""Test script for popen2.py
-   Christian Tismer
-"""
-
-import os
-
-# popen2 contains its own testing routine
-# which is especially useful to see if open files
-# like stdin can be read successfully by a forked
-# subprocess.
-
-def main():
-    print "Test popen2 module:"
-    try:
-        from os import popen
-    except ImportError:
-        # if we don't have os.popen, check that
-        # we have os.fork.  if not, skip the test
-        # (by raising an ImportError)
-        from os import fork
-    import popen2
-    popen2._test()
-
-
-def _test():
-    # same test as popen2._test(), but using the os.popen*() API
-    print "Testing os module:"
-    import popen2
-    cmd  = "cat"
-    teststr = "ab cd\n"
-    if os.name == "nt":
-        cmd = "more"
-    # "more" doesn't act the same way across Windows flavors,
-    # sometimes adding an extra newline at the start or the
-    # end.  So we strip whitespace off both ends for comparison.
-    expected = teststr.strip()
-    print "testing popen2..."
-    w, r = os.popen2(cmd)
-    w.write(teststr)
-    w.close()
-    got = r.read()
-    if got.strip() != expected:
-        raise ValueError("wrote %s read %s" % (`teststr`, `got`))
-    print "testing popen3..."
-    try:
-        w, r, e = os.popen3([cmd])
-    except:
-        w, r, e = os.popen3(cmd)
-    w.write(teststr)
-    w.close()
-    got = r.read()
-    if got.strip() != expected:
-        raise ValueError("wrote %s read %s" % (`teststr`, `got`))
-    got = e.read()
-    if got:
-        raise ValueError("unexected %s on stderr" % `got`)
-    for inst in popen2._active[:]:
-        inst.wait()
-    if popen2._active:
-        raise ValueError("_active not empty")
-    print "All OK"
-
-main()
-_test()
diff --git a/Lib/dos-8x3/test_pos.py b/Lib/dos-8x3/test_pos.py
deleted file mode 100644
index 27bee61..0000000
--- a/Lib/dos-8x3/test_pos.py
+++ /dev/null
@@ -1,42 +0,0 @@
-import posixpath
-import string
-
-errors = 0
-
-def tester(fn, wantResult):
-	gotResult = eval(fn)
-	if wantResult != gotResult:
-		print "error!"
-		print "evaluated: " + str(fn)
-		print "should be: " + str(wantResult)
-		print " returned: " + str(gotResult)
-		print ""
-		global errors
-		errors = errors + 1
-
-tester('posixpath.splitdrive("/foo/bar")', ('', '/foo/bar'))
-
-tester('posixpath.split("/foo/bar")', ('/foo', 'bar'))
-tester('posixpath.split("/")', ('/', ''))
-tester('posixpath.split("foo")', ('', 'foo'))
-
-tester('posixpath.splitext("foo.ext")', ('foo', '.ext'))
-tester('posixpath.splitext("/foo/foo.ext")', ('/foo/foo', '.ext'))
-
-tester('posixpath.isabs("/")', 1)
-tester('posixpath.isabs("/foo")', 1)
-tester('posixpath.isabs("/foo/bar")', 1)
-tester('posixpath.isabs("foo/bar")', 0)
-
-tester('posixpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])',
-       "/home/swen")
-tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/eggs"])',
-       "/home/swen/")
-tester('posixpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])',
-       "/home/swen/spam")
-
-if errors:
-	print str(errors) + " errors."
-else:
-	print "No errors.  Thank your lucky stars."
-
diff --git a/Lib/dos-8x3/test_pye.py b/Lib/dos-8x3/test_pye.py
deleted file mode 100644
index a119987..0000000
--- a/Lib/dos-8x3/test_pye.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# Very simple test - Parse a file and print what happens
-
-# XXX TypeErrors on calling handlers, or on bad return values from a
-# handler, are obscure and unhelpful.
-        
-from xml.parsers import expat
-                
-class Outputter:
-    def StartElementHandler(self, name, attrs):
-        print 'Start element:\n\t', repr(name), attrs
-        
-    def EndElementHandler(self, name):
-        print 'End element:\n\t', repr(name)
-
-    def CharacterDataHandler(self, data):
-        data = data.strip()
-        if data:
-            print 'Character data:'
-            print '\t', repr(data)
-
-    def ProcessingInstructionHandler(self, target, data):
-        print 'PI:\n\t', repr(target), repr(data)
-
-    def StartNamespaceDeclHandler(self, prefix, uri):
-        print 'NS decl:\n\t', repr(prefix), repr(uri)
-
-    def EndNamespaceDeclHandler(self, prefix):
-        print 'End of NS decl:\n\t', repr(prefix)
-
-    def StartCdataSectionHandler(self):
-        print 'Start of CDATA section'
-
-    def EndCdataSectionHandler(self):
-        print 'End of CDATA section'
-
-    def CommentHandler(self, text):
-        print 'Comment:\n\t', repr(text)
-
-    def NotationDeclHandler(self, *args):
-        name, base, sysid, pubid = args
-        print 'Notation declared:', args
-
-    def UnparsedEntityDeclHandler(self, *args):
-        entityName, base, systemId, publicId, notationName = args
-        print 'Unparsed entity decl:\n\t', args
-    
-    def NotStandaloneHandler(self, userData):
-        print 'Not standalone'
-        return 1
-        
-    def ExternalEntityRefHandler(self, *args):
-        context, base, sysId, pubId = args
-        print 'External entity ref:', args
-        return 1
-
-    def DefaultHandler(self, userData):
-        pass
-
-    def DefaultHandlerExpand(self, userData):
-        pass
-
-
-def confirm(ok):
-    if ok:
-        print "OK."
-    else:
-        print "Not OK."
-
-out = Outputter()
-parser = expat.ParserCreate(namespace_separator='!')
-
-# Test getting/setting returns_unicode
-parser.returns_unicode = 0; confirm(parser.returns_unicode == 0)
-parser.returns_unicode = 1; confirm(parser.returns_unicode == 1)
-parser.returns_unicode = 2; confirm(parser.returns_unicode == 1)
-parser.returns_unicode = 0; confirm(parser.returns_unicode == 0)
-
-HANDLER_NAMES = [
-    'StartElementHandler', 'EndElementHandler',
-    'CharacterDataHandler', 'ProcessingInstructionHandler',
-    'UnparsedEntityDeclHandler', 'NotationDeclHandler',
-    'StartNamespaceDeclHandler', 'EndNamespaceDeclHandler',
-    'CommentHandler', 'StartCdataSectionHandler',
-    'EndCdataSectionHandler',
-    'DefaultHandler', 'DefaultHandlerExpand',
-    #'NotStandaloneHandler',
-    'ExternalEntityRefHandler'
-    ]
-for name in HANDLER_NAMES:
-    setattr(parser, name, getattr(out, name))
-
-data = '''\
-<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
-<?xml-stylesheet href="stylesheet.css"?>
-<!-- comment data -->
-<!DOCTYPE quotations SYSTEM "quotations.dtd" [
-<!ELEMENT root ANY>
-<!NOTATION notation SYSTEM "notation.jpeg">
-<!ENTITY acirc "&#226;">
-<!ENTITY external_entity SYSTEM "entity.file">
-<!ENTITY unparsed_entity SYSTEM "entity.file" NDATA notation>
-%unparsed_entity;
-]>
-
-<root attr1="value1" attr2="value2&#8000;">
-<myns:subelement xmlns:myns="http://www.python.org/namespace">
-     Contents of subelements
-</myns:subelement>
-<sub2><![CDATA[contents of CDATA section]]></sub2>
-&external_entity;
-</root>
-'''
-
-# Produce UTF-8 output
-parser.returns_unicode = 0
-try:
-    parser.Parse(data, 1)
-except expat.error:
-    print '** Error', parser.ErrorCode, expat.ErrorString(parser.ErrorCode)
-    print '** Line', parser.ErrorLineNumber
-    print '** Column', parser.ErrorColumnNumber
-    print '** Byte', parser.ErrorByteIndex
-
-# Try the parse again, this time producing Unicode output
-parser = expat.ParserCreate(namespace_separator='!')
-parser.returns_unicode = 1
-
-for name in HANDLER_NAMES:
-    setattr(parser, name, getattr(out, name))
-try:
-    parser.Parse(data, 1)
-except expat.error:
-    print '** Error', parser.ErrorCode, expat.ErrorString(parser.ErrorCode)
-    print '** Line', parser.ErrorLineNumber
-    print '** Column', parser.ErrorColumnNumber
-    print '** Byte', parser.ErrorByteIndex
-
-# Try parsing a file
-parser = expat.ParserCreate(namespace_separator='!')
-parser.returns_unicode = 1
-
-for name in HANDLER_NAMES:
-    setattr(parser, name, getattr(out, name))
-import StringIO
-file = StringIO.StringIO(data)
-try:
-    parser.ParseFile(file)
-except expat.error:
-    print '** Error', parser.ErrorCode, expat.ErrorString(parser.ErrorCode)
-    print '** Line', parser.ErrorLineNumber
-    print '** Column', parser.ErrorColumnNumber
-    print '** Byte', parser.ErrorByteIndex
diff --git a/Lib/dos-8x3/test_reg.py b/Lib/dos-8x3/test_reg.py
deleted file mode 100644
index 6a7f01b..0000000
--- a/Lib/dos-8x3/test_reg.py
+++ /dev/null
@@ -1,110 +0,0 @@
-from test_support import verbose
-import regex
-from regex_syntax import *
-
-re = 'a+b+c+'
-print 'no match:', regex.match(re, 'hello aaaabcccc world')
-print 'successful search:', regex.search(re, 'hello aaaabcccc world')
-try:
-    cre = regex.compile('\(' + re)
-except regex.error:
-    print 'caught expected exception'
-else:
-    print 'expected regex.error not raised'
-
-print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb')
-prev = regex.set_syntax(RE_SYNTAX_AWK)
-print 'successful awk syntax:', regex.search('(a+)|(b+)', 'cdb')
-regex.set_syntax(prev)
-print 'failed awk syntax:', regex.search('(a+)|(b+)', 'cdb')
-
-re = '\(<one>[0-9]+\) *\(<two>[0-9]+\)'
-print 'matching with group names and compile()'
-cre = regex.compile(re)
-print cre.match('801 999')
-try:
-    print cre.group('one')
-except regex.error:
-    print 'caught expected exception'
-else:
-    print 'expected regex.error not raised'
-
-print 'matching with group names and symcomp()'
-cre = regex.symcomp(re)
-print cre.match('801 999')
-print cre.group(0)
-print cre.group('one')
-print cre.group(1, 2)
-print cre.group('one', 'two')
-print 'realpat:', cre.realpat
-print 'groupindex:', cre.groupindex
-
-re = 'world'
-cre = regex.compile(re)
-print 'not case folded search:', cre.search('HELLO WORLD')
-cre = regex.compile(re, regex.casefold)
-print 'case folded search:', cre.search('HELLO WORLD')
-
-print '__members__:', cre.__members__
-print 'regs:', cre.regs
-print 'last:', cre.last
-print 'translate:', len(cre.translate)
-print 'givenpat:', cre.givenpat
-
-print 'match with pos:', cre.match('hello world', 7)
-print 'search with pos:', cre.search('hello world there world', 7)
-print 'bogus group:', cre.group(0, 1, 3)
-try:
-    print 'no name:', cre.group('one')
-except regex.error:
-    print 'caught expected exception'
-else:
-    print 'expected regex.error not raised'
-
-from regex_tests import *
-if verbose: print 'Running regex_tests test suite'
-
-for t in tests:
-    pattern=s=outcome=repl=expected=None
-    if len(t)==5:
-        pattern, s, outcome, repl, expected = t
-    elif len(t)==3:
-        pattern, s, outcome = t 
-    else:
-        raise ValueError, ('Test tuples should have 3 or 5 fields',t)
-
-    try:
-        obj=regex.compile(pattern)
-    except regex.error:
-        if outcome==SYNTAX_ERROR: pass    # Expected a syntax error
-        else: 
-            # Regex syntax errors aren't yet reported, so for 
-            # the official test suite they'll be quietly ignored.
-            pass
-            #print '=== Syntax error:', t
-    else:
-        try:
-            result=obj.search(s)
-        except regex.error, msg:
-            print '=== Unexpected exception', t, repr(msg)
-        if outcome==SYNTAX_ERROR:
-            # This should have been a syntax error; forget it.
-            pass
-        elif outcome==FAIL:
-            if result==-1: pass   # No match, as expected
-            else: print '=== Succeeded incorrectly', t
-        elif outcome==SUCCEED:
-            if result!=-1:
-                # Matched, as expected, so now we compute the
-                # result string and compare it to our expected result.
-                start, end = obj.regs[0]
-                found=s[start:end]
-                groups=obj.group(1,2,3,4,5,6,7,8,9,10)
-                vardict=vars()
-                for i in range(len(groups)):
-                    vardict['g'+str(i+1)]=str(groups[i])
-                repl=eval(repl)
-                if repl!=expected:
-                    print '=== grouping error', t, repr(repl)+' should be '+repr(expected)
-            else:
-                print '=== Failed incorrectly', t
diff --git a/Lib/dos-8x3/test_rfc.py b/Lib/dos-8x3/test_rfc.py
deleted file mode 100644
index 36e7a51..0000000
--- a/Lib/dos-8x3/test_rfc.py
+++ /dev/null
@@ -1,126 +0,0 @@
-from test_support import verbose
-import rfc822, sys
-try:
-    from cStringIO import StringIO
-except ImportError:
-    from StringIO import StringIO
-
-def test(msg, results):
-    fp = StringIO()
-    fp.write(msg)
-    fp.seek(0)
-    m = rfc822.Message(fp)
-    i = 0
-    
-    for n, a in m.getaddrlist('to') + m.getaddrlist('cc'):
-        if verbose:
-            print 'name:', repr(n), 'addr:', repr(a)
-        try:
-            mn, ma = results[i][0], results[i][1]
-        except IndexError:
-            print 'extra parsed address:', repr(n), repr(a)
-            continue
-        i = i + 1
-        if mn == n and ma == a:
-            if verbose:
-                print '    [matched]'
-        else:
-            if verbose:
-                print '    [no match]'
-            print 'not found:', repr(n), repr(a)
-
-    out = m.getdate('date')
-    if out:
-        if verbose:
-            print 'Date:', m.getheader('date')
-        if out == (1999, 1, 13, 23, 57, 35, 0, 0, 0):
-            if verbose:
-                print '    [matched]'
-        else:
-            if verbose:
-                print '    [no match]'
-            print 'Date conversion failed:', out
-
-# Note: all test cases must have the same date (in various formats),
-# or no date!
-
-test('''Date:    Wed, 13 Jan 1999 23:57:35 -0500
-From:    Guido van Rossum <guido@CNRI.Reston.VA.US>
-To:      "Guido van
-	 : Rossum" <guido@python.org>
-Subject: test2
-
-test2
-''', [('Guido van\n	 : Rossum', 'guido@python.org')])
-
-test('''From: Barry <bwarsaw@python.org
-To: guido@python.org (Guido: the Barbarian)
-Subject: nonsense
-Date: Wednesday, January 13 1999 23:57:35 -0500
-
-test''', [('Guido: the Barbarian', 'guido@python.org'),
-          ])
-
-test('''From: Barry <bwarsaw@python.org
-To: guido@python.org (Guido: the Barbarian)
-Cc: "Guido: the Madman" <guido@python.org>
-Date:  13-Jan-1999 23:57:35 EST
-
-test''', [('Guido: the Barbarian', 'guido@python.org'),
-          ('Guido: the Madman', 'guido@python.org')
-          ])
-
-test('''To: "The monster with
-     the very long name: Guido" <guido@python.org>
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('The monster with\n     the very long name: Guido',
-           'guido@python.org')])
-
-test('''To: "Amit J. Patel" <amitp@Theory.Stanford.EDU>
-CC: Mike Fletcher <mfletch@vrtelecom.com>,
-        "'string-sig@python.org'" <string-sig@python.org>
-Cc: fooz@bat.com, bart@toof.com
-Cc: goit@lip.com
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('Amit J. Patel', 'amitp@Theory.Stanford.EDU'),
-          ('Mike Fletcher', 'mfletch@vrtelecom.com'),
-          ("'string-sig@python.org'", 'string-sig@python.org'),
-          ('', 'fooz@bat.com'),
-          ('', 'bart@toof.com'),
-          ('', 'goit@lip.com'),
-          ])
-
-# This one is just twisted.  I don't know what the proper result should be,
-# but it shouldn't be to infloop, which is what used to happen!
-test('''To: <[smtp:dd47@mail.xxx.edu]_at_hmhq@hdq-mdm1-imgout.companay.com>
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('', ''),
-          ('', 'dd47@mail.xxx.edu'),
-          ('', '_at_hmhq@hdq-mdm1-imgout.companay.com')
-          ])
-
-# This exercises the old commas-in-a-full-name bug, which should be doing the
-# right thing in recent versions of the module.
-test('''To: "last, first" <userid@foo.net>
-
-test''', [('last, first', 'userid@foo.net'),
-          ])
-
-test('''To: (Comment stuff) "Quoted name"@somewhere.com
-
-test''', [('Comment stuff', '"Quoted name"@somewhere.com'),
-          ])
-
-test('''To: :
-Cc: goit@lip.com
-Date:    Wed, 13 Jan 1999 23:57:35 -0500
-
-test''', [('', 'goit@lip.com')])
-
-
-test('''To: guido@[132.151.1.21]
-
-foo''', [('', 'guido@[132.151.1.21]')])
diff --git a/Lib/dos-8x3/test_rgb.py b/Lib/dos-8x3/test_rgb.py
deleted file mode 100755
index 1fa201d..0000000
--- a/Lib/dos-8x3/test_rgb.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Testing rgbimg module
-
-import rgbimg, os, uu
-
-from test_support import verbose, unlink, findfile
-
-class error(Exception):
-        pass
-
-print 'RGBimg test suite:'
-
-def testimg(rgb_file, raw_file):
-        rgb_file = findfile(rgb_file)
-        raw_file = findfile(raw_file)
-        width, height = rgbimg.sizeofimage(rgb_file)
-        rgb = rgbimg.longimagedata(rgb_file)
-        if len(rgb) != width * height * 4:
-                raise error, 'bad image length'
-        raw = open(raw_file, 'rb').read()
-        if rgb != raw:
-                raise error, \
-                      'images don\'t match for '+rgb_file+' and '+raw_file
-        for depth in [1, 3, 4]:
-                rgbimg.longstoimage(rgb, width, height, depth, '@.rgb')
-        os.unlink('@.rgb')
-
-table = [
-    ('testrgb.uue', 'test.rgb'),
-    ('testimg.uue', 'test.rawimg'),
-    ('testimgr.uue', 'test.rawimg.rev'),
-    ]
-for source, target in table:
-    source = findfile(source)
-    target = findfile(target)
-    if verbose:
-        print "uudecoding", source, "->", target, "..."
-    uu.decode(source, target)
-
-if verbose:
-    print "testing..."
-
-ttob = rgbimg.ttob(0)
-if ttob != 0:
-        raise error, 'ttob should start out as zero'
-
-testimg('test.rgb', 'test.rawimg')
-
-ttob = rgbimg.ttob(1)
-if ttob != 0:
-        raise error, 'ttob should be zero'
-
-testimg('test.rgb', 'test.rawimg.rev')
-
-ttob = rgbimg.ttob(0)
-if ttob != 1:
-        raise error, 'ttob should be one'
-
-ttob = rgbimg.ttob(0)
-if ttob != 0:
-        raise error, 'ttob should be zero'
-
-for source, target in table:
-    unlink(findfile(target))
diff --git a/Lib/dos-8x3/test_rot.py b/Lib/dos-8x3/test_rot.py
deleted file mode 100644
index a5c02aa..0000000
--- a/Lib/dos-8x3/test_rot.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import rotor
-
-r = rotor.newrotor("you'll never guess this")
-r = rotor.newrotor("you'll never guess this", 12)
-
-A = 'spam and eggs'
-B = 'cheese shop'
-
-a = r.encrypt(A)
-print `a`
-b = r.encryptmore(B)
-print `b`
-
-A1 = r.decrypt(a)
-print A1
-if A1 <> A:
-    print 'decrypt failed'
-
-B1 = r.decryptmore(b)
-print B1
-if B1 <> B:
-    print 'decryptmore failed'
-
-try:
-    r.setkey()
-except TypeError:
-    pass
-r.setkey('you guessed it!')
diff --git a/Lib/dos-8x3/test_sel.py b/Lib/dos-8x3/test_sel.py
deleted file mode 100755
index b198cf1..0000000
--- a/Lib/dos-8x3/test_sel.py
+++ /dev/null
@@ -1,63 +0,0 @@
-# Testing select module
-from test_support import verbose
-import select
-import os
-
-# test some known error conditions
-try:
-    rfd, wfd, xfd = select.select(1, 2, 3)
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
-
-class Nope:
-    pass
-
-class Almost:
-    def fileno(self):
-        return 'fileno'
-    
-try:
-    rfd, wfd, xfd = select.select([Nope()], [], [])
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
-
-try:
-    rfd, wfd, xfd = select.select([Almost()], [], [])
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
-
-
-def test():
-        import sys
-        if sys.platform[:3] in ('win', 'mac', 'os2'):
-                if verbose:
-                        print "Can't test select easily on", sys.platform
-                return
-        cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
-        p = os.popen(cmd, 'r')
-        for tout in (0, 1, 2, 4, 8, 16) + (None,)*10:
-                if verbose:
-                        print 'timeout =', tout
-                rfd, wfd, xfd = select.select([p], [], [], tout)
-                if (rfd, wfd, xfd) == ([], [], []):
-                        continue
-                if (rfd, wfd, xfd) == ([p], [], []):
-                        line = p.readline()
-                        if verbose:
-                                print `line`
-                        if not line:
-                                if verbose:
-                                        print 'EOF'
-                                break
-                        continue
-                print 'Unexpected return values from select():', rfd, wfd, xfd
-        p.close()
-
-test()
-
diff --git a/Lib/dos-8x3/test_sig.py b/Lib/dos-8x3/test_sig.py
deleted file mode 100755
index 02b5dc3..0000000
--- a/Lib/dos-8x3/test_sig.py
+++ /dev/null
@@ -1,66 +0,0 @@
-# Test the signal module
-from test_support import verbose, TestSkipped
-import signal
-import os
-import sys
-
-if sys.platform[:3] in ('win', 'os2'):
-    raise TestSkipped, "Can't test signal on %s" % sys.platform[:3]
-
-if verbose:
-	x = '-x'
-else:
-	x = '+x'
-pid = os.getpid()
-
-# Shell script that will send us asynchronous signals
-script = """
- (
-	set %(x)s
-	sleep 2
-	kill -5 %(pid)d
-	sleep 2
-	kill -2 %(pid)d
-	sleep 2
-	kill -3 %(pid)d
- ) &
-""" % vars()
-
-def handlerA(*args):
-	if verbose:
-		print "handlerA", args
-
-HandlerBCalled = "HandlerBCalled"	# Exception
-
-def handlerB(*args):
-	if verbose:
-		print "handlerB", args
-	raise HandlerBCalled, args
-
-signal.alarm(20)			# Entire test lasts at most 20 sec.
-signal.signal(5, handlerA)
-signal.signal(2, handlerB)
-signal.signal(3, signal.SIG_IGN)
-signal.signal(signal.SIGALRM, signal.default_int_handler)
-
-os.system(script)
-
-print "starting pause() loop..."
-
-try:
-	while 1:
-		if verbose:
-			print "call pause()..."
-		try:
-			signal.pause()
-			if verbose:
-				print "pause() returned"
-		except HandlerBCalled:
-			if verbose:
-				print "HandlerBCalled exception caught"
-			else:
-				pass
-				
-except KeyboardInterrupt:
-	if verbose:
-		print "KeyboardInterrupt (assume the alarm() went off)"
diff --git a/Lib/dos-8x3/test_soc.py b/Lib/dos-8x3/test_soc.py
deleted file mode 100644
index 92b9336..0000000
--- a/Lib/dos-8x3/test_soc.py
+++ /dev/null
@@ -1,146 +0,0 @@
-# Not tested:
-#       socket.fromfd()
-#       sktobj.getsockopt()
-#       sktobj.recvfrom()
-#       sktobj.sendto()
-#       sktobj.setblocking()
-#       sktobj.setsockopt()
-#       sktobj.shutdown()
-
-
-from test_support import verbose, TestFailed
-import socket
-import os
-import time
-import string
-
-def missing_ok(str):
-    try:
-        getattr(socket, str)
-    except AttributeError:
-        pass
-
-try: raise socket.error
-except socket.error: print "socket.error"
-
-socket.AF_INET
-
-socket.SOCK_STREAM
-socket.SOCK_DGRAM
-socket.SOCK_RAW
-socket.SOCK_RDM
-socket.SOCK_SEQPACKET
-
-for optional in ("AF_UNIX",
-
-                 "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
-                 "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
-                 "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
-                 "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
-                 "SO_ERROR", "SO_TYPE", "SOMAXCONN",
-
-                 "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
-                 "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
-                 "MSG_ETAG",
-
-                 "SOL_SOCKET",
-
-                 "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
-                 "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
-                 "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
-                 "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
-                 "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
-                 "IPPROTO_RAW", "IPPROTO_MAX",
-
-                 "IPPORT_RESERVED", "IPPORT_USERRESERVED",
-
-                 "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
-                 "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
-                 "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",
-
-                 "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
-                 "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
-                 "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
-                 "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
-                 "IP_DROP_MEMBERSHIP",
-                 ):
-    missing_ok(optional)
-
-socktype = socket.SocketType
-hostname = socket.gethostname()
-ip = socket.gethostbyname(hostname)
-hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
-all_host_names = [hname] + aliases
-
-if verbose:
-    print hostname
-    print ip
-    print hname, aliases, ipaddrs
-    print all_host_names
-
-for name in all_host_names:
-    if string.find(name, '.'):
-        break
-else:
-    print 'FQDN not found'
-
-print socket.getservbyname('telnet', 'tcp')
-try:
-    socket.getservbyname('telnet', 'udp')
-except socket.error:
-    pass
-
-
-canfork = hasattr(os, 'fork')
-try:
-    PORT = 50007
-    if not canfork or os.fork():
-        # parent is server
-        s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        s.bind(("127.0.0.1", PORT))
-        s.listen(1)
-        if verbose:
-            print 'parent accepting'
-        if canfork:
-            conn, addr = s.accept()
-            if verbose:
-                print 'connected by', addr
-            # couple of interesting tests while we've got a live socket
-            f = conn.fileno()
-            if verbose:
-                print 'fileno:', f
-            p = conn.getpeername()
-            if verbose:
-                print 'peer:', p
-            n = conn.getsockname()
-            if verbose:
-                print 'sockname:', n
-            f = conn.makefile()
-            if verbose:
-                print 'file obj:', f
-            while 1:
-                data = conn.recv(1024)
-                if not data:
-                    break
-                if verbose:
-                    print 'received:', data
-                conn.send(data)
-            conn.close()
-    else:
-        try:
-            # child is client
-            time.sleep(5)
-            s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-            if verbose:
-                print 'child connecting'
-            s.connect(("127.0.0.1", PORT))
-            msg = 'socket test'
-            s.send(msg)
-            data = s.recv(1024)
-            if msg <> data:
-                print 'parent/client mismatch'
-            s.close()
-        finally:
-            os._exit(1)
-except socket.error, msg:
-    raise TestFailed, msg
diff --git a/Lib/dos-8x3/test_str.py b/Lib/dos-8x3/test_str.py
deleted file mode 100644
index ea237cd..0000000
--- a/Lib/dos-8x3/test_str.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# Tests StringIO and cStringIO
-
-def do_test(module):
-    s = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"+'\n')*5
-    f = module.StringIO(s)
-    print f.read(10)
-    print f.readline()
-    print len(f.readlines(60))
-
-    f = module.StringIO()
-    f.write('abcdef')
-    f.seek(3)
-    f.write('uvwxyz')
-    f.write('!')
-    print `f.getvalue()`
-    f.close()
-    f = module.StringIO()
-    f.write(s)
-    f.seek(10)
-    f.truncate()
-    print `f.getvalue()`
-    f.seek(0)
-    f.truncate(5)
-    print `f.getvalue()`
-    f.close()
-    try:
-        f.write("frobnitz")
-    except ValueError, e:
-        print "Caught expected ValueError writing to closed StringIO:"
-        print e
-    else:
-        print "Failed to catch ValueError writing to closed StringIO."
-
-# Don't bother testing cStringIO without
-import StringIO, cStringIO
-do_test(StringIO)
-do_test(cStringIO)
diff --git a/Lib/dos-8x3/test_sun.py b/Lib/dos-8x3/test_sun.py
deleted file mode 100644
index af18761..0000000
--- a/Lib/dos-8x3/test_sun.py
+++ /dev/null
@@ -1,20 +0,0 @@
-from test_support import verbose, findfile, TestFailed
-import sunaudiodev
-import os
-
-def play_sound_file(path):
-    fp = open(path, 'r')
-    data = fp.read()
-    fp.close()
-    try:
-        a = sunaudiodev.open('w')
-    except sunaudiodev.error, msg:
-        raise TestFailed, msg
-    else:
-        a.write(data)
-        a.close()
-
-def test():
-    play_sound_file(findfile('audiotest.au'))
-
-test()
diff --git a/Lib/dos-8x3/test_sup.py b/Lib/dos-8x3/test_sup.py
deleted file mode 100755
index 99bacda..0000000
--- a/Lib/dos-8x3/test_sup.py
+++ /dev/null
@@ -1,73 +0,0 @@
-"""Supporting definitions for the Python regression test."""
-
-
-class Error(Exception):
-        """Base class for regression test exceptions."""
-
-class TestFailed(Error):
-        """Test failed."""
-
-class TestSkipped(Error):
-        """Test skipped.
-
-        This can be raised to indicate that a test was deliberatly
-        skipped, but not because a feature wasn't available.  For
-        example, if some resource can't be used, such as the network
-        appears to be unavailable, this should be raised instead of
-        TestFailed.
-
-        """
-
-
-verbose = 1				# Flag set to 0 by regrtest.py
-use_large_resources = 1 # Flag set to 0 by regrtest.py
-
-def unload(name):
-	import sys
-	try:
-		del sys.modules[name]
-	except KeyError:
-		pass
-
-def forget(modname):
-	unload(modname)
-	import sys, os
-	for dirname in sys.path:
-		try:
-			os.unlink(os.path.join(dirname, modname + '.pyc'))
-		except os.error:
-			pass
-
-FUZZ = 1e-6
-
-def fcmp(x, y): # fuzzy comparison function
-	if type(x) == type(0.0) or type(y) == type(0.0):
-		try:
-			x, y = coerce(x, y)
-			fuzz = (abs(x) + abs(y)) * FUZZ
-			if abs(x-y) <= fuzz:
-				return 0
-		except:
-			pass
-	elif type(x) == type(y) and type(x) in (type(()), type([])):
-		for i in range(min(len(x), len(y))):
-			outcome = fcmp(x[i], y[i])
-			if outcome <> 0:
-				return outcome
-		return cmp(len(x), len(y))
-	return cmp(x, y)
-
-TESTFN = '@test' # Filename used for testing
-from os import unlink
-
-def findfile(file, here=__file__):
-	import os
-	if os.path.isabs(file):
-		return file
-	import sys
-	path = sys.path
-	path = [os.path.dirname(here)] + path
-	for dn in path:
-		fn = os.path.join(dn, file)
-		if os.path.exists(fn): return fn
-	return file
diff --git a/Lib/dos-8x3/test_thr.py b/Lib/dos-8x3/test_thr.py
deleted file mode 100755
index 710fb89..0000000
--- a/Lib/dos-8x3/test_thr.py
+++ /dev/null
@@ -1,113 +0,0 @@
-# Very rudimentary test of thread module
-
-# Create a bunch of threads, let each do some work, wait until all are done
-
-from test_support import verbose
-import random
-import thread
-import time
-
-mutex = thread.allocate_lock()
-rmutex = thread.allocate_lock() # for calls to random
-running = 0
-done = thread.allocate_lock()
-done.acquire()
-
-numtasks = 10
-
-def task(ident):
-	global running
-	rmutex.acquire()
-	delay = random.random() * numtasks
-	rmutex.release()
-	if verbose:
-	    print 'task', ident, 'will run for', round(delay, 1), 'sec'
-	time.sleep(delay)
-	if verbose:
-	    print 'task', ident, 'done'
-	mutex.acquire()
-	running = running - 1
-	if running == 0:
-		done.release()
-	mutex.release()
-
-next_ident = 0
-def newtask():
-	global next_ident, running
-	mutex.acquire()
-	next_ident = next_ident + 1
-	if verbose:
-	    print 'creating task', next_ident
-	thread.start_new_thread(task, (next_ident,))
-	running = running + 1
-	mutex.release()
-
-for i in range(numtasks):
-	newtask()
-
-print 'waiting for all tasks to complete'
-done.acquire()
-print 'all tasks done'
-
-class barrier:
-	def __init__(self, n):
-		self.n = n
-		self.waiting = 0
-		self.checkin  = thread.allocate_lock()
-		self.checkout = thread.allocate_lock()
-		self.checkout.acquire()
-
-	def enter(self):
-		checkin, checkout = self.checkin, self.checkout
-
-		checkin.acquire()
-		self.waiting = self.waiting + 1
-		if self.waiting == self.n:
-			self.waiting = self.n - 1
-			checkout.release()
-			return
-		checkin.release()
-
-		checkout.acquire()
-		self.waiting = self.waiting - 1
-		if self.waiting == 0:
-			checkin.release()
-			return
-		checkout.release()
-
-numtrips = 3
-def task2(ident):
-	global running
-	for i in range(numtrips):
-		if ident == 0:
-			# give it a good chance to enter the next
-			# barrier before the others are all out
-			# of the current one
-			delay = 0.001
-		else:
-			rmutex.acquire()
-			delay = random.random() * numtasks
-			rmutex.release()
-		if verbose:
-		    print 'task', ident, 'will run for', round(delay, 1), 'sec'
-		time.sleep(delay)
-		if verbose:
-		    print 'task', ident, 'entering barrier', i
-		bar.enter()
-		if verbose:
-		    print 'task', ident, 'leaving barrier', i
-	mutex.acquire()
-	running = running - 1
-	if running == 0:
-		done.release()
-	mutex.release()
-
-print '\n*** Barrier Test ***'
-if done.acquire(0):
-	raise ValueError, "'done' should have remained acquired"
-bar = barrier(numtasks)
-running = numtasks
-for i in range(numtasks):
-	thread.start_new_thread(task2, (i,))
-done.acquire()
-print 'all tasks done'
diff --git a/Lib/dos-8x3/test_tim.py b/Lib/dos-8x3/test_tim.py
deleted file mode 100644
index 03d081e..0000000
--- a/Lib/dos-8x3/test_tim.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import time
-
-time.altzone
-time.clock()
-t = time.time()
-time.asctime(time.gmtime(t))
-if time.ctime(t) <> time.asctime(time.localtime(t)):
-    print 'time.ctime(t) <> time.asctime(time.localtime(t))'
-
-time.daylight
-if long(time.mktime(time.localtime(t))) <> long(t):
-    print 'time.mktime(time.localtime(t)) <> t'
-
-time.sleep(1.2)
-tt = time.gmtime(t)
-for directive in ('a', 'A', 'b', 'B', 'c', 'd', 'H', 'I',
-                  'j', 'm', 'M', 'p', 'S',
-                  'U', 'w', 'W', 'x', 'X', 'y', 'Y', 'Z', '%'):
-    format = ' %' + directive
-    try:
-        time.strftime(format, tt)
-    except ValueError:
-        print 'conversion specifier:', format, ' failed.'
-
-time.timezone
-time.tzname
-
-# expected errors
-try:
-    time.asctime(0)
-except TypeError:
-    pass
-
-try:
-    time.mktime((999999, 999999, 999999, 999999,
-                 999999, 999999, 999999, 999999,
-                 999999))
-except OverflowError:
-    pass
diff --git a/Lib/dos-8x3/test_tok.py b/Lib/dos-8x3/test_tok.py
deleted file mode 100644
index cd97e9a..0000000
--- a/Lib/dos-8x3/test_tok.py
+++ /dev/null
@@ -1,10 +0,0 @@
-from test_support import verbose, findfile
-import tokenize, os, sys
-
-if verbose:
-    print 'starting...'
-file = open(findfile('tokenize_tests.py'))
-tokenize.tokenize(file.readline)
-if verbose:
-    print 'finished'
-
diff --git a/Lib/dos-8x3/test_typ.py b/Lib/dos-8x3/test_typ.py
deleted file mode 100755
index e3a51f0..0000000
--- a/Lib/dos-8x3/test_typ.py
+++ /dev/null
@@ -1,267 +0,0 @@
-# Python test set -- part 6, built-in types
-
-from test_support import *
-
-print '6. Built-in types'
-
-print '6.1 Truth value testing'
-if None: raise TestFailed, 'None is true instead of false'
-if 0: raise TestFailed, '0 is true instead of false'
-if 0L: raise TestFailed, '0L is true instead of false'
-if 0.0: raise TestFailed, '0.0 is true instead of false'
-if '': raise TestFailed, '\'\' is true instead of false'
-if (): raise TestFailed, '() is true instead of false'
-if []: raise TestFailed, '[] is true instead of false'
-if {}: raise TestFailed, '{} is true instead of false'
-if not 1: raise TestFailed, '1 is false instead of true'
-if not 1L: raise TestFailed, '1L is false instead of true'
-if not 1.0: raise TestFailed, '1.0 is false instead of true'
-if not 'x': raise TestFailed, '\'x\' is false instead of true'
-if not (1, 1): raise TestFailed, '(1, 1) is false instead of true'
-if not [1]: raise TestFailed, '[1] is false instead of true'
-if not {'x': 1}: raise TestFailed, '{\'x\': 1} is false instead of true'
-def f(): pass
-class C: pass
-import sys
-x = C()
-if not f: raise TestFailed, 'f is false instead of true'
-if not C: raise TestFailed, 'C is false instead of true'
-if not sys: raise TestFailed, 'sys is false instead of true'
-if not x: raise TestFailed, 'x is false instead of true'
-
-print '6.2 Boolean operations'
-if 0 or 0: raise TestFailed, '0 or 0 is true instead of false'
-if 1 and 1: pass
-else: raise TestFailed, '1 and 1 is false instead of false'
-if not 1: raise TestFailed, 'not 1 is true instead of false'
-
-print '6.3 Comparisons'
-if 0 < 1 <= 1 == 1 >= 1 > 0 <> 1: pass
-else: raise TestFailed, 'int comparisons failed'
-if 0L < 1L <= 1L == 1L >= 1L > 0L <> 1L: pass
-else: raise TestFailed, 'long int comparisons failed'
-if 0.0 < 1.0 <= 1.0 == 1.0 >= 1.0 > 0.0 <> 1.0: pass
-else: raise TestFailed, 'float comparisons failed'
-if '' < 'a' <= 'a' == 'a' < 'abc' < 'abd' < 'b': pass
-else: raise TestFailed, 'string comparisons failed'
-if 0 in [0] and 0 not in [1]: pass
-else: raise TestFailed, 'membership test failed'
-if None is None and [] is not []: pass
-else: raise TestFailed, 'identity test failed'
-
-print '6.4 Numeric types (mostly conversions)'
-if 0 <> 0L or 0 <> 0.0 or 0L <> 0.0: raise TestFailed, 'mixed comparisons'
-if 1 <> 1L or 1 <> 1.0 or 1L <> 1.0: raise TestFailed, 'mixed comparisons'
-if -1 <> -1L or -1 <> -1.0 or -1L <> -1.0:
-	raise TestFailed, 'int/long/float value not equal'
-if int(1.9) == 1 == int(1.1) and int(-1.1) == -1 == int(-1.9): pass
-else: raise TestFailed, 'int() does not round properly'
-if long(1.9) == 1L == long(1.1) and long(-1.1) == -1L == long(-1.9): pass
-else: raise TestFailed, 'long() does not round properly'
-if float(1) == 1.0 and float(-1) == -1.0 and float(0) == 0.0: pass
-else: raise TestFailed, 'float() does not work properly'
-print '6.4.1 32-bit integers'
-if 12 + 24 <> 36: raise TestFailed, 'int op'
-if 12 + (-24) <> -12: raise TestFailed, 'int op'
-if (-12) + 24 <> 12: raise TestFailed, 'int op'
-if (-12) + (-24) <> -36: raise TestFailed, 'int op'
-if not 12 < 24: raise TestFailed, 'int op'
-if not -24 < -12: raise TestFailed, 'int op'
-# Test for a particular bug in integer multiply
-xsize, ysize, zsize = 238, 356, 4
-if not (xsize*ysize*zsize == zsize*xsize*ysize == 338912):
-	raise TestFailed, 'int mul commutativity'
-print '6.4.2 Long integers'
-if 12L + 24L <> 36L: raise TestFailed, 'long op'
-if 12L + (-24L) <> -12L: raise TestFailed, 'long op'
-if (-12L) + 24L <> 12L: raise TestFailed, 'long op'
-if (-12L) + (-24L) <> -36L: raise TestFailed, 'long op'
-if not 12L < 24L: raise TestFailed, 'long op'
-if not -24L < -12L: raise TestFailed, 'long op'
-x = sys.maxint
-if int(long(x)) != x: raise TestFailed, 'long op'
-try: int(long(x)+1L)
-except OverflowError: pass
-else:raise TestFailed, 'long op'
-x = -x
-if int(long(x)) != x: raise TestFailed, 'long op'
-x = x-1
-if int(long(x)) != x: raise TestFailed, 'long op'
-try: int(long(x)-1L)
-except OverflowError: pass
-else:raise TestFailed, 'long op'
-print '6.4.3 Floating point numbers'
-if 12.0 + 24.0 <> 36.0: raise TestFailed, 'float op'
-if 12.0 + (-24.0) <> -12.0: raise TestFailed, 'float op'
-if (-12.0) + 24.0 <> 12.0: raise TestFailed, 'float op'
-if (-12.0) + (-24.0) <> -36.0: raise TestFailed, 'float op'
-if not 12.0 < 24.0: raise TestFailed, 'float op'
-if not -24.0 < -12.0: raise TestFailed, 'float op'
-
-print '6.5 Sequence types'
-
-print '6.5.1 Strings'
-if len('') <> 0: raise TestFailed, 'len(\'\')'
-if len('a') <> 1: raise TestFailed, 'len(\'a\')'
-if len('abcdef') <> 6: raise TestFailed, 'len(\'abcdef\')'
-if 'xyz' + 'abcde' <> 'xyzabcde': raise TestFailed, 'string concatenation'
-if 'xyz'*3 <> 'xyzxyzxyz': raise TestFailed, 'string repetition *3'
-if 0*'abcde' <> '': raise TestFailed, 'string repetition 0*'
-if min('abc') <> 'a' or max('abc') <> 'c': raise TestFailed, 'min/max string'
-if 'a' in 'abc' and 'b' in 'abc' and 'c' in 'abc' and 'd' not in 'abc': pass
-else: raise TestFailed, 'in/not in string'
-x = 'x'*103
-if '%s!'%x != x+'!': raise TestFailed, 'nasty string formatting bug'
-
-print '6.5.2 Tuples'
-if len(()) <> 0: raise TestFailed, 'len(())'
-if len((1,)) <> 1: raise TestFailed, 'len((1,))'
-if len((1,2,3,4,5,6)) <> 6: raise TestFailed, 'len((1,2,3,4,5,6))'
-if (1,2)+(3,4) <> (1,2,3,4): raise TestFailed, 'tuple concatenation'
-if (1,2)*3 <> (1,2,1,2,1,2): raise TestFailed, 'tuple repetition *3'
-if 0*(1,2,3) <> (): raise TestFailed, 'tuple repetition 0*'
-if min((1,2)) <> 1 or max((1,2)) <> 2: raise TestFailed, 'min/max tuple'
-if 0 in (0,1,2) and 1 in (0,1,2) and 2 in (0,1,2) and 3 not in (0,1,2): pass
-else: raise TestFailed, 'in/not in tuple'
-
-print '6.5.3 Lists'
-if len([]) <> 0: raise TestFailed, 'len([])'
-if len([1,]) <> 1: raise TestFailed, 'len([1,])'
-if len([1,2,3,4,5,6]) <> 6: raise TestFailed, 'len([1,2,3,4,5,6])'
-if [1,2]+[3,4] <> [1,2,3,4]: raise TestFailed, 'list concatenation'
-if [1,2]*3 <> [1,2,1,2,1,2]: raise TestFailed, 'list repetition *3'
-if [1,2]*3L <> [1,2,1,2,1,2]: raise TestFailed, 'list repetition *3L'
-if 0*[1,2,3] <> []: raise TestFailed, 'list repetition 0*'
-if 0L*[1,2,3] <> []: raise TestFailed, 'list repetition 0L*'
-if min([1,2]) <> 1 or max([1,2]) <> 2: raise TestFailed, 'min/max list'
-if 0 in [0,1,2] and 1 in [0,1,2] and 2 in [0,1,2] and 3 not in [0,1,2]: pass
-else: raise TestFailed, 'in/not in list'
-a = [1, 2, 3, 4, 5]
-a[:-1] = a
-if a != [1, 2, 3, 4, 5, 5]:
-	raise TestFailed, "list self-slice-assign (head)"
-a = [1, 2, 3, 4, 5]
-a[1:] = a
-if a != [1, 1, 2, 3, 4, 5]:
-	raise TestFailed, "list self-slice-assign (tail)"
-a = [1, 2, 3, 4, 5]
-a[1:-1] = a
-if a != [1, 1, 2, 3, 4, 5, 5]:
-	raise TestFailed, "list self-slice-assign (center)"
-
-
-print '6.5.3a Additional list operations'
-a = [0,1,2,3,4]
-a[0L] = 1
-a[1L] = 2
-a[2L] = 3
-if a <> [1,2,3,3,4]: raise TestFailed, 'list item assignment [0L], [1L], [2L]'
-a[0] = 5
-a[1] = 6
-a[2] = 7
-if a <> [5,6,7,3,4]: raise TestFailed, 'list item assignment [0], [1], [2]'
-a[-2L] = 88
-a[-1L] = 99
-if a <> [5,6,7,88,99]: raise TestFailed, 'list item assignment [-2L], [-1L]'
-a[-2] = 8
-a[-1] = 9
-if a <> [5,6,7,8,9]: raise TestFailed, 'list item assignment [-2], [-1]'
-a[:2] = [0,4]
-a[-3:] = []
-a[1:1] = [1,2,3]
-if a <> [0,1,2,3,4]: raise TestFailed, 'list slice assignment'
-a[ 1L : 4L] = [7,8,9]
-if a <> [0,7,8,9,4]: raise TestFailed, 'list slice assignment using long ints'
-del a[1:4]
-if a <> [0,4]: raise TestFailed, 'list slice deletion'
-del a[0]
-if a <> [4]: raise TestFailed, 'list item deletion [0]'
-del a[-1]
-if a <> []: raise TestFailed, 'list item deletion [-1]'
-a=range(0,5)
-del a[1L:4L]
-if a <> [0,4]: raise TestFailed, 'list slice deletion'
-del a[0L]
-if a <> [4]: raise TestFailed, 'list item deletion [0]'
-del a[-1L]
-if a <> []: raise TestFailed, 'list item deletion [-1]'
-a.append(0)
-a.append(1)
-a.append(2)
-if a <> [0,1,2]: raise TestFailed, 'list append'
-a.insert(0, -2)
-a.insert(1, -1)
-a.insert(2,0)
-if a <> [-2,-1,0,0,1,2]: raise TestFailed, 'list insert'
-if a.count(0) <> 2: raise TestFailed, ' list count'
-if a.index(0) <> 2: raise TestFailed, 'list index'
-a.remove(0)
-if a <> [-2,-1,0,1,2]: raise TestFailed, 'list remove'
-a.reverse()
-if a <> [2,1,0,-1,-2]: raise TestFailed, 'list reverse'
-a.sort()
-if a <> [-2,-1,0,1,2]: raise TestFailed, 'list sort'
-def revcmp(a, b): return cmp(b, a)
-a.sort(revcmp)
-if a <> [2,1,0,-1,-2]: raise TestFailed, 'list sort with cmp func'
-# The following dumps core in unpatched Python 1.5:
-def myComparison(x,y):
-    return cmp(x%3, y%7)
-z = range(12)
-z.sort(myComparison)
-
-# Test extreme cases with long ints
-a = [0,1,2,3,4]
-if a[ -pow(2,128L): 3 ] != [0,1,2]: 
-	raise TestFailed, "list slicing with too-small long integer"
-if a[ 3: pow(2,145L) ] != [3,4]: 
-	raise TestFailed, "list slicing with too-large long integer"
-
-print '6.6 Mappings == Dictionaries'
-d = {}
-if d.keys() <> []: raise TestFailed, '{}.keys()'
-if d.has_key('a') <> 0: raise TestFailed, '{}.has_key(\'a\')'
-if len(d) <> 0: raise TestFailed, 'len({})'
-d = {'a': 1, 'b': 2}
-if len(d) <> 2: raise TestFailed, 'len(dict)'
-k = d.keys()
-k.sort()
-if k <> ['a', 'b']: raise TestFailed, 'dict keys()'
-if d.has_key('a') and d.has_key('b') and not d.has_key('c'): pass
-else: raise TestFailed, 'dict keys()'
-if d['a'] <> 1 or d['b'] <> 2: raise TestFailed, 'dict item'
-d['c'] = 3
-d['a'] = 4
-if d['c'] <> 3 or d['a'] <> 4: raise TestFailed, 'dict item assignment'
-del d['b']
-if d <> {'a': 4, 'c': 3}: raise TestFailed, 'dict item deletion'
-d = {1:1, 2:2, 3:3}
-d.clear()
-if d != {}: raise TestFailed, 'dict clear'
-d.update({1:100})
-d.update({2:20})
-d.update({1:1, 2:2, 3:3})
-if d != {1:1, 2:2, 3:3}: raise TestFailed, 'dict update'
-if d.copy() != {1:1, 2:2, 3:3}: raise TestFailed, 'dict copy'
-if {}.copy() != {}: raise TestFailed, 'empty dict copy'
-# dict.get()
-d = {}
-if d.get('c') != None: raise TestFailed, 'missing {} get, no 2nd arg'
-if d.get('c', 3) != 3: raise TestFailed, 'missing {} get, w/ 2nd arg'
-d = {'a' : 1, 'b' : 2}
-if d.get('c') != None: raise TestFailed, 'missing dict get, no 2nd arg'
-if d.get('c', 3) != 3: raise TestFailed, 'missing dict get, w/ 2nd arg'
-if d.get('a') != 1: raise TestFailed, 'present dict get, no 2nd arg'
-if d.get('a', 3) != 1: raise TestFailed, 'present dict get, w/ 2nd arg'
-# dict.setdefault()
-d = {}
-if d.setdefault('key0') <> None:
-	raise TestFailed, 'missing {} setdefault, no 2nd arg'
-if d.setdefault('key0') <> None:
-	raise TestFailed, 'present {} setdefault, no 2nd arg'
-d.setdefault('key', []).append(3)
-if d['key'][0] <> 3:
-	raise TestFailed, 'missing {} setdefault, w/ 2nd arg'
-d.setdefault('key', []).append(4)
-if len(d['key']) <> 2:
-	raise TestFailed, 'present {} setdefault, w/ 2nd arg'
diff --git a/Lib/dos-8x3/test_uni.py b/Lib/dos-8x3/test_uni.py
deleted file mode 100644
index 0c44fbf..0000000
--- a/Lib/dos-8x3/test_uni.py
+++ /dev/null
@@ -1,518 +0,0 @@
-""" Test script for the Unicode implementation.
-
-Written by Marc-Andre Lemburg (mal@lemburg.com).
-
-(c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
-
-"""
-from test_support import verbose
-import sys
-
-def test(method, input, output, *args):
-    if verbose:
-        print '%s.%s%s =? %s... ' % (repr(input), method, args, output),
-    try:
-        f = getattr(input, method)
-        value = apply(f, args)
-    except:
-        value = sys.exc_type
-        exc = sys.exc_info()[:2]
-    else:
-        exc = None
-    if value != output:
-        if verbose:
-            print 'no'
-        print '*',f, `input`, `output`, `value`
-        if exc:
-            print '  value == %s: %s' % (exc)
-    else:
-        if verbose:
-            print 'yes'
-
-test('capitalize', u' hello ', u' hello ')
-test('capitalize', u'hello ', u'Hello ')
-
-test('title', u' hello ', u' Hello ')
-test('title', u'hello ', u'Hello ')
-test('title', u"fOrMaT thIs aS titLe String", u'Format This As Title String')
-test('title', u"fOrMaT,thIs-aS*titLe;String", u'Format,This-As*Title;String')
-test('title', u"getInt", u'Getint')
-
-test('find', u'abcdefghiabc', 0, u'abc')
-test('find', u'abcdefghiabc', 9, u'abc', 1)
-test('find', u'abcdefghiabc', -1, u'def', 4)
-
-test('rfind', u'abcdefghiabc', 9, u'abc')
-
-test('lower', u'HeLLo', u'hello')
-test('lower', u'hello', u'hello')
-
-test('upper', u'HeLLo', u'HELLO')
-test('upper', u'HELLO', u'HELLO')
-
-if 0:
-    transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
-
-    test('maketrans', u'abc', transtable, u'xyz')
-    test('maketrans', u'abc', ValueError, u'xyzq')
-
-test('split', u'this is the split function',
-     [u'this', u'is', u'the', u'split', u'function'])
-test('split', u'a|b|c|d', [u'a', u'b', u'c', u'd'], u'|')
-test('split', u'a|b|c|d', [u'a', u'b', u'c|d'], u'|', 2)
-test('split', u'a b c d', [u'a', u'b c d'], None, 1)
-test('split', u'a b c d', [u'a', u'b', u'c d'], None, 2)
-test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 3)
-test('split', u'a b c d', [u'a', u'b', u'c', u'd'], None, 4)
-test('split', u'a b c d', [u'a b c d'], None, 0)
-test('split', u'a  b  c  d', [u'a', u'b', u'c  d'], None, 2)
-test('split', u'a b c d ', [u'a', u'b', u'c', u'd'])
-
-# join now works with any sequence type
-class Sequence:
-    def __init__(self): self.seq = 'wxyz'
-    def __len__(self): return len(self.seq)
-    def __getitem__(self, i): return self.seq[i]
-
-test('join', u' ', u'a b c d', [u'a', u'b', u'c', u'd'])
-test('join', u'', u'abcd', (u'a', u'b', u'c', u'd'))
-test('join', u' ', u'w x y z', Sequence())
-test('join', u' ', TypeError, 7)
-
-class BadSeq(Sequence):
-    def __init__(self): self.seq = [7, u'hello', 123L]
-
-test('join', u' ', TypeError, BadSeq())
-
-result = u''
-for i in range(10):
-    if i > 0:
-        result = result + u':'
-    result = result + u'x'*10
-test('join', u':', result, [u'x' * 10] * 10)
-test('join', u':', result, (u'x' * 10,) * 10)
-
-test('strip', u'   hello   ', u'hello')
-test('lstrip', u'   hello   ', u'hello   ')
-test('rstrip', u'   hello   ', u'   hello')
-test('strip', u'hello', u'hello')
-
-test('swapcase', u'HeLLo cOmpUteRs', u'hEllO CoMPuTErS')
-
-if 0:
-    test('translate', u'xyzabcdef', u'xyzxyz', transtable, u'def')
-
-    table = string.maketrans('a', u'A')
-    test('translate', u'abc', u'Abc', table)
-    test('translate', u'xyz', u'xyz', table)
-
-test('replace', u'one!two!three!', u'one@two!three!', u'!', u'@', 1)
-test('replace', u'one!two!three!', u'onetwothree', '!', '')
-test('replace', u'one!two!three!', u'one@two@three!', u'!', u'@', 2)
-test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 3)
-test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@', 4)
-test('replace', u'one!two!three!', u'one!two!three!', u'!', u'@', 0)
-test('replace', u'one!two!three!', u'one@two@three@', u'!', u'@')
-test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@')
-test('replace', u'one!two!three!', u'one!two!three!', u'x', u'@', 2)
-
-test('startswith', u'hello', 1, u'he')
-test('startswith', u'hello', 1, u'hello')
-test('startswith', u'hello', 0, u'hello world')
-test('startswith', u'hello', 1, u'')
-test('startswith', u'hello', 0, u'ello')
-test('startswith', u'hello', 1, u'ello', 1)
-test('startswith', u'hello', 1, u'o', 4)
-test('startswith', u'hello', 0, u'o', 5)
-test('startswith', u'hello', 1, u'', 5)
-test('startswith', u'hello', 0, u'lo', 6)
-test('startswith', u'helloworld', 1, u'lowo', 3)
-test('startswith', u'helloworld', 1, u'lowo', 3, 7)
-test('startswith', u'helloworld', 0, u'lowo', 3, 6)
-
-test('endswith', u'hello', 1, u'lo')
-test('endswith', u'hello', 0, u'he')
-test('endswith', u'hello', 1, u'')
-test('endswith', u'hello', 0, u'hello world')
-test('endswith', u'helloworld', 0, u'worl')
-test('endswith', u'helloworld', 1, u'worl', 3, 9)
-test('endswith', u'helloworld', 1, u'world', 3, 12)
-test('endswith', u'helloworld', 1, u'lowo', 1, 7)
-test('endswith', u'helloworld', 1, u'lowo', 2, 7)
-test('endswith', u'helloworld', 1, u'lowo', 3, 7)
-test('endswith', u'helloworld', 0, u'lowo', 4, 7)
-test('endswith', u'helloworld', 0, u'lowo', 3, 8)
-test('endswith', u'ab', 0, u'ab', 0, 1)
-test('endswith', u'ab', 0, u'ab', 0, 0)
-
-test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab      def\ng       hi')
-test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab      def\ng       hi', 8)
-test('expandtabs', u'abc\rab\tdef\ng\thi', u'abc\rab  def\ng   hi', 4)
-test('expandtabs', u'abc\r\nab\tdef\ng\thi', u'abc\r\nab  def\ng   hi', 4)
-
-if 0:
-    test('capwords', u'abc def ghi', u'Abc Def Ghi')
-    test('capwords', u'abc\tdef\nghi', u'Abc Def Ghi')
-    test('capwords', u'abc\t   def  \nghi', u'Abc Def Ghi')
-
-# Comparisons:
-print 'Testing Unicode comparisons...',
-assert u'abc' == 'abc'
-assert 'abc' == u'abc'
-assert u'abc' == u'abc'
-assert u'abcd' > 'abc'
-assert 'abcd' > u'abc'
-assert u'abcd' > u'abc'
-assert u'abc' < 'abcd'
-assert 'abc' < u'abcd'
-assert u'abc' < u'abcd'
-print 'done.'
-
-if 0:
-    # Move these tests to a Unicode collation module test...
-
-    print 'Testing UTF-16 code point order comparisons...',
-    #No surrogates, no fixup required.
-    assert u'\u0061' < u'\u20ac'
-    # Non surrogate below surrogate value, no fixup required
-    assert u'\u0061' < u'\ud800\udc02'
-
-    # Non surrogate above surrogate value, fixup required
-    def test_lecmp(s, s2):
-      assert s <  s2 , "comparison failed on %s < %s" % (s, s2)
-
-    def test_fixup(s):
-      s2 = u'\ud800\udc01'
-      test_lecmp(s, s2)
-      s2 = u'\ud900\udc01'
-      test_lecmp(s, s2)
-      s2 = u'\uda00\udc01'
-      test_lecmp(s, s2)
-      s2 = u'\udb00\udc01'
-      test_lecmp(s, s2)
-      s2 = u'\ud800\udd01'
-      test_lecmp(s, s2)
-      s2 = u'\ud900\udd01'
-      test_lecmp(s, s2)
-      s2 = u'\uda00\udd01'
-      test_lecmp(s, s2)
-      s2 = u'\udb00\udd01'
-      test_lecmp(s, s2)
-      s2 = u'\ud800\ude01'
-      test_lecmp(s, s2)
-      s2 = u'\ud900\ude01'
-      test_lecmp(s, s2)
-      s2 = u'\uda00\ude01'
-      test_lecmp(s, s2)
-      s2 = u'\udb00\ude01'
-      test_lecmp(s, s2)
-      s2 = u'\ud800\udfff'
-      test_lecmp(s, s2)
-      s2 = u'\ud900\udfff'
-      test_lecmp(s, s2)
-      s2 = u'\uda00\udfff'
-      test_lecmp(s, s2)
-      s2 = u'\udb00\udfff'
-      test_lecmp(s, s2)
-
-    test_fixup(u'\ue000')
-    test_fixup(u'\uff61')
-
-    # Surrogates on both sides, no fixup required
-    assert u'\ud800\udc02' < u'\ud84d\udc56'
-    print 'done.'
-
-test('ljust', u'abc',  u'abc       ', 10)
-test('rjust', u'abc',  u'       abc', 10)
-test('center', u'abc', u'   abc    ', 10)
-test('ljust', u'abc',  u'abc   ', 6)
-test('rjust', u'abc',  u'   abc', 6)
-test('center', u'abc', u' abc  ', 6)
-test('ljust', u'abc', u'abc', 2)
-test('rjust', u'abc', u'abc', 2)
-test('center', u'abc', u'abc', 2)
-
-test('islower', u'a', 1)
-test('islower', u'A', 0)
-test('islower', u'\n', 0)
-test('islower', u'\u1FFc', 0)
-test('islower', u'abc', 1)
-test('islower', u'aBc', 0)
-test('islower', u'abc\n', 1)
-
-test('isupper', u'a', 0)
-test('isupper', u'A', 1)
-test('isupper', u'\n', 0)
-test('isupper', u'\u1FFc', 0)
-test('isupper', u'ABC', 1)
-test('isupper', u'AbC', 0)
-test('isupper', u'ABC\n', 1)
-
-test('istitle', u'a', 0)
-test('istitle', u'A', 1)
-test('istitle', u'\n', 0)
-test('istitle', u'\u1FFc', 1)
-test('istitle', u'A Titlecased Line', 1)
-test('istitle', u'A\nTitlecased Line', 1)
-test('istitle', u'A Titlecased, Line', 1)
-test('istitle', u'Greek \u1FFcitlecases ...', 1)
-test('istitle', u'Not a capitalized String', 0)
-test('istitle', u'Not\ta Titlecase String', 0)
-test('istitle', u'Not--a Titlecase String', 0)
-
-test('isalpha', u'a', 1)
-test('isalpha', u'A', 1)
-test('isalpha', u'\n', 0)
-test('isalpha', u'\u1FFc', 1)
-test('isalpha', u'abc', 1)
-test('isalpha', u'aBc123', 0)
-test('isalpha', u'abc\n', 0)
-
-test('isalnum', u'a', 1)
-test('isalnum', u'A', 1)
-test('isalnum', u'\n', 0)
-test('isalnum', u'123abc456', 1)
-test('isalnum', u'a1b3c', 1)
-test('isalnum', u'aBc000 ', 0)
-test('isalnum', u'abc\n', 0)
-
-test('splitlines', u"abc\ndef\n\rghi", [u'abc', u'def', u'', u'ghi'])
-test('splitlines', u"abc\ndef\n\r\nghi", [u'abc', u'def', u'', u'ghi'])
-test('splitlines', u"abc\ndef\r\nghi", [u'abc', u'def', u'ghi'])
-test('splitlines', u"abc\ndef\r\nghi\n", [u'abc', u'def', u'ghi'])
-test('splitlines', u"abc\ndef\r\nghi\n\r", [u'abc', u'def', u'ghi', u''])
-test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'', u'abc', u'def', u'ghi', u''])
-test('splitlines', u"\nabc\ndef\r\nghi\n\r", [u'\n', u'abc\n', u'def\r\n', u'ghi\n', u'\r'], 1)
-
-test('translate', u"abababc", u'bbbc', {ord('a'):None})
-test('translate', u"abababc", u'iiic', {ord('a'):None, ord('b'):ord('i')})
-test('translate', u"abababc", u'iiix', {ord('a'):None, ord('b'):ord('i'), ord('c'):u'x'})
-
-# Contains:
-print 'Testing Unicode contains method...',
-assert ('a' in u'abdb') == 1
-assert ('a' in u'bdab') == 1
-assert ('a' in u'bdaba') == 1
-assert ('a' in u'bdba') == 1
-assert ('a' in u'bdba') == 1
-assert (u'a' in u'bdba') == 1
-assert (u'a' in u'bdb') == 0
-assert (u'a' in 'bdb') == 0
-assert (u'a' in 'bdba') == 1
-assert (u'a' in ('a',1,None)) == 1
-assert (u'a' in (1,None,'a')) == 1
-assert (u'a' in (1,None,u'a')) == 1
-assert ('a' in ('a',1,None)) == 1
-assert ('a' in (1,None,'a')) == 1
-assert ('a' in (1,None,u'a')) == 1
-assert ('a' in ('x',1,u'y')) == 0
-assert ('a' in ('x',1,None)) == 0
-print 'done.'
-
-# Formatting:
-print 'Testing Unicode formatting strings...',
-assert u"%s, %s" % (u"abc", "abc") == u'abc, abc'
-assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, 2, 3) == u'abc, abc, 1, 2.000000,  3.00'
-assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", 1, -2, 3) == u'abc, abc, 1, -2.000000,  3.00'
-assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.5) == u'abc, abc, -1, -2.000000,  3.50'
-assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 3.57) == u'abc, abc, -1, -2.000000,  3.57'
-assert u"%s, %s, %i, %f, %5.2f" % (u"abc", "abc", -1, -2, 1003.57) == u'abc, abc, -1, -2.000000, 1003.57'
-assert u"%c" % (u"a",) == u'a'
-assert u"%c" % ("a",) == u'a'
-assert u"%c" % (34,) == u'"'
-assert u"%c" % (36,) == u'$'
-value = u"%r, %r" % (u"abc", "abc") 
-if value != u"u'abc', 'abc'":
-    print '*** formatting failed for "%s"' % 'u"%r, %r" % (u"abc", "abc")'
-
-assert u"%(x)s, %(y)s" % {'x':u"abc", 'y':"def"} == u'abc, def'
-try:
-    value = u"%(x)s, %(ä)s" % {'x':u"abc", u'ä'.encode('utf-8'):"def"} 
-except KeyError:
-    print '*** formatting failed for "%s"' % "u'abc, def'"
-else:
-    assert value == u'abc, def'
-
-# formatting jobs delegated from the string implementation:
-assert '...%(foo)s...' % {'foo':u"abc"} == u'...abc...'
-assert '...%(foo)s...' % {'foo':"abc"} == '...abc...'
-assert '...%(foo)s...' % {u'foo':"abc"} == '...abc...'
-assert '...%(foo)s...' % {u'foo':u"abc"} == u'...abc...'
-assert '...%(foo)s...' % {u'foo':u"abc",'def':123} ==  u'...abc...'
-assert '...%(foo)s...' % {u'foo':u"abc",u'def':123} == u'...abc...'
-assert '...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...1...2...3...abc...'
-assert '...%%...%%s...%s...%s...%s...%s...' % (1,2,3,u"abc") == u'...%...%s...1...2...3...abc...'
-assert '...%s...' % u"abc" == u'...abc...'
-print 'done.'
-
-# Test builtin codecs
-print 'Testing builtin codecs...',
-
-# UTF-8 specific encoding tests:
-assert u'\u20ac'.encode('utf-8') == \
-       ''.join((chr(0xe2), chr(0x82), chr(0xac)))
-assert u'\ud800\udc02'.encode('utf-8') == \
-       ''.join((chr(0xf0), chr(0x90), chr(0x80), chr(0x82)))
-assert u'\ud84d\udc56'.encode('utf-8') == \
-       ''.join((chr(0xf0), chr(0xa3), chr(0x91), chr(0x96)))
-# UTF-8 specific decoding tests
-assert unicode(''.join((chr(0xf0), chr(0xa3), chr(0x91), chr(0x96))),
-               'utf-8') == u'\ud84d\udc56'
-assert unicode(''.join((chr(0xf0), chr(0x90), chr(0x80), chr(0x82))),
-               'utf-8') == u'\ud800\udc02'
-assert unicode(''.join((chr(0xe2), chr(0x82), chr(0xac))),
-               'utf-8') == u'\u20ac'
-
-# Other possible utf-8 test cases:
-# * strict decoding testing for all of the
-#   UTF8_ERROR cases in PyUnicode_DecodeUTF8
-
-
-
-assert unicode('hello','ascii') == u'hello'
-assert unicode('hello','utf-8') == u'hello'
-assert unicode('hello','utf8') == u'hello'
-assert unicode('hello','latin-1') == u'hello'
-
-class String:
-    x = ''
-    def __str__(self):
-        return self.x
-
-o = String()
-
-o.x = 'abc'
-assert unicode(o) == u'abc'
-assert str(o) == 'abc'
-
-o.x = u'abc'
-assert unicode(o) == u'abc'
-assert str(o) == 'abc'
-
-try:
-    u'Andr\202 x'.encode('ascii')
-    u'Andr\202 x'.encode('ascii','strict')
-except ValueError:
-    pass
-else:
-    raise AssertionError, "u'Andr\202'.encode('ascii') failed to raise an exception"
-assert u'Andr\202 x'.encode('ascii','ignore') == "Andr x"
-assert u'Andr\202 x'.encode('ascii','replace') == "Andr? x"
-
-try:
-    unicode('Andr\202 x','ascii')
-    unicode('Andr\202 x','ascii','strict')
-except ValueError:
-    pass
-else:
-    raise AssertionError, "unicode('Andr\202') failed to raise an exception"
-assert unicode('Andr\202 x','ascii','ignore') == u"Andr x"
-assert unicode('Andr\202 x','ascii','replace') == u'Andr\uFFFD x'
-
-assert u'hello'.encode('ascii') == 'hello'
-assert u'hello'.encode('utf-8') == 'hello'
-assert u'hello'.encode('utf8') == 'hello'
-assert u'hello'.encode('utf-16-le') == 'h\000e\000l\000l\000o\000'
-assert u'hello'.encode('utf-16-be') == '\000h\000e\000l\000l\000o'
-assert u'hello'.encode('latin-1') == 'hello'
-
-u = u''.join(map(unichr, range(1024)))
-for encoding in ('utf-8', 'utf-16', 'utf-16-le', 'utf-16-be',
-                 'raw_unicode_escape', 'unicode_escape', 'unicode_internal'):
-    assert unicode(u.encode(encoding),encoding) == u
-
-u = u''.join(map(unichr, range(256)))
-for encoding in (
-    'latin-1',
-    ):
-    try:
-        assert unicode(u.encode(encoding),encoding) == u
-    except AssertionError:
-        print '*** codec "%s" failed round-trip' % encoding
-    except ValueError,why:
-        print '*** codec for "%s" failed: %s' % (encoding, why)
-
-u = u''.join(map(unichr, range(128)))
-for encoding in (
-    'ascii',
-    ):
-    try:
-        assert unicode(u.encode(encoding),encoding) == u
-    except AssertionError:
-        print '*** codec "%s" failed round-trip' % encoding
-    except ValueError,why:
-        print '*** codec for "%s" failed: %s' % (encoding, why)
-
-print 'done.'
-
-print 'Testing standard mapping codecs...',
-
-print '0-127...',
-s = ''.join(map(chr, range(128)))
-for encoding in (
-    'cp037', 'cp1026',
-    'cp437', 'cp500', 'cp737', 'cp775', 'cp850',
-    'cp852', 'cp855', 'cp860', 'cp861', 'cp862',
-    'cp863', 'cp865', 'cp866', 
-    'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',
-    'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6',
-    'iso8859_7', 'iso8859_9', 'koi8_r', 'latin_1',
-    'mac_cyrillic', 'mac_latin2',
-
-    'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',
-    'cp1256', 'cp1257', 'cp1258',
-    'cp856', 'cp857', 'cp864', 'cp869', 'cp874',
-
-    'mac_greek', 'mac_iceland','mac_roman', 'mac_turkish',
-    'cp1006', 'cp875', 'iso8859_8',
-    
-    ### These have undefined mappings:
-    #'cp424',
-    
-    ):
-    try:
-        assert unicode(s,encoding).encode(encoding) == s
-    except AssertionError:
-        print '*** codec "%s" failed round-trip' % encoding
-    except ValueError,why:
-        print '*** codec for "%s" failed: %s' % (encoding, why)
-
-print '128-255...',
-s = ''.join(map(chr, range(128,256)))
-for encoding in (
-    'cp037', 'cp1026',
-    'cp437', 'cp500', 'cp737', 'cp775', 'cp850',
-    'cp852', 'cp855', 'cp860', 'cp861', 'cp862',
-    'cp863', 'cp865', 'cp866', 
-    'iso8859_10', 'iso8859_13', 'iso8859_14', 'iso8859_15',
-    'iso8859_2', 'iso8859_3', 'iso8859_4', 'iso8859_5', 'iso8859_6',
-    'iso8859_7', 'iso8859_9', 'koi8_r', 'latin_1',
-    'mac_cyrillic', 'mac_latin2',
-    
-    ### These have undefined mappings:
-    #'cp1250', 'cp1251', 'cp1252', 'cp1253', 'cp1254', 'cp1255',
-    #'cp1256', 'cp1257', 'cp1258',
-    #'cp424', 'cp856', 'cp857', 'cp864', 'cp869', 'cp874',
-    #'mac_greek', 'mac_iceland','mac_roman', 'mac_turkish',
-    
-    ### These fail the round-trip:
-    #'cp1006', 'cp875', 'iso8859_8',
-    
-    ):
-    try:
-        assert unicode(s,encoding).encode(encoding) == s
-    except AssertionError:
-        print '*** codec "%s" failed round-trip' % encoding
-    except ValueError,why:
-        print '*** codec for "%s" failed: %s' % (encoding, why)
-
-print 'done.'
-
-print 'Testing Unicode string concatenation...',
-assert (u"abc" u"def") == u"abcdef"
-assert ("abc" u"def") == u"abcdef"
-assert (u"abc" "def") == u"abcdef"
-assert (u"abc" u"def" "ghi") == u"abcdefghi"
-assert ("abc" "def" u"ghi") == u"abcdefghi"
-print 'done.'
-
diff --git a/Lib/dos-8x3/test_unp.py b/Lib/dos-8x3/test_unp.py
deleted file mode 100644
index 25b94e9..0000000
--- a/Lib/dos-8x3/test_unp.py
+++ /dev/null
@@ -1,144 +0,0 @@
-from test_support import *
-
-t = (1, 2, 3)
-l = [4, 5, 6]
-
-class Seq:
-    def __getitem__(self, i):
-        if i >= 0 and i < 3: return i
-        raise IndexError
-
-a = -1
-b = -1
-c = -1
-
-# unpack tuple
-if verbose:
-    print 'unpack tuple'
-a, b, c = t
-if a <> 1 or b <> 2 or c <> 3:
-    raise TestFailed
-
-# unpack list
-if verbose:
-    print 'unpack list'
-a, b, c = l
-if a <> 4 or b <> 5 or c <> 6:
-    raise TestFailed
-
-# unpack implied tuple
-if verbose:
-    print 'unpack implied tuple'
-a, b, c = 7, 8, 9
-if a <> 7 or b <> 8 or c <> 9:
-    raise TestFailed
-
-# unpack string... fun!
-if verbose:
-    print 'unpack string'
-a, b, c = 'one'
-if a <> 'o' or b <> 'n' or c <> 'e':
-    raise TestFailed
-
-# unpack generic sequence
-if verbose:
-    print 'unpack sequence'
-a, b, c = Seq()
-if a <> 0 or b <> 1 or c <> 2:
-    raise TestFailed
-
-# single element unpacking, with extra syntax
-if verbose:
-    print 'unpack single tuple/list'
-st = (99,)
-sl = [100]
-a, = st
-if a <> 99:
-    raise TestFailed
-b, = sl
-if b <> 100:
-    raise TestFailed
-
-# now for some failures
-
-# unpacking non-sequence
-if verbose:
-    print 'unpack non-sequence'
-try:
-    a, b, c = 7
-    raise TestFailed
-except TypeError:
-    pass
-
-
-# unpacking tuple of wrong size
-if verbose:
-    print 'unpack tuple wrong size'
-try:
-    a, b = t
-    raise TestFailed
-except ValueError:
-    pass
-
-# unpacking list of wrong size
-if verbose:
-    print 'unpack list wrong size'
-try:
-    a, b = l
-    raise TestFailed
-except ValueError:
-    pass
-
-
-# unpacking sequence too short
-if verbose:
-    print 'unpack sequence too short'
-try:
-    a, b, c, d = Seq()
-    raise TestFailed
-except ValueError:
-    pass
-
-
-# unpacking sequence too long
-if verbose:
-    print 'unpack sequence too long'
-try:
-    a, b = Seq()
-    raise TestFailed
-except ValueError:
-    pass
-
-
-# unpacking a sequence where the test for too long raises a different
-# kind of error
-class BozoError(Exception):
-    pass
-
-class BadSeq:
-    def __getitem__(self, i):
-        if i >= 0 and i < 3:
-            return i
-        elif i == 3:
-            raise BozoError
-        else:
-            raise IndexError
-
-
-# trigger code while not expecting an IndexError
-if verbose:
-    print 'unpack sequence too long, wrong error'
-try:
-    a, b, c, d, e = BadSeq()
-    raise TestFailed
-except BozoError:
-    pass
-
-# trigger code while expecting an IndexError
-if verbose:
-    print 'unpack sequence too short, wrong error'
-try:
-    a, b, c = BadSeq()
-    raise TestFailed
-except BozoError:
-    pass
diff --git a/Lib/dos-8x3/test_url.py b/Lib/dos-8x3/test_url.py
deleted file mode 100644
index 484acea..0000000
--- a/Lib/dos-8x3/test_url.py
+++ /dev/null
@@ -1,32 +0,0 @@
-# Minimal test of the quote function
-import urllib
-
-chars = 'abcdefghijklmnopqrstuvwxyz'\
-        '\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356' \
-        '\357\360\361\362\363\364\365\366\370\371\372\373\374\375\376\377' \
-        'ABCDEFGHIJKLMNOPQRSTUVWXYZ' \
-        '\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317' \
-        '\320\321\322\323\324\325\326\330\331\332\333\334\335\336'
-
-expected = 'abcdefghijklmnopqrstuvwxyz%df%e0%e1%e2%e3%e4%e5%e6%e7%e8%e9%ea%eb%ec%ed%ee%ef%f0%f1%f2%f3%f4%f5%f6%f8%f9%fa%fb%fc%fd%fe%ffABCDEFGHIJKLMNOPQRSTUVWXYZ%c0%c1%c2%c3%c4%c5%c6%c7%c8%c9%ca%cb%cc%cd%ce%cf%d0%d1%d2%d3%d4%d5%d6%d8%d9%da%db%dc%dd%de'
-
-test = urllib.quote(chars)
-assert test == expected, "urllib.quote problem"
-test2 = urllib.unquote(expected)
-assert test2 == chars
-
-in1 = "abc/def"
-out1_1 = "abc/def"
-out1_2 = "abc%2fdef"
-
-assert urllib.quote(in1) == out1_1, "urllib.quote problem"
-assert urllib.quote(in1, '') == out1_2, "urllib.quote problem"
-
-in2 = "abc?def"
-out2_1 = "abc%3fdef"
-out2_2 = "abc?def"
-
-assert urllib.quote(in2) == out2_1, "urllib.quote problem"
-assert urllib.quote(in2, '?') == out2_2, "urllib.quote problem"
-
-
diff --git a/Lib/dos-8x3/test_use.py b/Lib/dos-8x3/test_use.py
deleted file mode 100644
index 63632f7..0000000
--- a/Lib/dos-8x3/test_use.py
+++ /dev/null
@@ -1,101 +0,0 @@
-# Check every path through every method of UserDict
-
-from UserDict import UserDict
-
-d0 = {}
-d1 = {"one": 1}
-d2 = {"one": 1, "two": 2}
-
-# Test constructors
-
-u = UserDict()
-u0 = UserDict(d0)
-u1 = UserDict(d1)
-u2 = UserDict(d2)
-
-uu = UserDict(u)
-uu0 = UserDict(u0)
-uu1 = UserDict(u1)
-uu2 = UserDict(u2)
-
-# Test __repr__
-
-assert str(u0) == str(d0)
-assert repr(u1) == repr(d1)
-assert `u2` == `d2`
-
-# Test __cmp__ and __len__
-
-all = [d0, d1, d2, u, u0, u1, u2, uu, uu0, uu1, uu2]
-for a in all:
-    for b in all:
-        assert cmp(a, b) == cmp(len(a), len(b))
-
-# Test __getitem__
-
-assert u2["one"] == 1
-try:
-    u1["two"]
-except KeyError:
-    pass
-else:
-    assert 0, "u1['two'] shouldn't exist"
-
-# Test __setitem__
-
-u3 = UserDict(u2)
-u3["two"] = 2
-u3["three"] = 3
-
-# Test __delitem__
-
-del u3["three"]
-try:
-    del u3["three"]
-except KeyError:
-    pass
-else:
-    assert 0, "u3['three'] shouldn't exist"
-
-# Test clear
-
-u3.clear()
-assert u3 == {}
-
-# Test copy()
-
-u2a = u2.copy()
-assert u2a == u2
-
-class MyUserDict(UserDict):
-    def display(self): print self
-
-m2 = MyUserDict(u2)
-m2a = m2.copy()
-assert m2a == m2
-
-# Test keys, items, values
-
-assert u2.keys() == d2.keys()
-assert u2.items() == d2.items()
-assert u2.values() == d2.values()
-
-# Test has_key
-
-for i in u2.keys():
-    assert u2.has_key(i) == 1
-    assert u1.has_key(i) == d1.has_key(i)
-    assert u0.has_key(i) == d0.has_key(i)
-
-# Test update
-
-t = UserDict()
-t.update(u2)
-assert t == u2
-
-# Test get
-
-for i in u2.keys():
-    assert u2.get(i) == u2[i]
-    assert u1.get(i) == d1.get(i)
-    assert u0.get(i) == d0.get(i)
diff --git a/Lib/dos-8x3/test_wav.py b/Lib/dos-8x3/test_wav.py
deleted file mode 100644
index a7a5e24..0000000
--- a/Lib/dos-8x3/test_wav.py
+++ /dev/null
@@ -1,34 +0,0 @@
-from test_support import TestFailed
-import os, tempfile
-import wave
-
-def check(t, msg=None):
-    if not t:
-        raise TestFailed, msg
-
-nchannels = 2
-sampwidth = 2
-framerate = 8000
-nframes = 100
-
-testfile = tempfile.mktemp()
-
-f = wave.open(testfile, 'w')
-f.setnchannels(nchannels)
-f.setsampwidth(sampwidth)
-f.setframerate(framerate)
-f.setnframes(nframes)
-output = '\0' * nframes * nchannels * sampwidth
-f.writeframes(output)
-f.close()
-
-f = wave.open(testfile, 'r')
-check(nchannels == f.getnchannels(), "nchannels")
-check(sampwidth == f.getsampwidth(), "sampwidth")
-check(framerate == f.getframerate(), "framerate")
-check(nframes == f.getnframes(), "nframes")
-input = f.readframes(nframes)
-check(input == output, "data")
-f.close()
-
-os.remove(testfile)
diff --git a/Lib/dos-8x3/test_win.py b/Lib/dos-8x3/test_win.py
deleted file mode 100644
index 18ce7a7..0000000
--- a/Lib/dos-8x3/test_win.py
+++ /dev/null
@@ -1,147 +0,0 @@
-# Test the windows specific win32reg module.
-# Only win32reg functions not hit here: FlushKey, LoadKey and SaveKey
-
-from _winreg import *
-import os, sys
-
-test_key_name = "SOFTWARE\\Python Registry Test Key - Delete Me"
-
-test_data = [
-    ("Int Value",     45,                                      REG_DWORD),
-    ("String Val",    "A string value",                        REG_SZ,),
-    (u"Unicode Val",  u"A Unicode value",                      REG_SZ,),
-    ("StringExpand",  "The path is %path%",                    REG_EXPAND_SZ),
-    ("UnicodeExpand", u"The path is %path%",                   REG_EXPAND_SZ),
-    ("Multi-string",  ["Lots", "of", "string", "values"],      REG_MULTI_SZ),
-    ("Multi-unicode", [u"Lots", u"of", u"unicode", u"values"], REG_MULTI_SZ),
-    ("Multi-mixed",   [u"Unicode", u"and", "string", "values"],REG_MULTI_SZ),
-    ("Raw Data",      ("binary"+chr(0)+"data"),                REG_BINARY),
-]
-
-def WriteTestData(root_key):
-    # Set the default value for this key.
-    SetValue(root_key, test_key_name, REG_SZ, "Default value")
-    key = CreateKey(root_key, test_key_name)
-    # Create a sub-key
-    sub_key = CreateKey(key, "sub_key")
-    # Give the sub-key some named values
-
-    for value_name, value_data, value_type in test_data:
-        SetValueEx(sub_key, value_name, 0, value_type, value_data)
-
-    # Check we wrote as many items as we thought.
-    nkeys, nvalues, since_mod = QueryInfoKey(key)
-    assert nkeys==1, "Not the correct number of sub keys"
-    assert nvalues==1, "Not the correct number of values"
-    nkeys, nvalues, since_mod = QueryInfoKey(sub_key)
-    assert nkeys==0, "Not the correct number of sub keys"
-    assert nvalues==len(test_data), "Not the correct number of values"
-    # Close this key this way...
-    # (but before we do, copy the key as an integer - this allows
-    # us to test that the key really gets closed).
-    int_sub_key = int(sub_key)
-    CloseKey(sub_key)
-    try:
-        QueryInfoKey(int_sub_key)
-        raise RuntimeError, "It appears the CloseKey() function does not close the actual key!"
-    except EnvironmentError:
-        pass
-    # ... and close that key that way :-)
-    int_key = int(key)
-    key.Close()
-    try:
-        QueryInfoKey(int_key)
-        raise RuntimeError, "It appears the key.Close() function does not close the actual key!"
-    except EnvironmentError:
-        pass
-
-def ReadTestData(root_key):
-    # Check we can get default value for this key.
-    val = QueryValue(root_key, test_key_name)
-    assert val=="Default value", "Registry didn't give back the correct value"
-
-    key = OpenKey(root_key, test_key_name)
-    # Read the sub-keys
-    sub_key = OpenKey(key, "sub_key")
-    # Check I can enumerate over the values.
-    index = 0
-    while 1:
-        try:
-            data = EnumValue(sub_key, index)
-        except EnvironmentError:
-            break
-        assert data in test_data, "Didn't read back the correct test data"
-        index = index + 1
-    assert index==len(test_data), "Didn't read the correct number of items"
-    # Check I can directly access each item
-    for value_name, value_data, value_type in test_data:
-        read_val, read_typ = QueryValueEx(sub_key, value_name)
-        assert read_val==value_data and read_typ == value_type, \
-               "Could not directly read the value"
-    sub_key.Close()
-    # Enumerate our main key.
-    read_val = EnumKey(key, 0)
-    assert read_val == "sub_key", "Read subkey value wrong"
-    try:
-        EnumKey(key, 1)
-        assert 0, "Was able to get a second key when I only have one!"
-    except EnvironmentError:
-        pass
-
-    key.Close()
-
-def DeleteTestData(root_key):
-    key = OpenKey(root_key, test_key_name, 0, KEY_ALL_ACCESS)
-    sub_key = OpenKey(key, "sub_key", 0, KEY_ALL_ACCESS)
-    # It is not necessary to delete the values before deleting
-    # the key (although subkeys must not exist).  We delete them
-    # manually just to prove we can :-)
-    for value_name, value_data, value_type in test_data:
-        DeleteValue(sub_key, value_name)
-
-    nkeys, nvalues, since_mod = QueryInfoKey(sub_key)
-    assert nkeys==0 and nvalues==0, "subkey not empty before delete"
-    sub_key.Close()
-    DeleteKey(key, "sub_key")
-
-    try:
-        # Shouldnt be able to delete it twice!
-        DeleteKey(key, "sub_key")
-        assert 0, "Deleting the key twice succeeded"
-    except EnvironmentError:
-        pass
-    key.Close()
-    DeleteKey(root_key, test_key_name)
-    # Opening should now fail!
-    try:
-        key = OpenKey(root_key, test_key_name)
-        assert 0, "Could open the non-existent key"
-    except WindowsError: # Use this error name this time
-        pass
-
-def TestAll(root_key):
-    WriteTestData(root_key)
-    ReadTestData(root_key)
-    DeleteTestData(root_key)
-
-# Test on my local machine.
-TestAll(HKEY_CURRENT_USER)
-print "Local registry tests worked"
-try:
-    remote_name = sys.argv[sys.argv.index("--remote")+1]
-except (IndexError, ValueError):
-    remote_name = None
-
-if remote_name is not None:
-    try:
-        remote_key = ConnectRegistry(remote_name, HKEY_CURRENT_USER)
-    except EnvironmentError, exc:
-        print "Could not connect to the remote machine -", exc.strerror
-        remote_key = None
-    if remote_key is not None:
-        TestAll(remote_key)
-        print "Remote registry tests worked"
-else:
-    print "Remote registry calls can be tested using",
-    print "'test_winreg.py --remote \\\\machine_name'"
-
diff --git a/Lib/dos-8x3/test_xml.py b/Lib/dos-8x3/test_xml.py
deleted file mode 100644
index eb868a3..0000000
--- a/Lib/dos-8x3/test_xml.py
+++ /dev/null
@@ -1,25 +0,0 @@
-'''Test module to thest the xmllib module.
-   Sjoerd Mullender
-'''
-
-from test_support import verbose
-
-testdoc = """\
-<?xml version="1.0" encoding="UTF-8" standalone='yes' ?>
-<!-- comments aren't allowed before the <?xml?> tag,
-     but they are allowed before the <!DOCTYPE> tag -->
-<!DOCTYPE greeting [
-  <!ELEMENT greeting (#PCDATA)>
-]>
-<greeting>Hello, world!</greeting>
-"""
-
-import xmllib
-if verbose:
-	parser = xmllib.TestXMLParser()
-else:
-	parser = xmllib.XMLParser()
-
-for c in testdoc:
-	parser.feed(c)
-parser.close()
diff --git a/Lib/dos-8x3/test_zip.py b/Lib/dos-8x3/test_zip.py
deleted file mode 100644
index 3ffdd19..0000000
--- a/Lib/dos-8x3/test_zip.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import zipfile, os
-
-srcname = "junk9630.tmp"
-zipname = "junk9708.tmp"
-
-try:
-  fp = open(srcname, "w")		# Make a source file with some lines
-  for i in range(0, 1000):
-    fp.write("Test of zipfile line %d.\n" % i)
-  fp.close()
-
-  zip = zipfile.ZipFile(zipname, "w")	# Create the ZIP archive
-  zip.write(srcname, srcname)
-  zip.write(srcname, "another.name")
-  zip.close()
-
-  zip = zipfile.ZipFile(zipname, "r")	# Read the ZIP archive
-  zip.read("another.name")
-  zip.read(srcname)
-  zip.close()
-finally:
-  if os.path.isfile(srcname):		# Remove temporary files
-    os.unlink(srcname)
-  if os.path.isfile(zipname):
-    os.unlink(zipname)
-
diff --git a/Lib/dos-8x3/test_zli.py b/Lib/dos-8x3/test_zli.py
deleted file mode 100644
index d22a2cc..0000000
--- a/Lib/dos-8x3/test_zli.py
+++ /dev/null
@@ -1,161 +0,0 @@
-import zlib
-import sys
-import imp
-import string
-
-try:
-    t = imp.find_module('test_zlib')
-    file = t[0]
-except ImportError:
-    file = open(__file__)
-buf = file.read() * 8
-file.close()
-
-# test the checksums (hex so the test doesn't break on 64-bit machines)
-print hex(zlib.crc32('penguin')), hex(zlib.crc32('penguin', 1))
-print hex(zlib.adler32('penguin')), hex(zlib.adler32('penguin', 1))
-
-# make sure we generate some expected errors
-try:
-    zlib.compress('ERROR', zlib.MAX_WBITS + 1)
-except zlib.error, msg:
-    print "expecting", msg
-try:
-    zlib.compressobj(1, 8, 0)
-except ValueError, msg:
-    print "expecting", msg
-try:
-    zlib.decompressobj(0)
-except ValueError, msg:
-    print "expecting", msg
-
-x = zlib.compress(buf)
-y = zlib.decompress(x)
-if buf != y:
-    print "normal compression/decompression failed"
-else:
-    print "normal compression/decompression succeeded"
-
-buf = buf * 16
-
-co = zlib.compressobj(8, 8, -15)
-x1 = co.compress(buf)
-x2 = co.flush()
-x = x1 + x2
-
-dc = zlib.decompressobj(-15)
-y1 = dc.decompress(x)
-y2 = dc.flush()
-y = y1 + y2
-if buf != y:
-    print "compress/decompression obj failed"
-else:
-    print "compress/decompression obj succeeded"
-
-co = zlib.compressobj(2, 8, -12, 9, 1)
-bufs = []
-for i in range(0, len(buf), 256):
-    bufs.append(co.compress(buf[i:i+256]))
-bufs.append(co.flush())
-combuf = string.join(bufs, '')
-
-decomp1 = zlib.decompress(combuf, -12, -5)
-if decomp1 != buf:
-    print "decompress with init options failed"
-else:
-    print "decompress with init options succeeded"
-
-deco = zlib.decompressobj(-12)
-bufs = []
-for i in range(0, len(combuf), 128):
-    bufs.append(deco.decompress(combuf[i:i+128]))
-bufs.append(deco.flush())
-decomp2 = string.join(buf, '')
-if decomp2 != buf:
-    print "decompressobj with init options failed"
-else:
-    print "decompressobj with init options succeeded"
-
-# Test flush() with the various options, using all the different levels
-# in order to provide more variations.
-for sync in [zlib.Z_NO_FLUSH, zlib.Z_SYNC_FLUSH, zlib.Z_FULL_FLUSH]:
-    for level in range(10):
-        obj = zlib.compressobj( level )
-        d = obj.compress( buf[:3000] )
-        d = d + obj.flush( sync )
-        d = d + obj.compress( buf[3000:] )
-        d = d + obj.flush()
-        if zlib.decompress(d) != buf:
-            print "Decompress failed: flush mode=%i, level=%i" % (sync,level)
-        del obj
-
-def ignore():
-    """An empty function with a big string.
-
-    Make the compression algorithm work a little harder.
-    """
-
-    """
-LAERTES 
-
-       O, fear me not.
-       I stay too long: but here my father comes.
-
-       Enter POLONIUS
-
-       A double blessing is a double grace,
-       Occasion smiles upon a second leave.
-
-LORD POLONIUS 
-
-       Yet here, Laertes! aboard, aboard, for shame!
-       The wind sits in the shoulder of your sail,
-       And you are stay'd for. There; my blessing with thee!
-       And these few precepts in thy memory
-       See thou character. Give thy thoughts no tongue,
-       Nor any unproportioned thought his act.
-       Be thou familiar, but by no means vulgar.
-       Those friends thou hast, and their adoption tried,
-       Grapple them to thy soul with hoops of steel;
-       But do not dull thy palm with entertainment
-       Of each new-hatch'd, unfledged comrade. Beware
-       Of entrance to a quarrel, but being in,
-       Bear't that the opposed may beware of thee.
-       Give every man thy ear, but few thy voice;
-       Take each man's censure, but reserve thy judgment.
-       Costly thy habit as thy purse can buy,
-       But not express'd in fancy; rich, not gaudy;
-       For the apparel oft proclaims the man,
-       And they in France of the best rank and station
-       Are of a most select and generous chief in that.
-       Neither a borrower nor a lender be;
-       For loan oft loses both itself and friend,
-       And borrowing dulls the edge of husbandry.
-       This above all: to thine ownself be true,
-       And it must follow, as the night the day,
-       Thou canst not then be false to any man.
-       Farewell: my blessing season this in thee!
-
-LAERTES 
-
-       Most humbly do I take my leave, my lord.
-
-LORD POLONIUS 
-
-       The time invites you; go; your servants tend.
-
-LAERTES 
-
-       Farewell, Ophelia; and remember well
-       What I have said to you.
-
-OPHELIA 
-
-       'Tis in my memory lock'd,
-       And you yourself shall keep the key of it.
-
-LAERTES 
-
-       Farewell.
-"""
-
diff --git a/Lib/dos-8x3/threadin.py b/Lib/dos-8x3/threadin.py
deleted file mode 100644
index 4921f0e..0000000
--- a/Lib/dos-8x3/threadin.py
+++ /dev/null
@@ -1,631 +0,0 @@
-"""Proposed new threading module, emulating a subset of Java's threading model."""
-
-import sys
-import time
-import thread
-import traceback
-import StringIO
-
-# Rename some stuff so "from threading import *" is safe
-
-_sys = sys
-del sys
-
-_time = time.time
-_sleep = time.sleep
-del time
-
-_start_new_thread = thread.start_new_thread
-_allocate_lock = thread.allocate_lock
-_get_ident = thread.get_ident
-ThreadError = thread.error
-del thread
-
-_print_exc = traceback.print_exc
-del traceback
-
-_StringIO = StringIO.StringIO
-del StringIO
-
-
-# Debug support (adapted from ihooks.py)
-
-_VERBOSE = 0
-
-if __debug__:
-
-    class _Verbose:
-
-        def __init__(self, verbose=None):
-            if verbose is None:
-                verbose = _VERBOSE
-            self.__verbose = verbose
-
-        def _note(self, format, *args):
-            if self.__verbose:
-                format = format % args
-                format = "%s: %s\n" % (
-                    currentThread().getName(), format)
-                _sys.stderr.write(format)
-
-else:
-    # Disable this when using "python -O"
-    class _Verbose:
-        def __init__(self, verbose=None):
-            pass
-        def _note(self, *args):
-            pass
-
-
-# Synchronization classes
-
-Lock = _allocate_lock
-
-def RLock(*args, **kwargs):
-    return apply(_RLock, args, kwargs)
-
-class _RLock(_Verbose):
-    
-    def __init__(self, verbose=None):
-        _Verbose.__init__(self, verbose)
-        self.__block = _allocate_lock()
-        self.__owner = None
-        self.__count = 0
-
-    def __repr__(self):
-        return "<%s(%s, %d)>" % (
-                self.__class__.__name__,
-                self.__owner and self.__owner.getName(),
-                self.__count)
-
-    def acquire(self, blocking=1):
-        me = currentThread()
-        if self.__owner is me:
-            self.__count = self.__count + 1
-            if __debug__:
-                self._note("%s.acquire(%s): recursive success", self, blocking)
-            return 1
-        rc = self.__block.acquire(blocking)
-        if rc:
-            self.__owner = me
-            self.__count = 1
-            if __debug__:
-                self._note("%s.acquire(%s): initial succes", self, blocking)
-        else:
-            if __debug__:
-                self._note("%s.acquire(%s): failure", self, blocking)
-        return rc
-
-    def release(self):
-        me = currentThread()
-        assert self.__owner is me, "release() of un-acquire()d lock"
-        self.__count = count = self.__count - 1
-        if not count:
-            self.__owner = None
-            self.__block.release()
-            if __debug__:
-                self._note("%s.release(): final release", self)
-        else:
-            if __debug__:
-                self._note("%s.release(): non-final release", self)
-
-    # Internal methods used by condition variables
-
-    def _acquire_restore(self, (count, owner)):
-        self.__block.acquire()
-        self.__count = count
-        self.__owner = owner
-        if __debug__:
-            self._note("%s._acquire_restore()", self)
-
-    def _release_save(self):
-        if __debug__:
-            self._note("%s._release_save()", self)
-        count = self.__count
-        self.__count = 0
-        owner = self.__owner
-        self.__owner = None
-        self.__block.release()
-        return (count, owner)
-
-    def _is_owned(self):
-        return self.__owner is currentThread()
-
-
-def Condition(*args, **kwargs):
-    return apply(_Condition, args, kwargs)
-
-class _Condition(_Verbose):
-
-    def __init__(self, lock=None, verbose=None):
-        _Verbose.__init__(self, verbose)
-        if lock is None:
-            lock = RLock()
-        self.__lock = lock
-        # Export the lock's acquire() and release() methods
-        self.acquire = lock.acquire
-        self.release = lock.release
-        # If the lock defines _release_save() and/or _acquire_restore(),
-        # these override the default implementations (which just call
-        # release() and acquire() on the lock).  Ditto for _is_owned().
-        try:
-            self._release_save = lock._release_save
-        except AttributeError:
-            pass
-        try:
-            self._acquire_restore = lock._acquire_restore
-        except AttributeError:
-            pass
-        try:
-            self._is_owned = lock._is_owned
-        except AttributeError:
-            pass
-        self.__waiters = []
-
-    def __repr__(self):
-        return "<Condition(%s, %d)>" % (self.__lock, len(self.__waiters))
-
-    def _release_save(self):
-        self.__lock.release()           # No state to save
-
-    def _acquire_restore(self, x):
-        self.__lock.acquire()           # Ignore saved state
-
-    def _is_owned(self):
-        if self.__lock.acquire(0):
-            self.__lock.release()
-            return 0
-        else:
-            return 1
-
-    def wait(self, timeout=None):
-        me = currentThread()
-        assert self._is_owned(), "wait() of un-acquire()d lock"
-        waiter = _allocate_lock()
-        waiter.acquire()
-        self.__waiters.append(waiter)
-        saved_state = self._release_save()
-        if timeout is None:
-            waiter.acquire()
-            if __debug__:
-                self._note("%s.wait(): got it", self)
-        else:
-            endtime = _time() + timeout
-            delay = 0.000001 # 1 usec
-            while 1:
-                gotit = waiter.acquire(0)
-                if gotit or _time() >= endtime:
-                    break
-                _sleep(delay)
-                if delay < 1.0:
-                    delay = delay * 2.0
-            if not gotit:
-                if __debug__:
-                    self._note("%s.wait(%s): timed out", self, timeout)
-                try:
-                    self.__waiters.remove(waiter)
-                except ValueError:
-                    pass
-            else:
-                if __debug__:
-                    self._note("%s.wait(%s): got it", self, timeout)
-        self._acquire_restore(saved_state)
-
-    def notify(self, n=1):
-        me = currentThread()
-        assert self._is_owned(), "notify() of un-acquire()d lock"
-        __waiters = self.__waiters
-        waiters = __waiters[:n]
-        if not waiters:
-            if __debug__:
-                self._note("%s.notify(): no waiters", self)
-            return
-        self._note("%s.notify(): notifying %d waiter%s", self, n,
-                   n!=1 and "s" or "")
-        for waiter in waiters:
-            waiter.release()
-            try:
-                __waiters.remove(waiter)
-            except ValueError:
-                pass
-
-    def notifyAll(self):
-        self.notify(len(self.__waiters))
-
-
-def Semaphore(*args, **kwargs):
-    return apply(_Semaphore, args, kwargs)
-
-class _Semaphore(_Verbose):
-
-    # After Tim Peters' semaphore class, but not quite the same (no maximum)
-
-    def __init__(self, value=1, verbose=None):
-        assert value >= 0, "Semaphore initial value must be >= 0"
-        _Verbose.__init__(self, verbose)
-        self.__cond = Condition(Lock())
-        self.__value = value
-
-    def acquire(self, blocking=1):
-        rc = 0
-        self.__cond.acquire()
-        while self.__value == 0:
-            if not blocking:
-                break
-            self.__cond.wait()
-        else:
-            self.__value = self.__value - 1
-            rc = 1
-        self.__cond.release()
-        return rc
-
-    def release(self):
-        self.__cond.acquire()
-        self.__value = self.__value + 1
-        self.__cond.notify()
-        self.__cond.release()
-
-
-def Event(*args, **kwargs):
-    return apply(_Event, args, kwargs)
-
-class _Event(_Verbose):
-
-    # After Tim Peters' event class (without is_posted())
-
-    def __init__(self, verbose=None):
-        _Verbose.__init__(self, verbose)
-        self.__cond = Condition(Lock())
-        self.__flag = 0
-
-    def isSet(self):
-        return self.__flag
-
-    def set(self):
-        self.__cond.acquire()
-        self.__flag = 1
-        self.__cond.notifyAll()
-        self.__cond.release()
-
-    def clear(self):
-        self.__cond.acquire()
-        self.__flag = 0
-        self.__cond.release()
-
-    def wait(self, timeout=None):
-        self.__cond.acquire()
-        if not self.__flag:
-            self.__cond.wait(timeout)
-        self.__cond.release()
-
-
-# Helper to generate new thread names
-_counter = 0
-def _newname(template="Thread-%d"):
-    global _counter
-    _counter = _counter + 1
-    return template % _counter
-
-# Active thread administration
-_active_limbo_lock = _allocate_lock()
-_active = {}
-_limbo = {}
-
-
-# Main class for threads
-
-class Thread(_Verbose):
-
-    __initialized = 0
-
-    def __init__(self, group=None, target=None, name=None,
-                 args=(), kwargs={}, verbose=None):
-        assert group is None, "group argument must be None for now"
-        _Verbose.__init__(self, verbose)
-        self.__target = target
-        self.__name = str(name or _newname())
-        self.__args = args
-        self.__kwargs = kwargs
-        self.__daemonic = self._set_daemon()
-        self.__started = 0
-        self.__stopped = 0
-        self.__block = Condition(Lock())
-        self.__initialized = 1
-
-    def _set_daemon(self):
-        # Overridden in _MainThread and _DummyThread
-        return currentThread().isDaemon()
-
-    def __repr__(self):
-        assert self.__initialized, "Thread.__init__() was not called"
-        status = "initial"
-        if self.__started:
-            status = "started"
-        if self.__stopped:
-            status = "stopped"
-        if self.__daemonic:
-            status = status + " daemon"
-        return "<%s(%s, %s)>" % (self.__class__.__name__, self.__name, status)
-
-    def start(self):
-        assert self.__initialized, "Thread.__init__() not called"
-        assert not self.__started, "thread already started"
-        if __debug__:
-            self._note("%s.start(): starting thread", self)
-        _active_limbo_lock.acquire()
-        _limbo[self] = self
-        _active_limbo_lock.release()
-        _start_new_thread(self.__bootstrap, ())
-        self.__started = 1
-        _sleep(0.000001)    # 1 usec, to let the thread run (Solaris hack)
-
-    def run(self):
-        if self.__target:
-            apply(self.__target, self.__args, self.__kwargs)
-
-    def __bootstrap(self):
-        try:
-            self.__started = 1
-            _active_limbo_lock.acquire()
-            _active[_get_ident()] = self
-            del _limbo[self]
-            _active_limbo_lock.release()
-            if __debug__:
-                self._note("%s.__bootstrap(): thread started", self)
-            try:
-                self.run()
-            except SystemExit:
-                if __debug__:
-                    self._note("%s.__bootstrap(): raised SystemExit", self)
-            except:
-                if __debug__:
-                    self._note("%s.__bootstrap(): unhandled exception", self)
-                s = _StringIO()
-                _print_exc(file=s)
-                _sys.stderr.write("Exception in thread %s:\n%s\n" %
-                                 (self.getName(), s.getvalue()))
-            else:
-                if __debug__:
-                    self._note("%s.__bootstrap(): normal return", self)
-        finally:
-            self.__stop()
-            self.__delete()
-
-    def __stop(self):
-        self.__block.acquire()
-        self.__stopped = 1
-        self.__block.notifyAll()
-        self.__block.release()
-
-    def __delete(self):
-        _active_limbo_lock.acquire()
-        del _active[_get_ident()]
-        _active_limbo_lock.release()
-
-    def join(self, timeout=None):
-        assert self.__initialized, "Thread.__init__() not called"
-        assert self.__started, "cannot join thread before it is started"
-        assert self is not currentThread(), "cannot join current thread"
-        if __debug__:
-            if not self.__stopped:
-                self._note("%s.join(): waiting until thread stops", self)
-        self.__block.acquire()
-        if timeout is None:
-            while not self.__stopped:
-                self.__block.wait()
-            if __debug__:
-                self._note("%s.join(): thread stopped", self)
-        else:
-            deadline = _time() + timeout
-            while not self.__stopped:
-                delay = deadline - _time()
-                if delay <= 0:
-                    if __debug__:
-                        self._note("%s.join(): timed out", self)
-                    break
-                self.__block.wait(delay)
-            else:
-                if __debug__:
-                    self._note("%s.join(): thread stopped", self)
-        self.__block.release()
-
-    def getName(self):
-        assert self.__initialized, "Thread.__init__() not called"
-        return self.__name
-
-    def setName(self, name):
-        assert self.__initialized, "Thread.__init__() not called"
-        self.__name = str(name)
-
-    def isAlive(self):
-        assert self.__initialized, "Thread.__init__() not called"
-        return self.__started and not self.__stopped
-    
-    def isDaemon(self):
-        assert self.__initialized, "Thread.__init__() not called"
-        return self.__daemonic
-
-    def setDaemon(self, daemonic):
-        assert self.__initialized, "Thread.__init__() not called"
-        assert not self.__started, "cannot set daemon status of active thread"
-        self.__daemonic = daemonic
-
-
-# Special thread class to represent the main thread
-# This is garbage collected through an exit handler
-
-class _MainThread(Thread):
-
-    def __init__(self):
-        Thread.__init__(self, name="MainThread")
-        self._Thread__started = 1
-        _active_limbo_lock.acquire()
-        _active[_get_ident()] = self
-        _active_limbo_lock.release()
-        import atexit
-        atexit.register(self.__exitfunc)
-
-    def _set_daemon(self):
-        return 0
-
-    def __exitfunc(self):
-        self._Thread__stop()
-        t = _pickSomeNonDaemonThread()
-        if t:
-            if __debug__:
-                self._note("%s: waiting for other threads", self)
-        while t:
-            t.join()
-            t = _pickSomeNonDaemonThread()
-        if __debug__:
-            self._note("%s: exiting", self)
-        self._Thread__delete()
-
-def _pickSomeNonDaemonThread():
-    for t in enumerate():
-        if not t.isDaemon() and t.isAlive():
-            return t
-    return None
-
-
-# Dummy thread class to represent threads not started here.
-# These aren't garbage collected when they die,
-# nor can they be waited for.
-# Their purpose is to return *something* from currentThread().
-# They are marked as daemon threads so we won't wait for them
-# when we exit (conform previous semantics).
-
-class _DummyThread(Thread):
-    
-    def __init__(self):
-        Thread.__init__(self, name=_newname("Dummy-%d"))
-        self._Thread__started = 1
-        _active_limbo_lock.acquire()
-        _active[_get_ident()] = self
-        _active_limbo_lock.release()
-
-    def _set_daemon(self):
-        return 1
-
-    def join(self):
-        assert 0, "cannot join a dummy thread"
-
-
-# Global API functions
-
-def currentThread():
-    try:
-        return _active[_get_ident()]
-    except KeyError:
-        print "currentThread(): no current thread for", _get_ident()
-        return _DummyThread()
-
-def activeCount():
-    _active_limbo_lock.acquire()
-    count = len(_active) + len(_limbo)
-    _active_limbo_lock.release()
-    return count
-
-def enumerate():
-    _active_limbo_lock.acquire()
-    active = _active.values() + _limbo.values()
-    _active_limbo_lock.release()
-    return active
-
-
-# Create the main thread object
-
-_MainThread()
-
-
-# Self-test code
-
-def _test():
-
-    import random
-
-    class BoundedQueue(_Verbose):
-
-        def __init__(self, limit):
-            _Verbose.__init__(self)
-            self.mon = RLock()
-            self.rc = Condition(self.mon)
-            self.wc = Condition(self.mon)
-            self.limit = limit
-            self.queue = []
-
-        def put(self, item):
-            self.mon.acquire()
-            while len(self.queue) >= self.limit:
-                self._note("put(%s): queue full", item)
-                self.wc.wait()
-            self.queue.append(item)
-            self._note("put(%s): appended, length now %d",
-                       item, len(self.queue))
-            self.rc.notify()
-            self.mon.release()
-
-        def get(self):
-            self.mon.acquire()
-            while not self.queue:
-                self._note("get(): queue empty")
-                self.rc.wait()
-            item = self.queue[0]
-            del self.queue[0]
-            self._note("get(): got %s, %d left", item, len(self.queue))
-            self.wc.notify()
-            self.mon.release()
-            return item
-
-    class ProducerThread(Thread):
-
-        def __init__(self, queue, quota):
-            Thread.__init__(self, name="Producer")
-            self.queue = queue
-            self.quota = quota
-
-        def run(self):
-            from random import random
-            counter = 0
-            while counter < self.quota:
-                counter = counter + 1
-                self.queue.put("%s.%d" % (self.getName(), counter))
-                _sleep(random() * 0.00001)
-
-
-    class ConsumerThread(Thread):
-
-        def __init__(self, queue, count):
-            Thread.__init__(self, name="Consumer")
-            self.queue = queue
-            self.count = count
-
-        def run(self):
-            while self.count > 0:
-                item = self.queue.get()
-                print item
-                self.count = self.count - 1
-
-    import time
-
-    NP = 3
-    QL = 4
-    NI = 5
-
-    Q = BoundedQueue(QL)
-    P = []
-    for i in range(NP):
-        t = ProducerThread(Q, NI)
-        t.setName("Producer-%d" % (i+1))
-        P.append(t)
-    C = ConsumerThread(Q, NI*NP)
-    for t in P:
-        t.start()
-        _sleep(0.000001)
-    C.start()
-    for t in P:
-        t.join()
-    C.join()
-
-if __name__ == '__main__':
-    _test()
diff --git a/Lib/dos-8x3/tokenize.py b/Lib/dos-8x3/tokenize.py
deleted file mode 100644
index 4883668..0000000
--- a/Lib/dos-8x3/tokenize.py
+++ /dev/null
@@ -1,161 +0,0 @@
-# Tests for the 'tokenize' module.
-# Large bits stolen from test_grammar.py. 
-
-# Comments
-"#"
-#'
-#"
-#\
-       #
-    # abc
-'''#
-#'''
-
-x = 1  #
-
-# Balancing continuation
-
-a = (3, 4,
-  5, 6)
-y = [3, 4,
-  5]
-z = {'a':5,
-  'b':6}
-x = (len(`y`) + 5*x - a[
-   3 ]
-   - x + len({
-   }
-    )
-  )
-
-# Backslash means line continuation:
-x = 1 \
-+ 1
-
-# Backslash does not means continuation in comments :\
-x = 0
-
-# Ordinary integers
-0xff <> 255
-0377 <> 255
-2147483647   != 017777777777
--2147483647-1 != 020000000000
-037777777777 != -1
-0xffffffff != -1
-
-# Long integers
-x = 0L
-x = 0l
-x = 0xffffffffffffffffL
-x = 0xffffffffffffffffl
-x = 077777777777777777L
-x = 077777777777777777l
-x = 123456789012345678901234567890L
-x = 123456789012345678901234567890l
-
-# Floating-point numbers
-x = 3.14
-x = 314.
-x = 0.314
-# XXX x = 000.314
-x = .314
-x = 3e14
-x = 3E14
-x = 3e-14
-x = 3e+14
-x = 3.e14
-x = .3e14
-x = 3.1e4
-
-# String literals
-x = ''; y = "";
-x = '\''; y = "'";
-x = '"'; y = "\"";
-x = "doesn't \"shrink\" does it"
-y = 'doesn\'t "shrink" does it'
-x = "does \"shrink\" doesn't it"
-y = 'does "shrink" doesn\'t it'
-x = """
-The "quick"
-brown fox
-jumps over
-the 'lazy' dog.
-"""
-y = '\nThe "quick"\nbrown fox\njumps over\nthe \'lazy\' dog.\n'
-y = '''
-The "quick"
-brown fox
-jumps over
-the 'lazy' dog.
-''';
-y = "\n\
-The \"quick\"\n\
-brown fox\n\
-jumps over\n\
-the 'lazy' dog.\n\
-";
-y = '\n\
-The \"quick\"\n\
-brown fox\n\
-jumps over\n\
-the \'lazy\' dog.\n\
-';
-x = r'\\' + R'\\'
-x = r'\'' + ''
-y = r'''
-foo bar \\
-baz''' + R'''
-foo'''
-y = r"""foo
-bar \\ baz
-""" + R'''spam
-'''
-
-# Indentation
-if 1:
-    x = 2
-if 1:
-        x = 2
-if 1:
-    while 0:
-     if 0:
-           x = 2
-     x = 2
-if 0:
-  if 2:
-   while 0:
-        if 1:
-          x = 2
-
-# Operators
-
-def d22(a, b, c=1, d=2): pass
-def d01v(a=1, *rest, **rest): pass
-
-(x, y) <> ({'a':1}, {'b':2})
-
-# comparison
-if 1 < 1 > 1 == 1 >= 1 <= 1 <> 1 != 1 in 1 not in 1 is 1 is not 1: pass
-
-# binary
-x = 1 & 1
-x = 1 ^ 1
-x = 1 | 1
-
-# shift
-x = 1 << 1 >> 1
-
-# additive
-x = 1 - 1 + 1 - 1 + 1
-
-# multiplicative
-x = 1 / 1 * 1 % 1
-
-# unary
-x = ~1 ^ 1 & 1 | 1 & 1 ^ -1
-x = -1*1/1 + 1*1 - ---1*1
-
-# selector
-import sys, time
-x = sys.modules['time'].time()
-
diff --git a/Lib/dos-8x3/tracebac.py b/Lib/dos-8x3/tracebac.py
deleted file mode 100755
index b733598..0000000
--- a/Lib/dos-8x3/tracebac.py
+++ /dev/null
@@ -1,274 +0,0 @@
-"""Extract, format and print information about Python stack traces."""
-
-import linecache
-import string
-import sys
-import types
-
-def _print(file, str='', terminator='\n'):
-	file.write(str+terminator)
-
-
-def print_list(extracted_list, file=None):
-	"""Print the list of tuples as returned by extract_tb() or
-	extract_stack() as a formatted stack trace to the given file."""
-	if not file:
-		file = sys.stderr
-	for filename, lineno, name, line in extracted_list:
-		_print(file,
-		       '  File "%s", line %d, in %s' % (filename,lineno,name))
-		if line:
-			_print(file, '    %s' % string.strip(line))
-
-def format_list(extracted_list):
-	"""Given a list of tuples as returned by extract_tb() or
-	extract_stack(), return a list of strings ready for printing.
-	Each string in the resulting list corresponds to the item with
-	the same index in the argument list.  Each string ends in a
-	newline; the strings may contain internal newlines as well, for
-	those items whose source text line is not None."""
-	list = []
-	for filename, lineno, name, line in extracted_list:
-		item = '  File "%s", line %d, in %s\n' % (filename,lineno,name)
-		if line:
-			item = item + '    %s\n' % string.strip(line)
-		list.append(item)
-	return list
-	
-
-def print_tb(tb, limit=None, file=None):
-	"""Print up to 'limit' stack trace entries from the traceback 'tb'.
-	If 'limit' is omitted or None, all entries are printed.  If 'file' is
-	omitted or None, the output goes to sys.stderr; otherwise 'file'
-	should be an open file or file-like object with a write() method."""
-	if not file:
-		file = sys.stderr
-	if limit is None:
-		if hasattr(sys, 'tracebacklimit'):
-			limit = sys.tracebacklimit
-	n = 0
-	while tb is not None and (limit is None or n < limit):
-		f = tb.tb_frame
-		lineno = tb_lineno(tb)
-		co = f.f_code
-		filename = co.co_filename
-		name = co.co_name
-		_print(file,
-		       '  File "%s", line %d, in %s' % (filename,lineno,name))
-		line = linecache.getline(filename, lineno)
-		if line: _print(file, '    ' + string.strip(line))
-		tb = tb.tb_next
-		n = n+1
-
-def format_tb(tb, limit = None):
-	"""A shorthand for 'format_list(extract_stack(f, limit))."""
-	return format_list(extract_tb(tb, limit))
-
-def extract_tb(tb, limit = None):
-	"""Return a list of up to 'limit' pre-processed stack trace entries
-	extracted from the traceback object 'traceback'.  This is useful for
-	alternate formatting of stack traces.  If 'limit' is omitted or None,
-	all entries are extracted.  A pre-processed stack trace entry is a
-	quadruple (filename, line number, function name, text) representing
-	the information that is usually printed for a stack trace.  The text
-	is a string with leading and trailing whitespace stripped; if the
-	source is not available it is None."""
-	if limit is None:
-		if hasattr(sys, 'tracebacklimit'):
-			limit = sys.tracebacklimit
-	list = []
-	n = 0
-	while tb is not None and (limit is None or n < limit):
-		f = tb.tb_frame
-		lineno = tb_lineno(tb)
-		co = f.f_code
-		filename = co.co_filename
-		name = co.co_name
-		line = linecache.getline(filename, lineno)
-		if line: line = string.strip(line)
-		else: line = None
-		list.append((filename, lineno, name, line))
-		tb = tb.tb_next
-		n = n+1
-	return list
-
-
-def print_exception(etype, value, tb, limit=None, file=None):
-	"""Print exception information and up to 'limit' stack trace entries
-	from the traceback 'tb' to 'file'.  This differs from print_tb() in
-	the following ways: (1) if traceback is not None, it prints a header
-	"Traceback (most recent call last):"; (2) it prints the exception type and
-	value after the stack trace; (3) if type is SyntaxError and value has
-	the appropriate format, it prints the line where the syntax error
-	occurred with a caret on the next line indicating the approximate
-	position of the error."""
-	if not file:
-		file = sys.stderr
-	if tb:
-		_print(file, 'Traceback (most recent call last):')
-		print_tb(tb, limit, file)
-	lines = format_exception_only(etype, value)
-	for line in lines[:-1]:
-		_print(file, line, ' ')
-	_print(file, lines[-1], '')
-
-def format_exception(etype, value, tb, limit = None):
-	"""Format a stack trace and the exception information.  The arguments
-	have the same meaning as the corresponding arguments to
-	print_exception().  The return value is a list of strings, each
-	ending in a newline and some containing internal newlines.  When 
-	these lines are concatenated and printed, exactly the same text is
-	printed as does print_exception()."""
-	if tb:
-		list = ['Traceback (most recent call last):\n']
-		list = list + format_tb(tb, limit)
-	else:
-		list = []
-	list = list + format_exception_only(etype, value)
-	return list
-
-def format_exception_only(etype, value):
-	"""Format the exception part of a traceback.  The arguments are the
-	exception type and value such as given by sys.last_type and
-	sys.last_value. The return value is a list of strings, each ending
-	in a newline.  Normally, the list contains a single string;
-	however, for SyntaxError exceptions, it contains several lines that
-	(when printed) display detailed information about where the syntax
-	error occurred.  The message indicating which exception occurred is
-	the always last string in the list."""
-	list = []
-	if type(etype) == types.ClassType:
-		stype = etype.__name__
-	else:
-		stype = etype
-	if value is None:
-		list.append(str(stype) + '\n')
-	else:
-		if etype is SyntaxError:
-			try:
-				msg, (filename, lineno, offset, line) = value
-			except:
-				pass
-			else:
-				if not filename: filename = "<string>"
-				list.append('  File "%s", line %d\n' %
-					    (filename, lineno))
-				i = 0
-				while i < len(line) and \
-				      line[i] in string.whitespace:
-					i = i+1
-				list.append('    %s\n' % string.strip(line))
-				s = '    '
-				for c in line[i:offset-1]:
-					if c in string.whitespace:
-						s = s + c
-					else:
-						s = s + ' '
-				list.append('%s^\n' % s)
-				value = msg
-		list.append('%s: %s\n' % (str(stype), _some_str(value)))
-	return list
-
-def _some_str(value):
-	try:
-		return str(value)
-	except:
-		return '<unprintable %s object>' % type(value).__name__
-
-
-def print_exc(limit=None, file=None):
-	"""This is a shorthand for 'print_exception(sys.exc_type,
-	sys.exc_value, sys.exc_traceback, limit, file)'.
-	(In fact, it uses sys.exc_info() to retrieve the same information
-	in a thread-safe way.)"""
-	if not file:
-		file = sys.stderr
-	try:
-	    etype, value, tb = sys.exc_info()
-	    print_exception(etype, value, tb, limit, file)
-	finally:
-	    etype = value = tb = None
-
-def print_last(limit=None, file=None):
-	"""This is a shorthand for 'print_exception(sys.last_type,
-	sys.last_value, sys.last_traceback, limit, file)'."""
-	if not file:
-		file = sys.stderr
-	print_exception(sys.last_type, sys.last_value, sys.last_traceback,
-			limit, file)
-
-
-def print_stack(f=None, limit=None, file=None):
-	"""This function prints a stack trace from its invocation point.
-	The optional 'f' argument can be used to specify an alternate stack
-	frame at which to start. The optional 'limit' and 'file' arguments
-	have the same meaning as for print_exception()."""
-	if f is None:
-		try:
-			raise ZeroDivisionError
-		except ZeroDivisionError:
-			f = sys.exc_info()[2].tb_frame.f_back
-	print_list(extract_stack(f, limit), file)
-
-def format_stack(f=None, limit=None):
-	"""A shorthand for 'format_list(extract_stack(f, limit))'."""
-	if f is None:
-		try:
-			raise ZeroDivisionError
-		except ZeroDivisionError:
-			f = sys.exc_info()[2].tb_frame.f_back
-	return format_list(extract_stack(f, limit))
-
-def extract_stack(f=None, limit = None):
-	"""Extract the raw traceback from the current stack frame.  The
-	return value has the same format as for extract_tb().  The optional
-	'f' and 'limit' arguments have the same meaning as for print_stack(). 
-	Each item in the list is a quadruple (filename, line number,
-	function name, text), and the entries are in order from oldest
-	to newest stack frame."""
-	if f is None:
-		try:
-			raise ZeroDivisionError
-		except ZeroDivisionError:
-			f = sys.exc_info()[2].tb_frame.f_back
-	if limit is None:
-		if hasattr(sys, 'tracebacklimit'):
-			limit = sys.tracebacklimit
-	list = []
-	n = 0
-	while f is not None and (limit is None or n < limit):
-		lineno = f.f_lineno	# XXX Too bad if -O is used
-		co = f.f_code
-		filename = co.co_filename
-		name = co.co_name
-		line = linecache.getline(filename, lineno)
-		if line: line = string.strip(line)
-		else: line = None
-		list.append((filename, lineno, name, line))
-		f = f.f_back
-		n = n+1
-	list.reverse()
-	return list
-
-def tb_lineno(tb):
-	"""Calculate the correct line number of the traceback given in tb
-	(even with -O on)."""
-
-	# Coded by Marc-Andre Lemburg from the example of PyCode_Addr2Line()
-	# in compile.c.
-	# Revised version by Jim Hugunin to work with JPython too.
-
-	c = tb.tb_frame.f_code
-	if not hasattr(c, 'co_lnotab'):
-		return tb.tb_lineno
-
-	tab = c.co_lnotab
-	line = c.co_firstlineno
-	stopat = tb.tb_lasti
-	addr = 0
-	for i in range(0, len(tab), 2):
-		addr = addr + ord(tab[i])
-		if addr > stopat:
-			break
-		line = line + ord(tab[i+1])
-	return line
diff --git a/Lib/dos-8x3/userdict.py b/Lib/dos-8x3/userdict.py
deleted file mode 100755
index 9b6e73b..0000000
--- a/Lib/dos-8x3/userdict.py
+++ /dev/null
@@ -1,40 +0,0 @@
-"""A more or less complete user-defined wrapper around dictionary objects."""
-
-class UserDict:
-    def __init__(self, dict=None):
-        self.data = {}
-        if dict is not None: self.update(dict)
-    def __repr__(self): return repr(self.data)
-    def __cmp__(self, dict):
-        if isinstance(dict, UserDict):
-            return cmp(self.data, dict.data)
-        else:
-            return cmp(self.data, dict)
-    def __len__(self): return len(self.data)
-    def __getitem__(self, key): return self.data[key]
-    def __setitem__(self, key, item): self.data[key] = item
-    def __delitem__(self, key): del self.data[key]
-    def clear(self): self.data.clear()
-    def copy(self):
-        if self.__class__ is UserDict:
-            return UserDict(self.data)
-        import copy
-        return copy.copy(self)
-    def keys(self): return self.data.keys()
-    def items(self): return self.data.items()
-    def values(self): return self.data.values()
-    def has_key(self, key): return self.data.has_key(key)
-    def update(self, dict):
-        if isinstance(dict, UserDict):
-            self.data.update(dict.data)
-        elif isinstance(dict, type(self.data)):
-            self.data.update(dict)
-        else:
-            for k, v in dict.items():
-                self.data[k] = v
-    def get(self, key, failobj=None):
-        return self.data.get(key, failobj)
-    def setdefault(self, key, failobj=None):
-        if not self.data.has_key(key):
-            self.data[key] = failobj
-        return self.data[key]
diff --git a/Lib/dos-8x3/userlist.py b/Lib/dos-8x3/userlist.py
deleted file mode 100755
index e79faea..0000000
--- a/Lib/dos-8x3/userlist.py
+++ /dev/null
@@ -1,79 +0,0 @@
-"""A more or less complete user-defined wrapper around list objects."""
-
-class UserList:
-    def __init__(self, initlist=None):
-        self.data = []
-        if initlist is not None:
-            # XXX should this accept an arbitrary sequence?
-            if type(initlist) == type(self.data):
-                self.data[:] = initlist
-            elif isinstance(initlist, UserList):
-                self.data[:] = initlist.data[:]
-            else:
-                self.data = list(initlist)
-    def __repr__(self): return repr(self.data)
-    def __cmp__(self, other):
-        if isinstance(other, UserList):
-            return cmp(self.data, other.data)
-        else:
-            return cmp(self.data, other)
-    def __contains__(self, item): return item in self.data
-    def __len__(self): return len(self.data)
-    def __getitem__(self, i): return self.data[i]
-    def __setitem__(self, i, item): self.data[i] = item
-    def __delitem__(self, i): del self.data[i]
-    def __getslice__(self, i, j):
-        i = max(i, 0); j = max(j, 0)
-        return self.__class__(self.data[i:j])
-    def __setslice__(self, i, j, other):
-        i = max(i, 0); j = max(j, 0)
-        if isinstance(other, UserList):
-            self.data[i:j] = other.data
-        elif isinstance(other, type(self.data)):
-            self.data[i:j] = other
-        else:
-            self.data[i:j] = list(other)
-    def __delslice__(self, i, j):
-        i = max(i, 0); j = max(j, 0)
-        del self.data[i:j]
-    def __add__(self, other):
-        if isinstance(other, UserList):
-            return self.__class__(self.data + other.data)
-        elif isinstance(other, type(self.data)):
-            return self.__class__(self.data + other)
-        else:
-            return self.__class__(self.data + list(other))
-    def __radd__(self, other):
-        if isinstance(other, UserList):
-            return self.__class__(other.data + self.data)
-        elif isinstance(other, type(self.data)):
-            return self.__class__(other + self.data)
-        else:
-            return self.__class__(list(other) + self.data)
-    def __iadd__(self, other):
-        if isinstance(other, UserList):
-            self.data += other.data
-        elif isinstance(other, type(self.data)):
-            self.data += other
-        else:
-            self.data += list(other)
-        return self
-    def __mul__(self, n):
-        return self.__class__(self.data*n)
-    __rmul__ = __mul__
-    def __imul__(self, n):
-        self.data *= n
-        return self
-    def append(self, item): self.data.append(item)
-    def insert(self, i, item): self.data.insert(i, item)
-    def pop(self, i=-1): return self.data.pop(i)
-    def remove(self, item): self.data.remove(item)
-    def count(self, item): return self.data.count(item)
-    def index(self, item): return self.data.index(item)
-    def reverse(self): self.data.reverse()
-    def sort(self, *args): apply(self.data.sort, args)
-    def extend(self, other):
-        if isinstance(other, UserList):
-            self.data.extend(other.data)
-        else:
-            self.data.extend(other)
diff --git a/Lib/dos-8x3/userstri.py b/Lib/dos-8x3/userstri.py
deleted file mode 100644
index ea3d515..0000000
--- a/Lib/dos-8x3/userstri.py
+++ /dev/null
@@ -1,171 +0,0 @@
-#!/usr/bin/env python
-## vim:ts=4:et:nowrap
-"""A user-defined wrapper around string objects
-
-Note: string objects have grown methods in Python 1.6 
-This module requires Python 1.6 or later.
-"""
-from types import StringType, UnicodeType
-import sys
-
-class UserString:
-    def __init__(self, seq):
-        if isinstance(seq, StringType) or isinstance(seq, UnicodeType):
-            self.data = seq
-        elif isinstance(seq, UserString):
-            self.data = seq.data[:]
-        else: 
-            self.data = str(seq)
-    def __str__(self): return str(self.data)
-    def __repr__(self): return repr(self.data)
-    def __int__(self): return int(self.data)
-    def __long__(self): return long(self.data)
-    def __float__(self): return float(self.data)
-    def __complex__(self): return complex(self.data)
-    def __hash__(self): return hash(self.data)
-
-    def __cmp__(self, string):
-        if isinstance(string, UserString):
-            return cmp(self.data, string.data)
-        else:
-            return cmp(self.data, string)
-    def __contains__(self, char):
-        return char in self.data
-
-    def __len__(self): return len(self.data)
-    def __getitem__(self, index): return self.__class__(self.data[index])
-    def __getslice__(self, start, end):
-        start = max(start, 0); end = max(end, 0)
-        return self.__class__(self.data[start:end])
-
-    def __add__(self, other):
-        if isinstance(other, UserString):
-            return self.__class__(self.data + other.data)
-        elif isinstance(other, StringType) or isinstance(other, UnicodeType):
-            return self.__class__(self.data + other)
-        else:
-            return self.__class__(self.data + str(other))
-    def __radd__(self, other):
-        if isinstance(other, StringType) or isinstance(other, UnicodeType):
-            return self.__class__(other + self.data)
-        else:
-            return self.__class__(str(other) + self.data)
-    def __iadd__(self, other):
-        if isinstance(other, UserString):
-            self.data += other.data
-        elif isinstance(other, StringType) or isinstance(other, UnicodeType):
-            self.data += other
-        else:
-            self.data += str(other)
-        return self
-    def __mul__(self, n):
-        return self.__class__(self.data*n)
-    __rmul__ = __mul__
-    def __imull__(self, n):
-        self.data += n
-        return self
-
-    # the following methods are defined in alphabetical order:
-    def capitalize(self): return self.__class__(self.data.capitalize())
-    def center(self, width): return self.__class__(self.data.center(width))
-    def count(self, sub, start=0, end=sys.maxint):
-        return self.data.count(sub, start, end)
-    def encode(self, encoding=None, errors=None): # XXX improve this?
-        if encoding:
-            if errors:
-                return self.__class__(self.data.encode(encoding, errors))
-            else:
-                return self.__class__(self.data.encode(encoding))
-        else: 
-            return self.__class__(self.data.encode())
-    def endswith(self, suffix, start=0, end=sys.maxint):
-        return self.data.endswith(suffix, start, end)
-    def expandtabs(self, tabsize=8): 
-        return self.__class__(self.data.expandtabs(tabsize))
-    def find(self, sub, start=0, end=sys.maxint): 
-        return self.data.find(sub, start, end)
-    def index(self, sub, start=0, end=sys.maxint): 
-        return self.data.index(sub, start, end)
-    def isalpha(self): return self.data.isalpha()
-    def isalnum(self): return self.data.isalnum()
-    def isdecimal(self): return self.data.isdecimal()
-    def isdigit(self): return self.data.isdigit()
-    def islower(self): return self.data.islower()
-    def isnumeric(self): return self.data.isnumeric()
-    def isspace(self): return self.data.isspace()
-    def istitle(self): return self.data.istitle()
-    def isupper(self): return self.data.isupper()
-    def join(self, seq): return self.data.join(seq)
-    def ljust(self, width): return self.__class__(self.data.ljust(width))
-    def lower(self): return self.__class__(self.data.lower())
-    def lstrip(self): return self.__class__(self.data.lstrip())
-    def replace(self, old, new, maxsplit=-1): 
-        return self.__class__(self.data.replace(old, new, maxsplit))
-    def rfind(self, sub, start=0, end=sys.maxint): 
-        return self.data.rfind(sub, start, end)
-    def rindex(self, sub, start=0, end=sys.maxint): 
-        return self.data.rindex(sub, start, end)
-    def rjust(self, width): return self.__class__(self.data.rjust(width))
-    def rstrip(self): return self.__class__(self.data.rstrip())
-    def split(self, sep=None, maxsplit=-1): 
-        return self.data.split(sep, maxsplit)
-    def splitlines(self, keepends=0): return self.data.splitlines(keepends)
-    def startswith(self, prefix, start=0, end=sys.maxint): 
-        return self.data.startswith(prefix, start, end)
-    def strip(self): return self.__class__(self.data.strip())
-    def swapcase(self): return self.__class__(self.data.swapcase())
-    def title(self): return self.__class__(self.data.title())
-    def translate(self, *args): 
-        return self.__class__(self.data.translate(*args))
-    def upper(self): return self.__class__(self.data.upper())
-
-class MutableString(UserString):
-    """mutable string objects
-
-    Python strings are immutable objects.  This has the advantage, that
-    strings may be used as dictionary keys.  If this property isn't needed
-    and you insist on changing string values in place instead, you may cheat
-    and use MutableString.
-
-    But the purpose of this class is an educational one: to prevent
-    people from inventing their own mutable string class derived
-    from UserString and than forget thereby to remove (override) the
-    __hash__ method inherited from ^UserString.  This would lead to
-    errors that would be very hard to track down.
-
-    A faster and better solution is to rewrite your program using lists."""
-    def __init__(self, string=""):
-        self.data = string
-    def __hash__(self): 
-        raise TypeError, "unhashable type (it is mutable)"
-    def __setitem__(self, index, sub):
-        if index < 0 or index >= len(self.data): raise IndexError
-        self.data = self.data[:index] + sub + self.data[index+1:]
-    def __delitem__(self, index):
-        if index < 0 or index >= len(self.data): raise IndexError
-        self.data = self.data[:index] + self.data[index+1:]
-    def __setslice__(self, start, end, sub):
-        start = max(start, 0); end = max(end, 0)
-        if isinstance(sub, UserString):
-            self.data = self.data[:start]+sub.data+self.data[end:]
-        elif isinstance(sub, StringType) or isinstance(sub, UnicodeType):
-            self.data = self.data[:start]+sub+self.data[end:]
-        else:
-            self.data =  self.data[:start]+str(sub)+self.data[end:]
-    def __delslice__(self, start, end):
-        start = max(start, 0); end = max(end, 0)
-        self.data = self.data[:start] + self.data[end:]
-    def immutable(self):
-        return UserString(self.data)
-    
-if __name__ == "__main__":
-    # execute the regression test to stdout, if called as a script:
-    import os
-    called_in_dir, called_as = os.path.split(sys.argv[0])
-    called_in_dir = os.path.abspath(called_in_dir)
-    called_as, py = os.path.splitext(called_as)
-    sys.path.append(os.path.join(called_in_dir, 'test'))
-    if '-q' in sys.argv:
-        import test_support
-        test_support.verbose = 0
-    __import__('test_' + called_as.lower())
diff --git a/Lib/dos-8x3/webbrows.py b/Lib/dos-8x3/webbrows.py
deleted file mode 100644
index da70e3b..0000000
--- a/Lib/dos-8x3/webbrows.py
+++ /dev/null
@@ -1,225 +0,0 @@
-"""Remote-control interfaces to some browsers."""
-
-import os
-import sys
-
-
-PROCESS_CREATION_DELAY = 4
-
-
-class Error(Exception):
-    pass
-
-
-_browsers = {}
-
-def register(name, klass, instance=None):
-    """Register a browser connector and, optionally, connection."""
-    _browsers[name.lower()] = [klass, instance]
-
-
-def get(name=None):
-    """Retrieve a connection to a browser by type name, or the default
-    browser."""
-    name = name or DEFAULT_BROWSER
-    try:
-        L = _browsers[name.lower()]
-    except KeyError:
-        raise ValueError, "unknown browser type: " + `name`
-    if L[1] is None:
-        L[1] = L[0]()
-    return L[1]
-
-
-# Please note: the following definition hides a builtin function.
-
-def open(url, new=0):
-    get().open(url, new)
-
-
-def open_new(url):
-    get().open_new(url)
-
-
-def _iscommand(cmd):
-    """Return true if cmd can be found on the executable search path."""
-    path = os.environ.get("PATH")
-    if not path:
-        return 0
-    for d in path.split(os.pathsep):
-        exe = os.path.join(d, cmd)
-        if os.path.isfile(exe):
-            return 1
-    return 0
-
-
-class CommandLineBrowser:
-    _browsers = []
-    if os.environ.get("DISPLAY"):
-        _browsers.extend([
-            ("netscape", "netscape %s >/dev/null &"),
-            ("mosaic", "mosaic %s >/dev/null &"),
-            ])
-    _browsers.extend([
-        ("lynx", "lynx %s"),
-        ("w3m", "w3m %s"),
-        ])
-
-    def open(self, url, new=0):
-        for exe, cmd in self._browsers:
-            if _iscommand(exe):
-                os.system(cmd % url)
-                return
-        raise Error("could not locate runnable browser")
-
-    def open_new(self, url):
-        self.open(url)
-
-register("command-line", CommandLineBrowser)
-
-
-class Netscape:
-    autoRaise = 1
-
-    def _remote(self, action):
-        raise_opt = ("-noraise", "-raise")[self.autoRaise]
-        cmd = "netscape %s -remote '%s' >/dev/null 2>&1" % (raise_opt, action)
-        rc = os.system(cmd)
-        if rc:
-            import time
-            os.system("netscape -no-about-splash &")
-            time.sleep(PROCESS_CREATION_DELAY)
-            rc = os.system(cmd)
-        return not rc
-
-    def open(self, url, new=0):
-        if new:
-            self.open_new(url)
-        else:
-            self._remote("openURL(%s)" % url)
-
-    def open_new(self, url):
-        self._remote("openURL(%s, new-window)" % url)
-
-register("netscape", Netscape)
-
-
-class Konquerer:
-    """Controller for the KDE File Manager (kfm, or Konquerer).
-
-    See http://developer.kde.org/documentation/other/kfmclient.html
-    for more information on the Konquerer remote-control interface.
-
-    """
-    def _remote(self, action):
-        cmd = "kfmclient %s >/dev/null 2>&1" % action
-        rc = os.system(cmd)
-        if rc:
-            import time
-            os.system("kfm -d &")
-            time.sleep(PROCESS_CREATION_DELAY)
-            rc = os.system(cmd)
-        return not rc
-
-    def open(self, url, new=1):
-	# XXX currently I know no way to prevent KFM from opening a new win.
-        self.open_new(url)
-
-    def open_new(self, url):
-        self._remote("openURL %s" % url)
-
-register("kfm", Konquerer)
-
-
-class Grail:
-    # There should be a way to maintain a connection to Grail, but the
-    # Grail remote control protocol doesn't really allow that at this
-    # point.  It probably never will!
-
-    def _find_grail_rc(self):
-        import glob
-        import pwd
-        import socket
-        import tempfile
-        tempdir = os.path.join(tempfile.gettempdir(), ".grail-unix")
-        user = pwd.getpwuid(_os.getuid())[0]
-        filename = os.path.join(tempdir, user + "-*")
-        maybes = glob.glob(filename)
-        if not maybes:
-            return None
-        s = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
-        for fn in maybes:
-            # need to PING each one until we find one that's live
-            try:
-                s.connect(fn)
-            except socket.error:
-                # no good; attempt to clean it out, but don't fail:
-                try:
-                    os.unlink(fn)
-                except IOError:
-                    pass
-            else:
-                return s
-
-    def _remote(self, action):
-        s = self._find_grail_rc()
-        if not s:
-            return 0
-        s.send(action)
-        s.close()
-        return 1
-
-    def open(self, url, new=0):
-        if new:
-            self.open_new(url)
-        else:
-            self._remote("LOAD " + url)
-
-    def open_new(self, url):
-        self._remote("LOADNEW " + url)
-
-register("grail", Grail)
-
-
-class WindowsDefault:
-    def open(self, url, new=0):
-        os.startfile(url)
-
-    def open_new(self, url):
-        self.open(url)
-
-
-DEFAULT_BROWSER = "command-line"
-
-if sys.platform[:3] == "win":
-    del _browsers["kfm"]
-    register("windows-default", WindowsDefault)
-    DEFAULT_BROWSER = "windows-default"
-elif os.environ.get("DISPLAY"):
-    if _iscommand("netscape"):
-        DEFAULT_BROWSER = "netscape"
-
-# If the $BROWSER environment variable is set and true, let that be
-# the name of the browser to use:
-#
-DEFAULT_BROWSER = os.environ.get("BROWSER") or DEFAULT_BROWSER
-
-
-# Now try to support the MacOS world.  This is the only supported
-# controller on that platform, so don't mess with the default!
-
-try:
-    import ic
-except ImportError:
-    pass
-else:
-    class InternetConfig:
-        def open(self, url, new=0):
-            ic.launcurl(url)
-
-        def open_new(self, url):
-            self.open(url)
-
-    _browsers.clear()
-    register("internet-config", InternetConfig)
-    DEFAULT_BROWSER = "internet-config"