]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Backport of 1.8 and 1.9:
authorJack Jansen <jack.jansen@cwi.nl>
Wed, 27 Feb 2002 23:16:52 +0000 (23:16 +0000)
committerJack Jansen <jack.jansen@cwi.nl>
Wed, 27 Feb 2002 23:16:52 +0000 (23:16 +0000)
Added some support for unicode arguments.

Mac/Modules/res/_Resmodule.c
Mac/Modules/res/resscan.py
Mac/Modules/res/ressupport.py

index 0c4576b126923754044fbc11559bee68a62ea331..9f14aec86480d71869e7a43e2d2150b59f4247c5 100644 (file)
@@ -1382,6 +1382,36 @@ static PyObject *Res_FSOpenResFile(PyObject *_self, PyObject *_args)
        return _res;
 }
 
+static PyObject *Res_FSCreateResFile(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       FSRef parentRef;
+       UniChar *nameLength__in__;
+       UniCharCount nameLength__len__;
+       int nameLength__in_len__;
+       FSRef newRef;
+       FSSpec newSpec;
+       if (!PyArg_ParseTuple(_args, "O&u#",
+                             PyMac_GetFSRef, &parentRef,
+                             &nameLength__in__, &nameLength__in_len__))
+               return NULL;
+       nameLength__len__ = nameLength__in_len__;
+       FSCreateResFile(&parentRef,
+                       nameLength__len__, nameLength__in__,
+                       0,
+                       (FSCatalogInfo *)0,
+                       &newRef,
+                       &newSpec);
+       {
+               OSErr _err = ResError();
+               if (_err != noErr) return PyMac_Error(_err);
+       }
+       _res = Py_BuildValue("O&O&",
+                            PyMac_BuildFSRef, newRef,
+                            PyMac_BuildFSSpec, newSpec);
+       return _res;
+}
+
 static PyObject *Res_FSResourceFileAlreadyOpen(PyObject *_self, PyObject *_args)
 {
        PyObject *_res = NULL;
@@ -1406,6 +1436,80 @@ static PyObject *Res_FSResourceFileAlreadyOpen(PyObject *_self, PyObject *_args)
        return _res;
 }
 
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Res_FSCreateResourceFile(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSErr _rv;
+       FSRef parentRef;
+       UniChar *nameLength__in__;
+       UniCharCount nameLength__len__;
+       int nameLength__in_len__;
+       UniChar *forkNameLength__in__;
+       UniCharCount forkNameLength__len__;
+       int forkNameLength__in_len__;
+       FSRef newRef;
+       FSSpec newSpec;
+       if (!PyArg_ParseTuple(_args, "O&u#u#",
+                             PyMac_GetFSRef, &parentRef,
+                             &nameLength__in__, &nameLength__in_len__,
+                             &forkNameLength__in__, &forkNameLength__in_len__))
+               return NULL;
+       nameLength__len__ = nameLength__in_len__;
+       forkNameLength__len__ = forkNameLength__in_len__;
+       _rv = FSCreateResourceFile(&parentRef,
+                                  nameLength__len__, nameLength__in__,
+                                  0,
+                                  (FSCatalogInfo *)0,
+                                  forkNameLength__len__, forkNameLength__in__,
+                                  &newRef,
+                                  &newSpec);
+       {
+               OSErr _err = ResError();
+               if (_err != noErr) return PyMac_Error(_err);
+       }
+       _res = Py_BuildValue("hO&O&",
+                            _rv,
+                            PyMac_BuildFSRef, newRef,
+                            PyMac_BuildFSSpec, newSpec);
+       return _res;
+}
+#endif
+
+#if TARGET_API_MAC_CARBON
+
+static PyObject *Res_FSOpenResourceFile(PyObject *_self, PyObject *_args)
+{
+       PyObject *_res = NULL;
+       OSErr _rv;
+       FSRef ref;
+       UniChar *forkNameLength__in__;
+       UniCharCount forkNameLength__len__;
+       int forkNameLength__in_len__;
+       SignedByte permissions;
+       SInt16 refNum;
+       if (!PyArg_ParseTuple(_args, "O&u#b",
+                             PyMac_GetFSRef, &ref,
+                             &forkNameLength__in__, &forkNameLength__in_len__,
+                             &permissions))
+               return NULL;
+       forkNameLength__len__ = forkNameLength__in_len__;
+       _rv = FSOpenResourceFile(&ref,
+                                forkNameLength__len__, forkNameLength__in__,
+                                permissions,
+                                &refNum);
+       {
+               OSErr _err = ResError();
+               if (_err != noErr) return PyMac_Error(_err);
+       }
+       _res = Py_BuildValue("hh",
+                            _rv,
+                            refNum);
+       return _res;
+}
+#endif
+
 static PyObject *Res_Resource(PyObject *_self, PyObject *_args)
 {
        PyObject *_res = NULL;
@@ -1569,8 +1673,20 @@ static PyMethodDef Res_methods[] = {
 #endif
        {"FSOpenResFile", (PyCFunction)Res_FSOpenResFile, 1,
         "(FSRef ref, SignedByte permission) -> (short _rv)"},
+       {"FSCreateResFile", (PyCFunction)Res_FSCreateResFile, 1,
+        "(FSRef parentRef, Buffer nameLength) -> (FSRef newRef, FSSpec newSpec)"},
        {"FSResourceFileAlreadyOpen", (PyCFunction)Res_FSResourceFileAlreadyOpen, 1,
         "(FSRef resourceFileRef) -> (Boolean _rv, Boolean inChain, SInt16 refNum)"},
+
+#if TARGET_API_MAC_CARBON
+       {"FSCreateResourceFile", (PyCFunction)Res_FSCreateResourceFile, 1,
+        "(FSRef parentRef, Buffer nameLength, Buffer forkNameLength) -> (OSErr _rv, FSRef newRef, FSSpec newSpec)"},
+#endif
+
+#if TARGET_API_MAC_CARBON
+       {"FSOpenResourceFile", (PyCFunction)Res_FSOpenResourceFile, 1,
+        "(FSRef ref, Buffer forkNameLength, SignedByte permissions) -> (OSErr _rv, SInt16 refNum)"},
+#endif
        {"Resource", (PyCFunction)Res_Resource, 1,
         "Convert a string to a resource object.\n\nThe created resource object is actually just a handle,\napply AddResource() to write it to a resource file.\nSee also the Handle() docstring.\n"},
        {"Handle", (PyCFunction)Res_Handle, 1,
index ecdd86bec87cae3affcd1ae6b361210edb5567c1..8c51528e40c85c2a7987aa86043200ae6422d85d 100644 (file)
@@ -48,7 +48,6 @@ class ResourcesScanner(Scanner):
                        
        def makeblacklisttypes(self):
                return [
-                       "UniCharCount", #TBD
                        ]
                        
        def makegreylist(self):
@@ -68,6 +67,8 @@ class ResourcesScanner(Scanner):
                                'DetachResourceFile',
                                'InsertResourceFile',
                                'FSpResourceFileAlreadyOpen',
+                               'FSOpenResourceFile',
+                               'FSCreateResourceFile',
                        ])]
 
        def makerepairinstructions(self):
@@ -86,7 +87,11 @@ class ResourcesScanner(Scanner):
                         [("OutBuffer", "*", "InOutMode")]),
                         
                        ([("SInt8", "*", "*")],
-                        [("SignedByte", "*", "*")])
+                        [("SignedByte", "*", "*")]),
+                        
+                       
+                       ([("UniCharCount", "*", "InMode"), ("UniChar_ptr", "*", "InMode")],
+                        [("UnicodeReverseInBuffer", "*", "*")]),
                        ]
 
 if __name__ == "__main__":
index 056e2143bf3d473819e399bfd17e50d3d751133a..6fedcf38b62b84f582aa66a4559287582ee90f23 100644 (file)
@@ -5,8 +5,6 @@
 
 from macsupport import *
 
-FSRef_ptr = OpaqueType("FSRef", "PyMac_BuildFSRef", "PyMac_GetFSRef")
-
 class ResMixIn:
 
        def checkit(self):
@@ -20,6 +18,8 @@ class ResFunction(ResMixIn, FunctionGenerator): pass
 class ResMethod(ResMixIn, MethodGenerator): pass
 
 RsrcChainLocation = Type("RsrcChainLocation", "h")
+FSCatalogInfoBitmap = FakeType("0") # Type("FSCatalogInfoBitmap", "l")
+FSCatalogInfo_ptr = FakeType("(FSCatalogInfo *)0")
 
 # includestuff etc. are imported from macsupport