symbian-qemu-0.9.1-12/python-2.6.1/Lib/plat-mac/macresource.py
changeset 1 2fb8b9db1c86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/symbian-qemu-0.9.1-12/python-2.6.1/Lib/plat-mac/macresource.py	Fri Jul 31 15:01:17 2009 +0100
@@ -0,0 +1,149 @@
+"""macresource - Locate and open the resources needed for a script."""
+
+from warnings import warnpy3k
+warnpy3k("In 3.x, the macresource module is removed.", stacklevel=2)
+
+from Carbon import Res
+import os
+import sys
+import MacOS
+import macostools
+
+class ArgumentError(TypeError): pass
+class ResourceFileNotFoundError(ImportError): pass
+
+def need(restype, resid, filename=None, modname=None):
+    """Open a resource file, if needed. restype and resid
+    are required parameters, and identify the resource for which to test. If it
+    is available we are done. If it is not available we look for a file filename
+    (default: modname with .rsrc appended) either in the same folder as
+    where modname was loaded from, or otherwise across sys.path.
+
+    Returns the refno of the resource file opened (or None)"""
+
+    if modname is None and filename is None:
+        raise ArgumentError, "Either filename or modname argument (or both) must be given"
+
+    if type(resid) is type(1):
+        try:
+            h = Res.GetResource(restype, resid)
+        except Res.Error:
+            pass
+        else:
+            return None
+    else:
+        try:
+            h = Res.GetNamedResource(restype, resid)
+        except Res.Error:
+            pass
+        else:
+            return None
+
+    # Construct a filename if we don't have one
+    if not filename:
+        if '.' in modname:
+            filename = modname.split('.')[-1] + '.rsrc'
+        else:
+            filename = modname + '.rsrc'
+
+    # Now create a list of folders to search
+    searchdirs = []
+    if modname == '__main__':
+        # If we're main we look in the current directory
+        searchdirs = [os.curdir]
+    if sys.modules.has_key(modname):
+        mod = sys.modules[modname]
+        if hasattr(mod, '__file__'):
+            searchdirs = [os.path.dirname(mod.__file__)]
+    searchdirs.extend(sys.path)
+
+    # And look for the file
+    for dir in searchdirs:
+        pathname = os.path.join(dir, filename)
+        if os.path.exists(pathname):
+            break
+    else:
+        raise ResourceFileNotFoundError, filename
+
+    refno = open_pathname(pathname)
+
+    # And check that the resource exists now
+    if type(resid) is type(1):
+        h = Res.GetResource(restype, resid)
+    else:
+        h = Res.GetNamedResource(restype, resid)
+    return refno
+
+def open_pathname(pathname, verbose=0):
+    """Open a resource file given by pathname, possibly decoding an
+    AppleSingle file"""
+    try:
+        refno = Res.FSpOpenResFile(pathname, 1)
+    except Res.Error, arg:
+        if arg[0] in (-37, -39):
+            # No resource fork. We may be on OSX, and this may be either
+            # a data-fork based resource file or a AppleSingle file
+            # from the CVS repository.
+            try:
+                refno = Res.FSOpenResourceFile(pathname, u'', 1)
+            except Res.Error, arg:
+                if arg[0] != -199:
+                    # -199 is "bad resource map"
+                    raise
+            else:
+                return refno
+            # Finally try decoding an AppleSingle file
+            pathname = _decode(pathname, verbose=verbose)
+            refno = Res.FSOpenResourceFile(pathname, u'', 1)
+        else:
+            raise
+    return refno
+
+def resource_pathname(pathname, verbose=0):
+    """Return the pathname for a resource file (either DF or RF based).
+    If the pathname given already refers to such a file simply return it,
+    otherwise first decode it."""
+    try:
+        refno = Res.FSpOpenResFile(pathname, 1)
+        Res.CloseResFile(refno)
+    except Res.Error, arg:
+        if arg[0] in (-37, -39):
+            # No resource fork. We may be on OSX, and this may be either
+            # a data-fork based resource file or a AppleSingle file
+            # from the CVS repository.
+            try:
+                refno = Res.FSOpenResourceFile(pathname, u'', 1)
+            except Res.Error, arg:
+                if arg[0] != -199:
+                    # -199 is "bad resource map"
+                    raise
+            else:
+                return refno
+            # Finally try decoding an AppleSingle file
+            pathname = _decode(pathname, verbose=verbose)
+        else:
+            raise
+    return pathname
+
+def open_error_resource():
+    """Open the resource file containing the error code to error message
+    mapping."""
+    need('Estr', 1, filename="errors.rsrc", modname=__name__)
+
+def _decode(pathname, verbose=0):
+    # Decode an AppleSingle resource file, return the new pathname.
+    newpathname = pathname + '.df.rsrc'
+    if os.path.exists(newpathname) and \
+        os.stat(newpathname).st_mtime >= os.stat(pathname).st_mtime:
+        return newpathname
+    if hasattr(os, 'access') and not \
+        os.access(os.path.dirname(pathname), os.W_OK|os.X_OK):
+        # The destination directory isn't writeable. Create the file in
+        # a temporary directory
+        import tempfile
+        fd, newpathname = tempfile.mkstemp(".rsrc")
+    if verbose:
+        print 'Decoding', pathname, 'to', newpathname
+    import applesingle
+    applesingle.decode(pathname, newpathname, resonly=1)
+    return newpathname