| #! /usr/bin/env python | 
 |  | 
 | # This program reads all *.py and test/*.py in "libDir", and | 
 | # copies those files with illegal DOS names to libDir/dos_8x3. | 
 | # Names are illegal if they are longer than 8x3 chars or if they | 
 | # contain uppercase chars.  It also tests for name collisions. | 
 | # You must first create the directory libDir/dos_8x3 yourself. | 
 | # You should remove all files in dos_8x3 if you run it again. | 
 |  | 
 | # CHANGE libDir TO THE CORRECT DIRECTORY.  RM dos_8x3/* FIRST. | 
 |  | 
 | import sys, os, regex, string | 
 |  | 
 | libDir = "./Lib"	# Location of Python Lib | 
 |  | 
 | def make8x3(): | 
 |   reg_uppercase = regex.compile("[A-Z]") | 
 |   collisions = {}	# See if all names are unique in first 8 chars. | 
 |   destDir = os.path.join(libDir, "dos_8x3") | 
 |   if not os.path.isdir(destDir): | 
 |     print "Please create the directory", destDir, "first." | 
 |     err() | 
 |   while 1: | 
 |     ans = raw_input("Ok to copy to " + destDir + " [yn]? ") | 
 |     if not ans: | 
 |       continue | 
 |     elif ans[0] == "n": | 
 |       err() | 
 |     elif ans[0] == "y": | 
 |       break | 
 |   for dirname in libDir, os.path.join(libDir, "test"): | 
 |     for filename in os.listdir(dirname): | 
 |       if filename[-3:] == ".py": | 
 |         name = filename[0:-3] | 
 |         if len(name) > 8 or reg_uppercase.search(name) >= 0: | 
 |           shortName = string.lower(name[0:8]) | 
 |           if collisions.has_key(shortName): | 
 |             print "Name not unique in first 8 chars:", collisions[shortName], name | 
 |           else: | 
 |             collisions[shortName] = name | 
 |             fin = open(os.path.join(dirname, filename), "r") | 
 |             dest = os.path.join(destDir, shortName + ".py") | 
 |             fout = open(dest, "w") | 
 |             fout.write(fin.read()) | 
 |             fin.close() | 
 |             fout.close() | 
 |             os.chmod(dest, 0644) | 
 |       elif filename == "." or filename == "..": | 
 |         continue | 
 |       elif filename[-4:] == ".pyc": | 
 |         continue | 
 |       elif filename == "Makefile": | 
 |         continue | 
 |       else: | 
 |         parts = string.splitfields(filename, ".") | 
 |         if len(parts) > 2 or \ | 
 |            len(parts[0]) > 8 or \ | 
 |            reg_uppercase.search(filename) >= 0 or \ | 
 |            (len(parts) > 1 and len(parts[1]) > 3): | 
 |                  print "Illegal DOS name", os.path.join(dirname, filename) | 
 |   sys.exit(0) | 
 | def err(): | 
 |   print "No files copied." | 
 |   sys.exit(1) | 
 |              | 
 |  | 
 | if __name__ == "__main__": | 
 |   make8x3() |