/* ========================= Module _Folder ========================= */ #include "Python.h" #include "pymactoolbox.h" /* Macro to test whether a weak-loaded CFM function exists */ #define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\ PyErr_SetString(PyExc_NotImplementedError, \ "Not available in this shared library/OS version"); \ return NULL; \ }} while(0) #include <Carbon/Carbon.h> static PyObject *Folder_Error; static PyObject *Folder_FindFolder(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; OSType folderType; Boolean createFolder; FSVolumeRefNum foundVRefNum; SInt32 foundDirID; if (!PyArg_ParseTuple(_args, "hO&b", &vRefNum, PyMac_GetOSType, &folderType, &createFolder)) return NULL; _err = FindFolder(vRefNum, folderType, createFolder, &foundVRefNum, &foundDirID); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("hl", foundVRefNum, foundDirID); return _res; } static PyObject *Folder_ReleaseFolder(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; OSType folderType; if (!PyArg_ParseTuple(_args, "hO&", &vRefNum, PyMac_GetOSType, &folderType)) return NULL; _err = ReleaseFolder(vRefNum, folderType); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Folder_FSFindFolder(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; OSType folderType; Boolean createFolder; FSRef foundRef; if (!PyArg_ParseTuple(_args, "hO&b", &vRefNum, PyMac_GetOSType, &folderType, &createFolder)) return NULL; _err = FSFindFolder(vRefNum, folderType, createFolder, &foundRef); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", PyMac_BuildFSRef, &foundRef); return _res; } static PyObject *Folder_AddFolderDescriptor(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; FolderType foldType; FolderDescFlags flags; FolderClass foldClass; FolderLocation foldLocation; OSType badgeSignature; OSType badgeType; Str255 name; Boolean replaceFlag; if (!PyArg_ParseTuple(_args, "O&lO&O&O&O&O&b", PyMac_GetOSType, &foldType, &flags, PyMac_GetOSType, &foldClass, PyMac_GetOSType, &foldLocation, PyMac_GetOSType, &badgeSignature, PyMac_GetOSType, &badgeType, PyMac_GetStr255, name, &replaceFlag)) return NULL; _err = AddFolderDescriptor(foldType, flags, foldClass, foldLocation, badgeSignature, badgeType, name, replaceFlag); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Folder_GetFolderTypes(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; UInt32 requestedTypeCount; UInt32 totalTypeCount; FolderType theTypes; if (!PyArg_ParseTuple(_args, "l", &requestedTypeCount)) return NULL; _err = GetFolderTypes(requestedTypeCount, &totalTypeCount, &theTypes); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("lO&", totalTypeCount, PyMac_BuildOSType, theTypes); return _res; } static PyObject *Folder_RemoveFolderDescriptor(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; FolderType foldType; if (!PyArg_ParseTuple(_args, "O&", PyMac_GetOSType, &foldType)) return NULL; _err = RemoveFolderDescriptor(foldType); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } #ifndef __LP64__ static PyObject *Folder_GetFolderName(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; OSType foldType; short foundVRefNum; Str255 name; if (!PyArg_ParseTuple(_args, "hO&O&", &vRefNum, PyMac_GetOSType, &foldType, PyMac_GetStr255, name)) return NULL; _err = GetFolderName(vRefNum, foldType, &foundVRefNum, name); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("h", foundVRefNum); return _res; } static PyObject *Folder_AddFolderRouting(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; OSType fileType; FolderType routeFromFolder; FolderType routeToFolder; RoutingFlags flags; Boolean replaceFlag; if (!PyArg_ParseTuple(_args, "O&O&O&lb", PyMac_GetOSType, &fileType, PyMac_GetOSType, &routeFromFolder, PyMac_GetOSType, &routeToFolder, &flags, &replaceFlag)) return NULL; _err = AddFolderRouting(fileType, routeFromFolder, routeToFolder, flags, replaceFlag); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Folder_RemoveFolderRouting(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; OSType fileType; FolderType routeFromFolder; if (!PyArg_ParseTuple(_args, "O&O&", PyMac_GetOSType, &fileType, PyMac_GetOSType, &routeFromFolder)) return NULL; _err = RemoveFolderRouting(fileType, routeFromFolder); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Folder_FindFolderRouting(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; OSType fileType; FolderType routeFromFolder; FolderType routeToFolder; RoutingFlags flags; if (!PyArg_ParseTuple(_args, "O&O&", PyMac_GetOSType, &fileType, PyMac_GetOSType, &routeFromFolder)) return NULL; _err = FindFolderRouting(fileType, routeFromFolder, &routeToFolder, &flags); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&l", PyMac_BuildOSType, routeToFolder, flags); return _res; } #endif /* !__LP64__ */ static PyObject *Folder_InvalidateFolderDescriptorCache(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; long dirID; if (!PyArg_ParseTuple(_args, "hl", &vRefNum, &dirID)) return NULL; _err = InvalidateFolderDescriptorCache(vRefNum, dirID); if (_err != noErr) return PyMac_Error(_err); Py_INCREF(Py_None); _res = Py_None; return _res; } static PyObject *Folder_IdentifyFolder(PyObject *_self, PyObject *_args) { PyObject *_res = NULL; OSErr _err; short vRefNum; long dirID; FolderType foldType; if (!PyArg_ParseTuple(_args, "hl", &vRefNum, &dirID)) return NULL; _err = IdentifyFolder(vRefNum, dirID, &foldType); if (_err != noErr) return PyMac_Error(_err); _res = Py_BuildValue("O&", PyMac_BuildOSType, foldType); return _res; } static PyMethodDef Folder_methods[] = { {"FindFolder", (PyCFunction)Folder_FindFolder, 1, PyDoc_STR("(short vRefNum, OSType folderType, Boolean createFolder) -> (short foundVRefNum, long foundDirID)")}, {"ReleaseFolder", (PyCFunction)Folder_ReleaseFolder, 1, PyDoc_STR("(short vRefNum, OSType folderType) -> None")}, {"FSFindFolder", (PyCFunction)Folder_FSFindFolder, 1, PyDoc_STR("(short vRefNum, OSType folderType, Boolean createFolder) -> (FSRef foundRef)")}, {"AddFolderDescriptor", (PyCFunction)Folder_AddFolderDescriptor, 1, PyDoc_STR("(FolderType foldType, FolderDescFlags flags, FolderClass foldClass, FolderLocation foldLocation, OSType badgeSignature, OSType badgeType, Str255 name, Boolean replaceFlag) -> None")}, {"GetFolderTypes", (PyCFunction)Folder_GetFolderTypes, 1, PyDoc_STR("(UInt32 requestedTypeCount) -> (UInt32 totalTypeCount, FolderType theTypes)")}, {"RemoveFolderDescriptor", (PyCFunction)Folder_RemoveFolderDescriptor, 1, PyDoc_STR("(FolderType foldType) -> None")}, #ifndef __LP64__ {"GetFolderName", (PyCFunction)Folder_GetFolderName, 1, PyDoc_STR("(short vRefNum, OSType foldType, Str255 name) -> (short foundVRefNum)")}, {"AddFolderRouting", (PyCFunction)Folder_AddFolderRouting, 1, PyDoc_STR("(OSType fileType, FolderType routeFromFolder, FolderType routeToFolder, RoutingFlags flags, Boolean replaceFlag) -> None")}, {"RemoveFolderRouting", (PyCFunction)Folder_RemoveFolderRouting, 1, PyDoc_STR("(OSType fileType, FolderType routeFromFolder) -> None")}, {"FindFolderRouting", (PyCFunction)Folder_FindFolderRouting, 1, PyDoc_STR("(OSType fileType, FolderType routeFromFolder) -> (FolderType routeToFolder, RoutingFlags flags)")}, #endif /* !__LP64__ */ {"InvalidateFolderDescriptorCache", (PyCFunction)Folder_InvalidateFolderDescriptorCache, 1, PyDoc_STR("(short vRefNum, long dirID) -> None")}, {"IdentifyFolder", (PyCFunction)Folder_IdentifyFolder, 1, PyDoc_STR("(short vRefNum, long dirID) -> (FolderType foldType)")}, {NULL, NULL, 0} }; void init_Folder(void) { PyObject *m; PyObject *d; m = Py_InitModule("_Folder", Folder_methods); d = PyModule_GetDict(m); Folder_Error = PyMac_GetOSErrException(); if (Folder_Error == NULL || PyDict_SetItemString(d, "Error", Folder_Error) != 0) return; } /* ======================= End module _Folder ======================= */