Whitespace normalization.
diff --git a/Tools/scripts/byteyears.py b/Tools/scripts/byteyears.py
index bada5a5..f67be70 100755
--- a/Tools/scripts/byteyears.py
+++ b/Tools/scripts/byteyears.py
@@ -12,46 +12,46 @@
 
 # Use lstat() to stat files if it exists, else stat()
 try:
-	statfunc = os.lstat
+    statfunc = os.lstat
 except AttributeError:
-	statfunc = os.stat
+    statfunc = os.stat
 
 # Parse options
 if sys.argv[1] == '-m':
-	itime = ST_MTIME
-	del sys.argv[1]
+    itime = ST_MTIME
+    del sys.argv[1]
 elif sys.argv[1] == '-c':
-	itime = ST_CTIME
-	del sys.argv[1]
+    itime = ST_CTIME
+    del sys.argv[1]
 elif sys.argv[1] == '-a':
-	itime = ST_CTIME
-	del sys.argv[1]
+    itime = ST_CTIME
+    del sys.argv[1]
 else:
-	itime = ST_MTIME
+    itime = ST_MTIME
 
-secs_per_year = 365.0 * 24.0 * 3600.0	# Scale factor
-now = time.time()			# Current time, for age computations
-status = 0				# Exit status, set to 1 on errors
+secs_per_year = 365.0 * 24.0 * 3600.0   # Scale factor
+now = time.time()                       # Current time, for age computations
+status = 0                              # Exit status, set to 1 on errors
 
 # Compute max file name length
 maxlen = 1
 for file in sys.argv[1:]:
-	if len(file) > maxlen: maxlen = len(file)
+    if len(file) > maxlen: maxlen = len(file)
 
 # Process each argument in turn
 for file in sys.argv[1:]:
-	try:
-		st = statfunc(file)
-	except os.error, msg:
-		sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
-		status = 1
-		st = ()
-	if st:
-		anytime = st[itime]
-		size = st[ST_SIZE]
-		age = now - anytime
-		byteyears = float(size) * float(age) / secs_per_year
-		print string.ljust(file, maxlen),
-		print string.rjust(`int(byteyears)`, 8)
+    try:
+        st = statfunc(file)
+    except os.error, msg:
+        sys.stderr.write('can\'t stat ' + `file` + ': ' + `msg` + '\n')
+        status = 1
+        st = ()
+    if st:
+        anytime = st[itime]
+        size = st[ST_SIZE]
+        age = now - anytime
+        byteyears = float(size) * float(age) / secs_per_year
+        print string.ljust(file, maxlen),
+        print string.rjust(`int(byteyears)`, 8)
 
 sys.exit(status)
diff --git a/Tools/scripts/checkpyc.py b/Tools/scripts/checkpyc.py
index 7be625c..b38b456 100755
--- a/Tools/scripts/checkpyc.py
+++ b/Tools/scripts/checkpyc.py
@@ -8,58 +8,58 @@
 import imp
 
 def main():
-	silent = 0
-	verbose = 0
-	if sys.argv[1:]:
-		if sys.argv[1] == '-v':
-			verbose = 1
-		elif sys.argv[1] == '-s':
-			silent = 1
-	MAGIC = imp.get_magic()
-	if not silent:
-		print 'Using MAGIC word', `MAGIC`
-	for dirname in sys.path:
-		try:
-			names = os.listdir(dirname)
-		except os.error:
-			print 'Cannot list directory', `dirname`
-			continue
-		if not silent:
-			print 'Checking', `dirname`, '...'
-		names.sort()
-		for name in names:
-			if name[-3:] == '.py':
-				name = os.path.join(dirname, name)
-				try:
-					st = os.stat(name)
-				except os.error:
-					print 'Cannot stat', `name`
-					continue
-				if verbose:
-					print 'Check', `name`, '...'
-				name_c = name + 'c'
-				try:
-					f = open(name_c, 'r')
-				except IOError:
-					print 'Cannot open', `name_c`
-					continue
-				magic_str = f.read(4)
-				mtime_str = f.read(4)
-				f.close()
-				if magic_str <> MAGIC:
-					print 'Bad MAGIC word in ".pyc" file',
-					print `name_c`
-					continue
-				mtime = get_long(mtime_str)
-				if mtime == 0 or mtime == -1:
-					print 'Bad ".pyc" file', `name_c`
-				elif mtime <> st[ST_MTIME]:
-					print 'Out-of-date ".pyc" file',
-					print `name_c`
+    silent = 0
+    verbose = 0
+    if sys.argv[1:]:
+        if sys.argv[1] == '-v':
+            verbose = 1
+        elif sys.argv[1] == '-s':
+            silent = 1
+    MAGIC = imp.get_magic()
+    if not silent:
+        print 'Using MAGIC word', `MAGIC`
+    for dirname in sys.path:
+        try:
+            names = os.listdir(dirname)
+        except os.error:
+            print 'Cannot list directory', `dirname`
+            continue
+        if not silent:
+            print 'Checking', `dirname`, '...'
+        names.sort()
+        for name in names:
+            if name[-3:] == '.py':
+                name = os.path.join(dirname, name)
+                try:
+                    st = os.stat(name)
+                except os.error:
+                    print 'Cannot stat', `name`
+                    continue
+                if verbose:
+                    print 'Check', `name`, '...'
+                name_c = name + 'c'
+                try:
+                    f = open(name_c, 'r')
+                except IOError:
+                    print 'Cannot open', `name_c`
+                    continue
+                magic_str = f.read(4)
+                mtime_str = f.read(4)
+                f.close()
+                if magic_str <> MAGIC:
+                    print 'Bad MAGIC word in ".pyc" file',
+                    print `name_c`
+                    continue
+                mtime = get_long(mtime_str)
+                if mtime == 0 or mtime == -1:
+                    print 'Bad ".pyc" file', `name_c`
+                elif mtime <> st[ST_MTIME]:
+                    print 'Out-of-date ".pyc" file',
+                    print `name_c`
 
 def get_long(s):
-	if len(s) <> 4:
-		return -1
-	return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
+    if len(s) <> 4:
+        return -1
+    return ord(s[0]) + (ord(s[1])<<8) + (ord(s[2])<<16) + (ord(s[3])<<24)
 
 main()
diff --git a/Tools/scripts/classfix.py b/Tools/scripts/classfix.py
index 53ea0b8..332db12 100755
--- a/Tools/scripts/classfix.py
+++ b/Tools/scripts/classfix.py
@@ -4,9 +4,9 @@
 #
 # Fix Python source files to use the new class definition syntax, i.e.,
 # the syntax used in Python versions before 0.9.8:
-#	class C() = base(), base(), ...: ...
+#       class C() = base(), base(), ...: ...
 # is changed to the current syntax:
-#	class C(base, base, ...): ...
+#       class C(base, base, ...): ...
 #
 # The script uses heuristics to find class definitions that usually
 # work but occasionally can fail; carefully check the output!
@@ -39,113 +39,113 @@
 rep = sys.stdout.write
 
 def main():
-	bad = 0
-	if not sys.argv[1:]: # No arguments
-		err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
-		sys.exit(2)
-	for arg in sys.argv[1:]:
-		if os.path.isdir(arg):
-			if recursedown(arg): bad = 1
-		elif os.path.islink(arg):
-			err(arg + ': will not process symbolic links\n')
-			bad = 1
-		else:
-			if fix(arg): bad = 1
-	sys.exit(bad)
+    bad = 0
+    if not sys.argv[1:]: # No arguments
+        err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
+        sys.exit(2)
+    for arg in sys.argv[1:]:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-	return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-	dbg('recursedown(' + `dirname` + ')\n')
-	bad = 0
-	try:
-		names = os.listdir(dirname)
-	except os.error, msg:
-		err(dirname + ': cannot list directory: ' + `msg` + '\n')
-		return 1
-	names.sort()
-	subdirs = []
-	for name in names:
-		if name in (os.curdir, os.pardir): continue
-		fullname = os.path.join(dirname, name)
-		if os.path.islink(fullname): pass
-		elif os.path.isdir(fullname):
-			subdirs.append(fullname)
-		elif ispython(name):
-			if fix(fullname): bad = 1
-	for fullname in subdirs:
-		if recursedown(fullname): bad = 1
-	return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##	dbg('fix(' + `filename` + ')\n')
-	try:
-		f = open(filename, 'r')
-	except IOError, msg:
-		err(filename + ': cannot open: ' + `msg` + '\n')
-		return 1
-	head, tail = os.path.split(filename)
-	tempname = os.path.join(head, '@' + tail)
-	g = None
-	# If we find a match, we rewind the file and start over but
-	# now copy everything to a temp file.
-	lineno = 0
-	while 1:
-		line = f.readline()
-		if not line: break
-		lineno = lineno + 1
-		while line[-2:] == '\\\n':
-			nextline = f.readline()
-			if not nextline: break
-			line = line + nextline
-			lineno = lineno + 1
-		newline = fixline(line)
-		if newline != line:
-			if g is None:
-				try:
-					g = open(tempname, 'w')
-				except IOError, msg:
-					f.close()
-					err(tempname+': cannot create: '+\
-					    `msg`+'\n')
-					return 1
-				f.seek(0)
-				lineno = 0
-				rep(filename + ':\n')
-				continue # restart from the beginning
-			rep(`lineno` + '\n')
-			rep('< ' + line)
-			rep('> ' + newline)
-		if g is not None:
-			g.write(newline)
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+\
+                        `msg`+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
 
-	# End of file
-	f.close()
-	if not g: return 0 # No changes
+    # End of file
+    f.close()
+    if not g: return 0 # No changes
 
-	# Finishing touch -- move files
+    # Finishing touch -- move files
 
-	# First copy the file's mode to the temp file
-	try:
-		statbuf = os.stat(filename)
-		os.chmod(tempname, statbuf[ST_MODE] & 07777)
-	except os.error, msg:
-		err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-	# Then make a backup of the original file as filename~
-	try:
-		os.rename(filename, filename + '~')
-	except os.error, msg:
-		err(filename + ': warning: backup failed (' + `msg` + ')\n')
-	# Now move the temp file to the original file
-	try:
-		os.rename(tempname, filename)
-	except os.error, msg:
-		err(filename + ': rename failed (' + `msg` + ')\n')
-		return 1
-	# Return succes
-	return 0
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 # This expression doesn't catch *all* class definition headers,
 # but it's pretty darn close.
@@ -159,34 +159,34 @@
 import string
 
 def fixline(line):
-	if classprog.match(line) < 0: # No 'class' keyword -- no change
-		return line
-	
-	(a0, b0), (a1, b1), (a2, b2) = classprog.regs[:3]
-	# a0, b0 = Whole match (up to ':')
-	# a1, b1 = First subexpression (up to classname)
-	# a2, b2 = Second subexpression (=.*)
-	head = line[:b1]
-	tail = line[b0:] # Unmatched rest of line
-	
-	if a2 == b2: # No base classes -- easy case
-		return head + ':' + tail
-	
-	# Get rid of leading '='
-	basepart = line[a2+1:b2]
+    if classprog.match(line) < 0: # No 'class' keyword -- no change
+        return line
 
-	# Extract list of base expressions
-	bases = string.splitfields(basepart, ',')
-	
-	# Strip trailing '()' from each base expression
-	for i in range(len(bases)):
-		if baseprog.match(bases[i]) >= 0:
-			x1, y1 = baseprog.regs[1]
-			bases[i] = bases[i][x1:y1]
-	
-	# Join the bases back again and build the new line
-	basepart = string.joinfields(bases, ', ')
-	
-	return head + '(' + basepart + '):' + tail
+    (a0, b0), (a1, b1), (a2, b2) = classprog.regs[:3]
+    # a0, b0 = Whole match (up to ':')
+    # a1, b1 = First subexpression (up to classname)
+    # a2, b2 = Second subexpression (=.*)
+    head = line[:b1]
+    tail = line[b0:] # Unmatched rest of line
+
+    if a2 == b2: # No base classes -- easy case
+        return head + ':' + tail
+
+    # Get rid of leading '='
+    basepart = line[a2+1:b2]
+
+    # Extract list of base expressions
+    bases = string.splitfields(basepart, ',')
+
+    # Strip trailing '()' from each base expression
+    for i in range(len(bases)):
+        if baseprog.match(bases[i]) >= 0:
+            x1, y1 = baseprog.regs[1]
+            bases[i] = bases[i][x1:y1]
+
+    # Join the bases back again and build the new line
+    basepart = string.joinfields(bases, ', ')
+
+    return head + '(' + basepart + '):' + tail
 
 main()
diff --git a/Tools/scripts/copytime.py b/Tools/scripts/copytime.py
index d01643b..74c29c9 100755
--- a/Tools/scripts/copytime.py
+++ b/Tools/scripts/copytime.py
@@ -7,19 +7,19 @@
 from stat import ST_ATIME, ST_MTIME # Really constants 7 and 8
 
 def main():
-	if len(sys.argv) <> 3:
-		sys.stderr.write('usage: copytime source destination\n')
-		sys.exit(2)
-	file1, file2 = sys.argv[1], sys.argv[2]
-	try:
-		stat1 = os.stat(file1)
-	except os.error:
-		sys.stderr.write(file1 + ': cannot stat\n')
-		sys.exit(1)
-	try:
-		os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME]))
-	except os.error:
-		sys.stderr.write(file2 + ': cannot change time\n')
-		sys.exit(2)
+    if len(sys.argv) <> 3:
+        sys.stderr.write('usage: copytime source destination\n')
+        sys.exit(2)
+    file1, file2 = sys.argv[1], sys.argv[2]
+    try:
+        stat1 = os.stat(file1)
+    except os.error:
+        sys.stderr.write(file1 + ': cannot stat\n')
+        sys.exit(1)
+    try:
+        os.utime(file2, (stat1[ST_ATIME], stat1[ST_MTIME]))
+    except os.error:
+        sys.stderr.write(file2 + ': cannot change time\n')
+        sys.exit(2)
 
 main()
diff --git a/Tools/scripts/dutree.py b/Tools/scripts/dutree.py
index 5e78d63..63b3e67 100755
--- a/Tools/scripts/dutree.py
+++ b/Tools/scripts/dutree.py
@@ -4,56 +4,56 @@
 import os, string, sys, errno
 
 def main():
-	p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
-	total, d = None, {}
-	for line in p.readlines():
-		i = 0
-		while line[i] in '0123456789': i = i+1
-		size = eval(line[:i])
-		while line[i] in ' \t': i = i+1
-		file = line[i:-1]
-		comps = string.splitfields(file, '/')
-		if comps[0] == '': comps[0] = '/'
-		if comps[len(comps)-1] == '': del comps[len(comps)-1]
-		total, d = store(size, comps, total, d)
-	try:
-		display(total, d)
-	except IOError, e:
-		if e.errno != errno.EPIPE:
-			raise
+    p = os.popen('du ' + string.join(sys.argv[1:]), 'r')
+    total, d = None, {}
+    for line in p.readlines():
+        i = 0
+        while line[i] in '0123456789': i = i+1
+        size = eval(line[:i])
+        while line[i] in ' \t': i = i+1
+        file = line[i:-1]
+        comps = string.splitfields(file, '/')
+        if comps[0] == '': comps[0] = '/'
+        if comps[len(comps)-1] == '': del comps[len(comps)-1]
+        total, d = store(size, comps, total, d)
+    try:
+        display(total, d)
+    except IOError, e:
+        if e.errno != errno.EPIPE:
+            raise
 
 def store(size, comps, total, d):
-	if comps == []:
-		return size, d
-	if not d.has_key(comps[0]):
-		d[comps[0]] = None, {}
-	t1, d1 = d[comps[0]]
-	d[comps[0]] = store(size, comps[1:], t1, d1)
-	return total, d
+    if comps == []:
+        return size, d
+    if not d.has_key(comps[0]):
+        d[comps[0]] = None, {}
+    t1, d1 = d[comps[0]]
+    d[comps[0]] = store(size, comps[1:], t1, d1)
+    return total, d
 
 def display(total, d):
-	show(total, d, '')
+    show(total, d, '')
 
 def show(total, d, prefix):
-	if not d: return
-	list = []
-	sum = 0
-	for key in d.keys():
-		tsub, dsub = d[key]
-		list.append((tsub, key))
-		if tsub is not None: sum = sum + tsub
-## 	if sum < total:
-## 		list.append((total - sum, os.curdir))
-	list.sort()
-	list.reverse()
-	width = len(`list[0][0]`)
-	for tsub, key in list:
-		if tsub is None:
-			psub = prefix
-		else:
-			print prefix + string.rjust(`tsub`, width) + ' ' + key
-			psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
-		if d.has_key(key):
-			show(tsub, d[key][1], psub)
+    if not d: return
+    list = []
+    sum = 0
+    for key in d.keys():
+        tsub, dsub = d[key]
+        list.append((tsub, key))
+        if tsub is not None: sum = sum + tsub
+##      if sum < total:
+##              list.append((total - sum, os.curdir))
+    list.sort()
+    list.reverse()
+    width = len(`list[0][0]`)
+    for tsub, key in list:
+        if tsub is None:
+            psub = prefix
+        else:
+            print prefix + string.rjust(`tsub`, width) + ' ' + key
+            psub = prefix + ' '*(width-1) + '|' + ' '*(len(key)+1)
+        if d.has_key(key):
+            show(tsub, d[key][1], psub)
 
 main()
diff --git a/Tools/scripts/findlinksto.py b/Tools/scripts/findlinksto.py
index 06821cd..e4731a5 100755
--- a/Tools/scripts/findlinksto.py
+++ b/Tools/scripts/findlinksto.py
@@ -10,33 +10,33 @@
 import getopt
 
 def main():
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], '')
-		if len(args) < 2:
-			raise getopt.error, 'not enough arguments'
-	except getopt.error, msg:
-		sys.stdout = sys.stderr
-		print msg
-		print 'usage: findlinksto pattern directory ...'
-		sys.exit(2)
-	pat, dirs = args[0], args[1:]
-	prog = regex.compile(pat)
-	for dirname in dirs:
-		os.path.walk(dirname, visit, prog)
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], '')
+        if len(args) < 2:
+            raise getopt.error, 'not enough arguments'
+    except getopt.error, msg:
+        sys.stdout = sys.stderr
+        print msg
+        print 'usage: findlinksto pattern directory ...'
+        sys.exit(2)
+    pat, dirs = args[0], args[1:]
+    prog = regex.compile(pat)
+    for dirname in dirs:
+        os.path.walk(dirname, visit, prog)
 
 def visit(prog, dirname, names):
-	if os.path.islink(dirname):
-		names[:] = []
-		return
-	if os.path.ismount(dirname):
-		print 'descend into', dirname
-	for name in names:
-		name = os.path.join(dirname, name)
-		try:
-			linkto = os.readlink(name)
-			if prog.search(linkto) >= 0:
-				print name, '->', linkto
-		except os.error:
-			pass
+    if os.path.islink(dirname):
+        names[:] = []
+        return
+    if os.path.ismount(dirname):
+        print 'descend into', dirname
+    for name in names:
+        name = os.path.join(dirname, name)
+        try:
+            linkto = os.readlink(name)
+            if prog.search(linkto) >= 0:
+                print name, '->', linkto
+        except os.error:
+            pass
 
 main()
diff --git a/Tools/scripts/fixcid.py b/Tools/scripts/fixcid.py
index cf0ec16..836ceed 100755
--- a/Tools/scripts/fixcid.py
+++ b/Tools/scripts/fixcid.py
@@ -46,151 +46,151 @@
 rep = sys.stdout.write
 
 def usage():
-	progname = sys.argv[0]
-	err('Usage: ' + progname +
-		  ' [-c] [-r] [-s file] ... file-or-directory ...\n')
-	err('\n')
-	err('-c           : substitute inside comments\n')
-	err('-r           : reverse direction for following -s options\n')
-	err('-s substfile : add a file of substitutions\n')
-	err('\n')
-	err('Each non-empty non-comment line in a substitution file must\n')
-	err('contain exactly two words: an identifier and its replacement.\n')
-	err('Comments start with a # character and end at end of line.\n')
-	err('If an identifier is preceded with a *, it is not substituted\n')
-	err('inside a comment even when -c is specified.\n')
+    progname = sys.argv[0]
+    err('Usage: ' + progname +
+              ' [-c] [-r] [-s file] ... file-or-directory ...\n')
+    err('\n')
+    err('-c           : substitute inside comments\n')
+    err('-r           : reverse direction for following -s options\n')
+    err('-s substfile : add a file of substitutions\n')
+    err('\n')
+    err('Each non-empty non-comment line in a substitution file must\n')
+    err('contain exactly two words: an identifier and its replacement.\n')
+    err('Comments start with a # character and end at end of line.\n')
+    err('If an identifier is preceded with a *, it is not substituted\n')
+    err('inside a comment even when -c is specified.\n')
 
 def main():
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'crs:')
-	except getopt.error, msg:
-		err('Options error: ' + str(msg) + '\n')
-		usage()
-		sys.exit(2)
-	bad = 0
-	if not args: # No arguments
-		usage()
-		sys.exit(2)
-	for opt, arg in opts:
-		if opt == '-c':
-			setdocomments()
-		if opt == '-r':
-			setreverse()
-		if opt == '-s':
-			addsubst(arg)
-	for arg in args:
-		if os.path.isdir(arg):
-			if recursedown(arg): bad = 1
-		elif os.path.islink(arg):
-			err(arg + ': will not process symbolic links\n')
-			bad = 1
-		else:
-			if fix(arg): bad = 1
-	sys.exit(bad)
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'crs:')
+    except getopt.error, msg:
+        err('Options error: ' + str(msg) + '\n')
+        usage()
+        sys.exit(2)
+    bad = 0
+    if not args: # No arguments
+        usage()
+        sys.exit(2)
+    for opt, arg in opts:
+        if opt == '-c':
+            setdocomments()
+        if opt == '-r':
+            setreverse()
+        if opt == '-s':
+            addsubst(arg)
+    for arg in args:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 # Change this regular expression to select a different set of files
 Wanted = '^[a-zA-Z0-9_]+\.[ch]$'
 def wanted(name):
-	return regex.match(Wanted, name) >= 0
+    return regex.match(Wanted, name) >= 0
 
 def recursedown(dirname):
-	dbg('recursedown(' + `dirname` + ')\n')
-	bad = 0
-	try:
-		names = os.listdir(dirname)
-	except os.error, msg:
-		err(dirname + ': cannot list directory: ' + str(msg) + '\n')
-		return 1
-	names.sort()
-	subdirs = []
-	for name in names:
-		if name in (os.curdir, os.pardir): continue
-		fullname = os.path.join(dirname, name)
-		if os.path.islink(fullname): pass
-		elif os.path.isdir(fullname):
-			subdirs.append(fullname)
-		elif wanted(name):
-			if fix(fullname): bad = 1
-	for fullname in subdirs:
-		if recursedown(fullname): bad = 1
-	return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + str(msg) + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif wanted(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##	dbg('fix(' + `filename` + ')\n')
-	if filename == '-':
-		# Filter mode
-		f = sys.stdin
-		g = sys.stdout
-	else:
-		# File replacement mode
-		try:
-			f = open(filename, 'r')
-		except IOError, msg:
-			err(filename + ': cannot open: ' + str(msg) + '\n')
-			return 1
-		head, tail = os.path.split(filename)
-		tempname = os.path.join(head, '@' + tail)
-		g = None
-	# If we find a match, we rewind the file and start over but
-	# now copy everything to a temp file.
-	lineno = 0
-	initfixline()
-	while 1:
-		line = f.readline()
-		if not line: break
-		lineno = lineno + 1
-		while line[-2:] == '\\\n':
-			nextline = f.readline()
-			if not nextline: break
-			line = line + nextline
-			lineno = lineno + 1
-		newline = fixline(line)
-		if newline != line:
-			if g is None:
-				try:
-					g = open(tempname, 'w')
-				except IOError, msg:
-					f.close()
-					err(tempname+': cannot create: '+
-					    str(msg)+'\n')
-					return 1
-				f.seek(0)
-				lineno = 0
-				initfixline()
-				rep(filename + ':\n')
-				continue # restart from the beginning
-			rep(`lineno` + '\n')
-			rep('< ' + line)
-			rep('> ' + newline)
-		if g is not None:
-			g.write(newline)
+##      dbg('fix(' + `filename` + ')\n')
+    if filename == '-':
+        # Filter mode
+        f = sys.stdin
+        g = sys.stdout
+    else:
+        # File replacement mode
+        try:
+            f = open(filename, 'r')
+        except IOError, msg:
+            err(filename + ': cannot open: ' + str(msg) + '\n')
+            return 1
+        head, tail = os.path.split(filename)
+        tempname = os.path.join(head, '@' + tail)
+        g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    initfixline()
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+
+                        str(msg)+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                initfixline()
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
 
-	# End of file
-	if filename == '-': return 0 # Done in filter mode
-	f.close()
-	if not g: return 0 # No changes
+    # End of file
+    if filename == '-': return 0 # Done in filter mode
+    f.close()
+    if not g: return 0 # No changes
 
-	# Finishing touch -- move files
+    # Finishing touch -- move files
 
-	# First copy the file's mode to the temp file
-	try:
-		statbuf = os.stat(filename)
-		os.chmod(tempname, statbuf[ST_MODE] & 07777)
-	except os.error, msg:
-		err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
-	# Then make a backup of the original file as filename~
-	try:
-		os.rename(filename, filename + '~')
-	except os.error, msg:
-		err(filename + ': warning: backup failed (' + str(msg) + ')\n')
-	# Now move the temp file to the original file
-	try:
-		os.rename(tempname, filename)
-	except os.error, msg:
-		err(filename + ': rename failed (' + str(msg) + ')\n')
-		return 1
-	# Return succes
-	return 0
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + str(msg) + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + str(msg) + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + str(msg) + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 # Tokenizing ANSI C (partly)
 
@@ -221,98 +221,98 @@
 InsideCommentProgram = regex.compile(InsideCommentPattern)
 
 def initfixline():
-	global Program
-	Program = OutsideCommentProgram
+    global Program
+    Program = OutsideCommentProgram
 
 def fixline(line):
-	global Program
-##	print '-->', `line`
-	i = 0
-	while i < len(line):
-		i = Program.search(line, i)
-		if i < 0: break
-		found = Program.group(0)
-##		if Program is InsideCommentProgram: print '...',
-##		else: print '   ',
-##		print found
-		if len(found) == 2:
-			if found == '/*':
-				Program = InsideCommentProgram
-			elif found == '*/':
-				Program = OutsideCommentProgram
-		n = len(found)
-		if Dict.has_key(found):
-			subst = Dict[found]
-			if Program is InsideCommentProgram:
-				if not Docomments:
-					print 'Found in comment:', found
-					i = i + n
-					continue
-				if NotInComment.has_key(found):
-##					print 'Ignored in comment:',
-##					print found, '-->', subst
-##					print 'Line:', line,
-					subst = found
-##				else:
-##					print 'Substituting in comment:',
-##					print found, '-->', subst
-##					print 'Line:', line,
-			line = line[:i] + subst + line[i+n:]
-			n = len(subst)
-		i = i + n
-	return line
+    global Program
+##      print '-->', `line`
+    i = 0
+    while i < len(line):
+        i = Program.search(line, i)
+        if i < 0: break
+        found = Program.group(0)
+##              if Program is InsideCommentProgram: print '...',
+##              else: print '   ',
+##              print found
+        if len(found) == 2:
+            if found == '/*':
+                Program = InsideCommentProgram
+            elif found == '*/':
+                Program = OutsideCommentProgram
+        n = len(found)
+        if Dict.has_key(found):
+            subst = Dict[found]
+            if Program is InsideCommentProgram:
+                if not Docomments:
+                    print 'Found in comment:', found
+                    i = i + n
+                    continue
+                if NotInComment.has_key(found):
+##                                      print 'Ignored in comment:',
+##                                      print found, '-->', subst
+##                                      print 'Line:', line,
+                    subst = found
+##                              else:
+##                                      print 'Substituting in comment:',
+##                                      print found, '-->', subst
+##                                      print 'Line:', line,
+            line = line[:i] + subst + line[i+n:]
+            n = len(subst)
+        i = i + n
+    return line
 
 Docomments = 0
 def setdocomments():
-	global Docomments
-	Docomments = 1
+    global Docomments
+    Docomments = 1
 
 Reverse = 0
 def setreverse():
-	global Reverse
-	Reverse = (not Reverse)
+    global Reverse
+    Reverse = (not Reverse)
 
 Dict = {}
 NotInComment = {}
 def addsubst(substfile):
-	try:
-		fp = open(substfile, 'r')
-	except IOError, msg:
-		err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
-		sys.exit(1)
-	lineno = 0
-	while 1:
-		line = fp.readline()
-		if not line: break
-		lineno = lineno + 1
-		try:
-			i = string.index(line, '#')
-		except string.index_error:
-			i = -1		# Happens to delete trailing \n
-		words = string.split(line[:i])
-		if not words: continue
-		if len(words) == 3 and words[0] == 'struct':
-			words[:2] = [words[0] + ' ' + words[1]]
-		elif len(words) <> 2:
-			err(substfile + ':' + `lineno` +
-				  ': warning: bad line: ' + line)
-			continue
-		if Reverse:
-			[value, key] = words
-		else:
-			[key, value] = words
-		if value[0] == '*':
-			value = value[1:]
-		if key[0] == '*':
-			key = key[1:]
-			NotInComment[key] = value
-		if Dict.has_key(key):
-			err(substfile + ':' + `lineno` +
-				  ': warning: overriding: ' +
-				  key + ' ' + value + '\n')
-			err(substfile + ':' + `lineno` +
-				  ': warning: previous: ' + Dict[key] + '\n')
-		Dict[key] = value
-	fp.close()
+    try:
+        fp = open(substfile, 'r')
+    except IOError, msg:
+        err(substfile + ': cannot read substfile: ' + str(msg) + '\n')
+        sys.exit(1)
+    lineno = 0
+    while 1:
+        line = fp.readline()
+        if not line: break
+        lineno = lineno + 1
+        try:
+            i = string.index(line, '#')
+        except string.index_error:
+            i = -1          # Happens to delete trailing \n
+        words = string.split(line[:i])
+        if not words: continue
+        if len(words) == 3 and words[0] == 'struct':
+            words[:2] = [words[0] + ' ' + words[1]]
+        elif len(words) <> 2:
+            err(substfile + ':' + `lineno` +
+                      ': warning: bad line: ' + line)
+            continue
+        if Reverse:
+            [value, key] = words
+        else:
+            [key, value] = words
+        if value[0] == '*':
+            value = value[1:]
+        if key[0] == '*':
+            key = key[1:]
+            NotInComment[key] = value
+        if Dict.has_key(key):
+            err(substfile + ':' + `lineno` +
+                      ': warning: overriding: ' +
+                      key + ' ' + value + '\n')
+            err(substfile + ':' + `lineno` +
+                      ': warning: previous: ' + Dict[key] + '\n')
+        Dict[key] = value
+    fp.close()
 
 main()
diff --git a/Tools/scripts/fixheader.py b/Tools/scripts/fixheader.py
index 774b907..9b65a44 100755
--- a/Tools/scripts/fixheader.py
+++ b/Tools/scripts/fixheader.py
@@ -6,44 +6,44 @@
 import string
 
 def main():
-	args = sys.argv[1:]
-	for file in args:
-		process(file)
+    args = sys.argv[1:]
+    for file in args:
+        process(file)
 
 def process(file):
-	try:
-		f = open(file, 'r')
-	except IOError, msg:
-		sys.stderr.write('%s: can\'t open: %s\n' % (file, str(msg)))
-		return
-	data = f.read()
-	f.close()
-	if data[:2] <> '/*':
-		sys.stderr.write('%s does not begin with C comment\n' % file)
-		return
-	try:
-		f = open(file, 'w')
-	except IOError, msg:
-		sys.stderr.write('%s: can\'t write: %s\n' % (file, str(msg)))
-		return
-	sys.stderr.write('Processing %s ...\n' % file)
-	magic = 'Py_'
-	for c in file:
-		if c in string.letters + string.digits:
-			magic = magic + string.upper(c)
-		else: magic = magic + '_'
-	sys.stdout = f
-	print '#ifndef', magic
-	print '#define', magic
-	print '#ifdef __cplusplus'
-	print 'extern "C" {'
-	print '#endif'
-	print
-	f.write(data)
-	print
-	print '#ifdef __cplusplus'
-	print '}'
-	print '#endif'
-	print '#endif /*', '!'+magic, '*/'
+    try:
+        f = open(file, 'r')
+    except IOError, msg:
+        sys.stderr.write('%s: can\'t open: %s\n' % (file, str(msg)))
+        return
+    data = f.read()
+    f.close()
+    if data[:2] <> '/*':
+        sys.stderr.write('%s does not begin with C comment\n' % file)
+        return
+    try:
+        f = open(file, 'w')
+    except IOError, msg:
+        sys.stderr.write('%s: can\'t write: %s\n' % (file, str(msg)))
+        return
+    sys.stderr.write('Processing %s ...\n' % file)
+    magic = 'Py_'
+    for c in file:
+        if c in string.letters + string.digits:
+            magic = magic + string.upper(c)
+        else: magic = magic + '_'
+    sys.stdout = f
+    print '#ifndef', magic
+    print '#define', magic
+    print '#ifdef __cplusplus'
+    print 'extern "C" {'
+    print '#endif'
+    print
+    f.write(data)
+    print
+    print '#ifdef __cplusplus'
+    print '}'
+    print '#endif'
+    print '#endif /*', '!'+magic, '*/'
 
 main()
diff --git a/Tools/scripts/fixps.py b/Tools/scripts/fixps.py
index 665c1a2..1e6e114 100755
--- a/Tools/scripts/fixps.py
+++ b/Tools/scripts/fixps.py
@@ -8,26 +8,26 @@
 
 
 def main():
-	for file in sys.argv[1:]:
-		try:
-			f = open(file, 'r')
-		except IOError, msg:
-			print file, ': can\'t open :', msg
-			continue
-		line = f.readline()
-		if not re.match('^#! */usr/local/bin/python', line):
-			print file, ': not a /usr/local/bin/python script'
-			f.close()
-			continue
-		rest = f.read()
-		f.close()
-		line = re.sub('/usr/local/bin/python',
-			      '/usr/bin/env python', line)
-		print file, ':', `line`
-		f = open(file, "w")
-		f.write(line)
-		f.write(rest)
-		f.close()
+    for file in sys.argv[1:]:
+        try:
+            f = open(file, 'r')
+        except IOError, msg:
+            print file, ': can\'t open :', msg
+            continue
+        line = f.readline()
+        if not re.match('^#! */usr/local/bin/python', line):
+            print file, ': not a /usr/local/bin/python script'
+            f.close()
+            continue
+        rest = f.read()
+        f.close()
+        line = re.sub('/usr/local/bin/python',
+                      '/usr/bin/env python', line)
+        print file, ':', `line`
+        f = open(file, "w")
+        f.write(line)
+        f.write(rest)
+        f.close()
 
 
 main()
diff --git a/Tools/scripts/ftpmirror.py b/Tools/scripts/ftpmirror.py
index 4b02714..c894a7b 100755
--- a/Tools/scripts/ftpmirror.py
+++ b/Tools/scripts/ftpmirror.py
@@ -4,7 +4,7 @@
 
 usage: ftpmirror [-v] [-q] [-i] [-m] [-n] [-r] [-s pat]
                  [-l username [-p passwd [-a account]]]
-		 hostname [remotedir [localdir]]
+                 hostname [remotedir [localdir]]
 -v: verbose
 -q: quiet
 -i: interactive mode
@@ -28,10 +28,10 @@
 
 # Print usage message and exit
 def usage(*args):
-	sys.stdout = sys.stderr
-	for msg in args: print msg
-	print __doc__
-	sys.exit(2)
+    sys.stdout = sys.stderr
+    for msg in args: print msg
+    print __doc__
+    sys.exit(2)
 
 verbose = 1 # 0 for -q, 2 for -v
 interactive = 0
@@ -42,356 +42,356 @@
 
 # Main program: parse command line and start processing
 def main():
-	global verbose, interactive, mac, rmok, nologin
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'a:bil:mnp:qrs:v')
-	except getopt.error, msg:
-		usage(msg)
-	login = ''
-	passwd = ''
-	account = ''
-	for o, a in opts:
-		if o == '-l': login = a
-		if o == '-p': passwd = a
-		if o == '-a': account = a
-		if o == '-v': verbose = verbose + 1
-		if o == '-q': verbose = 0
-		if o == '-i': interactive = 1
-		if o == '-m': mac = 1; nologin = 1; skippats.append('*.o')
-		if o == '-n': nologin = 1
-		if o == '-r': rmok = 1
-		if o == '-s': skippats.append(a)
-	if not args: usage('hostname missing')
-	host = args[0]
-	remotedir = ''
-	localdir = ''
-	if args[1:]:
-		remotedir = args[1]
-		if args[2:]:
-			localdir = args[2]
-			if args[3:]: usage('too many arguments')
-	#
-	f = ftplib.FTP()
-	if verbose: print 'Connecting to %s...' % `host`
-	f.connect(host)
-	if not nologin:
-		if verbose:
-			print 'Logging in as %s...' % `login or 'anonymous'`
-		f.login(login, passwd, account)
-	if verbose: print 'OK.'
-	pwd = f.pwd()
-	if verbose > 1: print 'PWD =', `pwd`
-	if remotedir:
-		if verbose > 1: print 'cwd(%s)' % `remotedir`
-		f.cwd(remotedir)
-		if verbose > 1: print 'OK.'
-		pwd = f.pwd()
-		if verbose > 1: print 'PWD =', `pwd`
-	#
-	mirrorsubdir(f, localdir)
+    global verbose, interactive, mac, rmok, nologin
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'a:bil:mnp:qrs:v')
+    except getopt.error, msg:
+        usage(msg)
+    login = ''
+    passwd = ''
+    account = ''
+    for o, a in opts:
+        if o == '-l': login = a
+        if o == '-p': passwd = a
+        if o == '-a': account = a
+        if o == '-v': verbose = verbose + 1
+        if o == '-q': verbose = 0
+        if o == '-i': interactive = 1
+        if o == '-m': mac = 1; nologin = 1; skippats.append('*.o')
+        if o == '-n': nologin = 1
+        if o == '-r': rmok = 1
+        if o == '-s': skippats.append(a)
+    if not args: usage('hostname missing')
+    host = args[0]
+    remotedir = ''
+    localdir = ''
+    if args[1:]:
+        remotedir = args[1]
+        if args[2:]:
+            localdir = args[2]
+            if args[3:]: usage('too many arguments')
+    #
+    f = ftplib.FTP()
+    if verbose: print 'Connecting to %s...' % `host`
+    f.connect(host)
+    if not nologin:
+        if verbose:
+            print 'Logging in as %s...' % `login or 'anonymous'`
+        f.login(login, passwd, account)
+    if verbose: print 'OK.'
+    pwd = f.pwd()
+    if verbose > 1: print 'PWD =', `pwd`
+    if remotedir:
+        if verbose > 1: print 'cwd(%s)' % `remotedir`
+        f.cwd(remotedir)
+        if verbose > 1: print 'OK.'
+        pwd = f.pwd()
+        if verbose > 1: print 'PWD =', `pwd`
+    #
+    mirrorsubdir(f, localdir)
 
 # Core logic: mirror one subdirectory (recursively)
 def mirrorsubdir(f, localdir):
-	pwd = f.pwd()
-	if localdir and not os.path.isdir(localdir):
-		if verbose: print 'Creating local directory', `localdir`
-		try:
-		    makedir(localdir)
-		except os.error, msg:
-		    print "Failed to establish local directory", `localdir`
-		    return
-	infofilename = os.path.join(localdir, '.mirrorinfo')
-	try:
-		text = open(infofilename, 'r').read()
-	except IOError, msg:
-		text = '{}'
-	try:
-		info = eval(text)
-	except (SyntaxError, NameError):
-		print 'Bad mirror info in %s' % `infofilename`
-		info = {}
-	subdirs = []
-	listing = []
-	if verbose: print 'Listing remote directory %s...' % `pwd`
-	f.retrlines('LIST', listing.append)
-	filesfound = []
-	for line in listing:
-		if verbose > 1: print '-->', `line`
-		if mac:
-			# Mac listing has just filenames;
-			# trailing / means subdirectory
-			filename = string.strip(line)
-			mode = '-'
-			if filename[-1:] == '/':
-				filename = filename[:-1]
-				mode = 'd'
-			infostuff = ''
-		else:
-			# Parse, assuming a UNIX listing
-			words = string.split(line, None, 8)
-			if len(words) < 6:
-				if verbose > 1: print 'Skipping short line'
-				continue
-			filename = string.lstrip(words[-1])
-			i = string.find(filename, " -> ")
-			if i >= 0:
-				# words[0] had better start with 'l'...
-				if verbose > 1:
-				    print 'Found symbolic link %s' % `filename`
-				linkto = filename[i+4:]
-				filename = filename[:i]
-			infostuff = words[-5:-1]
-			mode = words[0]
-		skip = 0
-		for pat in skippats:
-			if fnmatch(filename, pat):
-				if verbose > 1:
-					print 'Skip pattern', `pat`,
-					print 'matches', `filename`
-				skip = 1
-				break
-		if skip:
-			continue
-		if mode[0] == 'd':
-			if verbose > 1:
-				print 'Remembering subdirectory', `filename`
-			subdirs.append(filename)
-			continue
-		filesfound.append(filename)
-		if info.has_key(filename) and info[filename] == infostuff:
-			if verbose > 1:
-				print 'Already have this version of',`filename`
-			continue
-		fullname = os.path.join(localdir, filename)
-		tempname = os.path.join(localdir, '@'+filename)
-		if interactive:
-			doit = askabout('file', filename, pwd)
-			if not doit:
-				if not info.has_key(filename):
-					info[filename] = 'Not retrieved'
-				continue
-		try:
-			os.unlink(tempname)
-		except os.error:
-			pass
-		if mode[0] == 'l':
-			if verbose:
-				print "Creating symlink %s -> %s" % (
-					`filename`, `linkto`)
-			try:
-				os.symlink(linkto, tempname)
-			except IOError, msg:
-				print "Can't create %s: %s" % (
-					`tempname`, str(msg))
-				continue
-		else:
-			try:
-				fp = open(tempname, 'wb')
-			except IOError, msg:
-				print "Can't create %s: %s" % (
-					`tempname`, str(msg))
-				continue
-			if verbose:
-				print 'Retrieving %s from %s as %s...' % \
-					  (`filename`, `pwd`, `fullname`)
-			if verbose:
-				fp1 = LoggingFile(fp, 1024, sys.stdout)
-			else:
-				fp1 = fp
-			t0 = time.time()
-			try:
-				f.retrbinary('RETR ' + filename,
-					     fp1.write, 8*1024)
-			except ftplib.error_perm, msg:
-				print msg
-			t1 = time.time()
-			bytes = fp.tell()
-			fp.close()
-			if fp1 != fp:
-				fp1.close()
-		try:
-			os.unlink(fullname)
-		except os.error:
-			pass		# Ignore the error
-		try:
-			os.rename(tempname, fullname)
-		except os.error, msg:
-			print "Can't rename %s to %s: %s" % (`tempname`,
-							     `fullname`,
-							     str(msg))
-			continue
-		info[filename] = infostuff
-		writedict(info, infofilename)
-		if verbose and mode[0] != 'l':
-			dt = t1 - t0
-			kbytes = bytes / 1024.0
-			print int(round(kbytes)),
-			print 'Kbytes in',
-			print int(round(dt)),
-			print 'seconds',
-			if t1 > t0:
-				print '(~%d Kbytes/sec)' % \
-					  int(round(kbytes/dt),)
-			print
-	#
-	# Remove files from info that are no longer remote
-	deletions = 0
-	for filename in info.keys():
-		if filename not in filesfound:
-			if verbose:
-				print "Removing obsolete info entry for",
-				print `filename`, "in", `localdir or "."`
-			del info[filename]
-			deletions = deletions + 1
-	if deletions:
-		writedict(info, infofilename)
-	#
-	# Remove local files that are no longer in the remote directory
-	try:
-	    if not localdir: names = os.listdir(os.curdir)
-	    else: names = os.listdir(localdir)
-	except os.error:
-	    names = []
-	for name in names:
-		if name[0] == '.' or info.has_key(name) or name in subdirs:
-			continue
-		skip = 0
-		for pat in skippats:
-			if fnmatch(name, pat):
-				if verbose > 1:
-					print 'Skip pattern', `pat`,
-					print 'matches', `name`
-				skip = 1
-				break
-		if skip:
-			continue
-		fullname = os.path.join(localdir, name)
-		if not rmok:
-			if verbose:
-				print 'Local file', `fullname`,
-				print 'is no longer pertinent'
-			continue
-		if verbose: print 'Removing local file/dir', `fullname`
-		remove(fullname)
-	#
-	# Recursively mirror subdirectories
-	for subdir in subdirs:
-		if interactive:
-			doit = askabout('subdirectory', subdir, pwd)
-			if not doit: continue
-		if verbose: print 'Processing subdirectory', `subdir`
-		localsubdir = os.path.join(localdir, subdir)
-		pwd = f.pwd()
-		if verbose > 1:
-			print 'Remote directory now:', `pwd`
-			print 'Remote cwd', `subdir`
-		try:
-			f.cwd(subdir)
-		except ftplib.error_perm, msg:
-			print "Can't chdir to", `subdir`, ":", `msg`
-		else:
-			if verbose: print 'Mirroring as', `localsubdir`
-			mirrorsubdir(f, localsubdir)
-			if verbose > 1: print 'Remote cwd ..'
-			f.cwd('..')
-		newpwd = f.pwd()
-		if newpwd != pwd:
-			print 'Ended up in wrong directory after cd + cd ..'
-			print 'Giving up now.'
-			break
-		else:
-			if verbose > 1: print 'OK.'
+    pwd = f.pwd()
+    if localdir and not os.path.isdir(localdir):
+        if verbose: print 'Creating local directory', `localdir`
+        try:
+            makedir(localdir)
+        except os.error, msg:
+            print "Failed to establish local directory", `localdir`
+            return
+    infofilename = os.path.join(localdir, '.mirrorinfo')
+    try:
+        text = open(infofilename, 'r').read()
+    except IOError, msg:
+        text = '{}'
+    try:
+        info = eval(text)
+    except (SyntaxError, NameError):
+        print 'Bad mirror info in %s' % `infofilename`
+        info = {}
+    subdirs = []
+    listing = []
+    if verbose: print 'Listing remote directory %s...' % `pwd`
+    f.retrlines('LIST', listing.append)
+    filesfound = []
+    for line in listing:
+        if verbose > 1: print '-->', `line`
+        if mac:
+            # Mac listing has just filenames;
+            # trailing / means subdirectory
+            filename = string.strip(line)
+            mode = '-'
+            if filename[-1:] == '/':
+                filename = filename[:-1]
+                mode = 'd'
+            infostuff = ''
+        else:
+            # Parse, assuming a UNIX listing
+            words = string.split(line, None, 8)
+            if len(words) < 6:
+                if verbose > 1: print 'Skipping short line'
+                continue
+            filename = string.lstrip(words[-1])
+            i = string.find(filename, " -> ")
+            if i >= 0:
+                # words[0] had better start with 'l'...
+                if verbose > 1:
+                    print 'Found symbolic link %s' % `filename`
+                linkto = filename[i+4:]
+                filename = filename[:i]
+            infostuff = words[-5:-1]
+            mode = words[0]
+        skip = 0
+        for pat in skippats:
+            if fnmatch(filename, pat):
+                if verbose > 1:
+                    print 'Skip pattern', `pat`,
+                    print 'matches', `filename`
+                skip = 1
+                break
+        if skip:
+            continue
+        if mode[0] == 'd':
+            if verbose > 1:
+                print 'Remembering subdirectory', `filename`
+            subdirs.append(filename)
+            continue
+        filesfound.append(filename)
+        if info.has_key(filename) and info[filename] == infostuff:
+            if verbose > 1:
+                print 'Already have this version of',`filename`
+            continue
+        fullname = os.path.join(localdir, filename)
+        tempname = os.path.join(localdir, '@'+filename)
+        if interactive:
+            doit = askabout('file', filename, pwd)
+            if not doit:
+                if not info.has_key(filename):
+                    info[filename] = 'Not retrieved'
+                continue
+        try:
+            os.unlink(tempname)
+        except os.error:
+            pass
+        if mode[0] == 'l':
+            if verbose:
+                print "Creating symlink %s -> %s" % (
+                        `filename`, `linkto`)
+            try:
+                os.symlink(linkto, tempname)
+            except IOError, msg:
+                print "Can't create %s: %s" % (
+                        `tempname`, str(msg))
+                continue
+        else:
+            try:
+                fp = open(tempname, 'wb')
+            except IOError, msg:
+                print "Can't create %s: %s" % (
+                        `tempname`, str(msg))
+                continue
+            if verbose:
+                print 'Retrieving %s from %s as %s...' % \
+                          (`filename`, `pwd`, `fullname`)
+            if verbose:
+                fp1 = LoggingFile(fp, 1024, sys.stdout)
+            else:
+                fp1 = fp
+            t0 = time.time()
+            try:
+                f.retrbinary('RETR ' + filename,
+                             fp1.write, 8*1024)
+            except ftplib.error_perm, msg:
+                print msg
+            t1 = time.time()
+            bytes = fp.tell()
+            fp.close()
+            if fp1 != fp:
+                fp1.close()
+        try:
+            os.unlink(fullname)
+        except os.error:
+            pass            # Ignore the error
+        try:
+            os.rename(tempname, fullname)
+        except os.error, msg:
+            print "Can't rename %s to %s: %s" % (`tempname`,
+                                                 `fullname`,
+                                                 str(msg))
+            continue
+        info[filename] = infostuff
+        writedict(info, infofilename)
+        if verbose and mode[0] != 'l':
+            dt = t1 - t0
+            kbytes = bytes / 1024.0
+            print int(round(kbytes)),
+            print 'Kbytes in',
+            print int(round(dt)),
+            print 'seconds',
+            if t1 > t0:
+                print '(~%d Kbytes/sec)' % \
+                          int(round(kbytes/dt),)
+            print
+    #
+    # Remove files from info that are no longer remote
+    deletions = 0
+    for filename in info.keys():
+        if filename not in filesfound:
+            if verbose:
+                print "Removing obsolete info entry for",
+                print `filename`, "in", `localdir or "."`
+            del info[filename]
+            deletions = deletions + 1
+    if deletions:
+        writedict(info, infofilename)
+    #
+    # Remove local files that are no longer in the remote directory
+    try:
+        if not localdir: names = os.listdir(os.curdir)
+        else: names = os.listdir(localdir)
+    except os.error:
+        names = []
+    for name in names:
+        if name[0] == '.' or info.has_key(name) or name in subdirs:
+            continue
+        skip = 0
+        for pat in skippats:
+            if fnmatch(name, pat):
+                if verbose > 1:
+                    print 'Skip pattern', `pat`,
+                    print 'matches', `name`
+                skip = 1
+                break
+        if skip:
+            continue
+        fullname = os.path.join(localdir, name)
+        if not rmok:
+            if verbose:
+                print 'Local file', `fullname`,
+                print 'is no longer pertinent'
+            continue
+        if verbose: print 'Removing local file/dir', `fullname`
+        remove(fullname)
+    #
+    # Recursively mirror subdirectories
+    for subdir in subdirs:
+        if interactive:
+            doit = askabout('subdirectory', subdir, pwd)
+            if not doit: continue
+        if verbose: print 'Processing subdirectory', `subdir`
+        localsubdir = os.path.join(localdir, subdir)
+        pwd = f.pwd()
+        if verbose > 1:
+            print 'Remote directory now:', `pwd`
+            print 'Remote cwd', `subdir`
+        try:
+            f.cwd(subdir)
+        except ftplib.error_perm, msg:
+            print "Can't chdir to", `subdir`, ":", `msg`
+        else:
+            if verbose: print 'Mirroring as', `localsubdir`
+            mirrorsubdir(f, localsubdir)
+            if verbose > 1: print 'Remote cwd ..'
+            f.cwd('..')
+        newpwd = f.pwd()
+        if newpwd != pwd:
+            print 'Ended up in wrong directory after cd + cd ..'
+            print 'Giving up now.'
+            break
+        else:
+            if verbose > 1: print 'OK.'
 
 # Helper to remove a file or directory tree
 def remove(fullname):
-	if os.path.isdir(fullname) and not os.path.islink(fullname):
-		try:
-			names = os.listdir(fullname)
-		except os.error:
-			names = []
-		ok = 1
-		for name in names:
-			if not remove(os.path.join(fullname, name)):
-				ok = 0
-		if not ok:
-			return 0
-		try:
-			os.rmdir(fullname)
-		except os.error, msg:
-			print "Can't remove local directory %s: %s" % \
-			      (`fullname`, str(msg))
-			return 0
-	else:
-		try:
-			os.unlink(fullname)
-		except os.error, msg:
-			print "Can't remove local file %s: %s" % \
-			      (`fullname`, str(msg))
-			return 0
-	return 1
+    if os.path.isdir(fullname) and not os.path.islink(fullname):
+        try:
+            names = os.listdir(fullname)
+        except os.error:
+            names = []
+        ok = 1
+        for name in names:
+            if not remove(os.path.join(fullname, name)):
+                ok = 0
+        if not ok:
+            return 0
+        try:
+            os.rmdir(fullname)
+        except os.error, msg:
+            print "Can't remove local directory %s: %s" % \
+                  (`fullname`, str(msg))
+            return 0
+    else:
+        try:
+            os.unlink(fullname)
+        except os.error, msg:
+            print "Can't remove local file %s: %s" % \
+                  (`fullname`, str(msg))
+            return 0
+    return 1
 
 # Wrapper around a file for writing to write a hash sign every block.
 class LoggingFile:
-	def __init__(self, fp, blocksize, outfp):
-		self.fp = fp
-		self.bytes = 0
-		self.hashes = 0
-		self.blocksize = blocksize
-		self.outfp = outfp
-	def write(self, data):
-		self.bytes = self.bytes + len(data)
-		hashes = int(self.bytes) / self.blocksize
-		while hashes > self.hashes:
-			self.outfp.write('#')
-			self.outfp.flush()
-			self.hashes = self.hashes + 1
-		self.fp.write(data)
-	def close(self):
-		self.outfp.write('\n')
+    def __init__(self, fp, blocksize, outfp):
+        self.fp = fp
+        self.bytes = 0
+        self.hashes = 0
+        self.blocksize = blocksize
+        self.outfp = outfp
+    def write(self, data):
+        self.bytes = self.bytes + len(data)
+        hashes = int(self.bytes) / self.blocksize
+        while hashes > self.hashes:
+            self.outfp.write('#')
+            self.outfp.flush()
+            self.hashes = self.hashes + 1
+        self.fp.write(data)
+    def close(self):
+        self.outfp.write('\n')
 
 # Ask permission to download a file.
 def askabout(filetype, filename, pwd):
-	prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd)
-	while 1:
-		reply = string.lower(string.strip(raw_input(prompt)))
-		if reply in ['y', 'ye', 'yes']:
-			return 1
-		if reply in ['', 'n', 'no', 'nop', 'nope']:
-			return 0
-		print 'Please answer yes or no.'
+    prompt = 'Retrieve %s %s from %s ? [ny] ' % (filetype, filename, pwd)
+    while 1:
+        reply = string.lower(string.strip(raw_input(prompt)))
+        if reply in ['y', 'ye', 'yes']:
+            return 1
+        if reply in ['', 'n', 'no', 'nop', 'nope']:
+            return 0
+        print 'Please answer yes or no.'
 
 # Create a directory if it doesn't exist.  Recursively create the
 # parent directory as well if needed.
 def makedir(pathname):
-	if os.path.isdir(pathname):
-		return
-	dirname = os.path.dirname(pathname)
-	if dirname: makedir(dirname)
-	os.mkdir(pathname, 0777)
+    if os.path.isdir(pathname):
+        return
+    dirname = os.path.dirname(pathname)
+    if dirname: makedir(dirname)
+    os.mkdir(pathname, 0777)
 
 # Write a dictionary to a file in a way that can be read back using
 # rval() but is still somewhat readable (i.e. not a single long line).
 # Also creates a backup file.
 def writedict(dict, filename):
-	dir, file = os.path.split(filename)
-	tempname = os.path.join(dir, '@' + file)
-	backup = os.path.join(dir, file + '~')
-	try:
-		os.unlink(backup)
-	except os.error:
-		pass
-	fp = open(tempname, 'w')
-	fp.write('{\n')
-	for key, value in dict.items():
-		fp.write('%s: %s,\n' % (`key`, `value`))
-	fp.write('}\n')
-	fp.close()
-	try:
-		os.rename(filename, backup)
-	except os.error:
-		pass
-	os.rename(tempname, filename)
+    dir, file = os.path.split(filename)
+    tempname = os.path.join(dir, '@' + file)
+    backup = os.path.join(dir, file + '~')
+    try:
+        os.unlink(backup)
+    except os.error:
+        pass
+    fp = open(tempname, 'w')
+    fp.write('{\n')
+    for key, value in dict.items():
+        fp.write('%s: %s,\n' % (`key`, `value`))
+    fp.write('}\n')
+    fp.close()
+    try:
+        os.rename(filename, backup)
+    except os.error:
+        pass
+    os.rename(tempname, filename)
 
 
 if __name__ == '__main__':
-	main()
+    main()
diff --git a/Tools/scripts/gencodec.py b/Tools/scripts/gencodec.py
index 39b42ff..bc70a32 100644
--- a/Tools/scripts/gencodec.py
+++ b/Tools/scripts/gencodec.py
@@ -180,14 +180,14 @@
     def encode(self,input,errors='strict'):
 
         return codecs.charmap_encode(input,errors,encoding_map)
-        
+
     def decode(self,input,errors='strict'):
 
         return codecs.charmap_decode(input,errors,decoding_map)
 
 class StreamWriter(Codec,codecs.StreamWriter):
     pass
-        
+
 class StreamReader(Codec,codecs.StreamReader):
     pass
 
@@ -210,7 +210,7 @@
     else:
         l.append("decoding_map = {")
         splits = 0
-        
+
     mappings = map.items()
     mappings.sort()
     append = l.append
@@ -290,7 +290,7 @@
             print '* conversion failed'
 
 def rewritepythondir(dir,prefix='',comments=1):
-    
+
     mapnames = os.listdir(dir)
     for mapname in mapnames:
         if not mapname.endswith('.mapping'):
diff --git a/Tools/scripts/h2py.py b/Tools/scripts/h2py.py
index fd4b267..92f64c0 100755
--- a/Tools/scripts/h2py.py
+++ b/Tools/scripts/h2py.py
@@ -41,110 +41,110 @@
 filedict = {}
 
 try:
-	searchdirs=string.splitfields(os.environ['include'],';')
+    searchdirs=string.splitfields(os.environ['include'],';')
 except KeyError:
-	try:
-		searchdirs=string.splitfields(os.environ['INCLUDE'],';')
-	except KeyError:
-		try:
-			if string.find( sys.platform, "beos" ) == 0:
-				searchdirs=string.splitfields(os.environ['BEINCLUDES'],';')
-			else:
-				raise KeyError
-		except KeyError:
-			searchdirs=['/usr/include']
+    try:
+        searchdirs=string.splitfields(os.environ['INCLUDE'],';')
+    except KeyError:
+        try:
+            if string.find( sys.platform, "beos" ) == 0:
+                searchdirs=string.splitfields(os.environ['BEINCLUDES'],';')
+            else:
+                raise KeyError
+        except KeyError:
+            searchdirs=['/usr/include']
 
 def main():
-	global filedict
-	opts, args = getopt.getopt(sys.argv[1:], 'i:')
-	for o, a in opts:
-		if o == '-i':
-			ignores.append(regex.compile(a))
-	if not args:
-		args = ['-']
-	for filename in args:
-		if filename == '-':
-			sys.stdout.write('# Generated by h2py from stdin\n')
-			process(sys.stdin, sys.stdout)
-		else:
-			fp = open(filename, 'r')
-			outfile = os.path.basename(filename)
-			i = string.rfind(outfile, '.')
-			if i > 0: outfile = outfile[:i]
-			outfile = string.upper(outfile)
-			outfile = outfile + '.py'
-			outfp = open(outfile, 'w')
-			outfp.write('# Generated by h2py from %s\n' % filename)
-			filedict = {}
-			for dir in searchdirs:
-				if filename[:len(dir)] == dir:
-					filedict[filename[len(dir)+1:]] = None	# no '/' trailing
-					break
-			process(fp, outfp)
-			outfp.close()
-			fp.close()
+    global filedict
+    opts, args = getopt.getopt(sys.argv[1:], 'i:')
+    for o, a in opts:
+        if o == '-i':
+            ignores.append(regex.compile(a))
+    if not args:
+        args = ['-']
+    for filename in args:
+        if filename == '-':
+            sys.stdout.write('# Generated by h2py from stdin\n')
+            process(sys.stdin, sys.stdout)
+        else:
+            fp = open(filename, 'r')
+            outfile = os.path.basename(filename)
+            i = string.rfind(outfile, '.')
+            if i > 0: outfile = outfile[:i]
+            outfile = string.upper(outfile)
+            outfile = outfile + '.py'
+            outfp = open(outfile, 'w')
+            outfp.write('# Generated by h2py from %s\n' % filename)
+            filedict = {}
+            for dir in searchdirs:
+                if filename[:len(dir)] == dir:
+                    filedict[filename[len(dir)+1:]] = None  # no '/' trailing
+                    break
+            process(fp, outfp)
+            outfp.close()
+            fp.close()
 
 def process(fp, outfp, env = {}):
-	lineno = 0
-	while 1:
-		line = fp.readline()
-		if not line: break
-		lineno = lineno + 1
-		n = p_define.match(line)
-		if n >= 0:
-			# gobble up continuation lines
-			while line[-2:] == '\\\n':
-				nextline = fp.readline()
-				if not nextline: break
-				lineno = lineno + 1
-				line = line + nextline
-			name = p_define.group(1)
-			body = line[n:]
-			# replace ignored patterns by spaces
-			for p in ignores:
-				body = regsub.gsub(p, ' ', body)
-			# replace char literals by ord(...)
-			body = regsub.gsub(p_char, 'ord(\\0)', body)
-			stmt = '%s = %s\n' % (name, string.strip(body))
-			ok = 0
-			try:
-				exec stmt in env
-			except:
-				sys.stderr.write('Skipping: %s' % stmt)
-			else:
-				outfp.write(stmt)
-		n =p_macro.match(line)
-		if n >= 0:
-			macro, arg = p_macro.group(1, 2)
-			body = line[n:]
-			for p in ignores:
-				body = regsub.gsub(p, ' ', body)
-			body = regsub.gsub(p_char, 'ord(\\0)', body)
-			stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
-			try:
-				exec stmt in env
-			except:
-				sys.stderr.write('Skipping: %s' % stmt)
-			else:
-				outfp.write(stmt)
-		if p_include.match(line) >= 0:
-			regs = p_include.regs
-			a, b = regs[1]
-			filename = line[a:b]
-			if not filedict.has_key(filename):
-				filedict[filename] = None
-				inclfp = None
-				for dir in searchdirs:
-					try:
-						inclfp = open(dir + '/' + filename, 'r')
-						break
-					except IOError:
-						pass
-				if inclfp:
-					outfp.write(
-						'\n# Included from %s\n' % filename)
-					process(inclfp, outfp, env)
-				else:
-					sys.stderr.write('Warning - could not find file %s' % filename)
+    lineno = 0
+    while 1:
+        line = fp.readline()
+        if not line: break
+        lineno = lineno + 1
+        n = p_define.match(line)
+        if n >= 0:
+            # gobble up continuation lines
+            while line[-2:] == '\\\n':
+                nextline = fp.readline()
+                if not nextline: break
+                lineno = lineno + 1
+                line = line + nextline
+            name = p_define.group(1)
+            body = line[n:]
+            # replace ignored patterns by spaces
+            for p in ignores:
+                body = regsub.gsub(p, ' ', body)
+            # replace char literals by ord(...)
+            body = regsub.gsub(p_char, 'ord(\\0)', body)
+            stmt = '%s = %s\n' % (name, string.strip(body))
+            ok = 0
+            try:
+                exec stmt in env
+            except:
+                sys.stderr.write('Skipping: %s' % stmt)
+            else:
+                outfp.write(stmt)
+        n =p_macro.match(line)
+        if n >= 0:
+            macro, arg = p_macro.group(1, 2)
+            body = line[n:]
+            for p in ignores:
+                body = regsub.gsub(p, ' ', body)
+            body = regsub.gsub(p_char, 'ord(\\0)', body)
+            stmt = 'def %s(%s): return %s\n' % (macro, arg, body)
+            try:
+                exec stmt in env
+            except:
+                sys.stderr.write('Skipping: %s' % stmt)
+            else:
+                outfp.write(stmt)
+        if p_include.match(line) >= 0:
+            regs = p_include.regs
+            a, b = regs[1]
+            filename = line[a:b]
+            if not filedict.has_key(filename):
+                filedict[filename] = None
+                inclfp = None
+                for dir in searchdirs:
+                    try:
+                        inclfp = open(dir + '/' + filename, 'r')
+                        break
+                    except IOError:
+                        pass
+                if inclfp:
+                    outfp.write(
+                            '\n# Included from %s\n' % filename)
+                    process(inclfp, outfp, env)
+                else:
+                    sys.stderr.write('Warning - could not find file %s' % filename)
 
 main()
diff --git a/Tools/scripts/ifdef.py b/Tools/scripts/ifdef.py
index 939bea9..da14437 100755
--- a/Tools/scripts/ifdef.py
+++ b/Tools/scripts/ifdef.py
@@ -3,7 +3,7 @@
 # Selectively preprocess #ifdef / #ifndef statements.
 # Usage:
 # ifdef [-Dname] ... [-Uname] ... [file] ...
-# 
+#
 # This scans the file(s), looking for #ifdef and #ifndef preprocessor
 # commands that test for one of the names mentioned in the -D and -U
 # options.  On standard output it writes a copy of the input file(s)
@@ -35,79 +35,79 @@
 undefs = []
 
 def main():
-	opts, args = getopt.getopt(sys.argv[1:], 'D:U:')
-	for o, a in opts:
-		if o == '-D':
-			defs.append(a)
-		if o == '-U':
-			undefs.append(a)
-	if not args:
-		args = ['-']
-	for file in args:
-		if file == '-':
-			process(sys.stdin, sys.stdout)
-		else:
-			f = open(file, 'r')
-			process(f, sys.stdout)
-			f.close()
+    opts, args = getopt.getopt(sys.argv[1:], 'D:U:')
+    for o, a in opts:
+        if o == '-D':
+            defs.append(a)
+        if o == '-U':
+            undefs.append(a)
+    if not args:
+        args = ['-']
+    for file in args:
+        if file == '-':
+            process(sys.stdin, sys.stdout)
+        else:
+            f = open(file, 'r')
+            process(f, sys.stdout)
+            f.close()
 
 def process(fpi, fpo):
-	keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif')
-	ok = 1
-	stack = []
-	while 1:
-		line = fpi.readline()
-		if not line: break
-		while line[-2:] == '\\\n':
-			nextline = fpi.readline()
-			if not nextline: break
-			line = line + nextline
-		tmp = string.strip(line)
-		if tmp[:1] != '#':
-			if ok: fpo.write(line)
-			continue
-		tmp = string.strip(tmp[1:])
-		words = string.split(tmp)
-		keyword = words[0]
-		if keyword not in keywords:
-			if ok: fpo.write(line)
-			continue
-		if keyword in ('ifdef', 'ifndef') and len(words) == 2:
-			if keyword == 'ifdef':
-				ko = 1
-			else:
-				ko = 0
-			word = words[1]
-			if word in defs:
-				stack.append((ok, ko, word))
-				if not ko: ok = 0
-			elif word in undefs:
-				stack.append((ok, not ko, word))
-				if ko: ok = 0
-			else:
-				stack.append((ok, -1, word))
-				if ok: fpo.write(line)
-		elif keyword == 'if':
-			stack.append((ok, -1, ''))
-			if ok: fpo.write(line)
-		elif keyword == 'else' and stack:
-			s_ok, s_ko, s_word = stack[-1]
-			if s_ko < 0:
-				if ok: fpo.write(line)
-			else:
-				s_ko = not s_ko
-				ok = s_ok
-				if not s_ko: ok = 0
-				stack[-1] = s_ok, s_ko, s_word
-		elif keyword == 'endif' and stack:
-			s_ok, s_ko, s_word = stack[-1]
-			if s_ko < 0:
-				if ok: fpo.write(line)
-			del stack[-1]
-			ok = s_ok
-		else:
-			sys.stderr.write('Unknown keyword %s\n' % keyword)
-	if stack:
-		sys.stderr.write('stack: %s\n' % stack)
+    keywords = ('if', 'ifdef', 'ifndef', 'else', 'endif')
+    ok = 1
+    stack = []
+    while 1:
+        line = fpi.readline()
+        if not line: break
+        while line[-2:] == '\\\n':
+            nextline = fpi.readline()
+            if not nextline: break
+            line = line + nextline
+        tmp = string.strip(line)
+        if tmp[:1] != '#':
+            if ok: fpo.write(line)
+            continue
+        tmp = string.strip(tmp[1:])
+        words = string.split(tmp)
+        keyword = words[0]
+        if keyword not in keywords:
+            if ok: fpo.write(line)
+            continue
+        if keyword in ('ifdef', 'ifndef') and len(words) == 2:
+            if keyword == 'ifdef':
+                ko = 1
+            else:
+                ko = 0
+            word = words[1]
+            if word in defs:
+                stack.append((ok, ko, word))
+                if not ko: ok = 0
+            elif word in undefs:
+                stack.append((ok, not ko, word))
+                if ko: ok = 0
+            else:
+                stack.append((ok, -1, word))
+                if ok: fpo.write(line)
+        elif keyword == 'if':
+            stack.append((ok, -1, ''))
+            if ok: fpo.write(line)
+        elif keyword == 'else' and stack:
+            s_ok, s_ko, s_word = stack[-1]
+            if s_ko < 0:
+                if ok: fpo.write(line)
+            else:
+                s_ko = not s_ko
+                ok = s_ok
+                if not s_ko: ok = 0
+                stack[-1] = s_ok, s_ko, s_word
+        elif keyword == 'endif' and stack:
+            s_ok, s_ko, s_word = stack[-1]
+            if s_ko < 0:
+                if ok: fpo.write(line)
+            del stack[-1]
+            ok = s_ok
+        else:
+            sys.stderr.write('Unknown keyword %s\n' % keyword)
+    if stack:
+        sys.stderr.write('stack: %s\n' % stack)
 
 main()
diff --git a/Tools/scripts/linktree.py b/Tools/scripts/linktree.py
index 677be39..502873e 100755
--- a/Tools/scripts/linktree.py
+++ b/Tools/scripts/linktree.py
@@ -17,63 +17,63 @@
 debug = 0
 
 def main():
-	if not 3 <= len(sys.argv) <= 4:
-		print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
-		return 2
-	oldtree, newtree = sys.argv[1], sys.argv[2]
-	if len(sys.argv) > 3:
-		link = sys.argv[3]
-		link_may_fail = 1
-	else:
-		link = LINK
-		link_may_fail = 0
-	if not os.path.isdir(oldtree):
-		print oldtree + ': not a directory'
-		return 1
-	try:
-		os.mkdir(newtree, 0777)
-	except os.error, msg:
-		print newtree + ': cannot mkdir:', msg
-		return 1
-	linkname = os.path.join(newtree, link)
-	try:
-		os.symlink(os.path.join(os.pardir, oldtree), linkname)
-	except os.error, msg:
-		if not link_may_fail:
-			print linkname + ': cannot symlink:', msg
-			return 1
-		else:
-			print linkname + ': warning: cannot symlink:', msg
-	linknames(oldtree, newtree, link)
-	return 0
+    if not 3 <= len(sys.argv) <= 4:
+        print 'usage:', sys.argv[0], 'oldtree newtree [linkto]'
+        return 2
+    oldtree, newtree = sys.argv[1], sys.argv[2]
+    if len(sys.argv) > 3:
+        link = sys.argv[3]
+        link_may_fail = 1
+    else:
+        link = LINK
+        link_may_fail = 0
+    if not os.path.isdir(oldtree):
+        print oldtree + ': not a directory'
+        return 1
+    try:
+        os.mkdir(newtree, 0777)
+    except os.error, msg:
+        print newtree + ': cannot mkdir:', msg
+        return 1
+    linkname = os.path.join(newtree, link)
+    try:
+        os.symlink(os.path.join(os.pardir, oldtree), linkname)
+    except os.error, msg:
+        if not link_may_fail:
+            print linkname + ': cannot symlink:', msg
+            return 1
+        else:
+            print linkname + ': warning: cannot symlink:', msg
+    linknames(oldtree, newtree, link)
+    return 0
 
 def linknames(old, new, link):
-	if debug: print 'linknames', (old, new, link)
-	try:
-		names = os.listdir(old)
-	except os.error, msg:
-		print old + ': warning: cannot listdir:', msg
-		return
-	for name in names:
-		if name not in (os.curdir, os.pardir):
-			oldname = os.path.join(old, name)
-			linkname = os.path.join(link, name)
-			newname = os.path.join(new, name)
-			if debug > 1: print oldname, newname, linkname
-			if os.path.isdir(oldname) and \
-			   not os.path.islink(oldname):
-				try:
-					os.mkdir(newname, 0777)
-					ok = 1
-				except:
-					print newname + \
-					      ': warning: cannot mkdir:', msg
-					ok = 0
-				if ok:
-					linkname = os.path.join(os.pardir,
-								linkname)
-					linknames(oldname, newname, linkname)
-			else:
-				os.symlink(linkname, newname)
+    if debug: print 'linknames', (old, new, link)
+    try:
+        names = os.listdir(old)
+    except os.error, msg:
+        print old + ': warning: cannot listdir:', msg
+        return
+    for name in names:
+        if name not in (os.curdir, os.pardir):
+            oldname = os.path.join(old, name)
+            linkname = os.path.join(link, name)
+            newname = os.path.join(new, name)
+            if debug > 1: print oldname, newname, linkname
+            if os.path.isdir(oldname) and \
+               not os.path.islink(oldname):
+                try:
+                    os.mkdir(newname, 0777)
+                    ok = 1
+                except:
+                    print newname + \
+                          ': warning: cannot mkdir:', msg
+                    ok = 0
+                if ok:
+                    linkname = os.path.join(os.pardir,
+                                            linkname)
+                    linknames(oldname, newname, linkname)
+            else:
+                os.symlink(linkname, newname)
 
 sys.exit(main())
diff --git a/Tools/scripts/lll.py b/Tools/scripts/lll.py
index d107080..cbcd80a 100755
--- a/Tools/scripts/lll.py
+++ b/Tools/scripts/lll.py
@@ -8,18 +8,18 @@
 import sys, os
 
 def lll(dirname):
-	for name in os.listdir(dirname):
-		if name not in (os.curdir, os.pardir):
-			full = os.path.join(dirname, name)
-			if os.path.islink(full):
-				print name, '->', os.readlink(full)
+    for name in os.listdir(dirname):
+        if name not in (os.curdir, os.pardir):
+            full = os.path.join(dirname, name)
+            if os.path.islink(full):
+                print name, '->', os.readlink(full)
 
 args = sys.argv[1:]
 if not args: args = [os.curdir]
 first = 1
 for arg in args:
-	if len(args) > 1:
-		if not first: print
-		first = 0
-		print arg + ':'
-	lll(arg)
+    if len(args) > 1:
+        if not first: print
+        first = 0
+        print arg + ':'
+    lll(arg)
diff --git a/Tools/scripts/logmerge.py b/Tools/scripts/logmerge.py
index a09fd46..1d9bf2b 100755
--- a/Tools/scripts/logmerge.py
+++ b/Tools/scripts/logmerge.py
@@ -116,7 +116,7 @@
             text.insert(0, revline)
         records.append((date, working_file, rev, author, text))
     return records
-        
+
 def format_output(database):
     prevtext = None
     prev = []
diff --git a/Tools/scripts/mailerdaemon.py b/Tools/scripts/mailerdaemon.py
index 4a0669a..113b376 100755
--- a/Tools/scripts/mailerdaemon.py
+++ b/Tools/scripts/mailerdaemon.py
@@ -166,7 +166,7 @@
     # find all numeric file names and sort them
     files = filter(lambda fn, pat=pat: pat.match(fn) is not None, os.listdir('.'))
     files.sort(sort_numeric)
-    
+
     for fn in files:
         # Lets try to parse the file.
         fp = open(fn)
diff --git a/Tools/scripts/methfix.py b/Tools/scripts/methfix.py
index b0918d6..a9b7c21 100755
--- a/Tools/scripts/methfix.py
+++ b/Tools/scripts/methfix.py
@@ -1,9 +1,9 @@
 #! /usr/bin/env python
 
-# Fix Python source files to avoid using 
-#	def method(self, (arg1, ..., argn)):
+# Fix Python source files to avoid using
+#       def method(self, (arg1, ..., argn)):
 # instead of the more rational
-#	def method(self, arg1, ..., argn):
+#       def method(self, arg1, ..., argn):
 #
 # Command line arguments are files or directories to be processed.
 # Directories are searched recursively for files whose name looks
@@ -37,137 +37,137 @@
 rep = sys.stdout.write
 
 def main():
-	bad = 0
-	if not sys.argv[1:]: # No arguments
-		err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
-		sys.exit(2)
-	for arg in sys.argv[1:]:
-		if os.path.isdir(arg):
-			if recursedown(arg): bad = 1
-		elif os.path.islink(arg):
-			err(arg + ': will not process symbolic links\n')
-			bad = 1
-		else:
-			if fix(arg): bad = 1
-	sys.exit(bad)
+    bad = 0
+    if not sys.argv[1:]: # No arguments
+        err('usage: ' + sys.argv[0] + ' file-or-directory ...\n')
+        sys.exit(2)
+    for arg in sys.argv[1:]:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-	return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-	dbg('recursedown(' + `dirname` + ')\n')
-	bad = 0
-	try:
-		names = os.listdir(dirname)
-	except os.error, msg:
-		err(dirname + ': cannot list directory: ' + `msg` + '\n')
-		return 1
-	names.sort()
-	subdirs = []
-	for name in names:
-		if name in (os.curdir, os.pardir): continue
-		fullname = os.path.join(dirname, name)
-		if os.path.islink(fullname): pass
-		elif os.path.isdir(fullname):
-			subdirs.append(fullname)
-		elif ispython(name):
-			if fix(fullname): bad = 1
-	for fullname in subdirs:
-		if recursedown(fullname): bad = 1
-	return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##	dbg('fix(' + `filename` + ')\n')
-	try:
-		f = open(filename, 'r')
-	except IOError, msg:
-		err(filename + ': cannot open: ' + `msg` + '\n')
-		return 1
-	head, tail = os.path.split(filename)
-	tempname = os.path.join(head, '@' + tail)
-	g = None
-	# If we find a match, we rewind the file and start over but
-	# now copy everything to a temp file.
-	lineno = 0
-	while 1:
-		line = f.readline()
-		if not line: break
-		lineno = lineno + 1
-		if g is None and '\0' in line:
-			# Check for binary files
-			err(filename + ': contains null bytes; not fixed\n')
-			f.close()
-			return 1
-		if lineno == 1 and g is None and line[:2] == '#!':
-			# Check for non-Python scripts
-			words = string.split(line[2:])
-			if words and regex.search('[pP]ython', words[0]) < 0:
-				msg = filename + ': ' + words[0]
-				msg = msg + ' script; not fixed\n'
-				err(msg)
-				f.close()
-				return 1
-		while line[-2:] == '\\\n':
-			nextline = f.readline()
-			if not nextline: break
-			line = line + nextline
-			lineno = lineno + 1
-		newline = fixline(line)
-		if newline != line:
-			if g is None:
-				try:
-					g = open(tempname, 'w')
-				except IOError, msg:
-					f.close()
-					err(tempname+': cannot create: '+\
-					    `msg`+'\n')
-					return 1
-				f.seek(0)
-				lineno = 0
-				rep(filename + ':\n')
-				continue # restart from the beginning
-			rep(`lineno` + '\n')
-			rep('< ' + line)
-			rep('> ' + newline)
-		if g is not None:
-			g.write(newline)
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    g = None
+    # If we find a match, we rewind the file and start over but
+    # now copy everything to a temp file.
+    lineno = 0
+    while 1:
+        line = f.readline()
+        if not line: break
+        lineno = lineno + 1
+        if g is None and '\0' in line:
+            # Check for binary files
+            err(filename + ': contains null bytes; not fixed\n')
+            f.close()
+            return 1
+        if lineno == 1 and g is None and line[:2] == '#!':
+            # Check for non-Python scripts
+            words = string.split(line[2:])
+            if words and regex.search('[pP]ython', words[0]) < 0:
+                msg = filename + ': ' + words[0]
+                msg = msg + ' script; not fixed\n'
+                err(msg)
+                f.close()
+                return 1
+        while line[-2:] == '\\\n':
+            nextline = f.readline()
+            if not nextline: break
+            line = line + nextline
+            lineno = lineno + 1
+        newline = fixline(line)
+        if newline != line:
+            if g is None:
+                try:
+                    g = open(tempname, 'w')
+                except IOError, msg:
+                    f.close()
+                    err(tempname+': cannot create: '+\
+                        `msg`+'\n')
+                    return 1
+                f.seek(0)
+                lineno = 0
+                rep(filename + ':\n')
+                continue # restart from the beginning
+            rep(`lineno` + '\n')
+            rep('< ' + line)
+            rep('> ' + newline)
+        if g is not None:
+            g.write(newline)
 
-	# End of file
-	f.close()
-	if not g: return 0 # No changes
-	
-	# Finishing touch -- move files
+    # End of file
+    f.close()
+    if not g: return 0 # No changes
 
-	# First copy the file's mode to the temp file
-	try:
-		statbuf = os.stat(filename)
-		os.chmod(tempname, statbuf[ST_MODE] & 07777)
-	except os.error, msg:
-		err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-	# Then make a backup of the original file as filename~
-	try:
-		os.rename(filename, filename + '~')
-	except os.error, msg:
-		err(filename + ': warning: backup failed (' + `msg` + ')\n')
-	# Now move the temp file to the original file
-	try:
-		os.rename(tempname, filename)
-	except os.error, msg:
-		err(filename + ': rename failed (' + `msg` + ')\n')
-		return 1
-	# Return succes
-	return 0
+    # Finishing touch -- move files
+
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 
 fixpat = '^[ \t]+def +[a-zA-Z0-9_]+ *( *self *, *\(( *\(.*\) *)\) *) *:'
 fixprog = regex.compile(fixpat)
 
 def fixline(line):
-	if fixprog.match(line) >= 0:
-		(a, b), (c, d) = fixprog.regs[1:3]
-		line = line[:a] + line[c:d] + line[b:]
-	return line
+    if fixprog.match(line) >= 0:
+        (a, b), (c, d) = fixprog.regs[1:3]
+        line = line[:a] + line[c:d] + line[b:]
+    return line
 
 
 main()
diff --git a/Tools/scripts/mkreal.py b/Tools/scripts/mkreal.py
index a065c17..eda01a8 100755
--- a/Tools/scripts/mkreal.py
+++ b/Tools/scripts/mkreal.py
@@ -15,51 +15,51 @@
 BUFSIZE = 32*1024
 
 def mkrealfile(name):
-	st = os.stat(name) # Get the mode
-	mode = S_IMODE(st[ST_MODE])
-	linkto = os.readlink(name) # Make sure again it's a symlink
-	f_in = open(name, 'r') # This ensures it's a file
-	os.unlink(name)
-	f_out = open(name, 'w')
-	while 1:
-		buf = f_in.read(BUFSIZE)
-		if not buf: break
-		f_out.write(buf)
-	del f_out # Flush data to disk before changing mode
-	os.chmod(name, mode)
+    st = os.stat(name) # Get the mode
+    mode = S_IMODE(st[ST_MODE])
+    linkto = os.readlink(name) # Make sure again it's a symlink
+    f_in = open(name, 'r') # This ensures it's a file
+    os.unlink(name)
+    f_out = open(name, 'w')
+    while 1:
+        buf = f_in.read(BUFSIZE)
+        if not buf: break
+        f_out.write(buf)
+    del f_out # Flush data to disk before changing mode
+    os.chmod(name, mode)
 
 def mkrealdir(name):
-	st = os.stat(name) # Get the mode
-	mode = S_IMODE(st[ST_MODE])
-	linkto = os.readlink(name)
-	files = os.listdir(name)
-	os.unlink(name)
-	os.mkdir(name, mode)
-	os.chmod(name, mode)
-	linkto = join(os.pardir, linkto)
-	#
-	for file in files:
-		if file not in (os.curdir, os.pardir):
-			os.symlink(join(linkto, file), join(name, file))
+    st = os.stat(name) # Get the mode
+    mode = S_IMODE(st[ST_MODE])
+    linkto = os.readlink(name)
+    files = os.listdir(name)
+    os.unlink(name)
+    os.mkdir(name, mode)
+    os.chmod(name, mode)
+    linkto = join(os.pardir, linkto)
+    #
+    for file in files:
+        if file not in (os.curdir, os.pardir):
+            os.symlink(join(linkto, file), join(name, file))
 
 def main():
-	sys.stdout = sys.stderr
-	progname = os.path.basename(sys.argv[0])
-	if progname == '-c': progname = 'mkreal'
-	args = sys.argv[1:]
-	if not args:
-		print 'usage:', progname, 'path ...'
-		sys.exit(2)
-	status = 0
-	for name in args:
-		if not os.path.islink(name):
-			print progname+':', name+':', 'not a symlink'
-			status = 1
-		else:
-			if os.path.isdir(name):
-				mkrealdir(name)
-			else:
-				mkrealfile(name)
-	sys.exit(status)
+    sys.stdout = sys.stderr
+    progname = os.path.basename(sys.argv[0])
+    if progname == '-c': progname = 'mkreal'
+    args = sys.argv[1:]
+    if not args:
+        print 'usage:', progname, 'path ...'
+        sys.exit(2)
+    status = 0
+    for name in args:
+        if not os.path.islink(name):
+            print progname+':', name+':', 'not a symlink'
+            status = 1
+        else:
+            if os.path.isdir(name):
+                mkrealdir(name)
+            else:
+                mkrealfile(name)
+    sys.exit(status)
 
 main()
diff --git a/Tools/scripts/nm2def.py b/Tools/scripts/nm2def.py
index 6fd17b2..fc1022a 100755
--- a/Tools/scripts/nm2def.py
+++ b/Tools/scripts/nm2def.py
@@ -98,6 +98,6 @@
     f = sys.stdout # open('PC/python_nt.def','w')
     f.write(DEF_TEMPLATE % (exports))
     f.close()
-    
+
 if __name__ == '__main__':
     main()
diff --git a/Tools/scripts/objgraph.py b/Tools/scripts/objgraph.py
index 4eab79b..e25e5b8 100755
--- a/Tools/scripts/objgraph.py
+++ b/Tools/scripts/objgraph.py
@@ -40,19 +40,19 @@
 # If there is no list for the key yet, it is created.
 #
 def store(dict, key, item):
-	if dict.has_key(key):
-		dict[key].append(item)
-	else:
-		dict[key] = [item]
+    if dict.has_key(key):
+        dict[key].append(item)
+    else:
+        dict[key] = [item]
 
 # Return a flattened version of a list of strings: the concatenation
 # of its elements with intervening spaces.
 #
 def flat(list):
-	s = ''
-	for item in list:
-		s = s + ' ' + item
-	return s[1:]
+    s = ''
+    for item in list:
+        s = s + ' ' + item
+    return s[1:]
 
 # Global variables mapping defined/undefined names to files and back.
 #
@@ -65,151 +65,151 @@
 # Argument is an open file.
 #
 def readinput(file):
-	while 1:
-		s = file.readline()
-		if not s:
-			break
-		# If you get any output from this line,
-		# it is probably caused by an unexpected input line:
-		if matcher.search(s) < 0: s; continue # Shouldn't happen
-		(ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
-		fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
-		if type in definitions:
-			store(def2file, name, fn)
-			store(file2def, fn, name)
-		elif type in externals:
-			store(file2undef, fn, name)
-			store(undef2file, name, fn)
-		elif not type in ignore:
-			print fn + ':' + name + ': unknown type ' + type
+    while 1:
+        s = file.readline()
+        if not s:
+            break
+        # If you get any output from this line,
+        # it is probably caused by an unexpected input line:
+        if matcher.search(s) < 0: s; continue # Shouldn't happen
+        (ra, rb), (r1a, r1b), (r2a, r2b), (r3a, r3b) = matcher.regs[:4]
+        fn, name, type = s[r1a:r1b], s[r3a:r3b], s[r2a:r2b]
+        if type in definitions:
+            store(def2file, name, fn)
+            store(file2def, fn, name)
+        elif type in externals:
+            store(file2undef, fn, name)
+            store(undef2file, name, fn)
+        elif not type in ignore:
+            print fn + ':' + name + ': unknown type ' + type
 
 # Print all names that were undefined in some module and where they are
 # defined.
 #
 def printcallee():
-	flist = file2undef.keys()
-	flist.sort()
-	for file in flist:
-		print file + ':'
-		elist = file2undef[file]
-		elist.sort()
-		for ext in elist:
-			if len(ext) >= 8:
-				tabs = '\t'
-			else:
-				tabs = '\t\t'
-			if not def2file.has_key(ext):
-				print '\t' + ext + tabs + ' *undefined'
-			else:
-				print '\t' + ext + tabs + flat(def2file[ext])
+    flist = file2undef.keys()
+    flist.sort()
+    for file in flist:
+        print file + ':'
+        elist = file2undef[file]
+        elist.sort()
+        for ext in elist:
+            if len(ext) >= 8:
+                tabs = '\t'
+            else:
+                tabs = '\t\t'
+            if not def2file.has_key(ext):
+                print '\t' + ext + tabs + ' *undefined'
+            else:
+                print '\t' + ext + tabs + flat(def2file[ext])
 
 # Print for each module the names of the other modules that use it.
 #
 def printcaller():
-	files = file2def.keys()
-	files.sort()
-	for file in files:
-		callers = []
-		for label in file2def[file]:
-			if undef2file.has_key(label):
-				callers = callers + undef2file[label]
-		if callers:
-			callers.sort()
-			print file + ':'
-			lastfn = ''
-			for fn in callers:
-				if fn <> lastfn:
-					print '\t' + fn
-				lastfn = fn
-		else:
-			print file + ': unused'
+    files = file2def.keys()
+    files.sort()
+    for file in files:
+        callers = []
+        for label in file2def[file]:
+            if undef2file.has_key(label):
+                callers = callers + undef2file[label]
+        if callers:
+            callers.sort()
+            print file + ':'
+            lastfn = ''
+            for fn in callers:
+                if fn <> lastfn:
+                    print '\t' + fn
+                lastfn = fn
+        else:
+            print file + ': unused'
 
 # Print undefine names and where they are used.
 #
 def printundef():
-	undefs = {}
-	for file in file2undef.keys():
-		for ext in file2undef[file]:
-			if not def2file.has_key(ext):
-				store(undefs, ext, file)
-	elist = undefs.keys()
-	elist.sort()
-	for ext in elist:
-		print ext + ':'
-		flist = undefs[ext]
-		flist.sort()
-		for file in flist:
-			print '\t' + file
+    undefs = {}
+    for file in file2undef.keys():
+        for ext in file2undef[file]:
+            if not def2file.has_key(ext):
+                store(undefs, ext, file)
+    elist = undefs.keys()
+    elist.sort()
+    for ext in elist:
+        print ext + ':'
+        flist = undefs[ext]
+        flist.sort()
+        for file in flist:
+            print '\t' + file
 
 # Print warning messages about names defined in more than one file.
 #
 def warndups():
-	savestdout = sys.stdout
-	sys.stdout = sys.stderr
-	names = def2file.keys()
-	names.sort()
-	for name in names:
-		if len(def2file[name]) > 1:
-			print 'warning:', name, 'multiply defined:',
-			print flat(def2file[name])
-	sys.stdout = savestdout
+    savestdout = sys.stdout
+    sys.stdout = sys.stderr
+    names = def2file.keys()
+    names.sort()
+    for name in names:
+        if len(def2file[name]) > 1:
+            print 'warning:', name, 'multiply defined:',
+            print flat(def2file[name])
+    sys.stdout = savestdout
 
 # Main program
 #
 def main():
-	try:
-		optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
-	except getopt.error:
-		sys.stdout = sys.stderr
-		print 'Usage:', os.path.basename(sys.argv[0]),
-		print           '[-cdu] [file] ...'
-		print '-c: print callers per objectfile'
-		print '-d: print callees per objectfile'
-		print '-u: print usage of undefined symbols'
-		print 'If none of -cdu is specified, all are assumed.'
-		print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
-		print 'e.g.: nm -o /lib/libc.a | objgraph'
-		return 1
-	optu = optc = optd = 0
-	for opt, void in optlist:
-		if opt == '-u':
-			optu = 1
-		elif opt == '-c':
-			optc = 1
-		elif opt == '-d':
-			optd = 1
-	if optu == optc == optd == 0:
-		optu = optc = optd = 1
-	if not args:
-		args = ['-']
-	for file in args:
-		if file == '-':
-			readinput(sys.stdin)
-		else:
-			readinput(open(file, 'r'))
-	#
-	warndups()
-	#
-	more = (optu + optc + optd > 1)
-	if optd:
-		if more:
-			print '---------------All callees------------------'
-		printcallee()
-	if optu:
-		if more:
-			print '---------------Undefined callees------------'
-		printundef()
-	if optc:
-		if more:
-			print '---------------All Callers------------------'
-		printcaller()
-	return 0
+    try:
+        optlist, args = getopt.getopt(sys.argv[1:], 'cdu')
+    except getopt.error:
+        sys.stdout = sys.stderr
+        print 'Usage:', os.path.basename(sys.argv[0]),
+        print           '[-cdu] [file] ...'
+        print '-c: print callers per objectfile'
+        print '-d: print callees per objectfile'
+        print '-u: print usage of undefined symbols'
+        print 'If none of -cdu is specified, all are assumed.'
+        print 'Use "nm -o" to generate the input (on IRIX: "nm -Bo"),'
+        print 'e.g.: nm -o /lib/libc.a | objgraph'
+        return 1
+    optu = optc = optd = 0
+    for opt, void in optlist:
+        if opt == '-u':
+            optu = 1
+        elif opt == '-c':
+            optc = 1
+        elif opt == '-d':
+            optd = 1
+    if optu == optc == optd == 0:
+        optu = optc = optd = 1
+    if not args:
+        args = ['-']
+    for file in args:
+        if file == '-':
+            readinput(sys.stdin)
+        else:
+            readinput(open(file, 'r'))
+    #
+    warndups()
+    #
+    more = (optu + optc + optd > 1)
+    if optd:
+        if more:
+            print '---------------All callees------------------'
+        printcallee()
+    if optu:
+        if more:
+            print '---------------Undefined callees------------'
+        printundef()
+    if optc:
+        if more:
+            print '---------------All Callers------------------'
+        printcaller()
+    return 0
 
 # Call the main program.
 # Use its return value as exit status.
 # Catch interrupts to avoid stack trace.
 #
 try:
-	sys.exit(main())
+    sys.exit(main())
 except KeyboardInterrupt:
-	sys.exit(1)
+    sys.exit(1)
diff --git a/Tools/scripts/parseentities.py b/Tools/scripts/parseentities.py
index ab4f830..cf4e17c 100755
--- a/Tools/scripts/parseentities.py
+++ b/Tools/scripts/parseentities.py
@@ -8,7 +8,7 @@
     Python snippet defining a dictionary "entitydefs" mapping literal
     entity name to character or numeric entity.
 
-    Marc-Andre Lemburg, mal@lemburg.com, 1999. 
+    Marc-Andre Lemburg, mal@lemburg.com, 1999.
     Use as you like. NO WARRANTIES.
 
 """
@@ -62,4 +62,3 @@
     text = infile.read()
     defs = parse(text)
     writefile(outfile,defs)
-
diff --git a/Tools/scripts/pathfix.py b/Tools/scripts/pathfix.py
index be04b21..d4e3071 100755
--- a/Tools/scripts/pathfix.py
+++ b/Tools/scripts/pathfix.py
@@ -33,117 +33,117 @@
 new_interpreter = None
 
 def main():
-	global new_interpreter
-	usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
-		 sys.argv[0])
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'i:')
-	except getopt.error, msg:
-		err(msg + '\n')
-		err(usage)
-		sys.exit(2)
-	for o, a in opts:
-		if o == '-i':
-			new_interpreter = a
-	if not new_interpreter or new_interpreter[0] != '/' or not args:
-		err('-i option or file-or-directory missing\n')
-		err(usage)
-		sys.exit(2)
-	bad = 0
-	for arg in args:
-		if os.path.isdir(arg):
-			if recursedown(arg): bad = 1
-		elif os.path.islink(arg):
-			err(arg + ': will not process symbolic links\n')
-			bad = 1
-		else:
-			if fix(arg): bad = 1
-	sys.exit(bad)
+    global new_interpreter
+    usage = ('usage: %s -i /interpreter file-or-directory ...\n' %
+             sys.argv[0])
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'i:')
+    except getopt.error, msg:
+        err(msg + '\n')
+        err(usage)
+        sys.exit(2)
+    for o, a in opts:
+        if o == '-i':
+            new_interpreter = a
+    if not new_interpreter or new_interpreter[0] != '/' or not args:
+        err('-i option or file-or-directory missing\n')
+        err(usage)
+        sys.exit(2)
+    bad = 0
+    for arg in args:
+        if os.path.isdir(arg):
+            if recursedown(arg): bad = 1
+        elif os.path.islink(arg):
+            err(arg + ': will not process symbolic links\n')
+            bad = 1
+        else:
+            if fix(arg): bad = 1
+    sys.exit(bad)
 
 ispythonprog = regex.compile('^[a-zA-Z0-9_]+\.py$')
 def ispython(name):
-	return ispythonprog.match(name) >= 0
+    return ispythonprog.match(name) >= 0
 
 def recursedown(dirname):
-	dbg('recursedown(' + `dirname` + ')\n')
-	bad = 0
-	try:
-		names = os.listdir(dirname)
-	except os.error, msg:
-		err(dirname + ': cannot list directory: ' + `msg` + '\n')
-		return 1
-	names.sort()
-	subdirs = []
-	for name in names:
-		if name in (os.curdir, os.pardir): continue
-		fullname = os.path.join(dirname, name)
-		if os.path.islink(fullname): pass
-		elif os.path.isdir(fullname):
-			subdirs.append(fullname)
-		elif ispython(name):
-			if fix(fullname): bad = 1
-	for fullname in subdirs:
-		if recursedown(fullname): bad = 1
-	return bad
+    dbg('recursedown(' + `dirname` + ')\n')
+    bad = 0
+    try:
+        names = os.listdir(dirname)
+    except os.error, msg:
+        err(dirname + ': cannot list directory: ' + `msg` + '\n')
+        return 1
+    names.sort()
+    subdirs = []
+    for name in names:
+        if name in (os.curdir, os.pardir): continue
+        fullname = os.path.join(dirname, name)
+        if os.path.islink(fullname): pass
+        elif os.path.isdir(fullname):
+            subdirs.append(fullname)
+        elif ispython(name):
+            if fix(fullname): bad = 1
+    for fullname in subdirs:
+        if recursedown(fullname): bad = 1
+    return bad
 
 def fix(filename):
-##	dbg('fix(' + `filename` + ')\n')
-	try:
-		f = open(filename, 'r')
-	except IOError, msg:
-		err(filename + ': cannot open: ' + `msg` + '\n')
-		return 1
-	line = f.readline()
-	fixed = fixline(line)
-	if line == fixed:
-		rep(filename+': no change\n')
-		f.close()
-		return
-	head, tail = os.path.split(filename)
-	tempname = os.path.join(head, '@' + tail)
-	try:
-		g = open(tempname, 'w')
-	except IOError, msg:
-		f.close()
-		err(tempname+': cannot create: '+`msg`+'\n')
-		return 1
-	rep(filename + ': updating\n')
-	g.write(fixed)
-	BUFSIZE = 8*1024
-	while 1:
-		buf = f.read(BUFSIZE)
-		if not buf: break
-		g.write(buf)
-	g.close()
-	f.close()
+##      dbg('fix(' + `filename` + ')\n')
+    try:
+        f = open(filename, 'r')
+    except IOError, msg:
+        err(filename + ': cannot open: ' + `msg` + '\n')
+        return 1
+    line = f.readline()
+    fixed = fixline(line)
+    if line == fixed:
+        rep(filename+': no change\n')
+        f.close()
+        return
+    head, tail = os.path.split(filename)
+    tempname = os.path.join(head, '@' + tail)
+    try:
+        g = open(tempname, 'w')
+    except IOError, msg:
+        f.close()
+        err(tempname+': cannot create: '+`msg`+'\n')
+        return 1
+    rep(filename + ': updating\n')
+    g.write(fixed)
+    BUFSIZE = 8*1024
+    while 1:
+        buf = f.read(BUFSIZE)
+        if not buf: break
+        g.write(buf)
+    g.close()
+    f.close()
 
-	# Finishing touch -- move files
+    # Finishing touch -- move files
 
-	# First copy the file's mode to the temp file
-	try:
-		statbuf = os.stat(filename)
-		os.chmod(tempname, statbuf[ST_MODE] & 07777)
-	except os.error, msg:
-		err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
-	# Then make a backup of the original file as filename~
-	try:
-		os.rename(filename, filename + '~')
-	except os.error, msg:
-		err(filename + ': warning: backup failed (' + `msg` + ')\n')
-	# Now move the temp file to the original file
-	try:
-		os.rename(tempname, filename)
-	except os.error, msg:
-		err(filename + ': rename failed (' + `msg` + ')\n')
-		return 1
-	# Return succes
-	return 0
+    # First copy the file's mode to the temp file
+    try:
+        statbuf = os.stat(filename)
+        os.chmod(tempname, statbuf[ST_MODE] & 07777)
+    except os.error, msg:
+        err(tempname + ': warning: chmod failed (' + `msg` + ')\n')
+    # Then make a backup of the original file as filename~
+    try:
+        os.rename(filename, filename + '~')
+    except os.error, msg:
+        err(filename + ': warning: backup failed (' + `msg` + ')\n')
+    # Now move the temp file to the original file
+    try:
+        os.rename(tempname, filename)
+    except os.error, msg:
+        err(filename + ': rename failed (' + `msg` + ')\n')
+        return 1
+    # Return succes
+    return 0
 
 def fixline(line):
-	if line[:2] != '#!':
-		return line
-	if string.find(line, "python") < 0:
-		return line
-	return '#! %s\n' % new_interpreter
+    if line[:2] != '#!':
+        return line
+    if string.find(line, "python") < 0:
+        return line
+    return '#! %s\n' % new_interpreter
 
 main()
diff --git a/Tools/scripts/pdeps.py b/Tools/scripts/pdeps.py
index fb730f1..18b582b 100755
--- a/Tools/scripts/pdeps.py
+++ b/Tools/scripts/pdeps.py
@@ -5,7 +5,7 @@
 # Find dependencies between a bunch of Python modules.
 #
 # Usage:
-#	pdeps file1.py file2.py ...
+#       pdeps file1.py file2.py ...
 #
 # Output:
 # Four tables separated by lines like '--- Closure ---':
@@ -29,31 +29,31 @@
 # Main program
 #
 def main():
-	args = sys.argv[1:]
-	if not args:
-		print 'usage: pdeps file.py file.py ...'
-		return 2
-	#
-	table = {}
-	for arg in args:
-		process(arg, table)
-	#
-	print '--- Uses ---'
-	printresults(table)
-	#
-	print '--- Used By ---'
-	inv = inverse(table)
-	printresults(inv)
-	#
-	print '--- Closure of Uses ---'
-	reach = closure(table)
-	printresults(reach)
-	#
-	print '--- Closure of Used By ---'
-	invreach = inverse(reach)
-	printresults(invreach)
-	#
-	return 0
+    args = sys.argv[1:]
+    if not args:
+        print 'usage: pdeps file.py file.py ...'
+        return 2
+    #
+    table = {}
+    for arg in args:
+        process(arg, table)
+    #
+    print '--- Uses ---'
+    printresults(table)
+    #
+    print '--- Used By ---'
+    inv = inverse(table)
+    printresults(inv)
+    #
+    print '--- Closure of Uses ---'
+    reach = closure(table)
+    printresults(reach)
+    #
+    print '--- Closure of Used By ---'
+    invreach = inverse(reach)
+    printresults(invreach)
+    #
+    return 0
 
 
 # Compiled regular expressions to search for import statements
@@ -65,56 +65,56 @@
 # Collect data from one file
 #
 def process(filename, table):
-	fp = open(filename, 'r')
-	mod = os.path.basename(filename)
-	if mod[-3:] == '.py':
-		mod = mod[:-3]
-	table[mod] = list = []
-	while 1:
-		line = fp.readline()
-		if not line: break
-		while line[-1:] == '\\':
-			nextline = fp.readline()
-			if not nextline: break
-			line = line[:-1] + nextline
-		if m_import.match(line) >= 0:
-			(a, b), (a1, b1) = m_import.regs[:2]
-		elif m_from.match(line) >= 0:
-			(a, b), (a1, b1) = m_from.regs[:2]
-		else: continue
-		words = string.splitfields(line[a1:b1], ',')
-		# print '#', line, words
-		for word in words:
-			word = string.strip(word)
-			if word not in list:
-				list.append(word)
+    fp = open(filename, 'r')
+    mod = os.path.basename(filename)
+    if mod[-3:] == '.py':
+        mod = mod[:-3]
+    table[mod] = list = []
+    while 1:
+        line = fp.readline()
+        if not line: break
+        while line[-1:] == '\\':
+            nextline = fp.readline()
+            if not nextline: break
+            line = line[:-1] + nextline
+        if m_import.match(line) >= 0:
+            (a, b), (a1, b1) = m_import.regs[:2]
+        elif m_from.match(line) >= 0:
+            (a, b), (a1, b1) = m_from.regs[:2]
+        else: continue
+        words = string.splitfields(line[a1:b1], ',')
+        # print '#', line, words
+        for word in words:
+            word = string.strip(word)
+            if word not in list:
+                list.append(word)
 
 
 # Compute closure (this is in fact totally general)
 #
 def closure(table):
-	modules = table.keys()
-	#
-	# Initialize reach with a copy of table
-	#
-	reach = {}
-	for mod in modules:
-		reach[mod] = table[mod][:]
-	#
-	# Iterate until no more change
-	#
-	change = 1
-	while change:
-		change = 0
-		for mod in modules:
-			for mo in reach[mod]:
-				if mo in modules:
-					for m in reach[mo]:
-						if m not in reach[mod]:
-							reach[mod].append(m)
-							change = 1
-	#
-	return reach
+    modules = table.keys()
+    #
+    # Initialize reach with a copy of table
+    #
+    reach = {}
+    for mod in modules:
+        reach[mod] = table[mod][:]
+    #
+    # Iterate until no more change
+    #
+    change = 1
+    while change:
+        change = 0
+        for mod in modules:
+            for mo in reach[mod]:
+                if mo in modules:
+                    for m in reach[mo]:
+                        if m not in reach[mod]:
+                            reach[mod].append(m)
+                            change = 1
+    #
+    return reach
 
 
 # Invert a table (this is again totally general).
@@ -122,13 +122,13 @@
 # so there may be empty lists in the inverse.
 #
 def inverse(table):
-	inv = {}
-	for key in table.keys():
-		if not inv.has_key(key):
-			inv[key] = []
-		for item in table[key]:
-			store(inv, item, key)
-	return inv
+    inv = {}
+    for key in table.keys():
+        if not inv.has_key(key):
+            inv[key] = []
+        for item in table[key]:
+            store(inv, item, key)
+    return inv
 
 
 # Store "item" in "dict" under "key".
@@ -136,32 +136,32 @@
 # If there is no list for the key yet, it is created.
 #
 def store(dict, key, item):
-	if dict.has_key(key):
-		dict[key].append(item)
-	else:
-		dict[key] = [item]
+    if dict.has_key(key):
+        dict[key].append(item)
+    else:
+        dict[key] = [item]
 
 
 # Tabulate results neatly
 #
 def printresults(table):
-	modules = table.keys()
-	maxlen = 0
-	for mod in modules: maxlen = max(maxlen, len(mod))
-	modules.sort()
-	for mod in modules:
-		list = table[mod]
-		list.sort()
-		print string.ljust(mod, maxlen), ':',
-		if mod in list:
-			print '(*)',
-		for ref in list:
-			print ref,
-		print
+    modules = table.keys()
+    maxlen = 0
+    for mod in modules: maxlen = max(maxlen, len(mod))
+    modules.sort()
+    for mod in modules:
+        list = table[mod]
+        list.sort()
+        print string.ljust(mod, maxlen), ':',
+        if mod in list:
+            print '(*)',
+        for ref in list:
+            print ref,
+        print
 
 
 # Call main and honor exit status
 try:
-	sys.exit(main())
+    sys.exit(main())
 except KeyboardInterrupt:
-	sys.exit(1)
+    sys.exit(1)
diff --git a/Tools/scripts/pindent.py b/Tools/scripts/pindent.py
index 6eba021..318c20e 100755
--- a/Tools/scripts/pindent.py
+++ b/Tools/scripts/pindent.py
@@ -97,236 +97,236 @@
 
 class PythonIndenter:
 
-	def __init__(self, fpi = sys.stdin, fpo = sys.stdout,
-		     indentsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-		self.fpi = fpi
-		self.fpo = fpo
-		self.indentsize = indentsize
-		self.tabsize = tabsize
-		self.lineno = 0
-		self.expandtabs = expandtabs
-		self._write = fpo.write
-		self.kwprog = re.compile(
-			r'^\s*(?P<kw>[a-z]+)'
-			r'(\s+(?P<id>[a-zA-Z_]\w*))?'
-			r'[^\w]')
-		self.endprog = re.compile(
-			r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
-			r'(\s+(?P<id>[a-zA-Z_]\w*))?'
-			r'[^\w]')
-		self.wsprog = re.compile(r'^[ \t]*')
-	# end def __init__
+    def __init__(self, fpi = sys.stdin, fpo = sys.stdout,
+                 indentsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+        self.fpi = fpi
+        self.fpo = fpo
+        self.indentsize = indentsize
+        self.tabsize = tabsize
+        self.lineno = 0
+        self.expandtabs = expandtabs
+        self._write = fpo.write
+        self.kwprog = re.compile(
+                r'^\s*(?P<kw>[a-z]+)'
+                r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+                r'[^\w]')
+        self.endprog = re.compile(
+                r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
+                r'(\s+(?P<id>[a-zA-Z_]\w*))?'
+                r'[^\w]')
+        self.wsprog = re.compile(r'^[ \t]*')
+    # end def __init__
 
-	def write(self, line):
-		if self.expandtabs:
-			self._write(string.expandtabs(line, self.tabsize))
-		else:
-			self._write(line)
-		# end if
-	# end def write
+    def write(self, line):
+        if self.expandtabs:
+            self._write(string.expandtabs(line, self.tabsize))
+        else:
+            self._write(line)
+        # end if
+    # end def write
 
-	def readline(self):
-		line = self.fpi.readline()
-		if line: self.lineno = self.lineno + 1
-		# end if
-		return line
-	# end def readline
+    def readline(self):
+        line = self.fpi.readline()
+        if line: self.lineno = self.lineno + 1
+        # end if
+        return line
+    # end def readline
 
-	def error(self, fmt, *args):
-		if args: fmt = fmt % args
-		# end if
-		sys.stderr.write('Error at line %d: %s\n' % (self.lineno, fmt))
-		self.write('### %s ###\n' % fmt)
-	# end def error
+    def error(self, fmt, *args):
+        if args: fmt = fmt % args
+        # end if
+        sys.stderr.write('Error at line %d: %s\n' % (self.lineno, fmt))
+        self.write('### %s ###\n' % fmt)
+    # end def error
 
-	def getline(self):
-		line = self.readline()
-		while line[-2:] == '\\\n':
-			line2 = self.readline()
-			if not line2: break
-			# end if
-			line = line + line2
-		# end while
-		return line
-	# end def getline
+    def getline(self):
+        line = self.readline()
+        while line[-2:] == '\\\n':
+            line2 = self.readline()
+            if not line2: break
+            # end if
+            line = line + line2
+        # end while
+        return line
+    # end def getline
 
-	def putline(self, line, indent = None):
-		if indent is None:
-			self.write(line)
-			return
-		# end if
-		tabs, spaces = divmod(indent*self.indentsize, self.tabsize)
-		i = 0
-		m = self.wsprog.match(line)
-		if m: i = m.end()
-		# end if
-		self.write('\t'*tabs + ' '*spaces + line[i:])
-	# end def putline
+    def putline(self, line, indent = None):
+        if indent is None:
+            self.write(line)
+            return
+        # end if
+        tabs, spaces = divmod(indent*self.indentsize, self.tabsize)
+        i = 0
+        m = self.wsprog.match(line)
+        if m: i = m.end()
+        # end if
+        self.write('\t'*tabs + ' '*spaces + line[i:])
+    # end def putline
 
-	def reformat(self):
-		stack = []
-		while 1:
-			line = self.getline()
-			if not line: break	# EOF
-			# end if
-			m = self.endprog.match(line)
-			if m:
-				kw = 'end'
-				kw2 = m.group('kw')
-				if not stack:
-					self.error('unexpected end')
-				elif stack[-1][0] != kw2:
-					self.error('unmatched end')
-				# end if
-				del stack[-1:]
-				self.putline(line, len(stack))
-				continue
-			# end if
-			m = self.kwprog.match(line)
-			if m:
-				kw = m.group('kw')
-				if kw in start:
-					self.putline(line, len(stack))
-					stack.append((kw, kw))
-					continue
-				# end if
-				if next.has_key(kw) and stack:
-					self.putline(line, len(stack)-1)
-					kwa, kwb = stack[-1]
-					stack[-1] = kwa, kw
-					continue
-				# end if
-			# end if
-			self.putline(line, len(stack))
-		# end while
-		if stack:
-			self.error('unterminated keywords')
-			for kwa, kwb in stack:
-				self.write('\t%s\n' % kwa)
-			# end for
-		# end if
-	# end def reformat
+    def reformat(self):
+        stack = []
+        while 1:
+            line = self.getline()
+            if not line: break      # EOF
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                kw = 'end'
+                kw2 = m.group('kw')
+                if not stack:
+                    self.error('unexpected end')
+                elif stack[-1][0] != kw2:
+                    self.error('unmatched end')
+                # end if
+                del stack[-1:]
+                self.putline(line, len(stack))
+                continue
+            # end if
+            m = self.kwprog.match(line)
+            if m:
+                kw = m.group('kw')
+                if kw in start:
+                    self.putline(line, len(stack))
+                    stack.append((kw, kw))
+                    continue
+                # end if
+                if next.has_key(kw) and stack:
+                    self.putline(line, len(stack)-1)
+                    kwa, kwb = stack[-1]
+                    stack[-1] = kwa, kw
+                    continue
+                # end if
+            # end if
+            self.putline(line, len(stack))
+        # end while
+        if stack:
+            self.error('unterminated keywords')
+            for kwa, kwb in stack:
+                self.write('\t%s\n' % kwa)
+            # end for
+        # end if
+    # end def reformat
 
-	def delete(self):
-		begin_counter = 0
-		end_counter = 0
-		while 1:
-			line = self.getline()
-			if not line: break	# EOF
-			# end if
-			m = self.endprog.match(line)
-			if m:
-				end_counter = end_counter + 1
-				continue
-			# end if
-			m = self.kwprog.match(line)
-			if m:
-				kw = m.group('kw')
-				if kw in start:
-					begin_counter = begin_counter + 1
-				# end if
-			# end if
-			self.putline(line)
-		# end while
-		if begin_counter - end_counter < 0:
-			sys.stderr.write('Warning: input contained more end tags than expected\n')
-		elif begin_counter - end_counter > 0:
-			sys.stderr.write('Warning: input contained less end tags than expected\n')
-		# end if
-	# end def delete
-	
-	def complete(self):
-		self.indentsize = 1
-		stack = []
-		todo = []
-		current, firstkw, lastkw, topid = 0, '', '', ''
-		while 1:
-			line = self.getline()
-			i = 0
-			m = self.wsprog.match(line)
-			if m: i = m.end()
-			# end if
-			m = self.endprog.match(line)
-			if m:
-				thiskw = 'end'
-				endkw = m.group('kw')
-				thisid = m.group('id')
-			else:
-				m = self.kwprog.match(line)
-				if m:
-					thiskw = m.group('kw')
-					if not next.has_key(thiskw):
-						thiskw = ''
-					# end if
-					if thiskw in ('def', 'class'):
-						thisid = m.group('id')
-					else:
-						thisid = ''
-					# end if
-				elif line[i:i+1] in ('\n', '#'):
-					todo.append(line)
-					continue
-				else:
-					thiskw = ''
-				# end if
-			# end if
-			indent = len(string.expandtabs(line[:i], self.tabsize))
-			while indent < current:
-				if firstkw:
-					if topid:
-						s = '# end %s %s\n' % (
-							firstkw, topid)
-					else:
-						s = '# end %s\n' % firstkw
-					# end if
-					self.putline(s, current)
-					firstkw = lastkw = ''
-				# end if
-				current, firstkw, lastkw, topid = stack[-1]
-				del stack[-1]
-			# end while
-			if indent == current and firstkw:
-				if thiskw == 'end':
-					if endkw != firstkw:
-						self.error('mismatched end')
-					# end if
-					firstkw = lastkw = ''
-				elif not thiskw or thiskw in start:
-					if topid:
-						s = '# end %s %s\n' % (
-							firstkw, topid)
-					else:
-						s = '# end %s\n' % firstkw
-					# end if
-					self.putline(s, current)
-					firstkw = lastkw = topid = ''
-				# end if
-			# end if
-			if indent > current:
-				stack.append((current, firstkw, lastkw, topid))
-				if thiskw and thiskw not in start:
-					# error
-					thiskw = ''
-				# end if
-				current, firstkw, lastkw, topid = \
-					 indent, thiskw, thiskw, thisid
-			# end if
-			if thiskw:
-				if thiskw in start:
-					firstkw = lastkw = thiskw
-					topid = thisid
-				else:
-					lastkw = thiskw
-				# end if
-			# end if
-			for l in todo: self.write(l)
-			# end for
-			todo = []
-			if not line: break
-			# end if
-			self.write(line)
-		# end while
-	# end def complete
+    def delete(self):
+        begin_counter = 0
+        end_counter = 0
+        while 1:
+            line = self.getline()
+            if not line: break      # EOF
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                end_counter = end_counter + 1
+                continue
+            # end if
+            m = self.kwprog.match(line)
+            if m:
+                kw = m.group('kw')
+                if kw in start:
+                    begin_counter = begin_counter + 1
+                # end if
+            # end if
+            self.putline(line)
+        # end while
+        if begin_counter - end_counter < 0:
+            sys.stderr.write('Warning: input contained more end tags than expected\n')
+        elif begin_counter - end_counter > 0:
+            sys.stderr.write('Warning: input contained less end tags than expected\n')
+        # end if
+    # end def delete
+
+    def complete(self):
+        self.indentsize = 1
+        stack = []
+        todo = []
+        current, firstkw, lastkw, topid = 0, '', '', ''
+        while 1:
+            line = self.getline()
+            i = 0
+            m = self.wsprog.match(line)
+            if m: i = m.end()
+            # end if
+            m = self.endprog.match(line)
+            if m:
+                thiskw = 'end'
+                endkw = m.group('kw')
+                thisid = m.group('id')
+            else:
+                m = self.kwprog.match(line)
+                if m:
+                    thiskw = m.group('kw')
+                    if not next.has_key(thiskw):
+                        thiskw = ''
+                    # end if
+                    if thiskw in ('def', 'class'):
+                        thisid = m.group('id')
+                    else:
+                        thisid = ''
+                    # end if
+                elif line[i:i+1] in ('\n', '#'):
+                    todo.append(line)
+                    continue
+                else:
+                    thiskw = ''
+                # end if
+            # end if
+            indent = len(string.expandtabs(line[:i], self.tabsize))
+            while indent < current:
+                if firstkw:
+                    if topid:
+                        s = '# end %s %s\n' % (
+                                firstkw, topid)
+                    else:
+                        s = '# end %s\n' % firstkw
+                    # end if
+                    self.putline(s, current)
+                    firstkw = lastkw = ''
+                # end if
+                current, firstkw, lastkw, topid = stack[-1]
+                del stack[-1]
+            # end while
+            if indent == current and firstkw:
+                if thiskw == 'end':
+                    if endkw != firstkw:
+                        self.error('mismatched end')
+                    # end if
+                    firstkw = lastkw = ''
+                elif not thiskw or thiskw in start:
+                    if topid:
+                        s = '# end %s %s\n' % (
+                                firstkw, topid)
+                    else:
+                        s = '# end %s\n' % firstkw
+                    # end if
+                    self.putline(s, current)
+                    firstkw = lastkw = topid = ''
+                # end if
+            # end if
+            if indent > current:
+                stack.append((current, firstkw, lastkw, topid))
+                if thiskw and thiskw not in start:
+                    # error
+                    thiskw = ''
+                # end if
+                current, firstkw, lastkw, topid = \
+                         indent, thiskw, thiskw, thisid
+            # end if
+            if thiskw:
+                if thiskw in start:
+                    firstkw = lastkw = thiskw
+                    topid = thisid
+                else:
+                    lastkw = thiskw
+                # end if
+            # end if
+            for l in todo: self.write(l)
+            # end for
+            todo = []
+            if not line: break
+            # end if
+            self.write(line)
+        # end while
+    # end def complete
 
 # end class PythonIndenter
 
@@ -336,134 +336,134 @@
 # - xxx_file(filename): process file in place, return true iff changed
 
 def complete_filter(input = sys.stdin, output = sys.stdout,
-		    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.complete()
+                    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.complete()
 # end def complete_filter
 
 def delete_filter(input= sys.stdin, output = sys.stdout,
-		    	stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.delete()
+                        stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.delete()
 # end def delete_filter
 
 def reformat_filter(input = sys.stdin, output = sys.stdout,
-		    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.reformat()
+                    stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.reformat()
 # end def reformat_filter
 
 class StringReader:
-	def __init__(self, buf):
-		self.buf = buf
-		self.pos = 0
-		self.len = len(self.buf)
-	# end def __init__
-	def read(self, n = 0):
-		if n <= 0:
-			n = self.len - self.pos
-		else:
-			n = min(n, self.len - self.pos)
-		# end if
-		r = self.buf[self.pos : self.pos + n]
-		self.pos = self.pos + n
-		return r
-	# end def read
-	def readline(self):
-		i = string.find(self.buf, '\n', self.pos)
-		return self.read(i + 1 - self.pos)
-	# end def readline
-	def readlines(self):
-		lines = []
-		line = self.readline()
-		while line:
-			lines.append(line)
-			line = self.readline()
-		# end while
-		return lines
-	# end def readlines
-	# seek/tell etc. are left as an exercise for the reader
+    def __init__(self, buf):
+        self.buf = buf
+        self.pos = 0
+        self.len = len(self.buf)
+    # end def __init__
+    def read(self, n = 0):
+        if n <= 0:
+            n = self.len - self.pos
+        else:
+            n = min(n, self.len - self.pos)
+        # end if
+        r = self.buf[self.pos : self.pos + n]
+        self.pos = self.pos + n
+        return r
+    # end def read
+    def readline(self):
+        i = string.find(self.buf, '\n', self.pos)
+        return self.read(i + 1 - self.pos)
+    # end def readline
+    def readlines(self):
+        lines = []
+        line = self.readline()
+        while line:
+            lines.append(line)
+            line = self.readline()
+        # end while
+        return lines
+    # end def readlines
+    # seek/tell etc. are left as an exercise for the reader
 # end class StringReader
 
 class StringWriter:
-	def __init__(self):
-		self.buf = ''
-	# end def __init__
-	def write(self, s):
-		self.buf = self.buf + s
-	# end def write
-	def getvalue(self):
-		return self.buf
-	# end def getvalue
+    def __init__(self):
+        self.buf = ''
+    # end def __init__
+    def write(self, s):
+        self.buf = self.buf + s
+    # end def write
+    def getvalue(self):
+        return self.buf
+    # end def getvalue
 # end class StringWriter
 
 def complete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	input = StringReader(source)
-	output = StringWriter()
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.complete()
-	return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.complete()
+    return output.getvalue()
 # end def complete_string
 
 def delete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	input = StringReader(source)
-	output = StringWriter()
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.delete()
-	return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.delete()
+    return output.getvalue()
 # end def delete_string
 
 def reformat_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	input = StringReader(source)
-	output = StringWriter()
-	pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
-	pi.reformat()
-	return output.getvalue()
+    input = StringReader(source)
+    output = StringWriter()
+    pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs)
+    pi.reformat()
+    return output.getvalue()
 # end def reformat_string
 
 def complete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	source = open(filename, 'r').read()
-	result = complete_string(source, stepsize, tabsize, expandtabs)
-	if source == result: return 0
-	# end if
-	import os
-	try: os.rename(filename, filename + '~')
-	except os.error: pass
-	# end try
-	f = open(filename, 'w')
-	f.write(result)
-	f.close()
-	return 1
+    source = open(filename, 'r').read()
+    result = complete_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def complete_file
 
 def delete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	source = open(filename, 'r').read()
-	result = delete_string(source, stepsize, tabsize, expandtabs)
-	if source == result: return 0
-	# end if
-	import os
-	try: os.rename(filename, filename + '~')
-	except os.error: pass
-	# end try
-	f = open(filename, 'w')
-	f.write(result)
-	f.close()
-	return 1
+    source = open(filename, 'r').read()
+    result = delete_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def delete_file
 
 def reformat_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS):
-	source = open(filename, 'r').read()
-	result = reformat_string(source, stepsize, tabsize, expandtabs)
-	if source == result: return 0
-	# end if
-	import os
-	try: os.rename(filename, filename + '~')
-	except os.error: pass
-	# end try
-	f = open(filename, 'w')
-	f.write(result)
-	f.close()
-	return 1
+    source = open(filename, 'r').read()
+    result = reformat_string(source, stepsize, tabsize, expandtabs)
+    if source == result: return 0
+    # end if
+    import os
+    try: os.rename(filename, filename + '~')
+    except os.error: pass
+    # end try
+    f = open(filename, 'w')
+    f.write(result)
+    f.close()
+    return 1
 # end def reformat_file
 
 # Test program when called as a script
@@ -482,62 +482,62 @@
 """ % vars()
 
 def error_both(op1, op2):
-	sys.stderr.write('Error: You can not specify both '+op1+' and -'+op2[0]+' at the same time\n')
-	sys.stderr.write(usage)
-	sys.exit(2)
+    sys.stderr.write('Error: You can not specify both '+op1+' and -'+op2[0]+' at the same time\n')
+    sys.stderr.write(usage)
+    sys.exit(2)
 # end def error_both
 
 def test():
-	import getopt
-	try:
-		opts, args = getopt.getopt(sys.argv[1:], 'cdrs:t:e')
-	except getopt.error, msg:
-		sys.stderr.write('Error: %s\n' % msg)
-		sys.stderr.write(usage)
-		sys.exit(2)
-	# end try
-	action = None
-	stepsize = STEPSIZE
-	tabsize = TABSIZE
-	expandtabs = EXPANDTABS
-	for o, a in opts:
-		if o == '-c':
-			if action: error_both(o, action)
-			# end if
-			action = 'complete'
-		elif o == '-d':
-			if action: error_both(o, action)
-			# end if
-			action = 'delete'
-		elif o == '-r':
-			if action: error_both(o, action)
-			# end if
-			action = 'reformat'
-		elif o == '-s':
-			stepsize = string.atoi(a)
-		elif o == '-t':
-			tabsize = string.atoi(a)
-		elif o == '-e':
-			expandtabs = 1
-		# end if
-	# end for
-	if not action:
-		sys.stderr.write(
-			'You must specify -c(omplete), -d(elete) or -r(eformat)\n')
-		sys.stderr.write(usage)
-		sys.exit(2)
-	# end if
-	if not args or args == ['-']:
-		action = eval(action + '_filter')
-		action(sys.stdin, sys.stdout, stepsize, tabsize, expandtabs)
-	else:
-		action = eval(action + '_file')
-		for file in args:
-			action(file, stepsize, tabsize, expandtabs)
-		# end for
-	# end if
+    import getopt
+    try:
+        opts, args = getopt.getopt(sys.argv[1:], 'cdrs:t:e')
+    except getopt.error, msg:
+        sys.stderr.write('Error: %s\n' % msg)
+        sys.stderr.write(usage)
+        sys.exit(2)
+    # end try
+    action = None
+    stepsize = STEPSIZE
+    tabsize = TABSIZE
+    expandtabs = EXPANDTABS
+    for o, a in opts:
+        if o == '-c':
+            if action: error_both(o, action)
+            # end if
+            action = 'complete'
+        elif o == '-d':
+            if action: error_both(o, action)
+            # end if
+            action = 'delete'
+        elif o == '-r':
+            if action: error_both(o, action)
+            # end if
+            action = 'reformat'
+        elif o == '-s':
+            stepsize = string.atoi(a)
+        elif o == '-t':
+            tabsize = string.atoi(a)
+        elif o == '-e':
+            expandtabs = 1
+        # end if
+    # end for
+    if not action:
+        sys.stderr.write(
+                'You must specify -c(omplete), -d(elete) or -r(eformat)\n')
+        sys.stderr.write(usage)
+        sys.exit(2)
+    # end if
+    if not args or args == ['-']:
+        action = eval(action + '_filter')
+        action(sys.stdin, sys.stdout, stepsize, tabsize, expandtabs)
+    else:
+        action = eval(action + '_file')
+        for file in args:
+            action(file, stepsize, tabsize, expandtabs)
+        # end for
+    # end if
 # end def test
 
 if __name__ == '__main__':
-	test()
+    test()
 # end if
diff --git a/Tools/scripts/ptags.py b/Tools/scripts/ptags.py
index f7f7eb5..ea8eb3f 100755
--- a/Tools/scripts/ptags.py
+++ b/Tools/scripts/ptags.py
@@ -39,7 +39,7 @@
     tags.append(s)
     while 1:
         line = fp.readline()
-        if not line: 
+        if not line:
             break
         m = matcher.match(line)
         if m:
diff --git a/Tools/scripts/redemo.py b/Tools/scripts/redemo.py
index 535e756..1eed8f8 100644
--- a/Tools/scripts/redemo.py
+++ b/Tools/scripts/redemo.py
@@ -4,159 +4,159 @@
 import re
 
 class ReDemo:
-	
-	def __init__(self, master):
-		self.master = master
 
-		self.promptdisplay = Label(self.master, anchor=W,
-			text="Enter a Perl-style regular expression:")
-		self.promptdisplay.pack(side=TOP, fill=X)
+    def __init__(self, master):
+        self.master = master
 
-		self.regexdisplay = Entry(self.master)
-		self.regexdisplay.pack(fill=X)
-		self.regexdisplay.focus_set()
+        self.promptdisplay = Label(self.master, anchor=W,
+                text="Enter a Perl-style regular expression:")
+        self.promptdisplay.pack(side=TOP, fill=X)
 
-		self.addoptions()
+        self.regexdisplay = Entry(self.master)
+        self.regexdisplay.pack(fill=X)
+        self.regexdisplay.focus_set()
 
-		self.statusdisplay = Label(self.master, text="", anchor=W)
-		self.statusdisplay.pack(side=TOP, fill=X)
+        self.addoptions()
 
-		self.labeldisplay = Label(self.master, anchor=W,
-			text="Enter a string to search:")
-		self.labeldisplay.pack(fill=X)
-		self.labeldisplay.pack(fill=X)
+        self.statusdisplay = Label(self.master, text="", anchor=W)
+        self.statusdisplay.pack(side=TOP, fill=X)
 
-		self.showframe = Frame(master)
-		self.showframe.pack(fill=X, anchor=W)
+        self.labeldisplay = Label(self.master, anchor=W,
+                text="Enter a string to search:")
+        self.labeldisplay.pack(fill=X)
+        self.labeldisplay.pack(fill=X)
 
-		self.showvar = StringVar(master)
-		self.showvar.set("first")
+        self.showframe = Frame(master)
+        self.showframe.pack(fill=X, anchor=W)
 
-		self.showfirstradio = Radiobutton(self.showframe,
-						 text="Highlight first match",
-						  variable=self.showvar,
-						  value="first",
-						  command=self.recompile)
-		self.showfirstradio.pack(side=LEFT)
+        self.showvar = StringVar(master)
+        self.showvar.set("first")
 
-		self.showallradio = Radiobutton(self.showframe,
-						text="Highlight all matches",
-						variable=self.showvar,
-						value="all",
-						command=self.recompile)
-		self.showallradio.pack(side=LEFT)
+        self.showfirstradio = Radiobutton(self.showframe,
+                                         text="Highlight first match",
+                                          variable=self.showvar,
+                                          value="first",
+                                          command=self.recompile)
+        self.showfirstradio.pack(side=LEFT)
 
-		self.stringdisplay = Text(self.master, width=60, height=4)
-		self.stringdisplay.pack(fill=BOTH, expand=1)
-		self.stringdisplay.tag_configure("hit", background="yellow")
+        self.showallradio = Radiobutton(self.showframe,
+                                        text="Highlight all matches",
+                                        variable=self.showvar,
+                                        value="all",
+                                        command=self.recompile)
+        self.showallradio.pack(side=LEFT)
 
-		self.grouplabel = Label(self.master, text="Groups:", anchor=W)
-		self.grouplabel.pack(fill=X)
+        self.stringdisplay = Text(self.master, width=60, height=4)
+        self.stringdisplay.pack(fill=BOTH, expand=1)
+        self.stringdisplay.tag_configure("hit", background="yellow")
 
-		self.grouplist = Listbox(self.master)
-		self.grouplist.pack(expand=1, fill=BOTH)
+        self.grouplabel = Label(self.master, text="Groups:", anchor=W)
+        self.grouplabel.pack(fill=X)
 
-		self.regexdisplay.bind('<Key>', self.recompile)
-		self.stringdisplay.bind('<Key>', self.reevaluate)
+        self.grouplist = Listbox(self.master)
+        self.grouplist.pack(expand=1, fill=BOTH)
 
-		self.compiled = None
-		self.recompile()
+        self.regexdisplay.bind('<Key>', self.recompile)
+        self.stringdisplay.bind('<Key>', self.reevaluate)
 
-		btags = self.regexdisplay.bindtags()
-		self.regexdisplay.bindtags(btags[1:] + btags[:1])
+        self.compiled = None
+        self.recompile()
 
-		btags = self.stringdisplay.bindtags()
-		self.stringdisplay.bindtags(btags[1:] + btags[:1])
-	
-	def addoptions(self):
-		self.frames = []
-		self.boxes = []
-		self.vars = []
-		for name in ('IGNORECASE',
-			     'LOCALE',
-			     'MULTILINE',
-			     'DOTALL',
-			     'VERBOSE'):
-			if len(self.boxes) % 3 == 0:
-				frame = Frame(self.master)
-				frame.pack(fill=X)
-				self.frames.append(frame)
-			val = getattr(re, name)
-			var = IntVar()
-			box = Checkbutton(frame,
-				variable=var, text=name,
-				offvalue=0, onvalue=val,
-				command=self.recompile)
-			box.pack(side=LEFT)
-			self.boxes.append(box)
-			self.vars.append(var)
-	
-	def getflags(self):
-		flags = 0
-		for var in self.vars:
-			flags = flags | var.get()
-		flags = flags
-		return flags
-	
-	def recompile(self, event=None):
-		try:
-			self.compiled = re.compile(self.regexdisplay.get(),
-						   self.getflags())
-			bg = self.promptdisplay['background']
-			self.statusdisplay.config(text="", background=bg)
-		except re.error, msg:
-			self.compiled = None
-			self.statusdisplay.config(
-				text="re.error: %s" % str(msg),
-				background="red")
-		self.reevaluate()
-	
-	def reevaluate(self, event=None):
-		try:
-			self.stringdisplay.tag_remove("hit", "1.0", END)
-		except TclError:
-			pass
-		try:
-			self.stringdisplay.tag_remove("hit0", "1.0", END)
-		except TclError:
-			pass
-		self.grouplist.delete(0, END)
-		if not self.compiled:
-			return
-		self.stringdisplay.tag_configure("hit", background="yellow")
-		self.stringdisplay.tag_configure("hit0", background="orange")
-		text = self.stringdisplay.get("1.0", END)
-		last = 0
-		nmatches = 0
-		while last <= len(text):
-			m = self.compiled.search(text, last)
-			if m is None:
-				break
-			first, last = m.span()
-			if last == first:
-				last = first+1
-				tag = "hit0"
-			else:
-				tag = "hit"
-			pfirst = "1.0 + %d chars" % first
-			plast = "1.0 + %d chars" % last
-			self.stringdisplay.tag_add(tag, pfirst, plast)
-			if nmatches == 0:
-				self.stringdisplay.yview_pickplace(pfirst)
-				groups = list(m.groups())
-				groups.insert(0, m.group())
-				for i in range(len(groups)):
-					g = "%2d: %s" % (i, `groups[i]`)
-					self.grouplist.insert(END, g)
-			nmatches = nmatches + 1
-			if self.showvar.get() == "first":
-				break
+        btags = self.regexdisplay.bindtags()
+        self.regexdisplay.bindtags(btags[1:] + btags[:1])
 
-		if nmatches == 0:
-			self.statusdisplay.config(text="(no match)",
-						  background="yellow")
-		else:
-			self.statusdisplay.config(text="")
+        btags = self.stringdisplay.bindtags()
+        self.stringdisplay.bindtags(btags[1:] + btags[:1])
+
+    def addoptions(self):
+        self.frames = []
+        self.boxes = []
+        self.vars = []
+        for name in ('IGNORECASE',
+                     'LOCALE',
+                     'MULTILINE',
+                     'DOTALL',
+                     'VERBOSE'):
+            if len(self.boxes) % 3 == 0:
+                frame = Frame(self.master)
+                frame.pack(fill=X)
+                self.frames.append(frame)
+            val = getattr(re, name)
+            var = IntVar()
+            box = Checkbutton(frame,
+                    variable=var, text=name,
+                    offvalue=0, onvalue=val,
+                    command=self.recompile)
+            box.pack(side=LEFT)
+            self.boxes.append(box)
+            self.vars.append(var)
+
+    def getflags(self):
+        flags = 0
+        for var in self.vars:
+            flags = flags | var.get()
+        flags = flags
+        return flags
+
+    def recompile(self, event=None):
+        try:
+            self.compiled = re.compile(self.regexdisplay.get(),
+                                       self.getflags())
+            bg = self.promptdisplay['background']
+            self.statusdisplay.config(text="", background=bg)
+        except re.error, msg:
+            self.compiled = None
+            self.statusdisplay.config(
+                    text="re.error: %s" % str(msg),
+                    background="red")
+        self.reevaluate()
+
+    def reevaluate(self, event=None):
+        try:
+            self.stringdisplay.tag_remove("hit", "1.0", END)
+        except TclError:
+            pass
+        try:
+            self.stringdisplay.tag_remove("hit0", "1.0", END)
+        except TclError:
+            pass
+        self.grouplist.delete(0, END)
+        if not self.compiled:
+            return
+        self.stringdisplay.tag_configure("hit", background="yellow")
+        self.stringdisplay.tag_configure("hit0", background="orange")
+        text = self.stringdisplay.get("1.0", END)
+        last = 0
+        nmatches = 0
+        while last <= len(text):
+            m = self.compiled.search(text, last)
+            if m is None:
+                break
+            first, last = m.span()
+            if last == first:
+                last = first+1
+                tag = "hit0"
+            else:
+                tag = "hit"
+            pfirst = "1.0 + %d chars" % first
+            plast = "1.0 + %d chars" % last
+            self.stringdisplay.tag_add(tag, pfirst, plast)
+            if nmatches == 0:
+                self.stringdisplay.yview_pickplace(pfirst)
+                groups = list(m.groups())
+                groups.insert(0, m.group())
+                for i in range(len(groups)):
+                    g = "%2d: %s" % (i, `groups[i]`)
+                    self.grouplist.insert(END, g)
+            nmatches = nmatches + 1
+            if self.showvar.get() == "first":
+                break
+
+        if nmatches == 0:
+            self.statusdisplay.config(text="(no match)",
+                                      background="yellow")
+        else:
+            self.statusdisplay.config(text="")
 
 
 # Main function, run when invoked as a stand-alone Python program.
diff --git a/Tools/scripts/suff.py b/Tools/scripts/suff.py
index 826e236..e085cd0 100755
--- a/Tools/scripts/suff.py
+++ b/Tools/scripts/suff.py
@@ -7,23 +7,23 @@
 import sys
 
 def main():
-	files = sys.argv[1:]
-	suffixes = {}
-	for file in files:
-		suff = getsuffix(file)
-		if not suffixes.has_key(suff):
-			suffixes[suff] = []
-		suffixes[suff].append(file)
-	keys = suffixes.keys()
-	keys.sort()
-	for suff in keys:
-		print `suff`, len(suffixes[suff])
+    files = sys.argv[1:]
+    suffixes = {}
+    for file in files:
+        suff = getsuffix(file)
+        if not suffixes.has_key(suff):
+            suffixes[suff] = []
+        suffixes[suff].append(file)
+    keys = suffixes.keys()
+    keys.sort()
+    for suff in keys:
+        print `suff`, len(suffixes[suff])
 
 def getsuffix(file):
-	suff = ''
-	for i in range(len(file)):
-		if file[i] == '.':
-			suff = file[i:]
-	return suff
+    suff = ''
+    for i in range(len(file)):
+        if file[i] == '.':
+            suff = file[i:]
+    return suff
 
 main()
diff --git a/Tools/scripts/sum5.py b/Tools/scripts/sum5.py
index 09bc686..6d3b965 100755
--- a/Tools/scripts/sum5.py
+++ b/Tools/scripts/sum5.py
@@ -25,73 +25,73 @@
 FileType = type(sys.stdin)
 
 def sum(*files):
-	sts = 0
-	if files and type(files[-1]) == FileType:
-		out, files = files[-1], files[:-1]
-	else:
-		out = sys.stdout
-	if len(files) == 1 and type(files[0]) != StringType:
-		files = files[0]
-	for f in files:
-		if type(f) == StringType:
-			if f == '-':
-				sts = printsumfp(sys.stdin, '<stdin>', out) or sts
-			else:
-				sts = printsum(f, out) or sts
-		else:
-			sts = sum(f, out) or sts
-	return sts
+    sts = 0
+    if files and type(files[-1]) == FileType:
+        out, files = files[-1], files[:-1]
+    else:
+        out = sys.stdout
+    if len(files) == 1 and type(files[0]) != StringType:
+        files = files[0]
+    for f in files:
+        if type(f) == StringType:
+            if f == '-':
+                sts = printsumfp(sys.stdin, '<stdin>', out) or sts
+            else:
+                sts = printsum(f, out) or sts
+        else:
+            sts = sum(f, out) or sts
+    return sts
 
 def printsum(file, out = sys.stdout):
-	try:
-		fp = open(file, rmode)
-	except IOError, msg:
-		sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
-		return 1
-	if fnfilter:
-		file = fnfilter(file)
-	sts = printsumfp(fp, file, out)
-	fp.close()
-	return sts
+    try:
+        fp = open(file, rmode)
+    except IOError, msg:
+        sys.stderr.write('%s: Can\'t open: %s\n' % (file, msg))
+        return 1
+    if fnfilter:
+        file = fnfilter(file)
+    sts = printsumfp(fp, file, out)
+    fp.close()
+    return sts
 
 def printsumfp(fp, file, out = sys.stdout):
-	m = md5.md5()
-	try:
-		while 1:
-			data = fp.read(bufsize)
-			if not data: break
-			m.update(data)
-	except IOError, msg:
-		sys.stderr.write('%s: I/O error: %s\n' % (file, msg))
-		return 1
-	out.write('%s %s\n' % (hexify(m.digest()), file))
-	return 0
+    m = md5.md5()
+    try:
+        while 1:
+            data = fp.read(bufsize)
+            if not data: break
+            m.update(data)
+    except IOError, msg:
+        sys.stderr.write('%s: I/O error: %s\n' % (file, msg))
+        return 1
+    out.write('%s %s\n' % (hexify(m.digest()), file))
+    return 0
 
 def hexify(s):
-	res = ''
-	for c in s:
-		res = res + '%02x' % ord(c)
-	return res
+    res = ''
+    for c in s:
+        res = res + '%02x' % ord(c)
+    return res
 
 def main(args = sys.argv[1:], out = sys.stdout):
-	global fnfilter, rmode, bufsize
-	import getopt
-	try:
-		opts, args = getopt.getopt(args, 'blts:')
-	except getopt.error, msg:
-		sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
-		return 2
-	for o, a in opts:
-		if o == '-l':
-			fnfilter = os.path.basename
-		if o == '-b':
-			rmode = 'rb'
-		if o == '-t':
-			rmode = 'r'
-		if o == '-s':
-			bufsize = string.atoi(a)
-	if not args: args = ['-']
-	return sum(args, out)
+    global fnfilter, rmode, bufsize
+    import getopt
+    try:
+        opts, args = getopt.getopt(args, 'blts:')
+    except getopt.error, msg:
+        sys.stderr.write('%s: %s\n%s' % (sys.argv[0], msg, usage))
+        return 2
+    for o, a in opts:
+        if o == '-l':
+            fnfilter = os.path.basename
+        if o == '-b':
+            rmode = 'rb'
+        if o == '-t':
+            rmode = 'r'
+        if o == '-s':
+            bufsize = string.atoi(a)
+    if not args: args = ['-']
+    return sum(args, out)
 
 if __name__ == '__main__' or __name__ == sys.argv[0]:
-	sys.exit(main(sys.argv[1:], sys.stdout))
+    sys.exit(main(sys.argv[1:], sys.stdout))
diff --git a/Tools/scripts/texi2html.py b/Tools/scripts/texi2html.py
index 8c747aa..dfe96db 100755
--- a/Tools/scripts/texi2html.py
+++ b/Tools/scripts/texi2html.py
@@ -46,13 +46,13 @@
 kwprog = re.compile('@[a-z]+')                    # Keyword (embedded, usually
                                                   # with {} args)
 spprog = re.compile('[\n@{}&<>]')                 # Special characters in
-                                                  # running text 
+                                                  # running text
                                                   #
                                                   # menu item (Yuck!)
 miprog = re.compile('^\* ([^:]*):(:|[ \t]*([^\t,\n.]+)([^ \t\n]*))[ \t\n]*')
 
 
-
+
 class HTMLNode:
     """Some of the parser's functionality is separated into this class.
 
@@ -1568,7 +1568,7 @@
     print_headers = 0
     cont = 0
     html3 = 0
-   
+
     while sys.argv[1:2] == ['-d']:
         debugging = debugging + 1
         del sys.argv[1:2]
diff --git a/Tools/scripts/trace.py b/Tools/scripts/trace.py
index d8016b0..78715e0 100644
--- a/Tools/scripts/trace.py
+++ b/Tools/scripts/trace.py
@@ -261,7 +261,7 @@
     # The only way I know to find line numbers is to look for the
     # SET_LINENO instructions.  Isn't there some way to get it from
     # the AST?
-    
+
     return _find_LINENO(code)
 
 ### XXX because os.path.commonprefix seems broken by my way of thinking...
@@ -279,7 +279,7 @@
                 if i == 0: return ''
                 break
     return os.sep.join(prefix)
-    
+
 def create_results_log(results, dirname = ".", show_missing = 1,
                        save_counts = 0):
     import re
@@ -297,7 +297,7 @@
         results.update(results.__class__(counts, modules))
     except IOError:
         pass
-    
+
     # there are many places where this is insufficient, like a blank
     # line embedded in a multiline string.
     blank = re.compile(r'^\s*(#.*)?$')
@@ -307,7 +307,7 @@
     tfdir = tempfile.gettempdir()
     for key in per_file.keys():
         filename = key
-        
+
         # skip some "files" we don't care about...
         if filename == "<string>":
             continue
@@ -484,7 +484,7 @@
                     print '%s(%d): ??' % (modulename, lineno)
 
         return self.trace
-    
+
 
 def _err_exit(msg):
     sys.stderr.write("%s: %s\n" % (sys.argv[0], msg))
diff --git a/Tools/scripts/treesync.py b/Tools/scripts/treesync.py
index ded0b17..96beba0 100755
--- a/Tools/scripts/treesync.py
+++ b/Tools/scripts/treesync.py
@@ -17,7 +17,7 @@
                 copy the slave to the master
         else (the master is newer):
             copy the master to the slave
-    
+
     normalizing the slave means replacing CRLF with LF when the master
     doesn't use CRLF
 
@@ -59,7 +59,7 @@
         print "slavedir masterdir"
         return
     process(slave, master)
-    
+
 def process(slave, master):
     cvsdir = os.path.join(master, "CVS")
     if not os.path.isdir(cvsdir):
diff --git a/Tools/scripts/which.py b/Tools/scripts/which.py
index a05d919..96e242c 100755
--- a/Tools/scripts/which.py
+++ b/Tools/scripts/which.py
@@ -11,7 +11,7 @@
 from stat import *
 
 def msg(str):
-	sys.stderr.write(str + '\n')
+    sys.stderr.write(str + '\n')
 
 pathlist = string.splitfields(os.environ['PATH'], ':')
 
@@ -19,38 +19,38 @@
 longlist = ''
 
 if sys.argv[1:] and sys.argv[1][:2] == '-l':
-	longlist = sys.argv[1]
-	del sys.argv[1]
+    longlist = sys.argv[1]
+    del sys.argv[1]
 
 for prog in sys.argv[1:]:
-	ident = ()
-	for dir in pathlist:
-		file = os.path.join(dir, prog)
-		try:
-			st = os.stat(file)
-		except os.error:
-			continue
-		if not S_ISREG(st[ST_MODE]):
-			msg(file + ': not a disk file')
-		else:
-			mode = S_IMODE(st[ST_MODE])
-			if mode & 0111:
-				if not ident:
-					print file
-					ident = st[:3]
-				else:
-					if st[:3] == ident:
-						s = 'same as: '
-					else:
-						s = 'also: '
-					msg(s + file)
-			else:
-				msg(file + ': not executable')
-		if longlist:
-			sts = os.system('ls ' + longlist + ' ' + file)
-			if sts: msg('"ls -l" exit status: ' + `sts`)
-	if not ident:
-		msg(prog + ': not found')
-		sts = 1
+    ident = ()
+    for dir in pathlist:
+        file = os.path.join(dir, prog)
+        try:
+            st = os.stat(file)
+        except os.error:
+            continue
+        if not S_ISREG(st[ST_MODE]):
+            msg(file + ': not a disk file')
+        else:
+            mode = S_IMODE(st[ST_MODE])
+            if mode & 0111:
+                if not ident:
+                    print file
+                    ident = st[:3]
+                else:
+                    if st[:3] == ident:
+                        s = 'same as: '
+                    else:
+                        s = 'also: '
+                    msg(s + file)
+            else:
+                msg(file + ': not executable')
+        if longlist:
+            sts = os.system('ls ' + longlist + ' ' + file)
+            if sts: msg('"ls -l" exit status: ' + `sts`)
+    if not ident:
+        msg(prog + ': not found')
+        sts = 1
 
 sys.exit(sts)
diff --git a/Tools/scripts/xxci.py b/Tools/scripts/xxci.py
index d8608a0..2567bc5 100755
--- a/Tools/scripts/xxci.py
+++ b/Tools/scripts/xxci.py
@@ -16,102 +16,102 @@
 MAXSIZE = 200*1024 # Files this big must be binaries and are skipped.
 
 def getargs():
-	args = sys.argv[1:]
-	if args:
-		return args
-	print 'No arguments, checking almost *, in "ls -t" order'
-	list = []
-	for file in os.listdir(os.curdir):
-		if not skipfile(file):
-			list.append((getmtime(file), file))
-	list.sort()
-	if not list:
-		print 'Nothing to do -- exit 1'
-		sys.exit(1)
-	list.sort()
-	list.reverse()
-	for mtime, file in list: args.append(file)
-	return args
+    args = sys.argv[1:]
+    if args:
+        return args
+    print 'No arguments, checking almost *, in "ls -t" order'
+    list = []
+    for file in os.listdir(os.curdir):
+        if not skipfile(file):
+            list.append((getmtime(file), file))
+    list.sort()
+    if not list:
+        print 'Nothing to do -- exit 1'
+        sys.exit(1)
+    list.sort()
+    list.reverse()
+    for mtime, file in list: args.append(file)
+    return args
 
 def getmtime(file):
-	try:
-		st = os.stat(file)
-		return st[ST_MTIME]
-	except os.error:
-		return -1
+    try:
+        st = os.stat(file)
+        return st[ST_MTIME]
+    except os.error:
+        return -1
 
 badnames = ['tags', 'TAGS', 'xyzzy', 'nohup.out', 'core']
 badprefixes = ['.', ',', '@', '#', 'o.']
 badsuffixes = \
-	['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
-	 '.pyc', '.fdc', '.rgb', '.elc', ',v']
+        ['~', '.a', '.o', '.old', '.bak', '.orig', '.new', '.prev', '.not', \
+         '.pyc', '.fdc', '.rgb', '.elc', ',v']
 ignore = []
 
 def setup():
-	ignore[:] = badnames
-	for p in badprefixes:
-		ignore.append(p + '*')
-	for p in badsuffixes:
-		ignore.append('*' + p)
-	try:
-		f = open('.xxcign', 'r')
-	except IOError:
-		return
-	ignore[:] = ignore + string.split(f.read())
+    ignore[:] = badnames
+    for p in badprefixes:
+        ignore.append(p + '*')
+    for p in badsuffixes:
+        ignore.append('*' + p)
+    try:
+        f = open('.xxcign', 'r')
+    except IOError:
+        return
+    ignore[:] = ignore + string.split(f.read())
 
 def skipfile(file):
-	for p in ignore:
-		if fnmatch.fnmatch(file, p): return 1
-	try:
-		st = os.lstat(file)
-	except os.error:
-		return 1 # Doesn't exist -- skip it
-	# Skip non-plain files.
-	if not S_ISREG(st[ST_MODE]): return 1
-	# Skip huge files -- probably binaries.
-	if st[ST_SIZE] >= MAXSIZE: return 1
-	# Skip executables
-	try:
-		data = open(file, 'r').read(len(EXECMAGIC))
-		if data == EXECMAGIC: return 1
-	except:
-		pass
-	return 0
+    for p in ignore:
+        if fnmatch.fnmatch(file, p): return 1
+    try:
+        st = os.lstat(file)
+    except os.error:
+        return 1 # Doesn't exist -- skip it
+    # Skip non-plain files.
+    if not S_ISREG(st[ST_MODE]): return 1
+    # Skip huge files -- probably binaries.
+    if st[ST_SIZE] >= MAXSIZE: return 1
+    # Skip executables
+    try:
+        data = open(file, 'r').read(len(EXECMAGIC))
+        if data == EXECMAGIC: return 1
+    except:
+        pass
+    return 0
 
 def badprefix(file):
-	for bad in badprefixes:
-		if file[:len(bad)] == bad: return 1
-	return 0
+    for bad in badprefixes:
+        if file[:len(bad)] == bad: return 1
+    return 0
 
 def badsuffix(file):
-	for bad in badsuffixes:
-		if file[-len(bad):] == bad: return 1
-	return 0
+    for bad in badsuffixes:
+        if file[-len(bad):] == bad: return 1
+    return 0
 
 def go(args):
-	for file in args:
-		print file + ':'
-		if differing(file):
-			showdiffs(file)
-			if askyesno('Check in ' + file + ' ? '):
-				sts = os.system('rcs -l ' + file) # ignored
-				sts = os.system('ci -l ' + file)
+    for file in args:
+        print file + ':'
+        if differing(file):
+            showdiffs(file)
+            if askyesno('Check in ' + file + ' ? '):
+                sts = os.system('rcs -l ' + file) # ignored
+                sts = os.system('ci -l ' + file)
 
 def differing(file):
-	cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
-	sts = os.system(cmd)
-	return sts != 0
+    cmd = 'co -p ' + file + ' 2>/dev/null | cmp -s - ' + file
+    sts = os.system(cmd)
+    return sts != 0
 
 def showdiffs(file):
-	cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
-	sts = os.system(cmd)
+    cmd = 'rcsdiff ' + file + ' 2>&1 | ${PAGER-more}'
+    sts = os.system(cmd)
 
 def askyesno(prompt):
-	s = raw_input(prompt)
-	return s in ['y', 'yes']
+    s = raw_input(prompt)
+    return s in ['y', 'yes']
 
 try:
-	setup()
-	go(getargs())
+    setup()
+    go(getargs())
 except KeyboardInterrupt:
-	print '[Intr]'
+    print '[Intr]'