# *NOT* by Sam Bayer: reindented to use 4 spaces like the rest here,
# and removed trailing whitespace.
diff --git a/Tools/webchecker/wsgui.py b/Tools/webchecker/wsgui.py
index be60650..1bf5f73 100755
--- a/Tools/webchecker/wsgui.py
+++ b/Tools/webchecker/wsgui.py
@@ -14,231 +14,230 @@
 import os
 import threading
 import Queue
-import time		
+import time
 
 VERBOSE = 2
 
 
 try:
-	class Canceled(Exception):
-		"Exception used to cancel run()."
+    class Canceled(Exception):
+        "Exception used to cancel run()."
 except:
-	Canceled = __name__ + ".Canceled"
+    Canceled = __name__ + ".Canceled"
 
 
 class SuckerThread(websucker.Sucker):
 
-	stopit = 0
-	savedir = None
-	rootdir = None
+    stopit = 0
+    savedir = None
+    rootdir = None
 
-	def __init__(self, msgq):
-		self.msgq = msgq
-		websucker.Sucker.__init__(self)
-		self.setflags(verbose=VERBOSE)
-		self.urlopener.addheaders = [
-			('User-agent', 'websucker/%s' % websucker.__version__),
-		]
-	
-	def message(self, format, *args):
-		if args:
-			format = format%args
-		##print format
-		self.msgq.put(format)
+    def __init__(self, msgq):
+        self.msgq = msgq
+        websucker.Sucker.__init__(self)
+        self.setflags(verbose=VERBOSE)
+        self.urlopener.addheaders = [
+            ('User-agent', 'websucker/%s' % websucker.__version__),
+        ]
 
-	def run1(self, url):
-		try:
-			try:
-				self.reset()
-				self.addroot(url)
-				self.run()
-			except Canceled:
-				self.message("[canceled]")
-			else:
-				self.message("[done]")
-		finally:
-			self.msgq.put(None)
+    def message(self, format, *args):
+        if args:
+            format = format%args
+        ##print format
+        self.msgq.put(format)
 
-	def savefile(self, text, path):
-		if self.stopit:
-			raise Canceled
-		websucker.Sucker.savefile(self, text, path)
-	
-	def getpage(self, url):
-		if self.stopit:
-			raise Canceled
-		return websucker.Sucker.getpage(self, url)
-	
-	def savefilename(self, url):
-		path = websucker.Sucker.savefilename(self, url)
-		if self.savedir:
-			n = len(self.rootdir)
-			if path[:n] == self.rootdir:
-				path = path[n:]
-				while path[:1] == os.sep:
-					path = path[1:]
-				path = os.path.join(self.savedir, path)
-		return path
+    def run1(self, url):
+        try:
+            try:
+                self.reset()
+                self.addroot(url)
+                self.run()
+            except Canceled:
+                self.message("[canceled]")
+            else:
+                self.message("[done]")
+        finally:
+            self.msgq.put(None)
 
-	def XXXaddrobot(self, *args):
-		pass
+    def savefile(self, text, path):
+        if self.stopit:
+            raise Canceled
+        websucker.Sucker.savefile(self, text, path)
 
-	def XXXisallowed(self, *args):
-		return 1
+    def getpage(self, url):
+        if self.stopit:
+            raise Canceled
+        return websucker.Sucker.getpage(self, url)
 
+    def savefilename(self, url):
+        path = websucker.Sucker.savefilename(self, url)
+        if self.savedir:
+            n = len(self.rootdir)
+            if path[:n] == self.rootdir:
+                path = path[n:]
+                while path[:1] == os.sep:
+                    path = path[1:]
+                path = os.path.join(self.savedir, path)
+        return path
+
+    def XXXaddrobot(self, *args):
+        pass
+
+    def XXXisallowed(self, *args):
+        return 1
 
 
 class App:
 
-	sucker = None
-	msgq = None
+    sucker = None
+    msgq = None
 
-	def __init__(self, top):
-		self.top = top
-		top.columnconfigure(99, weight=1)
-		self.url_label = Label(top, text="URL:")
-		self.url_label.grid(row=0, column=0, sticky='e')
-		self.url_entry = Entry(top, width=60, exportselection=0)
-		self.url_entry.grid(row=0, column=1, sticky='we',
-				    columnspan=99)
-		self.url_entry.focus_set()
-		self.url_entry.bind("<Key-Return>", self.go)
-		self.dir_label = Label(top, text="Directory:")
-		self.dir_label.grid(row=1, column=0, sticky='e')
-		self.dir_entry = Entry(top)
-		self.dir_entry.grid(row=1, column=1, sticky='we',
-				    columnspan=99)
-		self.go_button = Button(top, text="Go", command=self.go)
-		self.go_button.grid(row=2, column=1, sticky='w')
-		self.cancel_button = Button(top, text="Cancel",
-					    command=self.cancel,
-		                            state=DISABLED)
-		self.cancel_button.grid(row=2, column=2, sticky='w')
-		self.auto_button = Button(top, text="Paste+Go",
-					  command=self.auto)
-		self.auto_button.grid(row=2, column=3, sticky='w')
-		self.status_label = Label(top, text="[idle]")
-		self.status_label.grid(row=2, column=4, sticky='w')
-		self.top.update_idletasks()
-		self.top.grid_propagate(0)
+    def __init__(self, top):
+        self.top = top
+        top.columnconfigure(99, weight=1)
+        self.url_label = Label(top, text="URL:")
+        self.url_label.grid(row=0, column=0, sticky='e')
+        self.url_entry = Entry(top, width=60, exportselection=0)
+        self.url_entry.grid(row=0, column=1, sticky='we',
+                    columnspan=99)
+        self.url_entry.focus_set()
+        self.url_entry.bind("<Key-Return>", self.go)
+        self.dir_label = Label(top, text="Directory:")
+        self.dir_label.grid(row=1, column=0, sticky='e')
+        self.dir_entry = Entry(top)
+        self.dir_entry.grid(row=1, column=1, sticky='we',
+                    columnspan=99)
+        self.go_button = Button(top, text="Go", command=self.go)
+        self.go_button.grid(row=2, column=1, sticky='w')
+        self.cancel_button = Button(top, text="Cancel",
+                        command=self.cancel,
+                                    state=DISABLED)
+        self.cancel_button.grid(row=2, column=2, sticky='w')
+        self.auto_button = Button(top, text="Paste+Go",
+                      command=self.auto)
+        self.auto_button.grid(row=2, column=3, sticky='w')
+        self.status_label = Label(top, text="[idle]")
+        self.status_label.grid(row=2, column=4, sticky='w')
+        self.top.update_idletasks()
+        self.top.grid_propagate(0)
 
-	def message(self, text, *args):
-		if args:
-			text = text % args
-		self.status_label.config(text=text)
+    def message(self, text, *args):
+        if args:
+            text = text % args
+        self.status_label.config(text=text)
 
-	def check_msgq(self):
-		while not self.msgq.empty():
-			msg = self.msgq.get()
-			if msg is None:
-				self.go_button.configure(state=NORMAL)
-				self.auto_button.configure(state=NORMAL)
-				self.cancel_button.configure(state=DISABLED)
-				if self.sucker:
-					self.sucker.stopit = 0
-				self.top.bell()
-			else:
-				self.message(msg)
-		self.top.after(100, self.check_msgq)
+    def check_msgq(self):
+        while not self.msgq.empty():
+            msg = self.msgq.get()
+            if msg is None:
+                self.go_button.configure(state=NORMAL)
+                self.auto_button.configure(state=NORMAL)
+                self.cancel_button.configure(state=DISABLED)
+                if self.sucker:
+                    self.sucker.stopit = 0
+                self.top.bell()
+            else:
+                self.message(msg)
+        self.top.after(100, self.check_msgq)
 
-	def go(self, event=None):
-		if not self.msgq:
-			self.msgq = Queue.Queue(0)
-			self.check_msgq()
-		if not self.sucker:
-			self.sucker = SuckerThread(self.msgq)
-		if self.sucker.stopit:
-			return
-		self.url_entry.selection_range(0, END)
-		url = self.url_entry.get()
-		url = string.strip(url)
-		if not url:
-			self.top.bell()
-			self.message("[Error: No URL entered]")
-			return
-		self.rooturl = url
-		dir = string.strip(self.dir_entry.get())
-		if not dir:
-			self.sucker.savedir = None
-		else:
-			self.sucker.savedir = dir
-			self.sucker.rootdir = os.path.dirname(
-				websucker.Sucker.savefilename(self, url))
-		self.go_button.configure(state=DISABLED)
-		self.auto_button.configure(state=DISABLED)
-		self.cancel_button.configure(state=NORMAL)
-		self.message( '[running...]')
-		self.sucker.stopit = 0
-		t = threading.Thread(target=self.sucker.run1, args=(url,))
-		t.start()
-	
-	def cancel(self):
-		if self.sucker:
-			self.sucker.stopit = 1
-		self.message("[canceling...]")
-	
-	def auto(self):
-		tries = ['PRIMARY', 'CLIPBOARD']
-		text = ""
-		for t in tries:
-			try:
-				text = self.top.selection_get(selection=t)
-			except TclError:
-				continue
-			text = string.strip(text)
-			if text:
-				break
-		if not text:
-			self.top.bell()
-			self.message("[Error: clipboard is empty]")
-			return
-		self.url_entry.delete(0, END)
-		self.url_entry.insert(0, text)
-		self.go()
+    def go(self, event=None):
+        if not self.msgq:
+            self.msgq = Queue.Queue(0)
+            self.check_msgq()
+        if not self.sucker:
+            self.sucker = SuckerThread(self.msgq)
+        if self.sucker.stopit:
+            return
+        self.url_entry.selection_range(0, END)
+        url = self.url_entry.get()
+        url = string.strip(url)
+        if not url:
+            self.top.bell()
+            self.message("[Error: No URL entered]")
+            return
+        self.rooturl = url
+        dir = string.strip(self.dir_entry.get())
+        if not dir:
+            self.sucker.savedir = None
+        else:
+            self.sucker.savedir = dir
+            self.sucker.rootdir = os.path.dirname(
+                websucker.Sucker.savefilename(self, url))
+        self.go_button.configure(state=DISABLED)
+        self.auto_button.configure(state=DISABLED)
+        self.cancel_button.configure(state=NORMAL)
+        self.message( '[running...]')
+        self.sucker.stopit = 0
+        t = threading.Thread(target=self.sucker.run1, args=(url,))
+        t.start()
+
+    def cancel(self):
+        if self.sucker:
+            self.sucker.stopit = 1
+        self.message("[canceling...]")
+
+    def auto(self):
+        tries = ['PRIMARY', 'CLIPBOARD']
+        text = ""
+        for t in tries:
+            try:
+                text = self.top.selection_get(selection=t)
+            except TclError:
+                continue
+            text = string.strip(text)
+            if text:
+                break
+        if not text:
+            self.top.bell()
+            self.message("[Error: clipboard is empty]")
+            return
+        self.url_entry.delete(0, END)
+        self.url_entry.insert(0, text)
+        self.go()
 
 
 class AppArray:
 
-	def __init__(self, top=None):
-		if not top:
-			top = Tk()
-			top.title("websucker GUI")
-			top.iconname("wsgui")
-			top.wm_protocol('WM_DELETE_WINDOW', self.exit)
-		self.top = top
-		self.appframe = Frame(self.top)
-		self.appframe.pack(fill='both')
-		self.applist = []
-		self.exit_button = Button(top, text="Exit", command=self.exit)
-		self.exit_button.pack(side=RIGHT)
-		self.new_button = Button(top, text="New", command=self.addsucker)
-		self.new_button.pack(side=LEFT)
-		self.addsucker()
-		##self.applist[0].url_entry.insert(END, "http://www.python.org/doc/essays/")
+    def __init__(self, top=None):
+        if not top:
+            top = Tk()
+            top.title("websucker GUI")
+            top.iconname("wsgui")
+            top.wm_protocol('WM_DELETE_WINDOW', self.exit)
+        self.top = top
+        self.appframe = Frame(self.top)
+        self.appframe.pack(fill='both')
+        self.applist = []
+        self.exit_button = Button(top, text="Exit", command=self.exit)
+        self.exit_button.pack(side=RIGHT)
+        self.new_button = Button(top, text="New", command=self.addsucker)
+        self.new_button.pack(side=LEFT)
+        self.addsucker()
+        ##self.applist[0].url_entry.insert(END, "http://www.python.org/doc/essays/")
 
-	def addsucker(self):
-		self.top.geometry("")
-		frame = Frame(self.appframe, borderwidth=2, relief=GROOVE)
-		frame.pack(fill='x')
-		app = App(frame)
-		self.applist.append(app)
+    def addsucker(self):
+        self.top.geometry("")
+        frame = Frame(self.appframe, borderwidth=2, relief=GROOVE)
+        frame.pack(fill='x')
+        app = App(frame)
+        self.applist.append(app)
 
-	done = 0
+    done = 0
 
-	def mainloop(self):
-		while not self.done:
-			time.sleep(0.1)
-			self.top.update()
-	
-	def exit(self):
-		for app in self.applist:
-			app.cancel()
-			app.message("[exiting...]")
-		self.done = 1
+    def mainloop(self):
+        while not self.done:
+            time.sleep(0.1)
+            self.top.update()
+
+    def exit(self):
+        for app in self.applist:
+            app.cancel()
+            app.message("[exiting...]")
+        self.done = 1
 
 
 def main():
-	AppArray().mainloop()
+    AppArray().mainloop()
 
 if __name__ == '__main__':
     main()