ยปCore Development>Code coverage>Mac/Modules/file/_Filemodule.c

Python code coverage for Mac/Modules/file/_Filemodule.c

#countcontent
1n/a
2n/a/* ========================== Module _File ========================== */
3n/a
4n/a#include "Python.h"
5n/a
6n/a
7n/a
8n/a#include "pymactoolbox.h"
9n/a
10n/a#ifndef HAVE_OSX105_SDK
11n/atypedef SInt16 FSIORefNum;
12n/a#endif
13n/a
14n/a/* Macro to test whether a weak-loaded CFM function exists */
15n/a#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
16n/a PyErr_SetString(PyExc_NotImplementedError, \
17n/a "Not available in this shared library/OS version"); \
18n/a return NULL; \
19n/a }} while(0)
20n/a
21n/a
22n/a#include <Carbon/Carbon.h>
23n/a
24n/a#ifdef USE_TOOLBOX_OBJECT_GLUE
25n/a
26n/a#ifndef __LP64__
27n/aextern int _PyMac_GetFSSpec(PyObject *v, FSSpec *spec);
28n/aextern PyObject *_PyMac_BuildFSSpec(FSSpec *spec);
29n/a#define PyMac_BuildFSSpec _PyMac_BuildFSSpec
30n/a#endif /* __LP64__*/
31n/a
32n/aextern int _PyMac_GetFSRef(PyObject *v, FSRef *fsr);
33n/aextern PyObject *_PyMac_BuildFSRef(FSRef *spec);
34n/a#define PyMac_BuildFSRef _PyMac_BuildFSRef
35n/a#define PyMac_GetFSSpec _PyMac_GetFSSpec
36n/a#define PyMac_GetFSRef _PyMac_GetFSRef
37n/a
38n/a#else /* !USE_TOOLBOX_OBJECT_GLUE */
39n/a
40n/a#ifndef __LP64__
41n/aextern int PyMac_GetFSSpec(PyObject *v, FSSpec *spec);
42n/aextern PyObject *PyMac_BuildFSSpec(FSSpec *spec);
43n/a#endif /* !__LP64__*/
44n/a
45n/aextern int PyMac_GetFSRef(PyObject *v, FSRef *fsr);
46n/aextern PyObject *PyMac_BuildFSRef(FSRef *spec);
47n/a
48n/a#endif /* !USE_TOOLBOX_OBJECT_GLUE */
49n/a
50n/a/* Forward declarations */
51n/astatic PyObject *FSRef_New(FSRef *itself);
52n/a#ifndef __LP64__
53n/astatic PyObject *FInfo_New(FInfo *itself);
54n/a
55n/astatic PyObject *FSSpec_New(FSSpec *itself);
56n/a#define FSSpec_Convert PyMac_GetFSSpec
57n/a#endif /* !__LP64__ */
58n/a
59n/astatic PyObject *Alias_New(AliasHandle itself);
60n/a#ifndef __LP64__
61n/astatic int FInfo_Convert(PyObject *v, FInfo *p_itself);
62n/a#endif /* !__LP64__ */
63n/a#define FSRef_Convert PyMac_GetFSRef
64n/astatic int Alias_Convert(PyObject *v, AliasHandle *p_itself);
65n/a
66n/a/*
67n/a** UTCDateTime records
68n/a*/
69n/astatic int
70n/aUTCDateTime_Convert(PyObject *v, UTCDateTime *ptr)
71n/a{
72n/a return PyArg_Parse(v, "(HlH)", &ptr->highSeconds, &ptr->lowSeconds, &ptr->fraction);
73n/a}
74n/a
75n/astatic PyObject *
76n/aUTCDateTime_New(UTCDateTime *ptr)
77n/a{
78n/a return Py_BuildValue("(HlH)", ptr->highSeconds, ptr->lowSeconds, ptr->fraction);
79n/a}
80n/a
81n/a/*
82n/a** Optional fsspec and fsref pointers. None will pass NULL
83n/a*/
84n/a#ifndef __LP64__
85n/astatic int
86n/amyPyMac_GetOptFSSpecPtr(PyObject *v, FSSpec **spec)
87n/a{
88n/a if (v == Py_None) {
89n/a *spec = NULL;
90n/a return 1;
91n/a }
92n/a return PyMac_GetFSSpec(v, *spec);
93n/a}
94n/a#endif /* !__LP64__ */
95n/a
96n/astatic int
97n/amyPyMac_GetOptFSRefPtr(PyObject *v, FSRef **ref)
98n/a{
99n/a if (v == Py_None) {
100n/a *ref = NULL;
101n/a return 1;
102n/a }
103n/a return PyMac_GetFSRef(v, *ref);
104n/a}
105n/a
106n/a/*
107n/a** Parse/generate objsect
108n/a*/
109n/astatic PyObject *
110n/aPyMac_BuildHFSUniStr255(HFSUniStr255 *itself)
111n/a{
112n/a
113n/a return Py_BuildValue("u#", itself->unicode, itself->length);
114n/a}
115n/a
116n/a#ifndef __LP64__
117n/astatic OSErr
118n/a_PyMac_GetFullPathname(FSSpec *fss, char *path, int len)
119n/a{
120n/a FSRef fsr;
121n/a OSErr err;
122n/a
123n/a *path = '\0';
124n/a err = FSpMakeFSRef(fss, &fsr);
125n/a if (err == fnfErr) {
126n/a /* FSSpecs can point to non-existing files, fsrefs can't. */
127n/a FSSpec fss2;
128n/a int tocopy;
129n/a
130n/a err = FSMakeFSSpec(fss->vRefNum, fss->parID,
131n/a (unsigned char*)"", &fss2);
132n/a if (err)
133n/a return err;
134n/a err = FSpMakeFSRef(&fss2, &fsr);
135n/a if (err)
136n/a return err;
137n/a err = (OSErr)FSRefMakePath(&fsr, (unsigned char*)path, len-1);
138n/a if (err)
139n/a return err;
140n/a /* This part is not 100% safe: we append the filename part, but
141n/a ** I'm not sure that we don't run afoul of the various 8bit
142n/a ** encodings here. Will have to look this up at some point...
143n/a */
144n/a strcat(path, "/");
145n/a tocopy = fss->name[0];
146n/a if ((strlen(path) + tocopy) >= len)
147n/a tocopy = len - strlen(path) - 1;
148n/a if (tocopy > 0)
149n/a strncat(path, (char*)fss->name+1, tocopy);
150n/a }
151n/a else {
152n/a if (err)
153n/a return err;
154n/a err = (OSErr)FSRefMakePath(&fsr, (unsigned char*)path, len);
155n/a if (err)
156n/a return err;
157n/a }
158n/a return 0;
159n/a}
160n/a#endif /* !__LP64__ */
161n/a
162n/a
163n/astatic PyObject *File_Error;
164n/a
165n/a/* ------------------- Object type FSCatalogInfo -------------------- */
166n/a
167n/astatic PyTypeObject FSCatalogInfo_Type;
168n/a
169n/a#define FSCatalogInfo_Check(x) ((x)->ob_type == &FSCatalogInfo_Type || PyObject_TypeCheck((x), &FSCatalogInfo_Type))
170n/a
171n/atypedef struct FSCatalogInfoObject {
172n/a PyObject_HEAD
173n/a FSCatalogInfo ob_itself;
174n/a} FSCatalogInfoObject;
175n/a
176n/astatic PyObject *FSCatalogInfo_New(FSCatalogInfo *itself)
177n/a{
178n/a FSCatalogInfoObject *it;
179n/a if (itself == NULL) { Py_INCREF(Py_None); return Py_None; }
180n/a it = PyObject_NEW(FSCatalogInfoObject, &FSCatalogInfo_Type);
181n/a if (it == NULL) return NULL;
182n/a it->ob_itself = *itself;
183n/a return (PyObject *)it;
184n/a}
185n/a
186n/astatic int FSCatalogInfo_Convert(PyObject *v, FSCatalogInfo *p_itself)
187n/a{
188n/a if (!FSCatalogInfo_Check(v))
189n/a {
190n/a PyErr_SetString(PyExc_TypeError, "FSCatalogInfo required");
191n/a return 0;
192n/a }
193n/a *p_itself = ((FSCatalogInfoObject *)v)->ob_itself;
194n/a return 1;
195n/a}
196n/a
197n/astatic void FSCatalogInfo_dealloc(FSCatalogInfoObject *self)
198n/a{
199n/a /* Cleanup of self->ob_itself goes here */
200n/a self->ob_type->tp_free((PyObject *)self);
201n/a}
202n/a
203n/astatic PyMethodDef FSCatalogInfo_methods[] = {
204n/a {NULL, NULL, 0}
205n/a};
206n/a
207n/astatic PyObject *FSCatalogInfo_get_nodeFlags(FSCatalogInfoObject *self, void *closure)
208n/a{
209n/a return Py_BuildValue("H", self->ob_itself.nodeFlags);
210n/a}
211n/a
212n/astatic int FSCatalogInfo_set_nodeFlags(FSCatalogInfoObject *self, PyObject *v, void *closure)
213n/a{
214n/a return PyArg_Parse(v, "H", &self->ob_itself.nodeFlags)-1;
215n/a return 0;
216n/a}
217n/a
218n/astatic PyObject *FSCatalogInfo_get_volume(FSCatalogInfoObject *self, void *closure)
219n/a{
220n/a return Py_BuildValue("h", self->ob_itself.volume);
221n/a}
222n/a
223n/astatic int FSCatalogInfo_set_volume(FSCatalogInfoObject *self, PyObject *v, void *closure)
224n/a{
225n/a return PyArg_Parse(v, "h", &self->ob_itself.volume)-1;
226n/a return 0;
227n/a}
228n/a
229n/astatic PyObject *FSCatalogInfo_get_parentDirID(FSCatalogInfoObject *self, void *closure)
230n/a{
231n/a return Py_BuildValue("l", self->ob_itself.parentDirID);
232n/a}
233n/a
234n/astatic int FSCatalogInfo_set_parentDirID(FSCatalogInfoObject *self, PyObject *v, void *closure)
235n/a{
236n/a return PyArg_Parse(v, "l", &self->ob_itself.parentDirID)-1;
237n/a return 0;
238n/a}
239n/a
240n/astatic PyObject *FSCatalogInfo_get_nodeID(FSCatalogInfoObject *self, void *closure)
241n/a{
242n/a return Py_BuildValue("l", self->ob_itself.nodeID);
243n/a}
244n/a
245n/astatic int FSCatalogInfo_set_nodeID(FSCatalogInfoObject *self, PyObject *v, void *closure)
246n/a{
247n/a return PyArg_Parse(v, "l", &self->ob_itself.nodeID)-1;
248n/a return 0;
249n/a}
250n/a
251n/astatic PyObject *FSCatalogInfo_get_createDate(FSCatalogInfoObject *self, void *closure)
252n/a{
253n/a return Py_BuildValue("O&", UTCDateTime_New, &self->ob_itself.createDate);
254n/a}
255n/a
256n/astatic int FSCatalogInfo_set_createDate(FSCatalogInfoObject *self, PyObject *v, void *closure)
257n/a{
258n/a return PyArg_Parse(v, "O&", UTCDateTime_Convert, &self->ob_itself.createDate)-1;
259n/a return 0;
260n/a}
261n/a
262n/astatic PyObject *FSCatalogInfo_get_contentModDate(FSCatalogInfoObject *self, void *closure)
263n/a{
264n/a return Py_BuildValue("O&", UTCDateTime_New, &self->ob_itself.contentModDate);
265n/a}
266n/a
267n/astatic int FSCatalogInfo_set_contentModDate(FSCatalogInfoObject *self, PyObject *v, void *closure)
268n/a{
269n/a return PyArg_Parse(v, "O&", UTCDateTime_Convert, &self->ob_itself.contentModDate)-1;
270n/a return 0;
271n/a}
272n/a
273n/astatic PyObject *FSCatalogInfo_get_attributeModDate(FSCatalogInfoObject *self, void *closure)
274n/a{
275n/a return Py_BuildValue("O&", UTCDateTime_New, &self->ob_itself.attributeModDate);
276n/a}
277n/a
278n/astatic int FSCatalogInfo_set_attributeModDate(FSCatalogInfoObject *self, PyObject *v, void *closure)
279n/a{
280n/a return PyArg_Parse(v, "O&", UTCDateTime_Convert, &self->ob_itself.attributeModDate)-1;
281n/a return 0;
282n/a}
283n/a
284n/astatic PyObject *FSCatalogInfo_get_accessDate(FSCatalogInfoObject *self, void *closure)
285n/a{
286n/a return Py_BuildValue("O&", UTCDateTime_New, &self->ob_itself.accessDate);
287n/a}
288n/a
289n/astatic int FSCatalogInfo_set_accessDate(FSCatalogInfoObject *self, PyObject *v, void *closure)
290n/a{
291n/a return PyArg_Parse(v, "O&", UTCDateTime_Convert, &self->ob_itself.accessDate)-1;
292n/a return 0;
293n/a}
294n/a
295n/astatic PyObject *FSCatalogInfo_get_backupDate(FSCatalogInfoObject *self, void *closure)
296n/a{
297n/a return Py_BuildValue("O&", UTCDateTime_New, &self->ob_itself.backupDate);
298n/a}
299n/a
300n/astatic int FSCatalogInfo_set_backupDate(FSCatalogInfoObject *self, PyObject *v, void *closure)
301n/a{
302n/a return PyArg_Parse(v, "O&", UTCDateTime_Convert, &self->ob_itself.backupDate)-1;
303n/a return 0;
304n/a}
305n/a
306n/astatic PyObject *FSCatalogInfo_get_permissions(FSCatalogInfoObject *self, void *closure)
307n/a{
308n/a FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions);
309n/a return Py_BuildValue("(llll)", info->userID, info->groupID, info->userAccess, info->mode);
310n/a}
311n/a
312n/astatic int FSCatalogInfo_set_permissions(FSCatalogInfoObject *self, PyObject *v, void *closure)
313n/a{
314n/a long userID;
315n/a long groupID;
316n/a long userAccess;
317n/a long mode;
318n/a int r;
319n/a
320n/a FSPermissionInfo* info = (FSPermissionInfo*)&(self->ob_itself.permissions);
321n/a
322n/a r = PyArg_Parse(v, "(llll)", &userID, &groupID, &userAccess, &mode);
323n/a if (!r) {
324n/a return -1;
325n/a }
326n/a info->userID = userID;
327n/a info->groupID = groupID;
328n/a info->userAccess = userAccess;
329n/a info->mode = mode;
330n/a return 0;
331n/a}
332n/a
333n/astatic PyObject *FSCatalogInfo_get_valence(FSCatalogInfoObject *self, void *closure)
334n/a{
335n/a return Py_BuildValue("l", self->ob_itself.valence);
336n/a}
337n/a
338n/astatic int FSCatalogInfo_set_valence(FSCatalogInfoObject *self, PyObject *v, void *closure)
339n/a{
340n/a return PyArg_Parse(v, "l", &self->ob_itself.valence)-1;
341n/a return 0;
342n/a}
343n/a
344n/astatic PyObject *FSCatalogInfo_get_dataLogicalSize(FSCatalogInfoObject *self, void *closure)
345n/a{
346n/a return Py_BuildValue("l", self->ob_itself.dataLogicalSize);
347n/a}
348n/a
349n/astatic int FSCatalogInfo_set_dataLogicalSize(FSCatalogInfoObject *self, PyObject *v, void *closure)
350n/a{
351n/a return PyArg_Parse(v, "l", &self->ob_itself.dataLogicalSize)-1;
352n/a return 0;
353n/a}
354n/a
355n/astatic PyObject *FSCatalogInfo_get_dataPhysicalSize(FSCatalogInfoObject *self, void *closure)
356n/a{
357n/a return Py_BuildValue("l", self->ob_itself.dataPhysicalSize);
358n/a}
359n/a
360n/astatic int FSCatalogInfo_set_dataPhysicalSize(FSCatalogInfoObject *self, PyObject *v, void *closure)
361n/a{
362n/a return PyArg_Parse(v, "l", &self->ob_itself.dataPhysicalSize)-1;
363n/a return 0;
364n/a}
365n/a
366n/astatic PyObject *FSCatalogInfo_get_rsrcLogicalSize(FSCatalogInfoObject *self, void *closure)
367n/a{
368n/a return Py_BuildValue("l", self->ob_itself.rsrcLogicalSize);
369n/a}
370n/a
371n/astatic int FSCatalogInfo_set_rsrcLogicalSize(FSCatalogInfoObject *self, PyObject *v, void *closure)
372n/a{
373n/a return PyArg_Parse(v, "l", &self->ob_itself.rsrcLogicalSize)-1;
374n/a return 0;
375n/a}
376n/a
377n/astatic PyObject *FSCatalogInfo_get_rsrcPhysicalSize(FSCatalogInfoObject *self, void *closure)
378n/a{
379n/a return Py_BuildValue("l", self->ob_itself.rsrcPhysicalSize);
380n/a}
381n/a
382n/astatic int FSCatalogInfo_set_rsrcPhysicalSize(FSCatalogInfoObject *self, PyObject *v, void *closure)
383n/a{
384n/a return PyArg_Parse(v, "l", &self->ob_itself.rsrcPhysicalSize)-1;
385n/a return 0;
386n/a}
387n/a
388n/astatic PyObject *FSCatalogInfo_get_sharingFlags(FSCatalogInfoObject *self, void *closure)
389n/a{
390n/a return Py_BuildValue("l", self->ob_itself.sharingFlags);
391n/a}
392n/a
393n/astatic int FSCatalogInfo_set_sharingFlags(FSCatalogInfoObject *self, PyObject *v, void *closure)
394n/a{
395n/a return PyArg_Parse(v, "l", &self->ob_itself.sharingFlags)-1;
396n/a return 0;
397n/a}
398n/a
399n/astatic PyObject *FSCatalogInfo_get_userPrivileges(FSCatalogInfoObject *self, void *closure)
400n/a{
401n/a return Py_BuildValue("b", self->ob_itself.userPrivileges);
402n/a}
403n/a
404n/astatic int FSCatalogInfo_set_userPrivileges(FSCatalogInfoObject *self, PyObject *v, void *closure)
405n/a{
406n/a return PyArg_Parse(v, "b", &self->ob_itself.userPrivileges)-1;
407n/a return 0;
408n/a}
409n/a
410n/astatic PyGetSetDef FSCatalogInfo_getsetlist[] = {
411n/a {"nodeFlags", (getter)FSCatalogInfo_get_nodeFlags, (setter)FSCatalogInfo_set_nodeFlags, NULL},
412n/a {"volume", (getter)FSCatalogInfo_get_volume, (setter)FSCatalogInfo_set_volume, NULL},
413n/a {"parentDirID", (getter)FSCatalogInfo_get_parentDirID, (setter)FSCatalogInfo_set_parentDirID, NULL},
414n/a {"nodeID", (getter)FSCatalogInfo_get_nodeID, (setter)FSCatalogInfo_set_nodeID, NULL},
415n/a {"createDate", (getter)FSCatalogInfo_get_createDate, (setter)FSCatalogInfo_set_createDate, NULL},
416n/a {"contentModDate", (getter)FSCatalogInfo_get_contentModDate, (setter)FSCatalogInfo_set_contentModDate, NULL},
417n/a {"attributeModDate", (getter)FSCatalogInfo_get_attributeModDate, (setter)FSCatalogInfo_set_attributeModDate, NULL},
418n/a {"accessDate", (getter)FSCatalogInfo_get_accessDate, (setter)FSCatalogInfo_set_accessDate, NULL},
419n/a {"backupDate", (getter)FSCatalogInfo_get_backupDate, (setter)FSCatalogInfo_set_backupDate, NULL},
420n/a {"permissions", (getter)FSCatalogInfo_get_permissions, (setter)FSCatalogInfo_set_permissions, NULL},
421n/a {"valence", (getter)FSCatalogInfo_get_valence, (setter)FSCatalogInfo_set_valence, NULL},
422n/a {"dataLogicalSize", (getter)FSCatalogInfo_get_dataLogicalSize, (setter)FSCatalogInfo_set_dataLogicalSize, NULL},
423n/a {"dataPhysicalSize", (getter)FSCatalogInfo_get_dataPhysicalSize, (setter)FSCatalogInfo_set_dataPhysicalSize, NULL},
424n/a {"rsrcLogicalSize", (getter)FSCatalogInfo_get_rsrcLogicalSize, (setter)FSCatalogInfo_set_rsrcLogicalSize, NULL},
425n/a {"rsrcPhysicalSize", (getter)FSCatalogInfo_get_rsrcPhysicalSize, (setter)FSCatalogInfo_set_rsrcPhysicalSize, NULL},
426n/a {"sharingFlags", (getter)FSCatalogInfo_get_sharingFlags, (setter)FSCatalogInfo_set_sharingFlags, NULL},
427n/a {"userPrivileges", (getter)FSCatalogInfo_get_userPrivileges, (setter)FSCatalogInfo_set_userPrivileges, NULL},
428n/a {NULL, NULL, NULL, NULL},
429n/a};
430n/a
431n/a
432n/a#define FSCatalogInfo_compare NULL
433n/a
434n/a#define FSCatalogInfo_repr NULL
435n/a
436n/a#define FSCatalogInfo_hash NULL
437n/astatic int FSCatalogInfo_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
438n/a{
439n/a static char *kw[] = {
440n/a "nodeFlags",
441n/a "volume",
442n/a "parentDirID",
443n/a "nodeID",
444n/a "createDate",
445n/a "contentModDate",
446n/a "atributeModDate",
447n/a "accessDate",
448n/a "backupDate",
449n/a "valence",
450n/a "dataLogicalSize",
451n/a "dataPhysicalSize",
452n/a "rsrcLogicalSize",
453n/a "rsrcPhysicalSize",
454n/a "sharingFlags",
455n/a "userPrivileges"
456n/a , 0};
457n/a
458n/a if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "|HhllO&O&O&O&O&llllllb", kw, &((FSCatalogInfoObject *)_self)->ob_itself.nodeFlags,
459n/a &((FSCatalogInfoObject *)_self)->ob_itself.volume,
460n/a &((FSCatalogInfoObject *)_self)->ob_itself.parentDirID,
461n/a &((FSCatalogInfoObject *)_self)->ob_itself.nodeID,
462n/a UTCDateTime_Convert, &((FSCatalogInfoObject *)_self)->ob_itself.createDate,
463n/a UTCDateTime_Convert, &((FSCatalogInfoObject *)_self)->ob_itself.contentModDate,
464n/a UTCDateTime_Convert, &((FSCatalogInfoObject *)_self)->ob_itself.attributeModDate,
465n/a UTCDateTime_Convert, &((FSCatalogInfoObject *)_self)->ob_itself.accessDate,
466n/a UTCDateTime_Convert, &((FSCatalogInfoObject *)_self)->ob_itself.backupDate,
467n/a &((FSCatalogInfoObject *)_self)->ob_itself.valence,
468n/a &((FSCatalogInfoObject *)_self)->ob_itself.dataLogicalSize,
469n/a &((FSCatalogInfoObject *)_self)->ob_itself.dataPhysicalSize,
470n/a &((FSCatalogInfoObject *)_self)->ob_itself.rsrcLogicalSize,
471n/a &((FSCatalogInfoObject *)_self)->ob_itself.rsrcPhysicalSize,
472n/a &((FSCatalogInfoObject *)_self)->ob_itself.sharingFlags,
473n/a &((FSCatalogInfoObject *)_self)->ob_itself.userPrivileges))
474n/a {
475n/a return -1;
476n/a }
477n/a return 0;
478n/a}
479n/a
480n/a#define FSCatalogInfo_tp_alloc PyType_GenericAlloc
481n/a
482n/astatic PyObject *FSCatalogInfo_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
483n/a{
484n/a PyObject *self;
485n/a
486n/a if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
487n/a memset(&((FSCatalogInfoObject *)self)->ob_itself, 0, sizeof(FSCatalogInfo));
488n/a return self;
489n/a}
490n/a
491n/a#define FSCatalogInfo_tp_free PyObject_Del
492n/a
493n/a
494n/astatic PyTypeObject FSCatalogInfo_Type = {
495n/a PyObject_HEAD_INIT(NULL)
496n/a 0, /*ob_size*/
497n/a "Carbon.File.FSCatalogInfo", /*tp_name*/
498n/a sizeof(FSCatalogInfoObject), /*tp_basicsize*/
499n/a 0, /*tp_itemsize*/
500n/a /* methods */
501n/a (destructor) FSCatalogInfo_dealloc, /*tp_dealloc*/
502n/a 0, /*tp_print*/
503n/a (getattrfunc)0, /*tp_getattr*/
504n/a (setattrfunc)0, /*tp_setattr*/
505n/a (cmpfunc) FSCatalogInfo_compare, /*tp_compare*/
506n/a (reprfunc) FSCatalogInfo_repr, /*tp_repr*/
507n/a (PyNumberMethods *)0, /* tp_as_number */
508n/a (PySequenceMethods *)0, /* tp_as_sequence */
509n/a (PyMappingMethods *)0, /* tp_as_mapping */
510n/a (hashfunc) FSCatalogInfo_hash, /*tp_hash*/
511n/a 0, /*tp_call*/
512n/a 0, /*tp_str*/
513n/a PyObject_GenericGetAttr, /*tp_getattro*/
514n/a PyObject_GenericSetAttr, /*tp_setattro */
515n/a 0, /*tp_as_buffer*/
516n/a Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
517n/a 0, /*tp_doc*/
518n/a 0, /*tp_traverse*/
519n/a 0, /*tp_clear*/
520n/a 0, /*tp_richcompare*/
521n/a 0, /*tp_weaklistoffset*/
522n/a 0, /*tp_iter*/
523n/a 0, /*tp_iternext*/
524n/a FSCatalogInfo_methods, /* tp_methods */
525n/a 0, /*tp_members*/
526n/a FSCatalogInfo_getsetlist, /*tp_getset*/
527n/a 0, /*tp_base*/
528n/a 0, /*tp_dict*/
529n/a 0, /*tp_descr_get*/
530n/a 0, /*tp_descr_set*/
531n/a 0, /*tp_dictoffset*/
532n/a FSCatalogInfo_tp_init, /* tp_init */
533n/a FSCatalogInfo_tp_alloc, /* tp_alloc */
534n/a FSCatalogInfo_tp_new, /* tp_new */
535n/a FSCatalogInfo_tp_free, /* tp_free */
536n/a};
537n/a
538n/a/* ----------------- End object type FSCatalogInfo ------------------ */
539n/a
540n/a
541n/a/* ----------------------- Object type FInfo ------------------------ */
542n/a
543n/a#ifndef __LP64__
544n/a
545n/astatic PyTypeObject FInfo_Type;
546n/a
547n/a#define FInfo_Check(x) ((x)->ob_type == &FInfo_Type || PyObject_TypeCheck((x), &FInfo_Type))
548n/a
549n/atypedef struct FInfoObject {
550n/a PyObject_HEAD
551n/a FInfo ob_itself;
552n/a} FInfoObject;
553n/a
554n/astatic PyObject *FInfo_New(FInfo *itself)
555n/a{
556n/a FInfoObject *it;
557n/a if (itself == NULL) return PyMac_Error(resNotFound);
558n/a it = PyObject_NEW(FInfoObject, &FInfo_Type);
559n/a if (it == NULL) return NULL;
560n/a it->ob_itself = *itself;
561n/a return (PyObject *)it;
562n/a}
563n/a
564n/astatic int FInfo_Convert(PyObject *v, FInfo *p_itself)
565n/a{
566n/a if (!FInfo_Check(v))
567n/a {
568n/a PyErr_SetString(PyExc_TypeError, "FInfo required");
569n/a return 0;
570n/a }
571n/a *p_itself = ((FInfoObject *)v)->ob_itself;
572n/a return 1;
573n/a}
574n/a
575n/astatic void FInfo_dealloc(FInfoObject *self)
576n/a{
577n/a /* Cleanup of self->ob_itself goes here */
578n/a self->ob_type->tp_free((PyObject *)self);
579n/a}
580n/a
581n/astatic PyMethodDef FInfo_methods[] = {
582n/a {NULL, NULL, 0}
583n/a};
584n/a
585n/astatic PyObject *FInfo_get_Type(FInfoObject *self, void *closure)
586n/a{
587n/a return Py_BuildValue("O&", PyMac_BuildOSType, self->ob_itself.fdType);
588n/a}
589n/a
590n/astatic int FInfo_set_Type(FInfoObject *self, PyObject *v, void *closure)
591n/a{
592n/a return PyArg_Parse(v, "O&", PyMac_GetOSType, &self->ob_itself.fdType)-1;
593n/a return 0;
594n/a}
595n/a
596n/astatic PyObject *FInfo_get_Creator(FInfoObject *self, void *closure)
597n/a{
598n/a return Py_BuildValue("O&", PyMac_BuildOSType, self->ob_itself.fdCreator);
599n/a}
600n/a
601n/astatic int FInfo_set_Creator(FInfoObject *self, PyObject *v, void *closure)
602n/a{
603n/a return PyArg_Parse(v, "O&", PyMac_GetOSType, &self->ob_itself.fdCreator)-1;
604n/a return 0;
605n/a}
606n/a
607n/astatic PyObject *FInfo_get_Flags(FInfoObject *self, void *closure)
608n/a{
609n/a return Py_BuildValue("H", self->ob_itself.fdFlags);
610n/a}
611n/a
612n/astatic int FInfo_set_Flags(FInfoObject *self, PyObject *v, void *closure)
613n/a{
614n/a return PyArg_Parse(v, "H", &self->ob_itself.fdFlags)-1;
615n/a return 0;
616n/a}
617n/a
618n/astatic PyObject *FInfo_get_Location(FInfoObject *self, void *closure)
619n/a{
620n/a return Py_BuildValue("O&", PyMac_BuildPoint, self->ob_itself.fdLocation);
621n/a}
622n/a
623n/astatic int FInfo_set_Location(FInfoObject *self, PyObject *v, void *closure)
624n/a{
625n/a return PyArg_Parse(v, "O&", PyMac_GetPoint, &self->ob_itself.fdLocation)-1;
626n/a return 0;
627n/a}
628n/a
629n/astatic PyObject *FInfo_get_Fldr(FInfoObject *self, void *closure)
630n/a{
631n/a return Py_BuildValue("h", self->ob_itself.fdFldr);
632n/a}
633n/a
634n/astatic int FInfo_set_Fldr(FInfoObject *self, PyObject *v, void *closure)
635n/a{
636n/a return PyArg_Parse(v, "h", &self->ob_itself.fdFldr)-1;
637n/a return 0;
638n/a}
639n/a
640n/astatic PyGetSetDef FInfo_getsetlist[] = {
641n/a {"Type", (getter)FInfo_get_Type, (setter)FInfo_set_Type, "4-char file type"},
642n/a {"Creator", (getter)FInfo_get_Creator, (setter)FInfo_set_Creator, "4-char file creator"},
643n/a {"Flags", (getter)FInfo_get_Flags, (setter)FInfo_set_Flags, "Finder flag bits"},
644n/a {"Location", (getter)FInfo_get_Location, (setter)FInfo_set_Location, "(x, y) location of the file's icon in its parent finder window"},
645n/a {"Fldr", (getter)FInfo_get_Fldr, (setter)FInfo_set_Fldr, "Original folder, for 'put away'"},
646n/a {NULL, NULL, NULL, NULL},
647n/a};
648n/a
649n/a
650n/a#define FInfo_compare NULL
651n/a
652n/a#define FInfo_repr NULL
653n/a
654n/a#define FInfo_hash NULL
655n/astatic int FInfo_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
656n/a{
657n/a FInfo *itself = NULL;
658n/a static char *kw[] = {"itself", 0};
659n/a
660n/a if (PyArg_ParseTupleAndKeywords(_args, _kwds, "|O&", kw, FInfo_Convert, &itself))
661n/a {
662n/a if (itself) memcpy(&((FInfoObject *)_self)->ob_itself, itself, sizeof(FInfo));
663n/a return 0;
664n/a }
665n/a return -1;
666n/a}
667n/a
668n/a#define FInfo_tp_alloc PyType_GenericAlloc
669n/a
670n/astatic PyObject *FInfo_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
671n/a{
672n/a PyObject *self;
673n/a
674n/a if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
675n/a memset(&((FInfoObject *)self)->ob_itself, 0, sizeof(FInfo));
676n/a return self;
677n/a}
678n/a
679n/a#define FInfo_tp_free PyObject_Del
680n/a
681n/a
682n/astatic PyTypeObject FInfo_Type = {
683n/a PyObject_HEAD_INIT(NULL)
684n/a 0, /*ob_size*/
685n/a "Carbon.File.FInfo", /*tp_name*/
686n/a sizeof(FInfoObject), /*tp_basicsize*/
687n/a 0, /*tp_itemsize*/
688n/a /* methods */
689n/a (destructor) FInfo_dealloc, /*tp_dealloc*/
690n/a 0, /*tp_print*/
691n/a (getattrfunc)0, /*tp_getattr*/
692n/a (setattrfunc)0, /*tp_setattr*/
693n/a (cmpfunc) FInfo_compare, /*tp_compare*/
694n/a (reprfunc) FInfo_repr, /*tp_repr*/
695n/a (PyNumberMethods *)0, /* tp_as_number */
696n/a (PySequenceMethods *)0, /* tp_as_sequence */
697n/a (PyMappingMethods *)0, /* tp_as_mapping */
698n/a (hashfunc) FInfo_hash, /*tp_hash*/
699n/a 0, /*tp_call*/
700n/a 0, /*tp_str*/
701n/a PyObject_GenericGetAttr, /*tp_getattro*/
702n/a PyObject_GenericSetAttr, /*tp_setattro */
703n/a 0, /*tp_as_buffer*/
704n/a Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
705n/a 0, /*tp_doc*/
706n/a 0, /*tp_traverse*/
707n/a 0, /*tp_clear*/
708n/a 0, /*tp_richcompare*/
709n/a 0, /*tp_weaklistoffset*/
710n/a 0, /*tp_iter*/
711n/a 0, /*tp_iternext*/
712n/a FInfo_methods, /* tp_methods */
713n/a 0, /*tp_members*/
714n/a FInfo_getsetlist, /*tp_getset*/
715n/a 0, /*tp_base*/
716n/a 0, /*tp_dict*/
717n/a 0, /*tp_descr_get*/
718n/a 0, /*tp_descr_set*/
719n/a 0, /*tp_dictoffset*/
720n/a FInfo_tp_init, /* tp_init */
721n/a FInfo_tp_alloc, /* tp_alloc */
722n/a FInfo_tp_new, /* tp_new */
723n/a FInfo_tp_free, /* tp_free */
724n/a};
725n/a
726n/a#endif /* !__LP64__ */
727n/a/* --------------------- End object type FInfo ---------------------- */
728n/a
729n/a
730n/a/* ----------------------- Object type Alias ------------------------ */
731n/a
732n/astatic PyTypeObject Alias_Type;
733n/a
734n/a#define Alias_Check(x) ((x)->ob_type == &Alias_Type || PyObject_TypeCheck((x), &Alias_Type))
735n/a
736n/atypedef struct AliasObject {
737n/a PyObject_HEAD
738n/a AliasHandle ob_itself;
739n/a void (*ob_freeit)(AliasHandle ptr);
740n/a} AliasObject;
741n/a
742n/astatic PyObject *Alias_New(AliasHandle itself)
743n/a{
744n/a AliasObject *it;
745n/a if (itself == NULL) return PyMac_Error(resNotFound);
746n/a it = PyObject_NEW(AliasObject, &Alias_Type);
747n/a if (it == NULL) return NULL;
748n/a it->ob_itself = itself;
749n/a it->ob_freeit = NULL;
750n/a return (PyObject *)it;
751n/a}
752n/a
753n/astatic int Alias_Convert(PyObject *v, AliasHandle *p_itself)
754n/a{
755n/a if (!Alias_Check(v))
756n/a {
757n/a PyErr_SetString(PyExc_TypeError, "Alias required");
758n/a return 0;
759n/a }
760n/a *p_itself = ((AliasObject *)v)->ob_itself;
761n/a return 1;
762n/a}
763n/a
764n/astatic void Alias_dealloc(AliasObject *self)
765n/a{
766n/a if (self->ob_freeit && self->ob_itself)
767n/a {
768n/a self->ob_freeit(self->ob_itself);
769n/a }
770n/a self->ob_itself = NULL;
771n/a self->ob_type->tp_free((PyObject *)self);
772n/a}
773n/a
774n/a#ifndef __LP64__
775n/astatic PyObject *Alias_ResolveAlias(AliasObject *_self, PyObject *_args)
776n/a{
777n/a PyObject *_res = NULL;
778n/a OSErr _err;
779n/a FSSpec fromFile__buf__;
780n/a FSSpec *fromFile = &fromFile__buf__;
781n/a FSSpec target;
782n/a Boolean wasChanged;
783n/a if (!PyArg_ParseTuple(_args, "O&",
784n/a myPyMac_GetOptFSSpecPtr, &fromFile))
785n/a return NULL;
786n/a _err = ResolveAlias(fromFile,
787n/a _self->ob_itself,
788n/a &target,
789n/a &wasChanged);
790n/a if (_err != noErr) return PyMac_Error(_err);
791n/a _res = Py_BuildValue("O&b",
792n/a FSSpec_New, &target,
793n/a wasChanged);
794n/a return _res;
795n/a}
796n/a
797n/astatic PyObject *Alias_GetAliasInfo(AliasObject *_self, PyObject *_args)
798n/a{
799n/a PyObject *_res = NULL;
800n/a OSErr _err;
801n/a AliasInfoType index;
802n/a Str63 theString;
803n/a if (!PyArg_ParseTuple(_args, "h",
804n/a &index))
805n/a return NULL;
806n/a _err = GetAliasInfo(_self->ob_itself,
807n/a index,
808n/a theString);
809n/a if (_err != noErr) return PyMac_Error(_err);
810n/a _res = Py_BuildValue("O&",
811n/a PyMac_BuildStr255, theString);
812n/a return _res;
813n/a}
814n/a
815n/astatic PyObject *Alias_ResolveAliasWithMountFlags(AliasObject *_self, PyObject *_args)
816n/a{
817n/a PyObject *_res = NULL;
818n/a OSErr _err;
819n/a FSSpec fromFile__buf__;
820n/a FSSpec *fromFile = &fromFile__buf__;
821n/a FSSpec target;
822n/a Boolean wasChanged;
823n/a unsigned long mountFlags;
824n/a if (!PyArg_ParseTuple(_args, "O&l",
825n/a myPyMac_GetOptFSSpecPtr, &fromFile,
826n/a &mountFlags))
827n/a return NULL;
828n/a _err = ResolveAliasWithMountFlags(fromFile,
829n/a _self->ob_itself,
830n/a &target,
831n/a &wasChanged,
832n/a mountFlags);
833n/a if (_err != noErr) return PyMac_Error(_err);
834n/a _res = Py_BuildValue("O&b",
835n/a FSSpec_New, &target,
836n/a wasChanged);
837n/a return _res;
838n/a}
839n/a
840n/astatic PyObject *Alias_FollowFinderAlias(AliasObject *_self, PyObject *_args)
841n/a{
842n/a PyObject *_res = NULL;
843n/a OSErr _err;
844n/a FSSpec fromFile__buf__;
845n/a FSSpec *fromFile = &fromFile__buf__;
846n/a Boolean logon;
847n/a FSSpec target;
848n/a Boolean wasChanged;
849n/a if (!PyArg_ParseTuple(_args, "O&b",
850n/a myPyMac_GetOptFSSpecPtr, &fromFile,
851n/a &logon))
852n/a return NULL;
853n/a _err = FollowFinderAlias(fromFile,
854n/a _self->ob_itself,
855n/a logon,
856n/a &target,
857n/a &wasChanged);
858n/a if (_err != noErr) return PyMac_Error(_err);
859n/a _res = Py_BuildValue("O&b",
860n/a FSSpec_New, &target,
861n/a wasChanged);
862n/a return _res;
863n/a}
864n/a#endif /* !__LP64__ */
865n/a
866n/astatic PyObject *Alias_FSResolveAliasWithMountFlags(AliasObject *_self, PyObject *_args)
867n/a{
868n/a PyObject *_res = NULL;
869n/a OSErr _err;
870n/a FSRef fromFile__buf__;
871n/a FSRef *fromFile = &fromFile__buf__;
872n/a FSRef target;
873n/a Boolean wasChanged;
874n/a unsigned long mountFlags;
875n/a if (!PyArg_ParseTuple(_args, "O&l",
876n/a myPyMac_GetOptFSRefPtr, &fromFile,
877n/a &mountFlags))
878n/a return NULL;
879n/a _err = FSResolveAliasWithMountFlags(fromFile,
880n/a _self->ob_itself,
881n/a &target,
882n/a &wasChanged,
883n/a mountFlags);
884n/a if (_err != noErr) return PyMac_Error(_err);
885n/a _res = Py_BuildValue("O&b",
886n/a FSRef_New, &target,
887n/a wasChanged);
888n/a return _res;
889n/a}
890n/a
891n/astatic PyObject *Alias_FSResolveAlias(AliasObject *_self, PyObject *_args)
892n/a{
893n/a PyObject *_res = NULL;
894n/a OSErr _err;
895n/a FSRef fromFile__buf__;
896n/a FSRef *fromFile = &fromFile__buf__;
897n/a FSRef target;
898n/a Boolean wasChanged;
899n/a if (!PyArg_ParseTuple(_args, "O&",
900n/a myPyMac_GetOptFSRefPtr, &fromFile))
901n/a return NULL;
902n/a _err = FSResolveAlias(fromFile,
903n/a _self->ob_itself,
904n/a &target,
905n/a &wasChanged);
906n/a if (_err != noErr) return PyMac_Error(_err);
907n/a _res = Py_BuildValue("O&b",
908n/a FSRef_New, &target,
909n/a wasChanged);
910n/a return _res;
911n/a}
912n/a
913n/astatic PyObject *Alias_FSFollowFinderAlias(AliasObject *_self, PyObject *_args)
914n/a{
915n/a PyObject *_res = NULL;
916n/a OSErr _err;
917n/a FSRef fromFile;
918n/a Boolean logon;
919n/a FSRef target;
920n/a Boolean wasChanged;
921n/a if (!PyArg_ParseTuple(_args, "b",
922n/a &logon))
923n/a return NULL;
924n/a _err = FSFollowFinderAlias(&fromFile,
925n/a _self->ob_itself,
926n/a logon,
927n/a &target,
928n/a &wasChanged);
929n/a if (_err != noErr) return PyMac_Error(_err);
930n/a _res = Py_BuildValue("O&O&b",
931n/a FSRef_New, &fromFile,
932n/a FSRef_New, &target,
933n/a wasChanged);
934n/a return _res;
935n/a}
936n/a
937n/astatic PyMethodDef Alias_methods[] = {
938n/a#ifndef __LP64__
939n/a {"ResolveAlias", (PyCFunction)Alias_ResolveAlias, 1,
940n/a PyDoc_STR("(FSSpec fromFile) -> (FSSpec target, Boolean wasChanged)")},
941n/a {"GetAliasInfo", (PyCFunction)Alias_GetAliasInfo, 1,
942n/a PyDoc_STR("(AliasInfoType index) -> (Str63 theString)")},
943n/a {"ResolveAliasWithMountFlags", (PyCFunction)Alias_ResolveAliasWithMountFlags, 1,
944n/a PyDoc_STR("(FSSpec fromFile, unsigned long mountFlags) -> (FSSpec target, Boolean wasChanged)")},
945n/a {"FollowFinderAlias", (PyCFunction)Alias_FollowFinderAlias, 1,
946n/a PyDoc_STR("(FSSpec fromFile, Boolean logon) -> (FSSpec target, Boolean wasChanged)")},
947n/a#endif /* !__LP64__ */
948n/a {"FSResolveAliasWithMountFlags", (PyCFunction)Alias_FSResolveAliasWithMountFlags, 1,
949n/a PyDoc_STR("(FSRef fromFile, unsigned long mountFlags) -> (FSRef target, Boolean wasChanged)")},
950n/a {"FSResolveAlias", (PyCFunction)Alias_FSResolveAlias, 1,
951n/a PyDoc_STR("(FSRef fromFile) -> (FSRef target, Boolean wasChanged)")},
952n/a {"FSFollowFinderAlias", (PyCFunction)Alias_FSFollowFinderAlias, 1,
953n/a PyDoc_STR("(Boolean logon) -> (FSRef fromFile, FSRef target, Boolean wasChanged)")},
954n/a {NULL, NULL, 0}
955n/a};
956n/a
957n/astatic PyObject *Alias_get_data(AliasObject *self, void *closure)
958n/a{
959n/a int size;
960n/a PyObject *rv;
961n/a
962n/a size = GetHandleSize((Handle)self->ob_itself);
963n/a HLock((Handle)self->ob_itself);
964n/a rv = PyString_FromStringAndSize(*(Handle)self->ob_itself, size);
965n/a HUnlock((Handle)self->ob_itself);
966n/a return rv;
967n/a
968n/a}
969n/a
970n/a#define Alias_set_data NULL
971n/a
972n/astatic PyGetSetDef Alias_getsetlist[] = {
973n/a {"data", (getter)Alias_get_data, (setter)Alias_set_data, "Raw data of the alias object"},
974n/a {NULL, NULL, NULL, NULL},
975n/a};
976n/a
977n/a
978n/a#define Alias_compare NULL
979n/a
980n/a#define Alias_repr NULL
981n/a
982n/a#define Alias_hash NULL
983n/astatic int Alias_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
984n/a{
985n/a AliasHandle itself = NULL;
986n/a char *rawdata = NULL;
987n/a int rawdatalen = 0;
988n/a Handle h;
989n/a static char *kw[] = {"itself", "rawdata", 0};
990n/a
991n/a if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "|O&s#", kw, Alias_Convert, &itself, &rawdata, &rawdatalen))
992n/a return -1;
993n/a if (itself && rawdata)
994n/a {
995n/a PyErr_SetString(PyExc_TypeError, "Only one of itself or rawdata may be specified");
996n/a return -1;
997n/a }
998n/a if (!itself && !rawdata)
999n/a {
1000n/a PyErr_SetString(PyExc_TypeError, "One of itself or rawdata must be specified");
1001n/a return -1;
1002n/a }
1003n/a if (rawdata)
1004n/a {
1005n/a if ((h = NewHandle(rawdatalen)) == NULL)
1006n/a {
1007n/a PyErr_NoMemory();
1008n/a return -1;
1009n/a }
1010n/a HLock(h);
1011n/a memcpy((char *)*h, rawdata, rawdatalen);
1012n/a HUnlock(h);
1013n/a ((AliasObject *)_self)->ob_itself = (AliasHandle)h;
1014n/a return 0;
1015n/a }
1016n/a ((AliasObject *)_self)->ob_itself = itself;
1017n/a return 0;
1018n/a}
1019n/a
1020n/a#define Alias_tp_alloc PyType_GenericAlloc
1021n/a
1022n/astatic PyObject *Alias_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
1023n/a{
1024n/a PyObject *self;
1025n/a
1026n/a if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1027n/a ((AliasObject *)self)->ob_itself = NULL;
1028n/a return self;
1029n/a}
1030n/a
1031n/a#define Alias_tp_free PyObject_Del
1032n/a
1033n/a
1034n/astatic PyTypeObject Alias_Type = {
1035n/a PyObject_HEAD_INIT(NULL)
1036n/a 0, /*ob_size*/
1037n/a "Carbon.File.Alias", /*tp_name*/
1038n/a sizeof(AliasObject), /*tp_basicsize*/
1039n/a 0, /*tp_itemsize*/
1040n/a /* methods */
1041n/a (destructor) Alias_dealloc, /*tp_dealloc*/
1042n/a 0, /*tp_print*/
1043n/a (getattrfunc)0, /*tp_getattr*/
1044n/a (setattrfunc)0, /*tp_setattr*/
1045n/a (cmpfunc) Alias_compare, /*tp_compare*/
1046n/a (reprfunc) Alias_repr, /*tp_repr*/
1047n/a (PyNumberMethods *)0, /* tp_as_number */
1048n/a (PySequenceMethods *)0, /* tp_as_sequence */
1049n/a (PyMappingMethods *)0, /* tp_as_mapping */
1050n/a (hashfunc) Alias_hash, /*tp_hash*/
1051n/a 0, /*tp_call*/
1052n/a 0, /*tp_str*/
1053n/a PyObject_GenericGetAttr, /*tp_getattro*/
1054n/a PyObject_GenericSetAttr, /*tp_setattro */
1055n/a 0, /*tp_as_buffer*/
1056n/a Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1057n/a 0, /*tp_doc*/
1058n/a 0, /*tp_traverse*/
1059n/a 0, /*tp_clear*/
1060n/a 0, /*tp_richcompare*/
1061n/a 0, /*tp_weaklistoffset*/
1062n/a 0, /*tp_iter*/
1063n/a 0, /*tp_iternext*/
1064n/a Alias_methods, /* tp_methods */
1065n/a 0, /*tp_members*/
1066n/a Alias_getsetlist, /*tp_getset*/
1067n/a 0, /*tp_base*/
1068n/a 0, /*tp_dict*/
1069n/a 0, /*tp_descr_get*/
1070n/a 0, /*tp_descr_set*/
1071n/a 0, /*tp_dictoffset*/
1072n/a Alias_tp_init, /* tp_init */
1073n/a Alias_tp_alloc, /* tp_alloc */
1074n/a Alias_tp_new, /* tp_new */
1075n/a Alias_tp_free, /* tp_free */
1076n/a};
1077n/a
1078n/a/* --------------------- End object type Alias ---------------------- */
1079n/a
1080n/a
1081n/a/* ----------------------- Object type FSSpec ----------------------- */
1082n/a#ifndef __LP64__
1083n/a
1084n/astatic PyTypeObject FSSpec_Type;
1085n/a
1086n/a#define FSSpec_Check(x) ((x)->ob_type == &FSSpec_Type || PyObject_TypeCheck((x), &FSSpec_Type))
1087n/a
1088n/atypedef struct FSSpecObject {
1089n/a PyObject_HEAD
1090n/a FSSpec ob_itself;
1091n/a} FSSpecObject;
1092n/a
1093n/astatic PyObject *FSSpec_New(FSSpec *itself)
1094n/a{
1095n/a FSSpecObject *it;
1096n/a if (itself == NULL) return PyMac_Error(resNotFound);
1097n/a it = PyObject_NEW(FSSpecObject, &FSSpec_Type);
1098n/a if (it == NULL) return NULL;
1099n/a it->ob_itself = *itself;
1100n/a return (PyObject *)it;
1101n/a}
1102n/a
1103n/astatic void FSSpec_dealloc(FSSpecObject *self)
1104n/a{
1105n/a /* Cleanup of self->ob_itself goes here */
1106n/a self->ob_type->tp_free((PyObject *)self);
1107n/a}
1108n/a
1109n/astatic PyObject *FSSpec_FSpOpenDF(FSSpecObject *_self, PyObject *_args)
1110n/a{
1111n/a PyObject *_res = NULL;
1112n/a OSErr _err;
1113n/a SInt8 permission;
1114n/a short refNum;
1115n/a if (!PyArg_ParseTuple(_args, "b",
1116n/a &permission))
1117n/a return NULL;
1118n/a _err = FSpOpenDF(&_self->ob_itself,
1119n/a permission,
1120n/a &refNum);
1121n/a if (_err != noErr) return PyMac_Error(_err);
1122n/a _res = Py_BuildValue("h",
1123n/a refNum);
1124n/a return _res;
1125n/a}
1126n/a
1127n/astatic PyObject *FSSpec_FSpOpenRF(FSSpecObject *_self, PyObject *_args)
1128n/a{
1129n/a PyObject *_res = NULL;
1130n/a OSErr _err;
1131n/a SInt8 permission;
1132n/a short refNum;
1133n/a if (!PyArg_ParseTuple(_args, "b",
1134n/a &permission))
1135n/a return NULL;
1136n/a _err = FSpOpenRF(&_self->ob_itself,
1137n/a permission,
1138n/a &refNum);
1139n/a if (_err != noErr) return PyMac_Error(_err);
1140n/a _res = Py_BuildValue("h",
1141n/a refNum);
1142n/a return _res;
1143n/a}
1144n/a
1145n/astatic PyObject *FSSpec_FSpCreate(FSSpecObject *_self, PyObject *_args)
1146n/a{
1147n/a PyObject *_res = NULL;
1148n/a OSErr _err;
1149n/a OSType creator;
1150n/a OSType fileType;
1151n/a ScriptCode scriptTag;
1152n/a if (!PyArg_ParseTuple(_args, "O&O&h",
1153n/a PyMac_GetOSType, &creator,
1154n/a PyMac_GetOSType, &fileType,
1155n/a &scriptTag))
1156n/a return NULL;
1157n/a _err = FSpCreate(&_self->ob_itself,
1158n/a creator,
1159n/a fileType,
1160n/a scriptTag);
1161n/a if (_err != noErr) return PyMac_Error(_err);
1162n/a Py_INCREF(Py_None);
1163n/a _res = Py_None;
1164n/a return _res;
1165n/a}
1166n/a
1167n/astatic PyObject *FSSpec_FSpDirCreate(FSSpecObject *_self, PyObject *_args)
1168n/a{
1169n/a PyObject *_res = NULL;
1170n/a OSErr _err;
1171n/a ScriptCode scriptTag;
1172n/a long createdDirID;
1173n/a if (!PyArg_ParseTuple(_args, "h",
1174n/a &scriptTag))
1175n/a return NULL;
1176n/a _err = FSpDirCreate(&_self->ob_itself,
1177n/a scriptTag,
1178n/a &createdDirID);
1179n/a if (_err != noErr) return PyMac_Error(_err);
1180n/a _res = Py_BuildValue("l",
1181n/a createdDirID);
1182n/a return _res;
1183n/a}
1184n/a
1185n/astatic PyObject *FSSpec_FSpDelete(FSSpecObject *_self, PyObject *_args)
1186n/a{
1187n/a PyObject *_res = NULL;
1188n/a OSErr _err;
1189n/a if (!PyArg_ParseTuple(_args, ""))
1190n/a return NULL;
1191n/a _err = FSpDelete(&_self->ob_itself);
1192n/a if (_err != noErr) return PyMac_Error(_err);
1193n/a Py_INCREF(Py_None);
1194n/a _res = Py_None;
1195n/a return _res;
1196n/a}
1197n/a
1198n/astatic PyObject *FSSpec_FSpGetFInfo(FSSpecObject *_self, PyObject *_args)
1199n/a{
1200n/a PyObject *_res = NULL;
1201n/a OSErr _err;
1202n/a FInfo fndrInfo;
1203n/a if (!PyArg_ParseTuple(_args, ""))
1204n/a return NULL;
1205n/a _err = FSpGetFInfo(&_self->ob_itself,
1206n/a &fndrInfo);
1207n/a if (_err != noErr) return PyMac_Error(_err);
1208n/a _res = Py_BuildValue("O&",
1209n/a FInfo_New, &fndrInfo);
1210n/a return _res;
1211n/a}
1212n/a
1213n/astatic PyObject *FSSpec_FSpSetFInfo(FSSpecObject *_self, PyObject *_args)
1214n/a{
1215n/a PyObject *_res = NULL;
1216n/a OSErr _err;
1217n/a FInfo fndrInfo;
1218n/a if (!PyArg_ParseTuple(_args, "O&",
1219n/a FInfo_Convert, &fndrInfo))
1220n/a return NULL;
1221n/a _err = FSpSetFInfo(&_self->ob_itself,
1222n/a &fndrInfo);
1223n/a if (_err != noErr) return PyMac_Error(_err);
1224n/a Py_INCREF(Py_None);
1225n/a _res = Py_None;
1226n/a return _res;
1227n/a}
1228n/a
1229n/astatic PyObject *FSSpec_FSpSetFLock(FSSpecObject *_self, PyObject *_args)
1230n/a{
1231n/a PyObject *_res = NULL;
1232n/a OSErr _err;
1233n/a if (!PyArg_ParseTuple(_args, ""))
1234n/a return NULL;
1235n/a _err = FSpSetFLock(&_self->ob_itself);
1236n/a if (_err != noErr) return PyMac_Error(_err);
1237n/a Py_INCREF(Py_None);
1238n/a _res = Py_None;
1239n/a return _res;
1240n/a}
1241n/a
1242n/astatic PyObject *FSSpec_FSpRstFLock(FSSpecObject *_self, PyObject *_args)
1243n/a{
1244n/a PyObject *_res = NULL;
1245n/a OSErr _err;
1246n/a if (!PyArg_ParseTuple(_args, ""))
1247n/a return NULL;
1248n/a _err = FSpRstFLock(&_self->ob_itself);
1249n/a if (_err != noErr) return PyMac_Error(_err);
1250n/a Py_INCREF(Py_None);
1251n/a _res = Py_None;
1252n/a return _res;
1253n/a}
1254n/a
1255n/astatic PyObject *FSSpec_FSpRename(FSSpecObject *_self, PyObject *_args)
1256n/a{
1257n/a PyObject *_res = NULL;
1258n/a OSErr _err;
1259n/a Str255 newName;
1260n/a if (!PyArg_ParseTuple(_args, "O&",
1261n/a PyMac_GetStr255, newName))
1262n/a return NULL;
1263n/a _err = FSpRename(&_self->ob_itself,
1264n/a newName);
1265n/a if (_err != noErr) return PyMac_Error(_err);
1266n/a Py_INCREF(Py_None);
1267n/a _res = Py_None;
1268n/a return _res;
1269n/a}
1270n/a
1271n/astatic PyObject *FSSpec_FSpCatMove(FSSpecObject *_self, PyObject *_args)
1272n/a{
1273n/a PyObject *_res = NULL;
1274n/a OSErr _err;
1275n/a FSSpec dest;
1276n/a if (!PyArg_ParseTuple(_args, "O&",
1277n/a FSSpec_Convert, &dest))
1278n/a return NULL;
1279n/a _err = FSpCatMove(&_self->ob_itself,
1280n/a &dest);
1281n/a if (_err != noErr) return PyMac_Error(_err);
1282n/a Py_INCREF(Py_None);
1283n/a _res = Py_None;
1284n/a return _res;
1285n/a}
1286n/a
1287n/astatic PyObject *FSSpec_FSpExchangeFiles(FSSpecObject *_self, PyObject *_args)
1288n/a{
1289n/a PyObject *_res = NULL;
1290n/a OSErr _err;
1291n/a FSSpec dest;
1292n/a if (!PyArg_ParseTuple(_args, "O&",
1293n/a FSSpec_Convert, &dest))
1294n/a return NULL;
1295n/a _err = FSpExchangeFiles(&_self->ob_itself,
1296n/a &dest);
1297n/a if (_err != noErr) return PyMac_Error(_err);
1298n/a Py_INCREF(Py_None);
1299n/a _res = Py_None;
1300n/a return _res;
1301n/a}
1302n/a
1303n/astatic PyObject *FSSpec_FSpMakeFSRef(FSSpecObject *_self, PyObject *_args)
1304n/a{
1305n/a PyObject *_res = NULL;
1306n/a OSErr _err;
1307n/a FSRef newRef;
1308n/a if (!PyArg_ParseTuple(_args, ""))
1309n/a return NULL;
1310n/a _err = FSpMakeFSRef(&_self->ob_itself,
1311n/a &newRef);
1312n/a if (_err != noErr) return PyMac_Error(_err);
1313n/a _res = Py_BuildValue("O&",
1314n/a FSRef_New, &newRef);
1315n/a return _res;
1316n/a}
1317n/a
1318n/astatic PyObject *FSSpec_NewAliasMinimal(FSSpecObject *_self, PyObject *_args)
1319n/a{
1320n/a PyObject *_res = NULL;
1321n/a OSErr _err;
1322n/a AliasHandle alias;
1323n/a if (!PyArg_ParseTuple(_args, ""))
1324n/a return NULL;
1325n/a _err = NewAliasMinimal(&_self->ob_itself,
1326n/a &alias);
1327n/a if (_err != noErr) return PyMac_Error(_err);
1328n/a _res = Py_BuildValue("O&",
1329n/a Alias_New, alias);
1330n/a return _res;
1331n/a}
1332n/a
1333n/astatic PyObject *FSSpec_IsAliasFile(FSSpecObject *_self, PyObject *_args)
1334n/a{
1335n/a PyObject *_res = NULL;
1336n/a OSErr _err;
1337n/a Boolean aliasFileFlag;
1338n/a Boolean folderFlag;
1339n/a if (!PyArg_ParseTuple(_args, ""))
1340n/a return NULL;
1341n/a _err = IsAliasFile(&_self->ob_itself,
1342n/a &aliasFileFlag,
1343n/a &folderFlag);
1344n/a if (_err != noErr) return PyMac_Error(_err);
1345n/a _res = Py_BuildValue("bb",
1346n/a aliasFileFlag,
1347n/a folderFlag);
1348n/a return _res;
1349n/a}
1350n/a
1351n/astatic PyObject *FSSpec_as_pathname(FSSpecObject *_self, PyObject *_args)
1352n/a{
1353n/a PyObject *_res = NULL;
1354n/a
1355n/a char strbuf[1024];
1356n/a OSErr err;
1357n/a
1358n/a if (!PyArg_ParseTuple(_args, ""))
1359n/a return NULL;
1360n/a err = _PyMac_GetFullPathname(&_self->ob_itself, strbuf, sizeof(strbuf));
1361n/a if ( err ) {
1362n/a PyMac_Error(err);
1363n/a return NULL;
1364n/a }
1365n/a _res = PyString_FromString(strbuf);
1366n/a return _res;
1367n/a
1368n/a}
1369n/a
1370n/astatic PyObject *FSSpec_as_tuple(FSSpecObject *_self, PyObject *_args)
1371n/a{
1372n/a PyObject *_res = NULL;
1373n/a
1374n/a if (!PyArg_ParseTuple(_args, ""))
1375n/a return NULL;
1376n/a _res = Py_BuildValue("(iis#)", _self->ob_itself.vRefNum, _self->ob_itself.parID,
1377n/a &_self->ob_itself.name[1], _self->ob_itself.name[0]);
1378n/a return _res;
1379n/a
1380n/a}
1381n/a
1382n/astatic PyMethodDef FSSpec_methods[] = {
1383n/a {"FSpOpenDF", (PyCFunction)FSSpec_FSpOpenDF, 1,
1384n/a PyDoc_STR("(SInt8 permission) -> (short refNum)")},
1385n/a {"FSpOpenRF", (PyCFunction)FSSpec_FSpOpenRF, 1,
1386n/a PyDoc_STR("(SInt8 permission) -> (short refNum)")},
1387n/a {"FSpCreate", (PyCFunction)FSSpec_FSpCreate, 1,
1388n/a PyDoc_STR("(OSType creator, OSType fileType, ScriptCode scriptTag) -> None")},
1389n/a {"FSpDirCreate", (PyCFunction)FSSpec_FSpDirCreate, 1,
1390n/a PyDoc_STR("(ScriptCode scriptTag) -> (long createdDirID)")},
1391n/a {"FSpDelete", (PyCFunction)FSSpec_FSpDelete, 1,
1392n/a PyDoc_STR("() -> None")},
1393n/a {"FSpGetFInfo", (PyCFunction)FSSpec_FSpGetFInfo, 1,
1394n/a PyDoc_STR("() -> (FInfo fndrInfo)")},
1395n/a {"FSpSetFInfo", (PyCFunction)FSSpec_FSpSetFInfo, 1,
1396n/a PyDoc_STR("(FInfo fndrInfo) -> None")},
1397n/a {"FSpSetFLock", (PyCFunction)FSSpec_FSpSetFLock, 1,
1398n/a PyDoc_STR("() -> None")},
1399n/a {"FSpRstFLock", (PyCFunction)FSSpec_FSpRstFLock, 1,
1400n/a PyDoc_STR("() -> None")},
1401n/a {"FSpRename", (PyCFunction)FSSpec_FSpRename, 1,
1402n/a PyDoc_STR("(Str255 newName) -> None")},
1403n/a {"FSpCatMove", (PyCFunction)FSSpec_FSpCatMove, 1,
1404n/a PyDoc_STR("(FSSpec dest) -> None")},
1405n/a {"FSpExchangeFiles", (PyCFunction)FSSpec_FSpExchangeFiles, 1,
1406n/a PyDoc_STR("(FSSpec dest) -> None")},
1407n/a {"FSpMakeFSRef", (PyCFunction)FSSpec_FSpMakeFSRef, 1,
1408n/a PyDoc_STR("() -> (FSRef newRef)")},
1409n/a {"NewAliasMinimal", (PyCFunction)FSSpec_NewAliasMinimal, 1,
1410n/a PyDoc_STR("() -> (AliasHandle alias)")},
1411n/a {"IsAliasFile", (PyCFunction)FSSpec_IsAliasFile, 1,
1412n/a PyDoc_STR("() -> (Boolean aliasFileFlag, Boolean folderFlag)")},
1413n/a {"as_pathname", (PyCFunction)FSSpec_as_pathname, 1,
1414n/a PyDoc_STR("() -> string")},
1415n/a {"as_tuple", (PyCFunction)FSSpec_as_tuple, 1,
1416n/a PyDoc_STR("() -> (vRefNum, dirID, name)")},
1417n/a {NULL, NULL, 0}
1418n/a};
1419n/a
1420n/astatic PyObject *FSSpec_get_data(FSSpecObject *self, void *closure)
1421n/a{
1422n/a return PyString_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
1423n/a}
1424n/a
1425n/a#define FSSpec_set_data NULL
1426n/a
1427n/astatic PyGetSetDef FSSpec_getsetlist[] = {
1428n/a {"data", (getter)FSSpec_get_data, (setter)FSSpec_set_data, "Raw data of the FSSpec object"},
1429n/a {NULL, NULL, NULL, NULL},
1430n/a};
1431n/a
1432n/a
1433n/a#define FSSpec_compare NULL
1434n/a
1435n/astatic PyObject * FSSpec_repr(FSSpecObject *self)
1436n/a{
1437n/a char buf[512];
1438n/a PyOS_snprintf(buf, sizeof(buf), "%s((%d, %ld, '%.*s'))",
1439n/a self->ob_type->tp_name,
1440n/a self->ob_itself.vRefNum,
1441n/a self->ob_itself.parID,
1442n/a self->ob_itself.name[0], self->ob_itself.name+1);
1443n/a return PyString_FromString(buf);
1444n/a}
1445n/a
1446n/a#define FSSpec_hash NULL
1447n/astatic int FSSpec_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
1448n/a{
1449n/a PyObject *v = NULL;
1450n/a char *rawdata = NULL;
1451n/a int rawdatalen = 0;
1452n/a static char *kw[] = {"itself", "rawdata", 0};
1453n/a
1454n/a if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "|Os#", kw, &v, &rawdata, &rawdatalen))
1455n/a return -1;
1456n/a if (v && rawdata)
1457n/a {
1458n/a PyErr_SetString(PyExc_TypeError, "Only one of itself or rawdata may be specified");
1459n/a return -1;
1460n/a }
1461n/a if (!v && !rawdata)
1462n/a {
1463n/a PyErr_SetString(PyExc_TypeError, "One of itself or rawdata must be specified");
1464n/a return -1;
1465n/a }
1466n/a if (rawdata)
1467n/a {
1468n/a if (rawdatalen != sizeof(FSSpec))
1469n/a {
1470n/a PyErr_SetString(PyExc_TypeError, "FSSpec rawdata incorrect size");
1471n/a return -1;
1472n/a }
1473n/a memcpy(&((FSSpecObject *)_self)->ob_itself, rawdata, rawdatalen);
1474n/a return 0;
1475n/a }
1476n/a if (PyMac_GetFSSpec(v, &((FSSpecObject *)_self)->ob_itself)) return 0;
1477n/a return -1;
1478n/a}
1479n/a
1480n/a#define FSSpec_tp_alloc PyType_GenericAlloc
1481n/a
1482n/astatic PyObject *FSSpec_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
1483n/a{
1484n/a PyObject *self;
1485n/a
1486n/a if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
1487n/a memset(&((FSSpecObject *)self)->ob_itself, 0, sizeof(FSSpec));
1488n/a return self;
1489n/a}
1490n/a
1491n/a#define FSSpec_tp_free PyObject_Del
1492n/a
1493n/a
1494n/astatic PyTypeObject FSSpec_Type = {
1495n/a PyObject_HEAD_INIT(NULL)
1496n/a 0, /*ob_size*/
1497n/a "Carbon.File.FSSpec", /*tp_name*/
1498n/a sizeof(FSSpecObject), /*tp_basicsize*/
1499n/a 0, /*tp_itemsize*/
1500n/a /* methods */
1501n/a (destructor) FSSpec_dealloc, /*tp_dealloc*/
1502n/a 0, /*tp_print*/
1503n/a (getattrfunc)0, /*tp_getattr*/
1504n/a (setattrfunc)0, /*tp_setattr*/
1505n/a (cmpfunc) FSSpec_compare, /*tp_compare*/
1506n/a (reprfunc) FSSpec_repr, /*tp_repr*/
1507n/a (PyNumberMethods *)0, /* tp_as_number */
1508n/a (PySequenceMethods *)0, /* tp_as_sequence */
1509n/a (PyMappingMethods *)0, /* tp_as_mapping */
1510n/a (hashfunc) FSSpec_hash, /*tp_hash*/
1511n/a 0, /*tp_call*/
1512n/a 0, /*tp_str*/
1513n/a PyObject_GenericGetAttr, /*tp_getattro*/
1514n/a PyObject_GenericSetAttr, /*tp_setattro */
1515n/a 0, /*tp_as_buffer*/
1516n/a Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
1517n/a 0, /*tp_doc*/
1518n/a 0, /*tp_traverse*/
1519n/a 0, /*tp_clear*/
1520n/a 0, /*tp_richcompare*/
1521n/a 0, /*tp_weaklistoffset*/
1522n/a 0, /*tp_iter*/
1523n/a 0, /*tp_iternext*/
1524n/a FSSpec_methods, /* tp_methods */
1525n/a 0, /*tp_members*/
1526n/a FSSpec_getsetlist, /*tp_getset*/
1527n/a 0, /*tp_base*/
1528n/a 0, /*tp_dict*/
1529n/a 0, /*tp_descr_get*/
1530n/a 0, /*tp_descr_set*/
1531n/a 0, /*tp_dictoffset*/
1532n/a FSSpec_tp_init, /* tp_init */
1533n/a FSSpec_tp_alloc, /* tp_alloc */
1534n/a FSSpec_tp_new, /* tp_new */
1535n/a FSSpec_tp_free, /* tp_free */
1536n/a};
1537n/a
1538n/a#endif /* !__LP64__ */
1539n/a/* --------------------- End object type FSSpec --------------------- */
1540n/a
1541n/a
1542n/a/* ----------------------- Object type FSRef ------------------------ */
1543n/a
1544n/astatic PyTypeObject FSRef_Type;
1545n/a
1546n/a#define FSRef_Check(x) ((x)->ob_type == &FSRef_Type || PyObject_TypeCheck((x), &FSRef_Type))
1547n/a
1548n/atypedef struct FSRefObject {
1549n/a PyObject_HEAD
1550n/a FSRef ob_itself;
1551n/a} FSRefObject;
1552n/a
1553n/astatic PyObject *FSRef_New(FSRef *itself)
1554n/a{
1555n/a FSRefObject *it;
1556n/a if (itself == NULL) return PyMac_Error(resNotFound);
1557n/a it = PyObject_NEW(FSRefObject, &FSRef_Type);
1558n/a if (it == NULL) return NULL;
1559n/a it->ob_itself = *itself;
1560n/a return (PyObject *)it;
1561n/a}
1562n/a
1563n/astatic void FSRef_dealloc(FSRefObject *self)
1564n/a{
1565n/a /* Cleanup of self->ob_itself goes here */
1566n/a self->ob_type->tp_free((PyObject *)self);
1567n/a}
1568n/a
1569n/astatic PyObject *FSRef_FSMakeFSRefUnicode(FSRefObject *_self, PyObject *_args)
1570n/a{
1571n/a PyObject *_res = NULL;
1572n/a OSErr _err;
1573n/a UniChar *nameLength__in__;
1574n/a UniCharCount nameLength__len__;
1575n/a int nameLength__in_len__;
1576n/a TextEncoding textEncodingHint;
1577n/a FSRef newRef;
1578n/a if (!PyArg_ParseTuple(_args, "u#l",
1579n/a &nameLength__in__, &nameLength__in_len__,
1580n/a &textEncodingHint))
1581n/a return NULL;
1582n/a nameLength__len__ = nameLength__in_len__;
1583n/a _err = FSMakeFSRefUnicode(&_self->ob_itself,
1584n/a nameLength__len__, nameLength__in__,
1585n/a textEncodingHint,
1586n/a &newRef);
1587n/a if (_err != noErr) return PyMac_Error(_err);
1588n/a _res = Py_BuildValue("O&",
1589n/a FSRef_New, &newRef);
1590n/a return _res;
1591n/a}
1592n/a
1593n/astatic PyObject *FSRef_FSCompareFSRefs(FSRefObject *_self, PyObject *_args)
1594n/a{
1595n/a PyObject *_res = NULL;
1596n/a OSErr _err;
1597n/a FSRef ref2;
1598n/a if (!PyArg_ParseTuple(_args, "O&",
1599n/a FSRef_Convert, &ref2))
1600n/a return NULL;
1601n/a _err = FSCompareFSRefs(&_self->ob_itself,
1602n/a &ref2);
1603n/a if (_err != noErr) return PyMac_Error(_err);
1604n/a Py_INCREF(Py_None);
1605n/a _res = Py_None;
1606n/a return _res;
1607n/a}
1608n/a
1609n/astatic PyObject *FSRef_FSCreateFileUnicode(FSRefObject *_self, PyObject *_args)
1610n/a{
1611n/a PyObject *_res = NULL;
1612n/a OSErr _err;
1613n/a UniChar *nameLength__in__;
1614n/a UniCharCount nameLength__len__;
1615n/a int nameLength__in_len__;
1616n/a FSCatalogInfoBitmap whichInfo;
1617n/a FSCatalogInfo catalogInfo;
1618n/a FSRef newRef;
1619n/a#ifndef __LP64__
1620n/a FSSpec newSpec;
1621n/a#endif
1622n/a if (!PyArg_ParseTuple(_args, "u#lO&",
1623n/a &nameLength__in__, &nameLength__in_len__,
1624n/a &whichInfo,
1625n/a FSCatalogInfo_Convert, &catalogInfo))
1626n/a return NULL;
1627n/a nameLength__len__ = nameLength__in_len__;
1628n/a _err = FSCreateFileUnicode(&_self->ob_itself,
1629n/a nameLength__len__, nameLength__in__,
1630n/a whichInfo,
1631n/a &catalogInfo,
1632n/a &newRef,
1633n/a#ifndef __LP64__
1634n/a &newSpec
1635n/a#else /* __LP64__ */
1636n/a NULL
1637n/a#endif /* __LP64__*/
1638n/a );
1639n/a if (_err != noErr) return PyMac_Error(_err);
1640n/a
1641n/a#ifndef __LP64__
1642n/a _res = Py_BuildValue("O&O&",
1643n/a FSRef_New, &newRef,
1644n/a FSSpec_New, &newSpec);
1645n/a#else /* __LP64__ */
1646n/a _res = Py_BuildValue("O&O", FSRef_New, &newRef, Py_None);
1647n/a#endif /* __LP64__ */
1648n/a
1649n/a return _res;
1650n/a}
1651n/a
1652n/astatic PyObject *FSRef_FSCreateDirectoryUnicode(FSRefObject *_self, PyObject *_args)
1653n/a{
1654n/a PyObject *_res = NULL;
1655n/a OSErr _err;
1656n/a UniChar *nameLength__in__;
1657n/a UniCharCount nameLength__len__;
1658n/a int nameLength__in_len__;
1659n/a FSCatalogInfoBitmap whichInfo;
1660n/a FSCatalogInfo catalogInfo;
1661n/a FSRef newRef;
1662n/a#ifndef __LP64__
1663n/a FSSpec newSpec;
1664n/a#endif /* !__LP64__ */
1665n/a UInt32 newDirID;
1666n/a if (!PyArg_ParseTuple(_args, "u#lO&",
1667n/a &nameLength__in__, &nameLength__in_len__,
1668n/a &whichInfo,
1669n/a FSCatalogInfo_Convert, &catalogInfo))
1670n/a return NULL;
1671n/a nameLength__len__ = nameLength__in_len__;
1672n/a _err = FSCreateDirectoryUnicode(&_self->ob_itself,
1673n/a nameLength__len__, nameLength__in__,
1674n/a whichInfo,
1675n/a &catalogInfo,
1676n/a &newRef,
1677n/a#ifndef __LP64__
1678n/a &newSpec,
1679n/a#else /* !__LP64__ */
1680n/a NULL,
1681n/a#endif /* !__LP64__ */
1682n/a &newDirID);
1683n/a if (_err != noErr) return PyMac_Error(_err);
1684n/a
1685n/a#ifndef __LP64__
1686n/a _res = Py_BuildValue("O&O&l",
1687n/a FSRef_New, &newRef,
1688n/a FSSpec_New, &newSpec,
1689n/a newDirID);
1690n/a#else /* __LP64__ */
1691n/a _res = Py_BuildValue("O&Ol",
1692n/a FSRef_New, &newRef,
1693n/a Py_None,
1694n/a newDirID);
1695n/a#endif /* __LP64__ */
1696n/a return _res;
1697n/a}
1698n/a
1699n/astatic PyObject *FSRef_FSDeleteObject(FSRefObject *_self, PyObject *_args)
1700n/a{
1701n/a PyObject *_res = NULL;
1702n/a OSErr _err;
1703n/a if (!PyArg_ParseTuple(_args, ""))
1704n/a return NULL;
1705n/a _err = FSDeleteObject(&_self->ob_itself);
1706n/a if (_err != noErr) return PyMac_Error(_err);
1707n/a Py_INCREF(Py_None);
1708n/a _res = Py_None;
1709n/a return _res;
1710n/a}
1711n/a
1712n/astatic PyObject *FSRef_FSMoveObject(FSRefObject *_self, PyObject *_args)
1713n/a{
1714n/a PyObject *_res = NULL;
1715n/a OSErr _err;
1716n/a FSRef destDirectory;
1717n/a FSRef newRef;
1718n/a if (!PyArg_ParseTuple(_args, "O&",
1719n/a FSRef_Convert, &destDirectory))
1720n/a return NULL;
1721n/a _err = FSMoveObject(&_self->ob_itself,
1722n/a &destDirectory,
1723n/a &newRef);
1724n/a if (_err != noErr) return PyMac_Error(_err);
1725n/a _res = Py_BuildValue("O&",
1726n/a FSRef_New, &newRef);
1727n/a return _res;
1728n/a}
1729n/a
1730n/astatic PyObject *FSRef_FSExchangeObjects(FSRefObject *_self, PyObject *_args)
1731n/a{
1732n/a PyObject *_res = NULL;
1733n/a OSErr _err;
1734n/a FSRef destRef;
1735n/a if (!PyArg_ParseTuple(_args, "O&",
1736n/a FSRef_Convert, &destRef))
1737n/a return NULL;
1738n/a _err = FSExchangeObjects(&_self->ob_itself,
1739n/a &destRef);
1740n/a if (_err != noErr) return PyMac_Error(_err);
1741n/a Py_INCREF(Py_None);
1742n/a _res = Py_None;
1743n/a return _res;
1744n/a}
1745n/a
1746n/astatic PyObject *FSRef_FSRenameUnicode(FSRefObject *_self, PyObject *_args)
1747n/a{
1748n/a PyObject *_res = NULL;
1749n/a OSErr _err;
1750n/a UniChar *nameLength__in__;
1751n/a UniCharCount nameLength__len__;
1752n/a int nameLength__in_len__;
1753n/a TextEncoding textEncodingHint;
1754n/a FSRef newRef;
1755n/a if (!PyArg_ParseTuple(_args, "u#l",
1756n/a &nameLength__in__, &nameLength__in_len__,
1757n/a &textEncodingHint))
1758n/a return NULL;
1759n/a nameLength__len__ = nameLength__in_len__;
1760n/a _err = FSRenameUnicode(&_self->ob_itself,
1761n/a nameLength__len__, nameLength__in__,
1762n/a textEncodingHint,
1763n/a &newRef);
1764n/a if (_err != noErr) return PyMac_Error(_err);
1765n/a _res = Py_BuildValue("O&",
1766n/a FSRef_New, &newRef);
1767n/a return _res;
1768n/a}
1769n/a
1770n/astatic PyObject *FSRef_FSGetCatalogInfo(FSRefObject *_self, PyObject *_args)
1771n/a{
1772n/a PyObject *_res = NULL;
1773n/a OSErr _err;
1774n/a FSCatalogInfoBitmap whichInfo;
1775n/a FSCatalogInfo catalogInfo;
1776n/a HFSUniStr255 outName;
1777n/a#ifndef __LP64__
1778n/a FSSpec fsSpec;
1779n/a#endif /* !__LP64__ */
1780n/a FSRef parentRef;
1781n/a if (!PyArg_ParseTuple(_args, "l",
1782n/a &whichInfo))
1783n/a return NULL;
1784n/a _err = FSGetCatalogInfo(&_self->ob_itself,
1785n/a whichInfo,
1786n/a &catalogInfo,
1787n/a &outName,
1788n/a#ifndef __LP64__
1789n/a &fsSpec,
1790n/a#else /* __LP64__ */
1791n/a NULL,
1792n/a#endif /* __LP64__ */
1793n/a &parentRef);
1794n/a if (_err != noErr) return PyMac_Error(_err);
1795n/a
1796n/a#ifndef __LP64__
1797n/a _res = Py_BuildValue("O&O&O&O&",
1798n/a FSCatalogInfo_New, &catalogInfo,
1799n/a PyMac_BuildHFSUniStr255, &outName,
1800n/a FSSpec_New, &fsSpec,
1801n/a FSRef_New, &parentRef);
1802n/a#else /* __LP64__ */
1803n/a _res = Py_BuildValue("O&O&OO&",
1804n/a FSCatalogInfo_New, &catalogInfo,
1805n/a PyMac_BuildHFSUniStr255, &outName,
1806n/a Py_None,
1807n/a FSRef_New, &parentRef);
1808n/a#endif /* __LP64__ */
1809n/a return _res;
1810n/a}
1811n/a
1812n/astatic PyObject *FSRef_FSSetCatalogInfo(FSRefObject *_self, PyObject *_args)
1813n/a{
1814n/a PyObject *_res = NULL;
1815n/a OSErr _err;
1816n/a FSCatalogInfoBitmap whichInfo;
1817n/a FSCatalogInfo catalogInfo;
1818n/a if (!PyArg_ParseTuple(_args, "lO&",
1819n/a &whichInfo,
1820n/a FSCatalogInfo_Convert, &catalogInfo))
1821n/a return NULL;
1822n/a _err = FSSetCatalogInfo(&_self->ob_itself,
1823n/a whichInfo,
1824n/a &catalogInfo);
1825n/a if (_err != noErr) return PyMac_Error(_err);
1826n/a Py_INCREF(Py_None);
1827n/a _res = Py_None;
1828n/a return _res;
1829n/a}
1830n/a
1831n/astatic PyObject *FSRef_FSCreateFork(FSRefObject *_self, PyObject *_args)
1832n/a{
1833n/a PyObject *_res = NULL;
1834n/a OSErr _err;
1835n/a UniChar *forkNameLength__in__;
1836n/a UniCharCount forkNameLength__len__;
1837n/a int forkNameLength__in_len__;
1838n/a if (!PyArg_ParseTuple(_args, "u#",
1839n/a &forkNameLength__in__, &forkNameLength__in_len__))
1840n/a return NULL;
1841n/a forkNameLength__len__ = forkNameLength__in_len__;
1842n/a _err = FSCreateFork(&_self->ob_itself,
1843n/a forkNameLength__len__, forkNameLength__in__);
1844n/a if (_err != noErr) return PyMac_Error(_err);
1845n/a Py_INCREF(Py_None);
1846n/a _res = Py_None;
1847n/a return _res;
1848n/a}
1849n/a
1850n/astatic PyObject *FSRef_FSDeleteFork(FSRefObject *_self, PyObject *_args)
1851n/a{
1852n/a PyObject *_res = NULL;
1853n/a OSErr _err;
1854n/a UniChar *forkNameLength__in__;
1855n/a UniCharCount forkNameLength__len__;
1856n/a int forkNameLength__in_len__;
1857n/a if (!PyArg_ParseTuple(_args, "u#",
1858n/a &forkNameLength__in__, &forkNameLength__in_len__))
1859n/a return NULL;
1860n/a forkNameLength__len__ = forkNameLength__in_len__;
1861n/a _err = FSDeleteFork(&_self->ob_itself,
1862n/a forkNameLength__len__, forkNameLength__in__);
1863n/a if (_err != noErr) return PyMac_Error(_err);
1864n/a Py_INCREF(Py_None);
1865n/a _res = Py_None;
1866n/a return _res;
1867n/a}
1868n/a
1869n/astatic PyObject *FSRef_FSOpenFork(FSRefObject *_self, PyObject *_args)
1870n/a{
1871n/a PyObject *_res = NULL;
1872n/a OSErr _err;
1873n/a UniChar *forkNameLength__in__;
1874n/a UniCharCount forkNameLength__len__;
1875n/a int forkNameLength__in_len__;
1876n/a SInt8 permissions;
1877n/a FSIORefNum forkRefNum;
1878n/a if (!PyArg_ParseTuple(_args, "u#b",
1879n/a &forkNameLength__in__, &forkNameLength__in_len__,
1880n/a &permissions))
1881n/a return NULL;
1882n/a forkNameLength__len__ = forkNameLength__in_len__;
1883n/a _err = FSOpenFork(&_self->ob_itself,
1884n/a forkNameLength__len__, forkNameLength__in__,
1885n/a permissions,
1886n/a &forkRefNum);
1887n/a if (_err != noErr) return PyMac_Error(_err);
1888n/a _res = Py_BuildValue("h",
1889n/a forkRefNum);
1890n/a return _res;
1891n/a}
1892n/a
1893n/astatic PyObject *FSRef_FNNotify(FSRefObject *_self, PyObject *_args)
1894n/a{
1895n/a PyObject *_res = NULL;
1896n/a OSStatus _err;
1897n/a FNMessage message;
1898n/a OptionBits flags;
1899n/a if (!PyArg_ParseTuple(_args, "ll",
1900n/a &message,
1901n/a &flags))
1902n/a return NULL;
1903n/a _err = FNNotify(&_self->ob_itself,
1904n/a message,
1905n/a flags);
1906n/a if (_err != noErr) return PyMac_Error(_err);
1907n/a Py_INCREF(Py_None);
1908n/a _res = Py_None;
1909n/a return _res;
1910n/a}
1911n/a
1912n/astatic PyObject *FSRef_FSNewAliasMinimal(FSRefObject *_self, PyObject *_args)
1913n/a{
1914n/a PyObject *_res = NULL;
1915n/a OSErr _err;
1916n/a AliasHandle inAlias;
1917n/a if (!PyArg_ParseTuple(_args, ""))
1918n/a return NULL;
1919n/a _err = FSNewAliasMinimal(&_self->ob_itself,
1920n/a &inAlias);
1921n/a if (_err != noErr) return PyMac_Error(_err);
1922n/a _res = Py_BuildValue("O&",
1923n/a Alias_New, inAlias);
1924n/a return _res;
1925n/a}
1926n/a
1927n/astatic PyObject *FSRef_FSIsAliasFile(FSRefObject *_self, PyObject *_args)
1928n/a{
1929n/a PyObject *_res = NULL;
1930n/a OSErr _err;
1931n/a Boolean aliasFileFlag;
1932n/a Boolean folderFlag;
1933n/a if (!PyArg_ParseTuple(_args, ""))
1934n/a return NULL;
1935n/a _err = FSIsAliasFile(&_self->ob_itself,
1936n/a &aliasFileFlag,
1937n/a &folderFlag);
1938n/a if (_err != noErr) return PyMac_Error(_err);
1939n/a _res = Py_BuildValue("bb",
1940n/a aliasFileFlag,
1941n/a folderFlag);
1942n/a return _res;
1943n/a}
1944n/a
1945n/astatic PyObject *FSRef_FSRefMakePath(FSRefObject *_self, PyObject *_args)
1946n/a{
1947n/a PyObject *_res = NULL;
1948n/a
1949n/a OSStatus _err;
1950n/a#define MAXPATHNAME 1024
1951n/a UInt8 path[MAXPATHNAME];
1952n/a UInt32 maxPathSize = MAXPATHNAME;
1953n/a
1954n/a if (!PyArg_ParseTuple(_args, ""))
1955n/a return NULL;
1956n/a _err = FSRefMakePath(&_self->ob_itself,
1957n/a path,
1958n/a maxPathSize);
1959n/a if (_err != noErr) return PyMac_Error(_err);
1960n/a _res = Py_BuildValue("s", path);
1961n/a return _res;
1962n/a
1963n/a}
1964n/a
1965n/astatic PyObject *FSRef_as_pathname(FSRefObject *_self, PyObject *_args)
1966n/a{
1967n/a PyObject *_res = NULL;
1968n/a
1969n/a if (!PyArg_ParseTuple(_args, ""))
1970n/a return NULL;
1971n/a _res = FSRef_FSRefMakePath(_self, _args);
1972n/a return _res;
1973n/a
1974n/a}
1975n/a
1976n/astatic PyMethodDef FSRef_methods[] = {
1977n/a {"FSMakeFSRefUnicode", (PyCFunction)FSRef_FSMakeFSRefUnicode, 1,
1978n/a PyDoc_STR("(Buffer nameLength, TextEncoding textEncodingHint) -> (FSRef newRef)")},
1979n/a {"FSCompareFSRefs", (PyCFunction)FSRef_FSCompareFSRefs, 1,
1980n/a PyDoc_STR("(FSRef ref2) -> None")},
1981n/a {"FSCreateFileUnicode", (PyCFunction)FSRef_FSCreateFileUnicode, 1,
1982n/a PyDoc_STR("(Buffer nameLength, FSCatalogInfoBitmap whichInfo, FSCatalogInfo catalogInfo) -> (FSRef newRef, FSSpec newSpec)")},
1983n/a {"FSCreateDirectoryUnicode", (PyCFunction)FSRef_FSCreateDirectoryUnicode, 1,
1984n/a PyDoc_STR("(Buffer nameLength, FSCatalogInfoBitmap whichInfo, FSCatalogInfo catalogInfo) -> (FSRef newRef, FSSpec newSpec, UInt32 newDirID)")},
1985n/a {"FSDeleteObject", (PyCFunction)FSRef_FSDeleteObject, 1,
1986n/a PyDoc_STR("() -> None")},
1987n/a {"FSMoveObject", (PyCFunction)FSRef_FSMoveObject, 1,
1988n/a PyDoc_STR("(FSRef destDirectory) -> (FSRef newRef)")},
1989n/a {"FSExchangeObjects", (PyCFunction)FSRef_FSExchangeObjects, 1,
1990n/a PyDoc_STR("(FSRef destRef) -> None")},
1991n/a {"FSRenameUnicode", (PyCFunction)FSRef_FSRenameUnicode, 1,
1992n/a PyDoc_STR("(Buffer nameLength, TextEncoding textEncodingHint) -> (FSRef newRef)")},
1993n/a {"FSGetCatalogInfo", (PyCFunction)FSRef_FSGetCatalogInfo, 1,
1994n/a PyDoc_STR("(FSCatalogInfoBitmap whichInfo) -> (FSCatalogInfo catalogInfo, HFSUniStr255 outName, FSSpec fsSpec, FSRef parentRef)")},
1995n/a {"FSSetCatalogInfo", (PyCFunction)FSRef_FSSetCatalogInfo, 1,
1996n/a PyDoc_STR("(FSCatalogInfoBitmap whichInfo, FSCatalogInfo catalogInfo) -> None")},
1997n/a {"FSCreateFork", (PyCFunction)FSRef_FSCreateFork, 1,
1998n/a PyDoc_STR("(Buffer forkNameLength) -> None")},
1999n/a {"FSDeleteFork", (PyCFunction)FSRef_FSDeleteFork, 1,
2000n/a PyDoc_STR("(Buffer forkNameLength) -> None")},
2001n/a {"FSOpenFork", (PyCFunction)FSRef_FSOpenFork, 1,
2002n/a PyDoc_STR("(Buffer forkNameLength, SInt8 permissions) -> (SInt16 forkRefNum)")},
2003n/a {"FNNotify", (PyCFunction)FSRef_FNNotify, 1,
2004n/a PyDoc_STR("(FNMessage message, OptionBits flags) -> None")},
2005n/a {"FSNewAliasMinimal", (PyCFunction)FSRef_FSNewAliasMinimal, 1,
2006n/a PyDoc_STR("() -> (AliasHandle inAlias)")},
2007n/a {"FSIsAliasFile", (PyCFunction)FSRef_FSIsAliasFile, 1,
2008n/a PyDoc_STR("() -> (Boolean aliasFileFlag, Boolean folderFlag)")},
2009n/a {"FSRefMakePath", (PyCFunction)FSRef_FSRefMakePath, 1,
2010n/a PyDoc_STR("() -> string")},
2011n/a {"as_pathname", (PyCFunction)FSRef_as_pathname, 1,
2012n/a PyDoc_STR("() -> string")},
2013n/a {NULL, NULL, 0}
2014n/a};
2015n/a
2016n/astatic PyObject *FSRef_get_data(FSRefObject *self, void *closure)
2017n/a{
2018n/a return PyString_FromStringAndSize((char *)&self->ob_itself, sizeof(self->ob_itself));
2019n/a}
2020n/a
2021n/a#define FSRef_set_data NULL
2022n/a
2023n/astatic PyGetSetDef FSRef_getsetlist[] = {
2024n/a {"data", (getter)FSRef_get_data, (setter)FSRef_set_data, "Raw data of the FSRef object"},
2025n/a {NULL, NULL, NULL, NULL},
2026n/a};
2027n/a
2028n/a
2029n/a#define FSRef_compare NULL
2030n/a
2031n/a#define FSRef_repr NULL
2032n/a
2033n/a#define FSRef_hash NULL
2034n/astatic int FSRef_tp_init(PyObject *_self, PyObject *_args, PyObject *_kwds)
2035n/a{
2036n/a PyObject *v = NULL;
2037n/a char *rawdata = NULL;
2038n/a int rawdatalen = 0;
2039n/a static char *kw[] = {"itself", "rawdata", 0};
2040n/a
2041n/a if (!PyArg_ParseTupleAndKeywords(_args, _kwds, "|Os#", kw, &v, &rawdata, &rawdatalen))
2042n/a return -1;
2043n/a if (v && rawdata)
2044n/a {
2045n/a PyErr_SetString(PyExc_TypeError, "Only one of itself or rawdata may be specified");
2046n/a return -1;
2047n/a }
2048n/a if (!v && !rawdata)
2049n/a {
2050n/a PyErr_SetString(PyExc_TypeError, "One of itself or rawdata must be specified");
2051n/a return -1;
2052n/a }
2053n/a if (rawdata)
2054n/a {
2055n/a if (rawdatalen != sizeof(FSRef))
2056n/a {
2057n/a PyErr_SetString(PyExc_TypeError, "FSRef rawdata incorrect size");
2058n/a return -1;
2059n/a }
2060n/a memcpy(&((FSRefObject *)_self)->ob_itself, rawdata, rawdatalen);
2061n/a return 0;
2062n/a }
2063n/a if (PyMac_GetFSRef(v, &((FSRefObject *)_self)->ob_itself)) return 0;
2064n/a return -1;
2065n/a}
2066n/a
2067n/a#define FSRef_tp_alloc PyType_GenericAlloc
2068n/a
2069n/astatic PyObject *FSRef_tp_new(PyTypeObject *type, PyObject *_args, PyObject *_kwds)
2070n/a{
2071n/a PyObject *self;
2072n/a
2073n/a if ((self = type->tp_alloc(type, 0)) == NULL) return NULL;
2074n/a memset(&((FSRefObject *)self)->ob_itself, 0, sizeof(FSRef));
2075n/a return self;
2076n/a}
2077n/a
2078n/a#define FSRef_tp_free PyObject_Del
2079n/a
2080n/a
2081n/astatic PyTypeObject FSRef_Type = {
2082n/a PyObject_HEAD_INIT(NULL)
2083n/a 0, /*ob_size*/
2084n/a "Carbon.File.FSRef", /*tp_name*/
2085n/a sizeof(FSRefObject), /*tp_basicsize*/
2086n/a 0, /*tp_itemsize*/
2087n/a /* methods */
2088n/a (destructor) FSRef_dealloc, /*tp_dealloc*/
2089n/a 0, /*tp_print*/
2090n/a (getattrfunc)0, /*tp_getattr*/
2091n/a (setattrfunc)0, /*tp_setattr*/
2092n/a (cmpfunc) FSRef_compare, /*tp_compare*/
2093n/a (reprfunc) FSRef_repr, /*tp_repr*/
2094n/a (PyNumberMethods *)0, /* tp_as_number */
2095n/a (PySequenceMethods *)0, /* tp_as_sequence */
2096n/a (PyMappingMethods *)0, /* tp_as_mapping */
2097n/a (hashfunc) FSRef_hash, /*tp_hash*/
2098n/a 0, /*tp_call*/
2099n/a 0, /*tp_str*/
2100n/a PyObject_GenericGetAttr, /*tp_getattro*/
2101n/a PyObject_GenericSetAttr, /*tp_setattro */
2102n/a 0, /*tp_as_buffer*/
2103n/a Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, /* tp_flags */
2104n/a 0, /*tp_doc*/
2105n/a 0, /*tp_traverse*/
2106n/a 0, /*tp_clear*/
2107n/a 0, /*tp_richcompare*/
2108n/a 0, /*tp_weaklistoffset*/
2109n/a 0, /*tp_iter*/
2110n/a 0, /*tp_iternext*/
2111n/a FSRef_methods, /* tp_methods */
2112n/a 0, /*tp_members*/
2113n/a FSRef_getsetlist, /*tp_getset*/
2114n/a 0, /*tp_base*/
2115n/a 0, /*tp_dict*/
2116n/a 0, /*tp_descr_get*/
2117n/a 0, /*tp_descr_set*/
2118n/a 0, /*tp_dictoffset*/
2119n/a FSRef_tp_init, /* tp_init */
2120n/a FSRef_tp_alloc, /* tp_alloc */
2121n/a FSRef_tp_new, /* tp_new */
2122n/a FSRef_tp_free, /* tp_free */
2123n/a};
2124n/a
2125n/a/* --------------------- End object type FSRef ---------------------- */
2126n/a
2127n/a#ifndef __LP64__
2128n/astatic PyObject *File_UnmountVol(PyObject *_self, PyObject *_args)
2129n/a{
2130n/a PyObject *_res = NULL;
2131n/a OSErr _err;
2132n/a Str63 volName;
2133n/a short vRefNum;
2134n/a if (!PyArg_ParseTuple(_args, "O&h",
2135n/a PyMac_GetStr255, volName,
2136n/a &vRefNum))
2137n/a return NULL;
2138n/a _err = UnmountVol(volName,
2139n/a vRefNum);
2140n/a if (_err != noErr) return PyMac_Error(_err);
2141n/a Py_INCREF(Py_None);
2142n/a _res = Py_None;
2143n/a return _res;
2144n/a}
2145n/a
2146n/astatic PyObject *File_FlushVol(PyObject *_self, PyObject *_args)
2147n/a{
2148n/a PyObject *_res = NULL;
2149n/a OSErr _err;
2150n/a Str63 volName;
2151n/a short vRefNum;
2152n/a if (!PyArg_ParseTuple(_args, "O&h",
2153n/a PyMac_GetStr255, volName,
2154n/a &vRefNum))
2155n/a return NULL;
2156n/a _err = FlushVol(volName,
2157n/a vRefNum);
2158n/a if (_err != noErr) return PyMac_Error(_err);
2159n/a Py_INCREF(Py_None);
2160n/a _res = Py_None;
2161n/a return _res;
2162n/a}
2163n/a
2164n/astatic PyObject *File_HSetVol(PyObject *_self, PyObject *_args)
2165n/a{
2166n/a PyObject *_res = NULL;
2167n/a OSErr _err;
2168n/a Str63 volName;
2169n/a short vRefNum;
2170n/a long dirID;
2171n/a if (!PyArg_ParseTuple(_args, "O&hl",
2172n/a PyMac_GetStr255, volName,
2173n/a &vRefNum,
2174n/a &dirID))
2175n/a return NULL;
2176n/a _err = HSetVol(volName,
2177n/a vRefNum,
2178n/a dirID);
2179n/a if (_err != noErr) return PyMac_Error(_err);
2180n/a Py_INCREF(Py_None);
2181n/a _res = Py_None;
2182n/a return _res;
2183n/a}
2184n/a
2185n/astatic PyObject *File_FSClose(PyObject *_self, PyObject *_args)
2186n/a{
2187n/a PyObject *_res = NULL;
2188n/a OSErr _err;
2189n/a short refNum;
2190n/a if (!PyArg_ParseTuple(_args, "h",
2191n/a &refNum))
2192n/a return NULL;
2193n/a _err = FSClose(refNum);
2194n/a if (_err != noErr) return PyMac_Error(_err);
2195n/a Py_INCREF(Py_None);
2196n/a _res = Py_None;
2197n/a return _res;
2198n/a}
2199n/a
2200n/astatic PyObject *File_Allocate(PyObject *_self, PyObject *_args)
2201n/a{
2202n/a PyObject *_res = NULL;
2203n/a OSErr _err;
2204n/a short refNum;
2205n/a long count;
2206n/a if (!PyArg_ParseTuple(_args, "h",
2207n/a &refNum))
2208n/a return NULL;
2209n/a _err = Allocate(refNum,
2210n/a &count);
2211n/a if (_err != noErr) return PyMac_Error(_err);
2212n/a _res = Py_BuildValue("l",
2213n/a count);
2214n/a return _res;
2215n/a}
2216n/a
2217n/astatic PyObject *File_GetEOF(PyObject *_self, PyObject *_args)
2218n/a{
2219n/a PyObject *_res = NULL;
2220n/a OSErr _err;
2221n/a short refNum;
2222n/a long logEOF;
2223n/a if (!PyArg_ParseTuple(_args, "h",
2224n/a &refNum))
2225n/a return NULL;
2226n/a _err = GetEOF(refNum,
2227n/a &logEOF);
2228n/a if (_err != noErr) return PyMac_Error(_err);
2229n/a _res = Py_BuildValue("l",
2230n/a logEOF);
2231n/a return _res;
2232n/a}
2233n/a
2234n/astatic PyObject *File_SetEOF(PyObject *_self, PyObject *_args)
2235n/a{
2236n/a PyObject *_res = NULL;
2237n/a OSErr _err;
2238n/a short refNum;
2239n/a long logEOF;
2240n/a if (!PyArg_ParseTuple(_args, "hl",
2241n/a &refNum,
2242n/a &logEOF))
2243n/a return NULL;
2244n/a _err = SetEOF(refNum,
2245n/a logEOF);
2246n/a if (_err != noErr) return PyMac_Error(_err);
2247n/a Py_INCREF(Py_None);
2248n/a _res = Py_None;
2249n/a return _res;
2250n/a}
2251n/a
2252n/astatic PyObject *File_GetFPos(PyObject *_self, PyObject *_args)
2253n/a{
2254n/a PyObject *_res = NULL;
2255n/a OSErr _err;
2256n/a short refNum;
2257n/a long filePos;
2258n/a if (!PyArg_ParseTuple(_args, "h",
2259n/a &refNum))
2260n/a return NULL;
2261n/a _err = GetFPos(refNum,
2262n/a &filePos);
2263n/a if (_err != noErr) return PyMac_Error(_err);
2264n/a _res = Py_BuildValue("l",
2265n/a filePos);
2266n/a return _res;
2267n/a}
2268n/a
2269n/astatic PyObject *File_SetFPos(PyObject *_self, PyObject *_args)
2270n/a{
2271n/a PyObject *_res = NULL;
2272n/a OSErr _err;
2273n/a short refNum;
2274n/a short posMode;
2275n/a long posOff;
2276n/a if (!PyArg_ParseTuple(_args, "hhl",
2277n/a &refNum,
2278n/a &posMode,
2279n/a &posOff))
2280n/a return NULL;
2281n/a _err = SetFPos(refNum,
2282n/a posMode,
2283n/a posOff);
2284n/a if (_err != noErr) return PyMac_Error(_err);
2285n/a Py_INCREF(Py_None);
2286n/a _res = Py_None;
2287n/a return _res;
2288n/a}
2289n/a
2290n/astatic PyObject *File_GetVRefNum(PyObject *_self, PyObject *_args)
2291n/a{
2292n/a PyObject *_res = NULL;
2293n/a OSErr _err;
2294n/a short fileRefNum;
2295n/a short vRefNum;
2296n/a if (!PyArg_ParseTuple(_args, "h",
2297n/a &fileRefNum))
2298n/a return NULL;
2299n/a _err = GetVRefNum(fileRefNum,
2300n/a &vRefNum);
2301n/a if (_err != noErr) return PyMac_Error(_err);
2302n/a _res = Py_BuildValue("h",
2303n/a vRefNum);
2304n/a return _res;
2305n/a}
2306n/a
2307n/astatic PyObject *File_HGetVol(PyObject *_self, PyObject *_args)
2308n/a{
2309n/a PyObject *_res = NULL;
2310n/a OSErr _err;
2311n/a StringPtr volName;
2312n/a short vRefNum;
2313n/a long dirID;
2314n/a if (!PyArg_ParseTuple(_args, "O&",
2315n/a PyMac_GetStr255, &volName))
2316n/a return NULL;
2317n/a _err = HGetVol(volName,
2318n/a &vRefNum,
2319n/a &dirID);
2320n/a if (_err != noErr) return PyMac_Error(_err);
2321n/a _res = Py_BuildValue("hl",
2322n/a vRefNum,
2323n/a dirID);
2324n/a return _res;
2325n/a}
2326n/a
2327n/astatic PyObject *File_HOpen(PyObject *_self, PyObject *_args)
2328n/a{
2329n/a PyObject *_res = NULL;
2330n/a OSErr _err;
2331n/a short vRefNum;
2332n/a long dirID;
2333n/a Str255 fileName;
2334n/a SInt8 permission;
2335n/a short refNum;
2336n/a if (!PyArg_ParseTuple(_args, "hlO&b",
2337n/a &vRefNum,
2338n/a &dirID,
2339n/a PyMac_GetStr255, fileName,
2340n/a &permission))
2341n/a return NULL;
2342n/a _err = HOpen(vRefNum,
2343n/a dirID,
2344n/a fileName,
2345n/a permission,
2346n/a &refNum);
2347n/a if (_err != noErr) return PyMac_Error(_err);
2348n/a _res = Py_BuildValue("h",
2349n/a refNum);
2350n/a return _res;
2351n/a}
2352n/a
2353n/astatic PyObject *File_HOpenDF(PyObject *_self, PyObject *_args)
2354n/a{
2355n/a PyObject *_res = NULL;
2356n/a OSErr _err;
2357n/a short vRefNum;
2358n/a long dirID;
2359n/a Str255 fileName;
2360n/a SInt8 permission;
2361n/a short refNum;
2362n/a if (!PyArg_ParseTuple(_args, "hlO&b",
2363n/a &vRefNum,
2364n/a &dirID,
2365n/a PyMac_GetStr255, fileName,
2366n/a &permission))
2367n/a return NULL;
2368n/a _err = HOpenDF(vRefNum,
2369n/a dirID,
2370n/a fileName,
2371n/a permission,
2372n/a &refNum);
2373n/a if (_err != noErr) return PyMac_Error(_err);
2374n/a _res = Py_BuildValue("h",
2375n/a refNum);
2376n/a return _res;
2377n/a}
2378n/a
2379n/astatic PyObject *File_HOpenRF(PyObject *_self, PyObject *_args)
2380n/a{
2381n/a PyObject *_res = NULL;
2382n/a OSErr _err;
2383n/a short vRefNum;
2384n/a long dirID;
2385n/a Str255 fileName;
2386n/a SInt8 permission;
2387n/a short refNum;
2388n/a if (!PyArg_ParseTuple(_args, "hlO&b",
2389n/a &vRefNum,
2390n/a &dirID,
2391n/a PyMac_GetStr255, fileName,
2392n/a &permission))
2393n/a return NULL;
2394n/a _err = HOpenRF(vRefNum,
2395n/a dirID,
2396n/a fileName,
2397n/a permission,
2398n/a &refNum);
2399n/a if (_err != noErr) return PyMac_Error(_err);
2400n/a _res = Py_BuildValue("h",
2401n/a refNum);
2402n/a return _res;
2403n/a}
2404n/a
2405n/astatic PyObject *File_AllocContig(PyObject *_self, PyObject *_args)
2406n/a{
2407n/a PyObject *_res = NULL;
2408n/a OSErr _err;
2409n/a short refNum;
2410n/a long count;
2411n/a if (!PyArg_ParseTuple(_args, "h",
2412n/a &refNum))
2413n/a return NULL;
2414n/a _err = AllocContig(refNum,
2415n/a &count);
2416n/a if (_err != noErr) return PyMac_Error(_err);
2417n/a _res = Py_BuildValue("l",
2418n/a count);
2419n/a return _res;
2420n/a}
2421n/a
2422n/astatic PyObject *File_HCreate(PyObject *_self, PyObject *_args)
2423n/a{
2424n/a PyObject *_res = NULL;
2425n/a OSErr _err;
2426n/a short vRefNum;
2427n/a long dirID;
2428n/a Str255 fileName;
2429n/a OSType creator;
2430n/a OSType fileType;
2431n/a if (!PyArg_ParseTuple(_args, "hlO&O&O&",
2432n/a &vRefNum,
2433n/a &dirID,
2434n/a PyMac_GetStr255, fileName,
2435n/a PyMac_GetOSType, &creator,
2436n/a PyMac_GetOSType, &fileType))
2437n/a return NULL;
2438n/a _err = HCreate(vRefNum,
2439n/a dirID,
2440n/a fileName,
2441n/a creator,
2442n/a fileType);
2443n/a if (_err != noErr) return PyMac_Error(_err);
2444n/a Py_INCREF(Py_None);
2445n/a _res = Py_None;
2446n/a return _res;
2447n/a}
2448n/a
2449n/astatic PyObject *File_DirCreate(PyObject *_self, PyObject *_args)
2450n/a{
2451n/a PyObject *_res = NULL;
2452n/a OSErr _err;
2453n/a short vRefNum;
2454n/a long parentDirID;
2455n/a Str255 directoryName;
2456n/a long createdDirID;
2457n/a if (!PyArg_ParseTuple(_args, "hlO&",
2458n/a &vRefNum,
2459n/a &parentDirID,
2460n/a PyMac_GetStr255, directoryName))
2461n/a return NULL;
2462n/a _err = DirCreate(vRefNum,
2463n/a parentDirID,
2464n/a directoryName,
2465n/a &createdDirID);
2466n/a if (_err != noErr) return PyMac_Error(_err);
2467n/a _res = Py_BuildValue("l",
2468n/a createdDirID);
2469n/a return _res;
2470n/a}
2471n/a
2472n/astatic PyObject *File_HDelete(PyObject *_self, PyObject *_args)
2473n/a{
2474n/a PyObject *_res = NULL;
2475n/a OSErr _err;
2476n/a short vRefNum;
2477n/a long dirID;
2478n/a Str255 fileName;
2479n/a if (!PyArg_ParseTuple(_args, "hlO&",
2480n/a &vRefNum,
2481n/a &dirID,
2482n/a PyMac_GetStr255, fileName))
2483n/a return NULL;
2484n/a _err = HDelete(vRefNum,
2485n/a dirID,
2486n/a fileName);
2487n/a if (_err != noErr) return PyMac_Error(_err);
2488n/a Py_INCREF(Py_None);
2489n/a _res = Py_None;
2490n/a return _res;
2491n/a}
2492n/a
2493n/astatic PyObject *File_HGetFInfo(PyObject *_self, PyObject *_args)
2494n/a{
2495n/a PyObject *_res = NULL;
2496n/a OSErr _err;
2497n/a short vRefNum;
2498n/a long dirID;
2499n/a Str255 fileName;
2500n/a FInfo fndrInfo;
2501n/a if (!PyArg_ParseTuple(_args, "hlO&",
2502n/a &vRefNum,
2503n/a &dirID,
2504n/a PyMac_GetStr255, fileName))
2505n/a return NULL;
2506n/a _err = HGetFInfo(vRefNum,
2507n/a dirID,
2508n/a fileName,
2509n/a &fndrInfo);
2510n/a if (_err != noErr) return PyMac_Error(_err);
2511n/a _res = Py_BuildValue("O&",
2512n/a FInfo_New, &fndrInfo);
2513n/a return _res;
2514n/a}
2515n/a
2516n/astatic PyObject *File_HSetFInfo(PyObject *_self, PyObject *_args)
2517n/a{
2518n/a PyObject *_res = NULL;
2519n/a OSErr _err;
2520n/a short vRefNum;
2521n/a long dirID;
2522n/a Str255 fileName;
2523n/a FInfo fndrInfo;
2524n/a if (!PyArg_ParseTuple(_args, "hlO&O&",
2525n/a &vRefNum,
2526n/a &dirID,
2527n/a PyMac_GetStr255, fileName,
2528n/a FInfo_Convert, &fndrInfo))
2529n/a return NULL;
2530n/a _err = HSetFInfo(vRefNum,
2531n/a dirID,
2532n/a fileName,
2533n/a &fndrInfo);
2534n/a if (_err != noErr) return PyMac_Error(_err);
2535n/a Py_INCREF(Py_None);
2536n/a _res = Py_None;
2537n/a return _res;
2538n/a}
2539n/a
2540n/astatic PyObject *File_HSetFLock(PyObject *_self, PyObject *_args)
2541n/a{
2542n/a PyObject *_res = NULL;
2543n/a OSErr _err;
2544n/a short vRefNum;
2545n/a long dirID;
2546n/a Str255 fileName;
2547n/a if (!PyArg_ParseTuple(_args, "hlO&",
2548n/a &vRefNum,
2549n/a &dirID,
2550n/a PyMac_GetStr255, fileName))
2551n/a return NULL;
2552n/a _err = HSetFLock(vRefNum,
2553n/a dirID,
2554n/a fileName);
2555n/a if (_err != noErr) return PyMac_Error(_err);
2556n/a Py_INCREF(Py_None);
2557n/a _res = Py_None;
2558n/a return _res;
2559n/a}
2560n/a
2561n/astatic PyObject *File_HRstFLock(PyObject *_self, PyObject *_args)
2562n/a{
2563n/a PyObject *_res = NULL;
2564n/a OSErr _err;
2565n/a short vRefNum;
2566n/a long dirID;
2567n/a Str255 fileName;
2568n/a if (!PyArg_ParseTuple(_args, "hlO&",
2569n/a &vRefNum,
2570n/a &dirID,
2571n/a PyMac_GetStr255, fileName))
2572n/a return NULL;
2573n/a _err = HRstFLock(vRefNum,
2574n/a dirID,
2575n/a fileName);
2576n/a if (_err != noErr) return PyMac_Error(_err);
2577n/a Py_INCREF(Py_None);
2578n/a _res = Py_None;
2579n/a return _res;
2580n/a}
2581n/a
2582n/astatic PyObject *File_HRename(PyObject *_self, PyObject *_args)
2583n/a{
2584n/a PyObject *_res = NULL;
2585n/a OSErr _err;
2586n/a short vRefNum;
2587n/a long dirID;
2588n/a Str255 oldName;
2589n/a Str255 newName;
2590n/a if (!PyArg_ParseTuple(_args, "hlO&O&",
2591n/a &vRefNum,
2592n/a &dirID,
2593n/a PyMac_GetStr255, oldName,
2594n/a PyMac_GetStr255, newName))
2595n/a return NULL;
2596n/a _err = HRename(vRefNum,
2597n/a dirID,
2598n/a oldName,
2599n/a newName);
2600n/a if (_err != noErr) return PyMac_Error(_err);
2601n/a Py_INCREF(Py_None);
2602n/a _res = Py_None;
2603n/a return _res;
2604n/a}
2605n/a
2606n/astatic PyObject *File_CatMove(PyObject *_self, PyObject *_args)
2607n/a{
2608n/a PyObject *_res = NULL;
2609n/a OSErr _err;
2610n/a short vRefNum;
2611n/a long dirID;
2612n/a Str255 oldName;
2613n/a long newDirID;
2614n/a Str255 newName;
2615n/a if (!PyArg_ParseTuple(_args, "hlO&lO&",
2616n/a &vRefNum,
2617n/a &dirID,
2618n/a PyMac_GetStr255, oldName,
2619n/a &newDirID,
2620n/a PyMac_GetStr255, newName))
2621n/a return NULL;
2622n/a _err = CatMove(vRefNum,
2623n/a dirID,
2624n/a oldName,
2625n/a newDirID,
2626n/a newName);
2627n/a if (_err != noErr) return PyMac_Error(_err);
2628n/a Py_INCREF(Py_None);
2629n/a _res = Py_None;
2630n/a return _res;
2631n/a}
2632n/a
2633n/astatic PyObject *File_FSMakeFSSpec(PyObject *_self, PyObject *_args)
2634n/a{
2635n/a PyObject *_res = NULL;
2636n/a OSErr _err;
2637n/a short vRefNum;
2638n/a long dirID;
2639n/a Str255 fileName;
2640n/a FSSpec spec;
2641n/a if (!PyArg_ParseTuple(_args, "hlO&",
2642n/a &vRefNum,
2643n/a &dirID,
2644n/a PyMac_GetStr255, fileName))
2645n/a return NULL;
2646n/a _err = FSMakeFSSpec(vRefNum,
2647n/a dirID,
2648n/a fileName,
2649n/a &spec);
2650n/a if (_err != noErr) return PyMac_Error(_err);
2651n/a _res = Py_BuildValue("O&",
2652n/a FSSpec_New, &spec);
2653n/a return _res;
2654n/a}
2655n/a#endif /* !__LP64__ */
2656n/a
2657n/astatic PyObject *File_FSGetForkPosition(PyObject *_self, PyObject *_args)
2658n/a{
2659n/a PyObject *_res = NULL;
2660n/a OSErr _err;
2661n/a SInt16 forkRefNum;
2662n/a SInt64 position;
2663n/a if (!PyArg_ParseTuple(_args, "h",
2664n/a &forkRefNum))
2665n/a return NULL;
2666n/a _err = FSGetForkPosition(forkRefNum,
2667n/a &position);
2668n/a if (_err != noErr) return PyMac_Error(_err);
2669n/a _res = Py_BuildValue("L",
2670n/a position);
2671n/a return _res;
2672n/a}
2673n/a
2674n/astatic PyObject *File_FSSetForkPosition(PyObject *_self, PyObject *_args)
2675n/a{
2676n/a PyObject *_res = NULL;
2677n/a OSErr _err;
2678n/a SInt16 forkRefNum;
2679n/a UInt16 positionMode;
2680n/a SInt64 positionOffset;
2681n/a if (!PyArg_ParseTuple(_args, "hHL",
2682n/a &forkRefNum,
2683n/a &positionMode,
2684n/a &positionOffset))
2685n/a return NULL;
2686n/a _err = FSSetForkPosition(forkRefNum,
2687n/a positionMode,
2688n/a positionOffset);
2689n/a if (_err != noErr) return PyMac_Error(_err);
2690n/a Py_INCREF(Py_None);
2691n/a _res = Py_None;
2692n/a return _res;
2693n/a}
2694n/a
2695n/astatic PyObject *File_FSGetForkSize(PyObject *_self, PyObject *_args)
2696n/a{
2697n/a PyObject *_res = NULL;
2698n/a OSErr _err;
2699n/a SInt16 forkRefNum;
2700n/a SInt64 forkSize;
2701n/a if (!PyArg_ParseTuple(_args, "h",
2702n/a &forkRefNum))
2703n/a return NULL;
2704n/a _err = FSGetForkSize(forkRefNum,
2705n/a &forkSize);
2706n/a if (_err != noErr) return PyMac_Error(_err);
2707n/a _res = Py_BuildValue("L",
2708n/a forkSize);
2709n/a return _res;
2710n/a}
2711n/a
2712n/astatic PyObject *File_FSSetForkSize(PyObject *_self, PyObject *_args)
2713n/a{
2714n/a PyObject *_res = NULL;
2715n/a OSErr _err;
2716n/a SInt16 forkRefNum;
2717n/a UInt16 positionMode;
2718n/a SInt64 positionOffset;
2719n/a if (!PyArg_ParseTuple(_args, "hHL",
2720n/a &forkRefNum,
2721n/a &positionMode,
2722n/a &positionOffset))
2723n/a return NULL;
2724n/a _err = FSSetForkSize(forkRefNum,
2725n/a positionMode,
2726n/a positionOffset);
2727n/a if (_err != noErr) return PyMac_Error(_err);
2728n/a Py_INCREF(Py_None);
2729n/a _res = Py_None;
2730n/a return _res;
2731n/a}
2732n/a
2733n/astatic PyObject *File_FSAllocateFork(PyObject *_self, PyObject *_args)
2734n/a{
2735n/a PyObject *_res = NULL;
2736n/a OSErr _err;
2737n/a SInt16 forkRefNum;
2738n/a FSAllocationFlags flags;
2739n/a UInt16 positionMode;
2740n/a SInt64 positionOffset;
2741n/a UInt64 requestCount;
2742n/a UInt64 actualCount;
2743n/a if (!PyArg_ParseTuple(_args, "hHHLL",
2744n/a &forkRefNum,
2745n/a &flags,
2746n/a &positionMode,
2747n/a &positionOffset,
2748n/a &requestCount))
2749n/a return NULL;
2750n/a _err = FSAllocateFork(forkRefNum,
2751n/a flags,
2752n/a positionMode,
2753n/a positionOffset,
2754n/a requestCount,
2755n/a &actualCount);
2756n/a if (_err != noErr) return PyMac_Error(_err);
2757n/a _res = Py_BuildValue("L",
2758n/a actualCount);
2759n/a return _res;
2760n/a}
2761n/a
2762n/astatic PyObject *File_FSFlushFork(PyObject *_self, PyObject *_args)
2763n/a{
2764n/a PyObject *_res = NULL;
2765n/a OSErr _err;
2766n/a SInt16 forkRefNum;
2767n/a if (!PyArg_ParseTuple(_args, "h",
2768n/a &forkRefNum))
2769n/a return NULL;
2770n/a _err = FSFlushFork(forkRefNum);
2771n/a if (_err != noErr) return PyMac_Error(_err);
2772n/a Py_INCREF(Py_None);
2773n/a _res = Py_None;
2774n/a return _res;
2775n/a}
2776n/a
2777n/astatic PyObject *File_FSCloseFork(PyObject *_self, PyObject *_args)
2778n/a{
2779n/a PyObject *_res = NULL;
2780n/a OSErr _err;
2781n/a SInt16 forkRefNum;
2782n/a if (!PyArg_ParseTuple(_args, "h",
2783n/a &forkRefNum))
2784n/a return NULL;
2785n/a _err = FSCloseFork(forkRefNum);
2786n/a if (_err != noErr) return PyMac_Error(_err);
2787n/a Py_INCREF(Py_None);
2788n/a _res = Py_None;
2789n/a return _res;
2790n/a}
2791n/a
2792n/astatic PyObject *File_FSGetDataForkName(PyObject *_self, PyObject *_args)
2793n/a{
2794n/a PyObject *_res = NULL;
2795n/a OSErr _err;
2796n/a HFSUniStr255 dataForkName;
2797n/a if (!PyArg_ParseTuple(_args, ""))
2798n/a return NULL;
2799n/a _err = FSGetDataForkName(&dataForkName);
2800n/a if (_err != noErr) return PyMac_Error(_err);
2801n/a _res = Py_BuildValue("O&",
2802n/a PyMac_BuildHFSUniStr255, &dataForkName);
2803n/a return _res;
2804n/a}
2805n/a
2806n/astatic PyObject *File_FSGetResourceForkName(PyObject *_self, PyObject *_args)
2807n/a{
2808n/a PyObject *_res = NULL;
2809n/a OSErr _err;
2810n/a HFSUniStr255 resourceForkName;
2811n/a if (!PyArg_ParseTuple(_args, ""))
2812n/a return NULL;
2813n/a _err = FSGetResourceForkName(&resourceForkName);
2814n/a if (_err != noErr) return PyMac_Error(_err);
2815n/a _res = Py_BuildValue("O&",
2816n/a PyMac_BuildHFSUniStr255, &resourceForkName);
2817n/a return _res;
2818n/a}
2819n/a
2820n/astatic PyObject *File_FSPathMakeRef(PyObject *_self, PyObject *_args)
2821n/a{
2822n/a PyObject *_res = NULL;
2823n/a OSStatus _err;
2824n/a UInt8 * path;
2825n/a FSRef ref;
2826n/a Boolean isDirectory;
2827n/a if (!PyArg_ParseTuple(_args, "s",
2828n/a &path))
2829n/a return NULL;
2830n/a _err = FSPathMakeRef(path,
2831n/a &ref,
2832n/a &isDirectory);
2833n/a if (_err != noErr) return PyMac_Error(_err);
2834n/a _res = Py_BuildValue("O&b",
2835n/a FSRef_New, &ref,
2836n/a isDirectory);
2837n/a return _res;
2838n/a}
2839n/a
2840n/astatic PyObject *File_FNNotifyByPath(PyObject *_self, PyObject *_args)
2841n/a{
2842n/a PyObject *_res = NULL;
2843n/a OSStatus _err;
2844n/a UInt8 * path;
2845n/a FNMessage message;
2846n/a OptionBits flags;
2847n/a if (!PyArg_ParseTuple(_args, "sll",
2848n/a &path,
2849n/a &message,
2850n/a &flags))
2851n/a return NULL;
2852n/a _err = FNNotifyByPath(path,
2853n/a message,
2854n/a flags);
2855n/a if (_err != noErr) return PyMac_Error(_err);
2856n/a Py_INCREF(Py_None);
2857n/a _res = Py_None;
2858n/a return _res;
2859n/a}
2860n/a
2861n/astatic PyObject *File_FNNotifyAll(PyObject *_self, PyObject *_args)
2862n/a{
2863n/a PyObject *_res = NULL;
2864n/a OSStatus _err;
2865n/a FNMessage message;
2866n/a OptionBits flags;
2867n/a if (!PyArg_ParseTuple(_args, "ll",
2868n/a &message,
2869n/a &flags))
2870n/a return NULL;
2871n/a _err = FNNotifyAll(message,
2872n/a flags);
2873n/a if (_err != noErr) return PyMac_Error(_err);
2874n/a Py_INCREF(Py_None);
2875n/a _res = Py_None;
2876n/a return _res;
2877n/a}
2878n/a
2879n/a#ifndef __LP64__
2880n/astatic PyObject *File_NewAlias(PyObject *_self, PyObject *_args)
2881n/a{
2882n/a PyObject *_res = NULL;
2883n/a OSErr _err;
2884n/a FSSpec fromFile__buf__;
2885n/a FSSpec *fromFile = &fromFile__buf__;
2886n/a FSSpec target;
2887n/a AliasHandle alias;
2888n/a if (!PyArg_ParseTuple(_args, "O&O&",
2889n/a myPyMac_GetOptFSSpecPtr, &fromFile,
2890n/a FSSpec_Convert, &target))
2891n/a return NULL;
2892n/a _err = NewAlias(fromFile,
2893n/a &target,
2894n/a &alias);
2895n/a if (_err != noErr) return PyMac_Error(_err);
2896n/a _res = Py_BuildValue("O&",
2897n/a Alias_New, alias);
2898n/a return _res;
2899n/a}
2900n/a
2901n/astatic PyObject *File_NewAliasMinimalFromFullPath(PyObject *_self, PyObject *_args)
2902n/a{
2903n/a PyObject *_res = NULL;
2904n/a OSErr _err;
2905n/a char *fullPath__in__;
2906n/a int fullPath__len__;
2907n/a int fullPath__in_len__;
2908n/a Str32 zoneName;
2909n/a Str31 serverName;
2910n/a AliasHandle alias;
2911n/a if (!PyArg_ParseTuple(_args, "s#O&O&",
2912n/a &fullPath__in__, &fullPath__in_len__,
2913n/a PyMac_GetStr255, zoneName,
2914n/a PyMac_GetStr255, serverName))
2915n/a return NULL;
2916n/a fullPath__len__ = fullPath__in_len__;
2917n/a _err = NewAliasMinimalFromFullPath(fullPath__len__, fullPath__in__,
2918n/a zoneName,
2919n/a serverName,
2920n/a &alias);
2921n/a if (_err != noErr) return PyMac_Error(_err);
2922n/a _res = Py_BuildValue("O&",
2923n/a Alias_New, alias);
2924n/a return _res;
2925n/a}
2926n/a
2927n/astatic PyObject *File_ResolveAliasFile(PyObject *_self, PyObject *_args)
2928n/a{
2929n/a PyObject *_res = NULL;
2930n/a OSErr _err;
2931n/a FSSpec theSpec;
2932n/a Boolean resolveAliasChains;
2933n/a Boolean targetIsFolder;
2934n/a Boolean wasAliased;
2935n/a if (!PyArg_ParseTuple(_args, "O&b",
2936n/a FSSpec_Convert, &theSpec,
2937n/a &resolveAliasChains))
2938n/a return NULL;
2939n/a _err = ResolveAliasFile(&theSpec,
2940n/a resolveAliasChains,
2941n/a &targetIsFolder,
2942n/a &wasAliased);
2943n/a if (_err != noErr) return PyMac_Error(_err);
2944n/a _res = Py_BuildValue("O&bb",
2945n/a FSSpec_New, &theSpec,
2946n/a targetIsFolder,
2947n/a wasAliased);
2948n/a return _res;
2949n/a}
2950n/a
2951n/astatic PyObject *File_ResolveAliasFileWithMountFlags(PyObject *_self, PyObject *_args)
2952n/a{
2953n/a PyObject *_res = NULL;
2954n/a OSErr _err;
2955n/a FSSpec theSpec;
2956n/a Boolean resolveAliasChains;
2957n/a Boolean targetIsFolder;
2958n/a Boolean wasAliased;
2959n/a unsigned long mountFlags;
2960n/a if (!PyArg_ParseTuple(_args, "O&bl",
2961n/a FSSpec_Convert, &theSpec,
2962n/a &resolveAliasChains,
2963n/a &mountFlags))
2964n/a return NULL;
2965n/a _err = ResolveAliasFileWithMountFlags(&theSpec,
2966n/a resolveAliasChains,
2967n/a &targetIsFolder,
2968n/a &wasAliased,
2969n/a mountFlags);
2970n/a if (_err != noErr) return PyMac_Error(_err);
2971n/a _res = Py_BuildValue("O&bb",
2972n/a FSSpec_New, &theSpec,
2973n/a targetIsFolder,
2974n/a wasAliased);
2975n/a return _res;
2976n/a}
2977n/a
2978n/astatic PyObject *File_UpdateAlias(PyObject *_self, PyObject *_args)
2979n/a{
2980n/a PyObject *_res = NULL;
2981n/a OSErr _err;
2982n/a FSSpec fromFile__buf__;
2983n/a FSSpec *fromFile = &fromFile__buf__;
2984n/a FSSpec target;
2985n/a AliasHandle alias;
2986n/a Boolean wasChanged;
2987n/a if (!PyArg_ParseTuple(_args, "O&O&O&",
2988n/a myPyMac_GetOptFSSpecPtr, &fromFile,
2989n/a FSSpec_Convert, &target,
2990n/a Alias_Convert, &alias))
2991n/a return NULL;
2992n/a _err = UpdateAlias(fromFile,
2993n/a &target,
2994n/a alias,
2995n/a &wasChanged);
2996n/a if (_err != noErr) return PyMac_Error(_err);
2997n/a _res = Py_BuildValue("b",
2998n/a wasChanged);
2999n/a return _res;
3000n/a}
3001n/a
3002n/astatic PyObject *File_ResolveAliasFileWithMountFlagsNoUI(PyObject *_self, PyObject *_args)
3003n/a{
3004n/a PyObject *_res = NULL;
3005n/a OSErr _err;
3006n/a FSSpec theSpec;
3007n/a Boolean resolveAliasChains;
3008n/a Boolean targetIsFolder;
3009n/a Boolean wasAliased;
3010n/a unsigned long mountFlags;
3011n/a if (!PyArg_ParseTuple(_args, "O&bl",
3012n/a FSSpec_Convert, &theSpec,
3013n/a &resolveAliasChains,
3014n/a &mountFlags))
3015n/a return NULL;
3016n/a _err = ResolveAliasFileWithMountFlagsNoUI(&theSpec,
3017n/a resolveAliasChains,
3018n/a &targetIsFolder,
3019n/a &wasAliased,
3020n/a mountFlags);
3021n/a if (_err != noErr) return PyMac_Error(_err);
3022n/a _res = Py_BuildValue("O&bb",
3023n/a FSSpec_New, &theSpec,
3024n/a targetIsFolder,
3025n/a wasAliased);
3026n/a return _res;
3027n/a}
3028n/a#endif /* !__LP64__ */
3029n/a
3030n/astatic PyObject *File_FSNewAlias(PyObject *_self, PyObject *_args)
3031n/a{
3032n/a PyObject *_res = NULL;
3033n/a OSErr _err;
3034n/a FSRef fromFile__buf__;
3035n/a FSRef *fromFile = &fromFile__buf__;
3036n/a FSRef target;
3037n/a AliasHandle inAlias;
3038n/a if (!PyArg_ParseTuple(_args, "O&O&",
3039n/a myPyMac_GetOptFSRefPtr, &fromFile,
3040n/a FSRef_Convert, &target))
3041n/a return NULL;
3042n/a _err = FSNewAlias(fromFile,
3043n/a &target,
3044n/a &inAlias);
3045n/a if (_err != noErr) return PyMac_Error(_err);
3046n/a _res = Py_BuildValue("O&",
3047n/a Alias_New, inAlias);
3048n/a return _res;
3049n/a}
3050n/a
3051n/astatic PyObject *File_FSResolveAliasFileWithMountFlags(PyObject *_self, PyObject *_args)
3052n/a{
3053n/a PyObject *_res = NULL;
3054n/a OSErr _err;
3055n/a FSRef theRef;
3056n/a Boolean resolveAliasChains;
3057n/a Boolean targetIsFolder;
3058n/a Boolean wasAliased;
3059n/a unsigned long mountFlags;
3060n/a if (!PyArg_ParseTuple(_args, "O&bl",
3061n/a FSRef_Convert, &theRef,
3062n/a &resolveAliasChains,
3063n/a &mountFlags))
3064n/a return NULL;
3065n/a _err = FSResolveAliasFileWithMountFlags(&theRef,
3066n/a resolveAliasChains,
3067n/a &targetIsFolder,
3068n/a &wasAliased,
3069n/a mountFlags);
3070n/a if (_err != noErr) return PyMac_Error(_err);
3071n/a _res = Py_BuildValue("O&bb",
3072n/a FSRef_New, &theRef,
3073n/a targetIsFolder,
3074n/a wasAliased);
3075n/a return _res;
3076n/a}
3077n/a
3078n/astatic PyObject *File_FSResolveAliasFile(PyObject *_self, PyObject *_args)
3079n/a{
3080n/a PyObject *_res = NULL;
3081n/a OSErr _err;
3082n/a FSRef theRef;
3083n/a Boolean resolveAliasChains;
3084n/a Boolean targetIsFolder;
3085n/a Boolean wasAliased;
3086n/a if (!PyArg_ParseTuple(_args, "O&b",
3087n/a FSRef_Convert, &theRef,
3088n/a &resolveAliasChains))
3089n/a return NULL;
3090n/a _err = FSResolveAliasFile(&theRef,
3091n/a resolveAliasChains,
3092n/a &targetIsFolder,
3093n/a &wasAliased);
3094n/a if (_err != noErr) return PyMac_Error(_err);
3095n/a _res = Py_BuildValue("O&bb",
3096n/a FSRef_New, &theRef,
3097n/a targetIsFolder,
3098n/a wasAliased);
3099n/a return _res;
3100n/a}
3101n/a
3102n/astatic PyObject *File_FSUpdateAlias(PyObject *_self, PyObject *_args)
3103n/a{
3104n/a PyObject *_res = NULL;
3105n/a OSErr _err;
3106n/a FSRef fromFile__buf__;
3107n/a FSRef *fromFile = &fromFile__buf__;
3108n/a FSRef target;
3109n/a AliasHandle alias;
3110n/a Boolean wasChanged;
3111n/a if (!PyArg_ParseTuple(_args, "O&O&O&",
3112n/a myPyMac_GetOptFSRefPtr, &fromFile,
3113n/a FSRef_Convert, &target,
3114n/a Alias_Convert, &alias))
3115n/a return NULL;
3116n/a _err = FSUpdateAlias(fromFile,
3117n/a &target,
3118n/a alias,
3119n/a &wasChanged);
3120n/a if (_err != noErr) return PyMac_Error(_err);
3121n/a _res = Py_BuildValue("b",
3122n/a wasChanged);
3123n/a return _res;
3124n/a}
3125n/a
3126n/astatic PyObject *File_pathname(PyObject *_self, PyObject *_args)
3127n/a{
3128n/a PyObject *_res = NULL;
3129n/a
3130n/a PyObject *obj;
3131n/a
3132n/a if (!PyArg_ParseTuple(_args, "O", &obj))
3133n/a return NULL;
3134n/a if (PyString_Check(obj)) {
3135n/a Py_INCREF(obj);
3136n/a return obj;
3137n/a }
3138n/a if (PyUnicode_Check(obj))
3139n/a return PyUnicode_AsEncodedString(obj, "utf8", "strict");
3140n/a _res = PyObject_CallMethod(obj, "as_pathname", NULL);
3141n/a return _res;
3142n/a
3143n/a}
3144n/a
3145n/astatic PyMethodDef File_methods[] = {
3146n/a#ifndef __LP64__
3147n/a {"UnmountVol", (PyCFunction)File_UnmountVol, 1,
3148n/a PyDoc_STR("(Str63 volName, short vRefNum) -> None")},
3149n/a {"FlushVol", (PyCFunction)File_FlushVol, 1,
3150n/a PyDoc_STR("(Str63 volName, short vRefNum) -> None")},
3151n/a {"HSetVol", (PyCFunction)File_HSetVol, 1,
3152n/a PyDoc_STR("(Str63 volName, short vRefNum, long dirID) -> None")},
3153n/a {"FSClose", (PyCFunction)File_FSClose, 1,
3154n/a PyDoc_STR("(short refNum) -> None")},
3155n/a {"Allocate", (PyCFunction)File_Allocate, 1,
3156n/a PyDoc_STR("(short refNum) -> (long count)")},
3157n/a {"GetEOF", (PyCFunction)File_GetEOF, 1,
3158n/a PyDoc_STR("(short refNum) -> (long logEOF)")},
3159n/a {"SetEOF", (PyCFunction)File_SetEOF, 1,
3160n/a PyDoc_STR("(short refNum, long logEOF) -> None")},
3161n/a {"GetFPos", (PyCFunction)File_GetFPos, 1,
3162n/a PyDoc_STR("(short refNum) -> (long filePos)")},
3163n/a {"SetFPos", (PyCFunction)File_SetFPos, 1,
3164n/a PyDoc_STR("(short refNum, short posMode, long posOff) -> None")},
3165n/a {"GetVRefNum", (PyCFunction)File_GetVRefNum, 1,
3166n/a PyDoc_STR("(short fileRefNum) -> (short vRefNum)")},
3167n/a {"HGetVol", (PyCFunction)File_HGetVol, 1,
3168n/a PyDoc_STR("(StringPtr volName) -> (short vRefNum, long dirID)")},
3169n/a {"HOpen", (PyCFunction)File_HOpen, 1,
3170n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName, SInt8 permission) -> (short refNum)")},
3171n/a {"HOpenDF", (PyCFunction)File_HOpenDF, 1,
3172n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName, SInt8 permission) -> (short refNum)")},
3173n/a {"HOpenRF", (PyCFunction)File_HOpenRF, 1,
3174n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName, SInt8 permission) -> (short refNum)")},
3175n/a {"AllocContig", (PyCFunction)File_AllocContig, 1,
3176n/a PyDoc_STR("(short refNum) -> (long count)")},
3177n/a {"HCreate", (PyCFunction)File_HCreate, 1,
3178n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName, OSType creator, OSType fileType) -> None")},
3179n/a {"DirCreate", (PyCFunction)File_DirCreate, 1,
3180n/a PyDoc_STR("(short vRefNum, long parentDirID, Str255 directoryName) -> (long createdDirID)")},
3181n/a {"HDelete", (PyCFunction)File_HDelete, 1,
3182n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> None")},
3183n/a {"HGetFInfo", (PyCFunction)File_HGetFInfo, 1,
3184n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> (FInfo fndrInfo)")},
3185n/a {"HSetFInfo", (PyCFunction)File_HSetFInfo, 1,
3186n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName, FInfo fndrInfo) -> None")},
3187n/a {"HSetFLock", (PyCFunction)File_HSetFLock, 1,
3188n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> None")},
3189n/a {"HRstFLock", (PyCFunction)File_HRstFLock, 1,
3190n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> None")},
3191n/a {"HRename", (PyCFunction)File_HRename, 1,
3192n/a PyDoc_STR("(short vRefNum, long dirID, Str255 oldName, Str255 newName) -> None")},
3193n/a {"CatMove", (PyCFunction)File_CatMove, 1,
3194n/a PyDoc_STR("(short vRefNum, long dirID, Str255 oldName, long newDirID, Str255 newName) -> None")},
3195n/a {"FSMakeFSSpec", (PyCFunction)File_FSMakeFSSpec, 1,
3196n/a PyDoc_STR("(short vRefNum, long dirID, Str255 fileName) -> (FSSpec spec)")},
3197n/a#endif /* !__LP64__*/
3198n/a {"FSGetForkPosition", (PyCFunction)File_FSGetForkPosition, 1,
3199n/a PyDoc_STR("(SInt16 forkRefNum) -> (SInt64 position)")},
3200n/a {"FSSetForkPosition", (PyCFunction)File_FSSetForkPosition, 1,
3201n/a PyDoc_STR("(SInt16 forkRefNum, UInt16 positionMode, SInt64 positionOffset) -> None")},
3202n/a {"FSGetForkSize", (PyCFunction)File_FSGetForkSize, 1,
3203n/a PyDoc_STR("(SInt16 forkRefNum) -> (SInt64 forkSize)")},
3204n/a {"FSSetForkSize", (PyCFunction)File_FSSetForkSize, 1,
3205n/a PyDoc_STR("(SInt16 forkRefNum, UInt16 positionMode, SInt64 positionOffset) -> None")},
3206n/a {"FSAllocateFork", (PyCFunction)File_FSAllocateFork, 1,
3207n/a PyDoc_STR("(SInt16 forkRefNum, FSAllocationFlags flags, UInt16 positionMode, SInt64 positionOffset, UInt64 requestCount) -> (UInt64 actualCount)")},
3208n/a {"FSFlushFork", (PyCFunction)File_FSFlushFork, 1,
3209n/a PyDoc_STR("(SInt16 forkRefNum) -> None")},
3210n/a {"FSCloseFork", (PyCFunction)File_FSCloseFork, 1,
3211n/a PyDoc_STR("(SInt16 forkRefNum) -> None")},
3212n/a {"FSGetDataForkName", (PyCFunction)File_FSGetDataForkName, 1,
3213n/a PyDoc_STR("() -> (HFSUniStr255 dataForkName)")},
3214n/a {"FSGetResourceForkName", (PyCFunction)File_FSGetResourceForkName, 1,
3215n/a PyDoc_STR("() -> (HFSUniStr255 resourceForkName)")},
3216n/a {"FSPathMakeRef", (PyCFunction)File_FSPathMakeRef, 1,
3217n/a PyDoc_STR("(UInt8 * path) -> (FSRef ref, Boolean isDirectory)")},
3218n/a {"FNNotifyByPath", (PyCFunction)File_FNNotifyByPath, 1,
3219n/a PyDoc_STR("(UInt8 * path, FNMessage message, OptionBits flags) -> None")},
3220n/a {"FNNotifyAll", (PyCFunction)File_FNNotifyAll, 1,
3221n/a PyDoc_STR("(FNMessage message, OptionBits flags) -> None")},
3222n/a#ifndef __LP64__
3223n/a {"NewAlias", (PyCFunction)File_NewAlias, 1,
3224n/a PyDoc_STR("(FSSpec fromFile, FSSpec target) -> (AliasHandle alias)")},
3225n/a {"NewAliasMinimalFromFullPath", (PyCFunction)File_NewAliasMinimalFromFullPath, 1,
3226n/a PyDoc_STR("(Buffer fullPath, Str32 zoneName, Str31 serverName) -> (AliasHandle alias)")},
3227n/a {"ResolveAliasFile", (PyCFunction)File_ResolveAliasFile, 1,
3228n/a PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")},
3229n/a {"ResolveAliasFileWithMountFlags", (PyCFunction)File_ResolveAliasFileWithMountFlags, 1,
3230n/a PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")},
3231n/a {"UpdateAlias", (PyCFunction)File_UpdateAlias, 1,
3232n/a PyDoc_STR("(FSSpec fromFile, FSSpec target, AliasHandle alias) -> (Boolean wasChanged)")},
3233n/a {"ResolveAliasFileWithMountFlagsNoUI", (PyCFunction)File_ResolveAliasFileWithMountFlagsNoUI, 1,
3234n/a PyDoc_STR("(FSSpec theSpec, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSSpec theSpec, Boolean targetIsFolder, Boolean wasAliased)")},
3235n/a#endif /* !__LP64__ */
3236n/a {"FSNewAlias", (PyCFunction)File_FSNewAlias, 1,
3237n/a PyDoc_STR("(FSRef fromFile, FSRef target) -> (AliasHandle inAlias)")},
3238n/a {"FSResolveAliasFileWithMountFlags", (PyCFunction)File_FSResolveAliasFileWithMountFlags, 1,
3239n/a PyDoc_STR("(FSRef theRef, Boolean resolveAliasChains, unsigned long mountFlags) -> (FSRef theRef, Boolean targetIsFolder, Boolean wasAliased)")},
3240n/a {"FSResolveAliasFile", (PyCFunction)File_FSResolveAliasFile, 1,
3241n/a PyDoc_STR("(FSRef theRef, Boolean resolveAliasChains) -> (FSRef theRef, Boolean targetIsFolder, Boolean wasAliased)")},
3242n/a {"FSUpdateAlias", (PyCFunction)File_FSUpdateAlias, 1,
3243n/a PyDoc_STR("(FSRef fromFile, FSRef target, AliasHandle alias) -> (Boolean wasChanged)")},
3244n/a {"pathname", (PyCFunction)File_pathname, 1,
3245n/a PyDoc_STR("(str|unicode|FSSpec|FSref) -> pathname")},
3246n/a {NULL, NULL, 0}
3247n/a};
3248n/a
3249n/a
3250n/a#ifndef __LP64__
3251n/aint
3252n/aPyMac_GetFSSpec(PyObject *v, FSSpec *spec)
3253n/a{
3254n/a Str255 path;
3255n/a short refnum;
3256n/a long parid;
3257n/a OSErr err;
3258n/a FSRef fsr;
3259n/a
3260n/a if (FSSpec_Check(v)) {
3261n/a *spec = ((FSSpecObject *)v)->ob_itself;
3262n/a return 1;
3263n/a }
3264n/a
3265n/a if (PyArg_Parse(v, "(hlO&)",
3266n/a &refnum, &parid, PyMac_GetStr255, &path)) {
3267n/a err = FSMakeFSSpec(refnum, parid, path, spec);
3268n/a if ( err && err != fnfErr ) {
3269n/a PyMac_Error(err);
3270n/a return 0;
3271n/a }
3272n/a return 1;
3273n/a }
3274n/a PyErr_Clear();
3275n/a /* Otherwise we try to go via an FSRef. On OSX we go all the way,
3276n/a ** on OS9 we accept only a real FSRef object
3277n/a */
3278n/a if ( PyMac_GetFSRef(v, &fsr) ) {
3279n/a err = FSGetCatalogInfo(&fsr, kFSCatInfoNone, NULL, NULL, spec, NULL);
3280n/a if (err != noErr) {
3281n/a PyMac_Error(err);
3282n/a return 0;
3283n/a }
3284n/a return 1;
3285n/a }
3286n/a return 0;
3287n/a}
3288n/a#endif /* !__LP64__ */
3289n/a
3290n/aint
3291n/aPyMac_GetFSRef(PyObject *v, FSRef *fsr)
3292n/a{
3293n/a OSStatus err;
3294n/a#ifndef __LP64__
3295n/a FSSpec fss;
3296n/a#endif /* !__LP64__ */
3297n/a
3298n/a if (FSRef_Check(v)) {
3299n/a *fsr = ((FSRefObject *)v)->ob_itself;
3300n/a return 1;
3301n/a }
3302n/a
3303n/a /* On OSX we now try a pathname */
3304n/a if ( PyString_Check(v) || PyUnicode_Check(v)) {
3305n/a char *path = NULL;
3306n/a if (!PyArg_Parse(v, "et", Py_FileSystemDefaultEncoding, &path))
3307n/a return 0;
3308n/a if ( (err=FSPathMakeRef((unsigned char*)path, fsr, NULL)) )
3309n/a PyMac_Error(err);
3310n/a PyMem_Free(path);
3311n/a return !err;
3312n/a }
3313n/a /* XXXX Should try unicode here too */
3314n/a
3315n/a#ifndef __LP64__
3316n/a /* Otherwise we try to go via an FSSpec */
3317n/a if (FSSpec_Check(v)) {
3318n/a fss = ((FSSpecObject *)v)->ob_itself;
3319n/a if ((err=FSpMakeFSRef(&fss, fsr)) == 0)
3320n/a return 1;
3321n/a PyMac_Error(err);
3322n/a return 0;
3323n/a }
3324n/a#endif /* !__LP64__ */
3325n/a
3326n/a PyErr_SetString(PyExc_TypeError, "FSRef, FSSpec or pathname required");
3327n/a return 0;
3328n/a}
3329n/a
3330n/a#ifndef __LP64__
3331n/aextern PyObject *
3332n/aPyMac_BuildFSSpec(FSSpec *spec)
3333n/a{
3334n/a return FSSpec_New(spec);
3335n/a}
3336n/a#endif /* !__LP64__ */
3337n/a
3338n/aextern PyObject *
3339n/aPyMac_BuildFSRef(FSRef *spec)
3340n/a{
3341n/a return FSRef_New(spec);
3342n/a}
3343n/a
3344n/a
3345n/avoid init_File(void)
3346n/a{
3347n/a PyObject *m;
3348n/a PyObject *d;
3349n/a
3350n/a
3351n/a#ifndef __LP64__
3352n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(FSSpec *, PyMac_BuildFSSpec);
3353n/a PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSSpec, PyMac_GetFSSpec);
3354n/a#endif /* !__LP64__ */
3355n/a
3356n/a PyMac_INIT_TOOLBOX_OBJECT_NEW(FSRef *, PyMac_BuildFSRef);
3357n/a PyMac_INIT_TOOLBOX_OBJECT_CONVERT(FSRef, PyMac_GetFSRef);
3358n/a
3359n/a
3360n/a m = Py_InitModule("_File", File_methods);
3361n/a d = PyModule_GetDict(m);
3362n/a File_Error = PyMac_GetOSErrException();
3363n/a if (File_Error == NULL ||
3364n/a PyDict_SetItemString(d, "Error", File_Error) != 0)
3365n/a return;
3366n/a FSCatalogInfo_Type.ob_type = &PyType_Type;
3367n/a if (PyType_Ready(&FSCatalogInfo_Type) < 0) return;
3368n/a Py_INCREF(&FSCatalogInfo_Type);
3369n/a PyModule_AddObject(m, "FSCatalogInfo", (PyObject *)&FSCatalogInfo_Type);
3370n/a /* Backward-compatible name */
3371n/a Py_INCREF(&FSCatalogInfo_Type);
3372n/a PyModule_AddObject(m, "FSCatalogInfoType", (PyObject *)&FSCatalogInfo_Type);
3373n/a
3374n/a#ifndef __LP64__
3375n/a FInfo_Type.ob_type = &PyType_Type;
3376n/a if (PyType_Ready(&FInfo_Type) < 0) return;
3377n/a Py_INCREF(&FInfo_Type);
3378n/a PyModule_AddObject(m, "FInfo", (PyObject *)&FInfo_Type);
3379n/a /* Backward-compatible name */
3380n/a Py_INCREF(&FInfo_Type);
3381n/a PyModule_AddObject(m, "FInfoType", (PyObject *)&FInfo_Type);
3382n/a#endif /* !__LP64__ */
3383n/a Alias_Type.ob_type = &PyType_Type;
3384n/a if (PyType_Ready(&Alias_Type) < 0) return;
3385n/a Py_INCREF(&Alias_Type);
3386n/a PyModule_AddObject(m, "Alias", (PyObject *)&Alias_Type);
3387n/a /* Backward-compatible name */
3388n/a Py_INCREF(&Alias_Type);
3389n/a PyModule_AddObject(m, "AliasType", (PyObject *)&Alias_Type);
3390n/a
3391n/a#ifndef __LP64__
3392n/a FSSpec_Type.ob_type = &PyType_Type;
3393n/a if (PyType_Ready(&FSSpec_Type) < 0) return;
3394n/a Py_INCREF(&FSSpec_Type);
3395n/a PyModule_AddObject(m, "FSSpec", (PyObject *)&FSSpec_Type);
3396n/a /* Backward-compatible name */
3397n/a Py_INCREF(&FSSpec_Type);
3398n/a PyModule_AddObject(m, "FSSpecType", (PyObject *)&FSSpec_Type);
3399n/a#endif /* !__LP64__ */
3400n/a FSRef_Type.ob_type = &PyType_Type;
3401n/a if (PyType_Ready(&FSRef_Type) < 0) return;
3402n/a Py_INCREF(&FSRef_Type);
3403n/a PyModule_AddObject(m, "FSRef", (PyObject *)&FSRef_Type);
3404n/a /* Backward-compatible name */
3405n/a Py_INCREF(&FSRef_Type);
3406n/a PyModule_AddObject(m, "FSRefType", (PyObject *)&FSRef_Type);
3407n/a}
3408n/a
3409n/a/* ======================== End module _File ======================== */
3410n/a