diff --git a/PC/example_nt/readme.txt b/PC/example_nt/readme.txt
index 65665ba..37a9c29 100644
--- a/PC/example_nt/readme.txt
+++ b/PC/example_nt/readme.txt
@@ -1,161 +1,161 @@
-Example Python extension for Windows NT
-=======================================
-
-This directory contains everything needed (except for the Python
-distribution!) to build a Python extension module using Microsoft VC++
-("Developer Studio") version 7.1.  It has been tested with VC++ 7.1 on 
-Python 2.4.  You can also use earlier versions of VC to build Python 
-extensions, but the sample VC project file (example.dsw in this directory) 
-is in VC 7.1 format. Notice that you need to use the same compiler version
-that was used to build Python itself.
-
-COPY THIS DIRECTORY!
---------------------
-This "example_nt" directory is a subdirectory of the PC directory, in order
-to keep all the PC-specific files under the same directory.  However, the
-example_nt directory can't actually be used from this location.  You first
-need to copy or move it up one level, so that example_nt is a direct
-sibling of the PC\ and Include\ directories.  Do all your work from within
-this new location -- sorry, but you'll be sorry if you don't.
-
-OPEN THE PROJECT
-----------------
-From VC 7.1, use the
-    File -> Open Solution...
-dialog (*not* the "File -> Open..." dialog!).  Navigate to and select the
-file "example.sln", in the *copy* of the example_nt directory you made
-above.
-Click Open.
-
-BUILD THE EXAMPLE DLL
----------------------
-In order to check that everything is set up right, try building:
-
-1. Select a configuration.  This step is optional.  Do
-       Build -> Configuration Manager... -> Active Solution Configuration
-   and select either "Release" or "Debug".
-   If you skip this step, you'll use the Debug configuration by default.
-
-2. Build the DLL.  Do
-       Build -> Build Solution
-   This creates all intermediate and result files in a subdirectory which
-   is called either Debug or Release, depending on which configuration you
-   picked in the preceding step.
-
-TESTING THE DEBUG-MODE DLL
---------------------------
-Once the Debug build has succeeded, bring up a DOS box, and cd to
-example_nt\Debug.  You should now be able to repeat the following session
-("C>" is the DOS prompt, ">>>" is the Python prompt) (note that various
-debug output from Python may not match this screen dump exactly):
-
-    C>..\..\PCbuild\python_d
-    Adding parser accelerators ...
-    Done.
-    Python 2.2c1+ (#28, Dec 14 2001, 18:06:39) [MSC 32 bit (Intel)] on win32
-    Type "help", "copyright", "credits" or "license" for more information.
-    >>> import example
-    [7052 refs]
-    >>> example.foo()
-    Hello, world
-    [7052 refs]
-    >>>
-
-TESTING THE RELEASE-MODE DLL
-----------------------------
-Once the Release build has succeeded, bring up a DOS box, and cd to
-example_nt\Release.  You should now be able to repeat the following session
-("C>" is the DOS prompt, ">>>" is the Python prompt):
-
-    C>..\..\PCbuild\python
-    Python 2.2c1+ (#28, Dec 14 2001, 18:06:04) [MSC 32 bit (Intel)] on win32
-    Type "help", "copyright", "credits" or "license" for more information.
-    >>> import example
-    >>> example.foo()
-    Hello, world
-    >>>
-
-Congratulations!  You've successfully built your first Python extension
-module.
-
-CREATING YOUR OWN PROJECT
--------------------------
-Choose a name ("spam" is always a winner :-) and create a directory for
-it.  Copy your C sources into it.  Note that the module source file name
-does not necessarily have to match the module name, but the "init" function
-name should match the module name -- i.e. you can only import a module
-"spam" if its init function is called "initspam()", and it should call
-Py_InitModule with the string "spam" as its first argument (use the minimal
-example.c in this directory as a guide).  By convention, it lives in a file
-called "spam.c" or "spammodule.c".  The output file should be called
-"spam.dll" or "spam.pyd" (the latter is supported to avoid confusion with a
-system library "spam.dll" to which your module could be a Python interface)
-in Release mode, or spam_d.dll or spam_d.pyd in Debug mode.
-
-Now your options are:
-
-1) Copy example.sln and example.vcproj, rename them to spam.*, and edit them
-by hand.
-
-or
-
-2) Create a brand new project; instructions are below.
-
-In either case, copy example_nt\example.def to spam\spam.def, and edit the
-new spam.def so its second line contains the string "initspam".  If you
-created a new project yourself, add the file spam.def to the project now.
-(This is an annoying little file with only two lines.  An alternative
-approach is to forget about the .def file, and add the option
-"/export:initspam" somewhere to the Link settings, by manually editing the
-"Project -> Properties -> Linker -> Command Line -> Additional Options" 
-box).
-
-You are now all set to build your extension, unless it requires other
-external libraries, include files, etc.  See Python's Extending and
-Embedding manual for instructions on how to write an extension.
-
-
-CREATING A BRAND NEW PROJECT
-----------------------------
-Use the
-    File -> New -> Project...
-dialog to create a new Project Workspace.  Select "Visual C++ Projects/Win32/
-Win32 Project", enter the name ("spam"), and make sure the "Location" is 
-set to parent of the spam directory you have created (which should be a direct 
-subdirectory of the Python build tree, a sibling of Include and PC).  
-In "Application Settings", select "DLL", and "Empty Project".  Click OK.
-
-You should now create the file spam.def as instructed in the previous
-section. Add the source files (including the .def file) to the project, 
-using "Project", "Add Existing Item".
-
-Now open the
-    Project -> spam properties...
-dialog.  (Impressive, isn't it? :-) You only need to change a few
-settings.  Make sure "All Configurations" is selected from the "Settings
-for:" dropdown list.  Select the "C/C++" tab.  Choose the "General"
-category in the popup menu at the top.  Type the following text in the
-entry box labeled "Addditional Include Directories:"
-
-    ..\Include,..\PC
-
-Then, choose the "General" category in the "Linker" tab, and enter
-    ..\PCbuild
-in the "Additional library Directories" box.
-
-Now you need to add some mode-specific settings (select "Accept"
-when asked to confirm your changes):
-
-Select "Release" in the "Configuration" dropdown list.  Click the
-"Link" tab, choose the "Input" Category, and append "python24.lib" to the
-list in the "Additional Dependencies" box.
-
-Select "Debug" in the "Settings for:" dropdown list, and append
-"python24_d.lib" to the list in the Additional Dependencies" box.  Then
-click on the C/C++ tab, select "Code Generation", and select 
-"Multi-threaded Debug DLL" from the "Runtime library" dropdown list.
-
-Select "Release" again from the "Settings for:" dropdown list.
-Select "Multi-threaded DLL" from the "Use run-time library:" dropdown list.
-
-That's all <wink>.
+Example Python extension for Windows NT
+=======================================
+
+This directory contains everything needed (except for the Python
+distribution!) to build a Python extension module using Microsoft VC++
+("Developer Studio") version 7.1.  It has been tested with VC++ 7.1 on 
+Python 2.4.  You can also use earlier versions of VC to build Python 
+extensions, but the sample VC project file (example.dsw in this directory) 
+is in VC 7.1 format. Notice that you need to use the same compiler version
+that was used to build Python itself.
+
+COPY THIS DIRECTORY!
+--------------------
+This "example_nt" directory is a subdirectory of the PC directory, in order
+to keep all the PC-specific files under the same directory.  However, the
+example_nt directory can't actually be used from this location.  You first
+need to copy or move it up one level, so that example_nt is a direct
+sibling of the PC\ and Include\ directories.  Do all your work from within
+this new location -- sorry, but you'll be sorry if you don't.
+
+OPEN THE PROJECT
+----------------
+From VC 7.1, use the
+    File -> Open Solution...
+dialog (*not* the "File -> Open..." dialog!).  Navigate to and select the
+file "example.sln", in the *copy* of the example_nt directory you made
+above.
+Click Open.
+
+BUILD THE EXAMPLE DLL
+---------------------
+In order to check that everything is set up right, try building:
+
+1. Select a configuration.  This step is optional.  Do
+       Build -> Configuration Manager... -> Active Solution Configuration
+   and select either "Release" or "Debug".
+   If you skip this step, you'll use the Debug configuration by default.
+
+2. Build the DLL.  Do
+       Build -> Build Solution
+   This creates all intermediate and result files in a subdirectory which
+   is called either Debug or Release, depending on which configuration you
+   picked in the preceding step.
+
+TESTING THE DEBUG-MODE DLL
+--------------------------
+Once the Debug build has succeeded, bring up a DOS box, and cd to
+example_nt\Debug.  You should now be able to repeat the following session
+("C>" is the DOS prompt, ">>>" is the Python prompt) (note that various
+debug output from Python may not match this screen dump exactly):
+
+    C>..\..\PCbuild\python_d
+    Adding parser accelerators ...
+    Done.
+    Python 2.2c1+ (#28, Dec 14 2001, 18:06:39) [MSC 32 bit (Intel)] on win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import example
+    [7052 refs]
+    >>> example.foo()
+    Hello, world
+    [7052 refs]
+    >>>
+
+TESTING THE RELEASE-MODE DLL
+----------------------------
+Once the Release build has succeeded, bring up a DOS box, and cd to
+example_nt\Release.  You should now be able to repeat the following session
+("C>" is the DOS prompt, ">>>" is the Python prompt):
+
+    C>..\..\PCbuild\python
+    Python 2.2c1+ (#28, Dec 14 2001, 18:06:04) [MSC 32 bit (Intel)] on win32
+    Type "help", "copyright", "credits" or "license" for more information.
+    >>> import example
+    >>> example.foo()
+    Hello, world
+    >>>
+
+Congratulations!  You've successfully built your first Python extension
+module.
+
+CREATING YOUR OWN PROJECT
+-------------------------
+Choose a name ("spam" is always a winner :-) and create a directory for
+it.  Copy your C sources into it.  Note that the module source file name
+does not necessarily have to match the module name, but the "init" function
+name should match the module name -- i.e. you can only import a module
+"spam" if its init function is called "initspam()", and it should call
+Py_InitModule with the string "spam" as its first argument (use the minimal
+example.c in this directory as a guide).  By convention, it lives in a file
+called "spam.c" or "spammodule.c".  The output file should be called
+"spam.dll" or "spam.pyd" (the latter is supported to avoid confusion with a
+system library "spam.dll" to which your module could be a Python interface)
+in Release mode, or spam_d.dll or spam_d.pyd in Debug mode.
+
+Now your options are:
+
+1) Copy example.sln and example.vcproj, rename them to spam.*, and edit them
+by hand.
+
+or
+
+2) Create a brand new project; instructions are below.
+
+In either case, copy example_nt\example.def to spam\spam.def, and edit the
+new spam.def so its second line contains the string "initspam".  If you
+created a new project yourself, add the file spam.def to the project now.
+(This is an annoying little file with only two lines.  An alternative
+approach is to forget about the .def file, and add the option
+"/export:initspam" somewhere to the Link settings, by manually editing the
+"Project -> Properties -> Linker -> Command Line -> Additional Options" 
+box).
+
+You are now all set to build your extension, unless it requires other
+external libraries, include files, etc.  See Python's Extending and
+Embedding manual for instructions on how to write an extension.
+
+
+CREATING A BRAND NEW PROJECT
+----------------------------
+Use the
+    File -> New -> Project...
+dialog to create a new Project Workspace.  Select "Visual C++ Projects/Win32/
+Win32 Project", enter the name ("spam"), and make sure the "Location" is 
+set to parent of the spam directory you have created (which should be a direct 
+subdirectory of the Python build tree, a sibling of Include and PC).  
+In "Application Settings", select "DLL", and "Empty Project".  Click OK.
+
+You should now create the file spam.def as instructed in the previous
+section. Add the source files (including the .def file) to the project, 
+using "Project", "Add Existing Item".
+
+Now open the
+    Project -> spam properties...
+dialog.  (Impressive, isn't it? :-) You only need to change a few
+settings.  Make sure "All Configurations" is selected from the "Settings
+for:" dropdown list.  Select the "C/C++" tab.  Choose the "General"
+category in the popup menu at the top.  Type the following text in the
+entry box labeled "Addditional Include Directories:"
+
+    ..\Include,..\PC
+
+Then, choose the "General" category in the "Linker" tab, and enter
+    ..\PCbuild
+in the "Additional library Directories" box.
+
+Now you need to add some mode-specific settings (select "Accept"
+when asked to confirm your changes):
+
+Select "Release" in the "Configuration" dropdown list.  Click the
+"Link" tab, choose the "Input" Category, and append "python24.lib" to the
+list in the "Additional Dependencies" box.
+
+Select "Debug" in the "Settings for:" dropdown list, and append
+"python24_d.lib" to the list in the Additional Dependencies" box.  Then
+click on the C/C++ tab, select "Code Generation", and select 
+"Multi-threaded Debug DLL" from the "Runtime library" dropdown list.
+
+Select "Release" again from the "Settings for:" dropdown list.
+Select "Multi-threaded DLL" from the "Use run-time library:" dropdown list.
+
+That's all <wink>.
diff --git a/PC/readme.txt b/PC/readme.txt
index 012f59f..f1db9d3 100644
--- a/PC/readme.txt
+++ b/PC/readme.txt
@@ -1,101 +1,101 @@
-Welcome to the "PC" subdirectory of the Python distribution
-***********************************************************
-
-*** Note: the project files for MS VC++ 7.1 are now in the
-*** PCbuild directory.  See the file readme.txt there for build
-*** instructions.  There is some information below that might
-*** still be relevant.
-
-This "PC" subdirectory contains complete project files to make
-several older PC ports of Python, as well as all the PC-specific
-Python source files.  It should be located in the root of the
-Python distribution, and there should be directories "Modules",
-"Objects", "Python", etc. in the parent directory of this "PC"
-subdirectory.  Be sure to read the documentation in the Python
-distribution.
-
-Python requires library files such as string.py to be available in
-one or more library directories.  The search path of libraries is
-set up when Python starts.  To see the current Python library search
-path, start Python and enter "import sys" and "print sys.path".
-
-All PC ports use this scheme to try to set up a module search path:
-
-  1) The script location; the current directory without script.
-  2) The PYTHONPATH variable, if set.
-  3) For Win32 platforms (NT/95), paths specified in the Registry.
-  4) Default directories lib, lib/win, lib/test, lib/tkinter;
-     these are searched relative to the environment variable
-     PYTHONHOME, if set, or relative to the executable and its
-     ancestors, if a landmark file (Lib/string.py) is found ,
-     or the current directory (not useful).
-  5) The directory containing the executable.
-
-The best installation strategy is to put the Python executable (and
-DLL, for Win32 platforms) in some convenient directory such as
-C:/python, and copy all library files and subdirectories (using XCOPY)
-to C:/python/lib.  Then you don't need to set PYTHONPATH.  Otherwise,
-set the environment variable PYTHONPATH to your Python search path.
-For example,
-   set PYTHONPATH=.;d:\python\lib;d:\python\lib\win;d:\python\lib\dos-8x3
-
-There are several add-in modules to build Python programs which use
-the native Windows operating environment.  The ports here just make
-"QuickWin" and DOS Python versions which support a character-mode
-(console) environment.  Look in www.python.org for Tkinter, PythonWin,
-WPY and wxPython.
-
-To make a Python port, start the Integrated Development Environment
-(IDE) of your compiler, and read in the native "project file"
-(or makefile) provided.  This will enable you to change any source
-files or build settings so you can make custom builds.
-
-pyconfig.h    An important configuration file specific to PC's.
-
-config.c    The list of C modules to include in the Python PC
-            version.  Manually edit this file to add or
-            remove Python modules.
-
-testpy.py   A Python test program.  Run this to test your
-            Python port.  It should produce copious output,
-	    ending in a report on how many tests were OK, how many
-	    failed, and how many were skipped.  Don't worry about
-	    skipped tests (these test unavailable optional features).
-
-
-Additional files and subdirectories for 32-bit Windows
-======================================================
-
-python_nt.rc   Resource compiler input for python15.dll.
-
-dl_nt.c, import_nt.c
-               Additional sources used for 32-bit Windows features.
-
-getpathp.c     Default sys.path calculations (for all PC platforms).
-
-dllbase_nt.txt A (manually maintained) list of base addresses for
-               various DLLs, to avoid run-time relocation.
-
-example_nt     A subdirectory showing how to build an extension as a
-               DLL.
-
-Visual Studio 6.0
-=================
-The subdirectory VC6 contains Visual Studio 6 project files. These
-were originally located in the PCBuild directory, but are no longer
-maintained.
-
-
-IBM VisualAge C/C++ for OS/2
-============================
-
-See os2vacpp/readme.txt.  This platform is supported by Jeff Rush.
-
-
-Note for Windows 3.x and DOS users
-==================================
-
-Neither Windows 3.x nor DOS is supported any more.  The last Python
-version that supported these was Python 1.5.2; the support files were
-present in Python 2.0 but weren't updated, and it is not our intention
-to support these platforms for Python 2.x.
+Welcome to the "PC" subdirectory of the Python distribution
+***********************************************************
+
+*** Note: the project files for MS VC++ 7.1 are now in the
+*** PCbuild directory.  See the file readme.txt there for build
+*** instructions.  There is some information below that might
+*** still be relevant.
+
+This "PC" subdirectory contains complete project files to make
+several older PC ports of Python, as well as all the PC-specific
+Python source files.  It should be located in the root of the
+Python distribution, and there should be directories "Modules",
+"Objects", "Python", etc. in the parent directory of this "PC"
+subdirectory.  Be sure to read the documentation in the Python
+distribution.
+
+Python requires library files such as string.py to be available in
+one or more library directories.  The search path of libraries is
+set up when Python starts.  To see the current Python library search
+path, start Python and enter "import sys" and "print sys.path".
+
+All PC ports use this scheme to try to set up a module search path:
+
+  1) The script location; the current directory without script.
+  2) The PYTHONPATH variable, if set.
+  3) For Win32 platforms (NT/95), paths specified in the Registry.
+  4) Default directories lib, lib/win, lib/test, lib/tkinter;
+     these are searched relative to the environment variable
+     PYTHONHOME, if set, or relative to the executable and its
+     ancestors, if a landmark file (Lib/string.py) is found ,
+     or the current directory (not useful).
+  5) The directory containing the executable.
+
+The best installation strategy is to put the Python executable (and
+DLL, for Win32 platforms) in some convenient directory such as
+C:/python, and copy all library files and subdirectories (using XCOPY)
+to C:/python/lib.  Then you don't need to set PYTHONPATH.  Otherwise,
+set the environment variable PYTHONPATH to your Python search path.
+For example,
+   set PYTHONPATH=.;d:\python\lib;d:\python\lib\win;d:\python\lib\dos-8x3
+
+There are several add-in modules to build Python programs which use
+the native Windows operating environment.  The ports here just make
+"QuickWin" and DOS Python versions which support a character-mode
+(console) environment.  Look in www.python.org for Tkinter, PythonWin,
+WPY and wxPython.
+
+To make a Python port, start the Integrated Development Environment
+(IDE) of your compiler, and read in the native "project file"
+(or makefile) provided.  This will enable you to change any source
+files or build settings so you can make custom builds.
+
+pyconfig.h    An important configuration file specific to PC's.
+
+config.c    The list of C modules to include in the Python PC
+            version.  Manually edit this file to add or
+            remove Python modules.
+
+testpy.py   A Python test program.  Run this to test your
+            Python port.  It should produce copious output,
+	    ending in a report on how many tests were OK, how many
+	    failed, and how many were skipped.  Don't worry about
+	    skipped tests (these test unavailable optional features).
+
+
+Additional files and subdirectories for 32-bit Windows
+======================================================
+
+python_nt.rc   Resource compiler input for python15.dll.
+
+dl_nt.c, import_nt.c
+               Additional sources used for 32-bit Windows features.
+
+getpathp.c     Default sys.path calculations (for all PC platforms).
+
+dllbase_nt.txt A (manually maintained) list of base addresses for
+               various DLLs, to avoid run-time relocation.
+
+example_nt     A subdirectory showing how to build an extension as a
+               DLL.
+
+Visual Studio 6.0
+=================
+The subdirectory VC6 contains Visual Studio 6 project files. These
+were originally located in the PCBuild directory, but are no longer
+maintained.
+
+
+IBM VisualAge C/C++ for OS/2
+============================
+
+See os2vacpp/readme.txt.  This platform is supported by Jeff Rush.
+
+
+Note for Windows 3.x and DOS users
+==================================
+
+Neither Windows 3.x nor DOS is supported any more.  The last Python
+version that supported these was Python 1.5.2; the support files were
+present in Python 2.0 but weren't updated, and it is not our intention
+to support these platforms for Python 2.x.
diff --git a/PC/testpy.py b/PC/testpy.py
index fd1b1e4..f8746a3 100644
--- a/PC/testpy.py
+++ b/PC/testpy.py
@@ -1,32 +1,32 @@
-import sys
-
-# This is a test module for Python.  It looks in the standard
-# places for various *.py files.  If these are moved, you must
-# change this module too.
-
-try:
-    import string
-except:
-    print """Could not import the standard "string" module.
-  Please check your PYTHONPATH environment variable."""
-    sys.exit(1)
-
-try:
-    import regex_syntax
-except:
-    print """Could not import the standard "regex_syntax" module.  If this is
-  a PC, you should add the dos_8x3 directory to your PYTHONPATH."""
-    sys.exit(1)
-
-import os
-
-for dir in sys.path:
-    file = os.path.join(dir, "string.py")
-    if os.path.isfile(file):
-        test = os.path.join(dir, "test")
-        if os.path.isdir(test):
-            # Add the "test" directory to PYTHONPATH.
-            sys.path = sys.path + [test]
-
-import regrtest # Standard Python tester.
-regrtest.main()
+import sys
+
+# This is a test module for Python.  It looks in the standard
+# places for various *.py files.  If these are moved, you must
+# change this module too.
+
+try:
+    import string
+except:
+    print """Could not import the standard "string" module.
+  Please check your PYTHONPATH environment variable."""
+    sys.exit(1)
+
+try:
+    import regex_syntax
+except:
+    print """Could not import the standard "regex_syntax" module.  If this is
+  a PC, you should add the dos_8x3 directory to your PYTHONPATH."""
+    sys.exit(1)
+
+import os
+
+for dir in sys.path:
+    file = os.path.join(dir, "string.py")
+    if os.path.isfile(file):
+        test = os.path.join(dir, "test")
+        if os.path.isdir(test):
+            # Add the "test" directory to PYTHONPATH.
+            sys.path = sys.path + [test]
+
+import regrtest # Standard Python tester.
+regrtest.main()
