Add back files that were accidentally deleted on the trunk rather than
on the idlefork-merge-branch as intended.
diff --git a/Tools/idle/IdleConf.py b/Tools/idle/IdleConf.py
new file mode 100644
index 0000000..8eaa8e0
--- /dev/null
+++ b/Tools/idle/IdleConf.py
@@ -0,0 +1,113 @@
+"""Provides access to configuration information"""
+
+import os
+import sys
+from ConfigParser import ConfigParser, NoOptionError, NoSectionError
+
+class IdleConfParser(ConfigParser):
+
+    # these conf sections do not define extensions!
+    builtin_sections = {}
+    for section in ('EditorWindow', 'Colors'):
+        builtin_sections[section] = section
+
+    def getcolor(self, sec, name):
+        """Return a dictionary with foreground and background colors
+
+        The return value is appropriate for passing to Tkinter in, e.g.,
+        a tag_config call.
+        """
+        fore = self.getdef(sec, name + "-foreground")
+        back = self.getdef(sec, name + "-background")
+        return {"foreground": fore,
+                "background": back}
+
+    def getdef(self, sec, options, raw=0, vars=None, default=None):
+        """Get an option value for given section or return default"""
+        try:
+            return self.get(sec, options, raw, vars)
+        except (NoSectionError, NoOptionError):
+            return default
+
+    def getsection(self, section):
+        """Return a SectionConfigParser object"""
+        return SectionConfigParser(section, self)
+
+    def getextensions(self):
+        exts = []
+        for sec in self.sections():
+            if self.builtin_sections.has_key(sec):
+                continue
+            # enable is a bool, but it may not be defined
+            if self.getdef(sec, 'enable') != '0':
+                exts.append(sec)
+        return exts
+
+    def reload(self):
+        global idleconf
+        idleconf = IdleConfParser()
+        load(_dir) # _dir is a global holding the last directory loaded
+
+class SectionConfigParser:
+    """A ConfigParser object specialized for one section
+
+    This class has all the get methods that a regular ConfigParser does,
+    but without requiring a section argument.
+    """
+    def __init__(self, section, config):
+        self.section = section
+        self.config = config
+
+    def options(self):
+        return self.config.options(self.section)
+
+    def get(self, options, raw=0, vars=None):
+        return self.config.get(self.section, options, raw, vars)
+
+    def getdef(self, options, raw=0, vars=None, default=None):
+        return self.config.getdef(self.section, options, raw, vars, default)
+
+    def getint(self, option):
+        return self.config.getint(self.section, option)
+
+    def getfloat(self, option):
+        return self.config.getint(self.section, option)
+
+    def getboolean(self, option):
+        return self.config.getint(self.section, option)
+
+    def getcolor(self, option):
+        return self.config.getcolor(self.section, option)
+
+def load(dir):
+    """Load IDLE configuration files based on IDLE install in dir
+
+    Attempts to load two config files:
+    dir/config.txt
+    dir/config-[win/mac/unix].txt
+    dir/config-%(sys.platform)s.txt
+    ~/.idle
+    """
+    global _dir
+    _dir = dir
+
+    if sys.platform[:3] == 'win':
+        genplatfile = os.path.join(dir, "config-win.txt")
+    # XXX don't know what the platform string is on a Mac
+    elif sys.platform[:3] == 'mac':
+        genplatfile = os.path.join(dir, "config-mac.txt")
+    else:
+        genplatfile = os.path.join(dir, "config-unix.txt")
+
+    platfile = os.path.join(dir, "config-%s.txt" % sys.platform)
+
+    try:
+        homedir = os.environ['HOME']
+    except KeyError:
+        homedir = os.getcwd()
+
+    idleconf.read((os.path.join(dir, "config.txt"), genplatfile, platfile,
+                   os.path.join(homedir, ".idle")))
+
+idleconf = IdleConfParser()
+load(os.path.dirname(__file__))