New dialog routines (Fred Lundh)
diff --git a/Lib/tkinter/tkFileDialog.py b/Lib/tkinter/tkFileDialog.py
new file mode 100644
index 0000000..e0d5ae5
--- /dev/null
+++ b/Lib/tkinter/tkFileDialog.py
@@ -0,0 +1,106 @@
+#
+# Instant Python
+# $Id$
+#
+# tk common file dialogues
+#
+# this module provides interfaces to the native file dialogues
+# available in Tk 4.2 and newer.
+#
+# written by Fredrik Lundh, May 1997.
+#
+
+#
+# options (all have default values):
+#
+# - defaultextension: added to filename if not explicitly given
+#
+# - filetypes: sequence of (label, pattern) tuples.  the same pattern
+#   may occur with several patterns.  use "*" as pattern to indicate
+#   all files.
+#
+# - initialdir: initial directory.  preserved by dialog instance.
+#
+# - initialfile: initial file (ignored by the open dialog).  preserved
+#   by dialog instance.
+#
+# - parent: which window to place the dialog on top of
+#
+# - title: dialog title
+#
+
+from tkCommonDialog import Dialog
+
+class _Dialog(Dialog):
+
+    def _fixoptions(self):
+        try:
+            # make sure "filetypes" is a tuple
+            self.options["filetypes"] = tuple(self.options["filetypes"])
+        except KeyError:
+            pass
+
+    def _fixresult(self, widget, result):
+	if result:
+	    # keep directory and filename until next time
+            import os
+	    path, file = os.path.split(result)
+	    self.options["initialdir"] = path
+	    self.options["initialfile"] = file
+        self.filename = result # compatibility
+	return result
+
+
+#
+# file dialogs
+
+class Open(_Dialog):
+    "Ask for a filename to open"
+
+    command = "tk_getOpenFile"
+
+class SaveAs(_Dialog):
+    "Ask for a filename to save as"
+
+    command = "tk_getSaveFile"
+
+
+#
+# convenience stuff
+
+def askopenfilename(**options):
+    "Ask for a filename to open"
+
+    return apply(Open, (), options).show()
+
+def asksaveasfilename(**options):
+    "Ask for a filename to save as"
+
+    return apply(SaveAs, (), options).show()
+
+# FIXME: are the following two perhaps a bit too convenient?
+
+def askopenfile(mode = "r", **options):
+    "Ask for a filename to open, and returned the opened file"
+
+    filename = apply(Open, (), options).show()
+    if filename:
+        return open(filename, mode)
+    return None
+
+def asksaveasfile(mode = "w", **options):
+    "Ask for a filename to save as, and returned the opened file"
+
+    filename = apply(SaveAs, (), options).show()
+    if filename:
+        return open(filename, mode)
+    return None
+
+
+# --------------------------------------------------------------------
+# test stuff
+
+if __name__ == "__main__":
+
+    print "open", askopenfilename(filetypes=[("all filez", "*")])
+    print "saveas", asksaveasfilename()