| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | /***********************************************************
 | 
					
						
							| 
									
										
										
										
											1997-01-31 16:15:11 +00:00
										 |  |  | Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam, | 
					
						
							| 
									
										
										
										
											1995-01-26 22:56:16 +00:00
										 |  |  | The Netherlands. | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         All Rights Reserved | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Permission to use, copy, modify, and distribute this software and its  | 
					
						
							|  |  |  | documentation for any purpose and without fee is hereby granted,  | 
					
						
							|  |  |  | provided that the above copyright notice appear in all copies and that | 
					
						
							|  |  |  | both that copyright notice and this permission notice appear in  | 
					
						
							|  |  |  | supporting documentation, and that the names of Stichting Mathematisch | 
					
						
							|  |  |  | Centrum or CWI not be used in advertising or publicity pertaining to | 
					
						
							|  |  |  | distribution of the software without specific, written prior permission. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO | 
					
						
							|  |  |  | THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND | 
					
						
							|  |  |  | FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE | 
					
						
							|  |  |  | FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | 
					
						
							|  |  |  | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | 
					
						
							|  |  |  | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT | 
					
						
							|  |  |  | OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ******************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | #include "Python.h"
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | #include "macglue.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-02-14 01:27:24 +00:00
										 |  |  | #include <Memory.h>
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | #include <Files.h>
 | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | #include <Folders.h>
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | #include <StandardFile.h>
 | 
					
						
							|  |  |  | #include <Aliases.h>
 | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | #include <LowMem.h>
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | #include "getapplbycreator.h"
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-19 00:03:47 +00:00
										 |  |  | #ifdef THINK_C
 | 
					
						
							|  |  |  | #define FileFilterUPP FileFilterProcPtr
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject *ErrorObject; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | /* ----------------------------------------------------- */ | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | /* Declarations for objects of type Alias */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	AliasHandle alias; | 
					
						
							|  |  |  | } mfsaobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | staticforward PyTypeObject Mfsatype; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define is_mfsaobject(v)		((v)->ob_type == &Mfsatype)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ---------------------------------------------------------------- */ | 
					
						
							|  |  |  | /* Declarations for objects of type FSSpec */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	FSSpec fsspec; | 
					
						
							|  |  |  | } mfssobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | staticforward PyTypeObject Mfsstype; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define is_mfssobject(v)		((v)->ob_type == &Mfsstype)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 22:56:16 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | /* ---------------------------------------------------------------- */ | 
					
						
							|  |  |  | /* Declarations for objects of type FInfo */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject_HEAD | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 	FInfo finfo; | 
					
						
							|  |  |  | } mfsiobject; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | staticforward PyTypeObject Mfsitype; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #define is_mfsiobject(v)		((v)->ob_type == &Mfsitype)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 22:56:16 +00:00
										 |  |  | mfssobject *newmfssobject(FSSpec *fss); /* Forward */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | /* ---------------------------------------------------------------- */ | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfsa_Resolve(self, args) | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	FSSpec from, *fromp, result; | 
					
						
							|  |  |  | 	Boolean changed; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 	 | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	from.name[0] = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "|O&", PyMac_GetFSSpec, &from)) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	if (from.name[0] ) | 
					
						
							|  |  |  | 		fromp = &from; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		fromp = NULL; | 
					
						
							|  |  |  | 	err = ResolveAlias(fromp, self->alias, &result, &changed); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(Oi)", newmfssobject(&result), (int)changed); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfsa_GetInfo(self, args) | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	Str63 value; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "i", &i)) | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = GetAliasInfo(self->alias, (AliasInfoType)i, value); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyString_FromStringAndSize((char *)&value[1], value[0]); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfsa_Update(self, args) | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec target, fromfile, *fromfilep; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	Boolean changed; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	fromfile.name[0] = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&|O&",  PyMac_GetFSSpec, &target, | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 					 PyMac_GetFSSpec, &fromfile)) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( fromfile.name[0] ) | 
					
						
							|  |  |  | 		fromfilep = &fromfile; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		fromfilep = NULL; | 
					
						
							|  |  |  | 	err = UpdateAlias(fromfilep, &target, self->alias, &changed); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("i", (int)changed); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef mfsa_methods[] = { | 
					
						
							|  |  |  | 	{"Resolve",	(PyCFunction)mfsa_Resolve,	1}, | 
					
						
							|  |  |  | 	{"GetInfo",	(PyCFunction)mfsa_GetInfo,	1}, | 
					
						
							|  |  |  | 	{"Update",	(PyCFunction)mfsa_Update,	1}, | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  |   | 
					
						
							|  |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ---------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfsa_getattr(self, name) | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | 	if ( strcmp(name, "data") == 0 ) { | 
					
						
							|  |  |  | 		int size; | 
					
						
							|  |  |  | 		PyObject *rv; | 
					
						
							|  |  |  | 		 | 
					
						
							|  |  |  | 		size = GetHandleSize((Handle)self->alias); | 
					
						
							|  |  |  | 		HLock((Handle)self->alias); | 
					
						
							|  |  |  | 		rv = PyString_FromStringAndSize(*(Handle)self->alias, size); | 
					
						
							|  |  |  | 		HUnlock((Handle)self->alias); | 
					
						
							|  |  |  | 		return rv; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_FindMethod(mfsa_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mfsaobject * | 
					
						
							|  |  |  | newmfsaobject(alias) | 
					
						
							|  |  |  | 	AliasHandle alias; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	self = PyObject_NEW(mfsaobject, &Mfsatype); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	if (self == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	self->alias = alias; | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | mfsa_dealloc(self) | 
					
						
							|  |  |  | 	mfsaobject *self; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #if 0
 | 
					
						
							|  |  |  | 	if ( self->alias ) { | 
					
						
							|  |  |  | 		should we do something here? | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | statichere PyTypeObject Mfsatype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	0,				/*ob_size*/ | 
					
						
							|  |  |  | 	"Alias",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(mfsaobject),		/*tp_basicsize*/ | 
					
						
							|  |  |  | 	0,				/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							|  |  |  | 	(destructor)mfsa_dealloc,	/*tp_dealloc*/ | 
					
						
							| 
									
										
										
										
											1995-02-20 23:43:29 +00:00
										 |  |  | 	(printfunc)0,			/*tp_print*/ | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	(getattrfunc)mfsa_getattr,	/*tp_getattr*/ | 
					
						
							| 
									
										
										
										
											1995-02-20 23:43:29 +00:00
										 |  |  | 	(setattrfunc)0,			/*tp_setattr*/ | 
					
						
							|  |  |  | 	(cmpfunc)0,			/*tp_compare*/ | 
					
						
							|  |  |  | 	(reprfunc)0,			/*tp_repr*/ | 
					
						
							|  |  |  | 	0,				/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,				/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,				/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	(hashfunc)0,			/*tp_hash*/ | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | /* End of code for Alias objects */ | 
					
						
							|  |  |  | /* -------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | /* ---------------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef mfsi_methods[] = { | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 	 | 
					
						
							|  |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ---------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static mfsiobject * | 
					
						
							|  |  |  | newmfsiobject() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	mfsiobject *self; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	self = PyObject_NEW(mfsiobject, &Mfsitype); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 	if (self == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	memset((char *)&self->finfo, '\0', sizeof(self->finfo)); | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | mfsi_dealloc(self) | 
					
						
							|  |  |  | 	mfsiobject *self; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | mfsi_getattr(self, name) | 
					
						
							|  |  |  | 	mfsiobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	if ( strcmp(name, "Type") == 0 ) | 
					
						
							|  |  |  | 		return PyMac_BuildOSType(self->finfo.fdType); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Creator") == 0 ) | 
					
						
							|  |  |  | 		return PyMac_BuildOSType(self->finfo.fdCreator); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Flags") == 0 ) | 
					
						
							|  |  |  | 		return Py_BuildValue("i", (int)self->finfo.fdFlags); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Location") == 0 ) | 
					
						
							|  |  |  | 		return PyMac_BuildPoint(self->finfo.fdLocation); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Fldr") == 0 ) | 
					
						
							|  |  |  | 		return Py_BuildValue("i", (int)self->finfo.fdFldr); | 
					
						
							|  |  |  | 	else | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		return Py_FindMethod(mfsi_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | mfsi_setattr(self, name, v) | 
					
						
							|  |  |  | 	mfsiobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *v; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	int rv; | 
					
						
							|  |  |  | 	int i; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if ( v == NULL ) { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(PyExc_AttributeError, "Cannot delete attribute"); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if ( strcmp(name, "Type") == 0 ) | 
					
						
							|  |  |  | 		rv = PyMac_GetOSType(v, &self->finfo.fdType); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Creator") == 0 ) | 
					
						
							|  |  |  | 		rv = PyMac_GetOSType(v, &self->finfo.fdCreator); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Flags") == 0 ) { | 
					
						
							|  |  |  | 		rv = PyArg_Parse(v, "i", &i); | 
					
						
							|  |  |  | 		self->finfo.fdFlags = (short)i; | 
					
						
							|  |  |  | 	} else if ( strcmp(name, "Location") == 0 ) | 
					
						
							|  |  |  | 		rv = PyMac_GetPoint(v, &self->finfo.fdLocation); | 
					
						
							|  |  |  | 	else if ( strcmp(name, "Fldr") == 0 ) { | 
					
						
							|  |  |  | 		rv = PyArg_Parse(v, "i", &i); | 
					
						
							|  |  |  | 		self->finfo.fdFldr = (short)i; | 
					
						
							|  |  |  | 	} else { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		PyErr_SetString(PyExc_AttributeError, "No such attribute"); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 		return -1; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if (rv) | 
					
						
							|  |  |  | 		return 0; | 
					
						
							|  |  |  | 	return -1; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyTypeObject Mfsitype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 	0,				/*ob_size*/ | 
					
						
							|  |  |  | 	"FInfo object",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(mfsiobject),		/*tp_basicsize*/ | 
					
						
							|  |  |  | 	0,				/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							|  |  |  | 	(destructor)mfsi_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  | 	(printfunc)0,		/*tp_print*/ | 
					
						
							|  |  |  | 	(getattrfunc)mfsi_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  | 	(setattrfunc)mfsi_setattr,	/*tp_setattr*/ | 
					
						
							|  |  |  | 	(cmpfunc)0,		/*tp_compare*/ | 
					
						
							|  |  |  | 	(reprfunc)0,		/*tp_repr*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	(hashfunc)0,		/*tp_hash*/ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* End of code for FInfo object objects */ | 
					
						
							|  |  |  | /* -------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | ** Helper routine for other modules: return an FSSpec * if the | 
					
						
							|  |  |  | ** object is a python fsspec object, else NULL | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | FSSpec * | 
					
						
							|  |  |  | mfs_GetFSSpecFSSpec(self) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	if ( is_mfssobject(self) ) | 
					
						
							|  |  |  | 		return &((mfssobject *)self)->fsspec; | 
					
						
							|  |  |  | 	return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | ** Two generally useful routines | 
					
						
							|  |  |  | */ | 
					
						
							|  |  |  | static OSErr | 
					
						
							|  |  |  | PyMac_GetFileDates(fss, crdat, mddat, bkdat) | 
					
						
							|  |  |  | 	FSSpec *fss; | 
					
						
							|  |  |  | 	unsigned long *crdat, *mddat, *bkdat; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CInfoPBRec pb; | 
					
						
							|  |  |  | 	OSErr error; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	pb.dirInfo.ioNamePtr = fss->name; | 
					
						
							|  |  |  | 	pb.dirInfo.ioFDirIndex = 0; | 
					
						
							|  |  |  | 	pb.dirInfo.ioVRefNum = fss->vRefNum; | 
					
						
							|  |  |  | 	pb.dirInfo.ioDrDirID = fss->parID; | 
					
						
							|  |  |  | 	error = PBGetCatInfoSync(&pb); | 
					
						
							|  |  |  | 	if ( error ) return error; | 
					
						
							|  |  |  | 	*crdat = pb.hFileInfo.ioFlCrDat; | 
					
						
							|  |  |  | 	*mddat = pb.hFileInfo.ioFlMdDat; | 
					
						
							|  |  |  | 	*bkdat = pb.hFileInfo.ioFlBkDat; | 
					
						
							|  |  |  | 	return 0; | 
					
						
							|  |  |  | }	 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static OSErr | 
					
						
							|  |  |  | PyMac_SetFileDates(fss, crdat, mddat, bkdat) | 
					
						
							|  |  |  | 	FSSpec *fss; | 
					
						
							|  |  |  | 	unsigned long crdat, mddat, bkdat; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	CInfoPBRec pb; | 
					
						
							|  |  |  | 	OSErr error; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	pb.dirInfo.ioNamePtr = fss->name; | 
					
						
							|  |  |  | 	pb.dirInfo.ioFDirIndex = 0; | 
					
						
							|  |  |  | 	pb.dirInfo.ioVRefNum = fss->vRefNum; | 
					
						
							|  |  |  | 	pb.dirInfo.ioDrDirID = fss->parID; | 
					
						
							|  |  |  | 	error = PBGetCatInfoSync(&pb); | 
					
						
							|  |  |  | 	if ( error ) return error; | 
					
						
							|  |  |  | 	pb.dirInfo.ioNamePtr = fss->name; | 
					
						
							|  |  |  | 	pb.dirInfo.ioFDirIndex = 0; | 
					
						
							|  |  |  | 	pb.dirInfo.ioVRefNum = fss->vRefNum; | 
					
						
							|  |  |  | 	pb.dirInfo.ioDrDirID = fss->parID; | 
					
						
							|  |  |  | 	pb.hFileInfo.ioFlCrDat = crdat; | 
					
						
							|  |  |  | 	pb.hFileInfo.ioFlMdDat = mddat; | 
					
						
							|  |  |  | 	pb.hFileInfo.ioFlBkDat = bkdat; | 
					
						
							|  |  |  | 	error = PBSetCatInfoSync(&pb); | 
					
						
							|  |  |  | 	return error; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_as_pathname(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	char strbuf[257]; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1996-11-09 18:46:57 +00:00
										 |  |  | 	err = PyMac_GetFullPath(&self->fsspec, strbuf); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyString_FromString(strbuf); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_as_tuple(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	return Py_BuildValue("(iis#)", self->fsspec.vRefNum, self->fsspec.parID,  | 
					
						
							|  |  |  | 						&self->fsspec.name[1], self->fsspec.name[0]); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_NewAlias(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec src, *srcp; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	AliasHandle alias; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	src.name[0] = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "|O&", PyMac_GetFSSpec, &src)) | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( src.name[0] ) | 
					
						
							|  |  |  | 		srcp = &src; | 
					
						
							|  |  |  | 	else | 
					
						
							|  |  |  | 		srcp = NULL; | 
					
						
							|  |  |  | 	err = NewAlias(srcp, &self->fsspec, &alias); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfsaobject(alias); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_NewAliasMinimal(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	AliasHandle alias; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	err = NewAliasMinimal(&self->fsspec, &alias); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfsaobject(alias); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | /* XXXX These routines should be replaced by a wrapper to the *FInfo routines */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | mfss_GetCreatorType(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	FInfo info; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FSpGetFInfo(&self->fsspec, &info); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return Py_BuildValue("(O&O&)", | 
					
						
							|  |  |  | 	           PyMac_BuildOSType, info.fdCreator, PyMac_BuildOSType, info.fdType); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | mfss_SetCreatorType(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	OSType creator, type; | 
					
						
							|  |  |  | 	FInfo info; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&O&", PyMac_GetOSType, &creator, PyMac_GetOSType, &type)) | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FSpGetFInfo(&self->fsspec, &info); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	info.fdType = type; | 
					
						
							|  |  |  | 	info.fdCreator = creator; | 
					
						
							|  |  |  | 	err = FSpSetFInfo(&self->fsspec, &info); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1995-02-02 14:23:52 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | mfss_GetFInfo(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	mfsiobject *fip; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( (fip=newmfsiobject()) == NULL ) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FSpGetFInfo(&self->fsspec, &fip->finfo); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 		Py_DECREF(fip); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)fip; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | mfss_SetFInfo(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	mfsiobject *fip; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O!", &Mfsitype, &fip)) | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FSpSetFInfo(&self->fsspec, &fip->finfo); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | mfss_GetDates(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	unsigned long crdat, mddat, bkdat; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "")) | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = PyMac_GetFileDates(&self->fsspec, &crdat, &mddat, &bkdat); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("ddd", (double)crdat, (double)mddat, (double)bkdat); | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | mfss_SetDates(self, args) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	double crdat, mddat, bkdat; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "ddd", &crdat, &mddat, &bkdat)) | 
					
						
							| 
									
										
										
										
											1996-09-15 22:11:25 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = PyMac_SetFileDates(&self->fsspec, (unsigned long)crdat,  | 
					
						
							|  |  |  | 				(unsigned long)mddat, (unsigned long)bkdat); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	Py_INCREF(Py_None); | 
					
						
							|  |  |  | 	return Py_None; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static struct PyMethodDef mfss_methods[] = { | 
					
						
							|  |  |  | 	{"as_pathname",		(PyCFunction)mfss_as_pathname,			1}, | 
					
						
							|  |  |  | 	{"as_tuple",		(PyCFunction)mfss_as_tuple,				1}, | 
					
						
							|  |  |  | 	{"NewAlias",		(PyCFunction)mfss_NewAlias,				1}, | 
					
						
							|  |  |  | 	{"NewAliasMinimal",	(PyCFunction)mfss_NewAliasMinimal,		1}, | 
					
						
							|  |  |  | 	{"GetCreatorType",	(PyCFunction)mfss_GetCreatorType,		1}, | 
					
						
							|  |  |  | 	{"SetCreatorType",	(PyCFunction)mfss_SetCreatorType,		1}, | 
					
						
							|  |  |  | 	{"GetFInfo",		(PyCFunction)mfss_GetFInfo,				1}, | 
					
						
							|  |  |  | 	{"SetFInfo",		(PyCFunction)mfss_SetFInfo,				1}, | 
					
						
							|  |  |  | 	{"GetDates",		(PyCFunction)mfss_GetDates,				1}, | 
					
						
							|  |  |  | 	{"SetDates",		(PyCFunction)mfss_SetDates,				1}, | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  |   | 
					
						
							|  |  |  | 	{NULL,			NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* ---------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_getattr(self, name) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							|  |  |  | 	char *name; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | 	if ( strcmp(name, "data") == 0) | 
					
						
							|  |  |  | 		return PyString_FromStringAndSize((char *)&self->fsspec, sizeof(FSSpec));	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_FindMethod(mfss_methods, (PyObject *)self, name); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | mfssobject * | 
					
						
							|  |  |  | newmfssobject(fss) | 
					
						
							|  |  |  | 	FSSpec *fss; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	self = PyObject_NEW(mfssobject, &Mfsstype); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	if (self == NULL) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	self->fsspec = *fss; | 
					
						
							|  |  |  | 	return self; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static void | 
					
						
							|  |  |  | mfss_dealloc(self) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyMem_DEL(self); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfss_repr(self) | 
					
						
							|  |  |  | 	mfssobject *self; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	char buf[512]; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-02-20 23:43:29 +00:00
										 |  |  | 	sprintf(buf, "FSSpec((%d, %d, '%.*s'))", | 
					
						
							|  |  |  | 		self->fsspec.vRefNum,  | 
					
						
							|  |  |  | 		self->fsspec.parID, | 
					
						
							|  |  |  | 		self->fsspec.name[0], self->fsspec.name+1); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return PyString_FromString(buf); | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static int | 
					
						
							|  |  |  | mfss_compare(v, w) | 
					
						
							|  |  |  | 	mfssobject *v, *w; | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	int minlen; | 
					
						
							|  |  |  | 	int res; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	if ( v->fsspec.vRefNum < w->fsspec.vRefNum ) return -1; | 
					
						
							|  |  |  | 	if ( v->fsspec.vRefNum > w->fsspec.vRefNum ) return 1; | 
					
						
							|  |  |  | 	if ( v->fsspec.parID < w->fsspec.parID ) return -1; | 
					
						
							|  |  |  | 	if ( v->fsspec.parID > w->fsspec.parID ) return 1; | 
					
						
							|  |  |  | 	minlen = v->fsspec.name[0]; | 
					
						
							|  |  |  | 	if ( w->fsspec.name[0] < minlen ) minlen = w->fsspec.name[0]; | 
					
						
							|  |  |  | 	res = strncmp((char *)v->fsspec.name+1, (char *)w->fsspec.name+1, minlen); | 
					
						
							|  |  |  | 	if ( res ) return res; | 
					
						
							|  |  |  | 	if ( v->fsspec.name[0] < w->fsspec.name[0] ) return -1; | 
					
						
							|  |  |  | 	if ( v->fsspec.name[0] > w->fsspec.name[0] ) return 1; | 
					
						
							|  |  |  | 	return res; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | statichere PyTypeObject Mfsstype = { | 
					
						
							|  |  |  | 	PyObject_HEAD_INIT(&PyType_Type) | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	0,				/*ob_size*/ | 
					
						
							|  |  |  | 	"FSSpec",			/*tp_name*/ | 
					
						
							|  |  |  | 	sizeof(mfssobject),		/*tp_basicsize*/ | 
					
						
							|  |  |  | 	0,				/*tp_itemsize*/ | 
					
						
							|  |  |  | 	/* methods */ | 
					
						
							|  |  |  | 	(destructor)mfss_dealloc,	/*tp_dealloc*/ | 
					
						
							|  |  |  | 	(printfunc)0,		/*tp_print*/ | 
					
						
							|  |  |  | 	(getattrfunc)mfss_getattr,	/*tp_getattr*/ | 
					
						
							|  |  |  | 	(setattrfunc)0,	/*tp_setattr*/ | 
					
						
							|  |  |  | 	(cmpfunc)mfss_compare,		/*tp_compare*/ | 
					
						
							|  |  |  | 	(reprfunc)mfss_repr,		/*tp_repr*/ | 
					
						
							|  |  |  | 	0,			/*tp_as_number*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_sequence*/ | 
					
						
							|  |  |  | 	0,		/*tp_as_mapping*/ | 
					
						
							|  |  |  | 	(hashfunc)0,		/*tp_hash*/ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* End of code for FSSpec objects */ | 
					
						
							|  |  |  | /* -------------------------------------------------------- */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfs_ResolveAliasFile(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	FSSpec fss; | 
					
						
							|  |  |  | 	Boolean chain = 1, isfolder, wasaliased; | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&|i", PyMac_GetFSSpec, &fss, &chain)) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	err = ResolveAliasFile(&fss, chain, &isfolder, &wasaliased); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("Oii", newmfssobject(&fss), (int)isfolder, (int)wasaliased); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | mfs_StandardGetFile(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1995-01-30 08:56:06 +00:00
										 |  |  | 	SFTypeList list; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 	short numtypes; | 
					
						
							|  |  |  | 	StandardFileReply reply; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	list[0] = list[1] = list[2] = list[3] = 0; | 
					
						
							|  |  |  | 	numtypes = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "|O&O&O&O&", PyMac_GetOSType, &list[0], | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 			 PyMac_GetOSType, &list[1], PyMac_GetOSType, &list[2], | 
					
						
							|  |  |  | 			  PyMac_GetOSType, &list[3]) ) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-30 08:56:06 +00:00
										 |  |  | 	while ( numtypes < 4 && list[numtypes] ) { | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		numtypes++; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1995-06-03 21:15:50 +00:00
										 |  |  | 	if ( numtypes == 0 ) | 
					
						
							|  |  |  | 		numtypes = -1; | 
					
						
							| 
									
										
										
										
											1995-01-30 08:56:06 +00:00
										 |  |  | 	StandardGetFile((FileFilterUPP)0, numtypes, list, &reply); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(Oi)", newmfssobject(&reply.sfFile), reply.sfGood); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | mfs_PromptGetFile(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	SFTypeList list; | 
					
						
							|  |  |  | 	short numtypes; | 
					
						
							|  |  |  | 	StandardFileReply reply; | 
					
						
							|  |  |  | 	char *prompt = NULL; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	list[0] = list[1] = list[2] = list[3] = 0; | 
					
						
							|  |  |  | 	numtypes = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "s|O&O&O&O&", &prompt, PyMac_GetOSType, &list[0], | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | 			 PyMac_GetOSType, &list[1], PyMac_GetOSType, &list[2], | 
					
						
							|  |  |  | 			  PyMac_GetOSType, &list[3]) ) | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	while ( numtypes < 4 && list[numtypes] ) { | 
					
						
							|  |  |  | 		numtypes++; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	if ( numtypes == 0 ) | 
					
						
							|  |  |  | 		numtypes = -1; | 
					
						
							|  |  |  | 	PyMac_PromptGetFile(numtypes, list, &reply, prompt); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(Oi)", newmfssobject(&reply.sfFile), reply.sfGood); | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfs_StandardPutFile(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	Str255 prompt, dft; | 
					
						
							|  |  |  | 	StandardFileReply reply; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	dft[0] = 0; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&|O&", PyMac_GetStr255, &prompt, PyMac_GetStr255, &dft) ) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	StandardPutFile(prompt, dft, &reply); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(Oi)",newmfssobject(&reply.sfFile), reply.sfGood); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | /*
 | 
					
						
							|  |  |  | ** Set initial directory for file dialogs */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | mfs_SetFolder(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec spec; | 
					
						
							|  |  |  | 	FSSpec ospec; | 
					
						
							|  |  |  | 	short orefnum; | 
					
						
							|  |  |  | 	long oparid; | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	/* Get old values */ | 
					
						
							|  |  |  | 	orefnum = -LMGetSFSaveDisk(); | 
					
						
							|  |  |  | 	oparid = LMGetCurDirStore(); | 
					
						
							|  |  |  | 	(void)FSMakeFSSpec(orefnum, oparid, "\pplaceholder", &ospec); | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	/* Go to working directory by default */ | 
					
						
							|  |  |  | 	(void)FSMakeFSSpec(0, 0, "\p:placeholder", &spec); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "|O&", PyMac_GetFSSpec, &spec)) | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	/* Set standard-file working directory */ | 
					
						
							|  |  |  | 	LMSetSFSaveDisk(-spec.vRefNum); | 
					
						
							|  |  |  | 	LMSetCurDirStore(spec.parID); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfssobject(&ospec); | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | mfs_FSSpec(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec fss; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&", PyMac_GetFSSpec, &fss)) | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 		return NULL; | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfssobject(&fss); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | mfs_RawFSSpec(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec *fssp; | 
					
						
							|  |  |  | 	int size; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "s#", &fssp, &size)) | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	if ( size != sizeof(FSSpec) ) { | 
					
						
							|  |  |  | 		PyErr_SetString(PyExc_TypeError, "Incorrect size for FSSpec record"); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfssobject(fssp); | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | mfs_RawAlias(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	char *dataptr; | 
					
						
							|  |  |  | 	Handle h; | 
					
						
							|  |  |  | 	int size; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "s#", &dataptr, &size)) | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	h = NewHandle(size); | 
					
						
							|  |  |  | 	if ( h == NULL ) { | 
					
						
							|  |  |  | 		PyErr_NoMemory(); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	HLock(h); | 
					
						
							|  |  |  | 	memcpy((char *)*h, dataptr, size); | 
					
						
							|  |  |  | 	HUnlock(h); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfsaobject((AliasHandle)h); | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | mfs_GetDirectory(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	FSSpec fsdir; | 
					
						
							|  |  |  | 	int ok; | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | 	char *prompt = NULL; | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "|s", &prompt) ) | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | 	ok = PyMac_GetDirectory(&fsdir, prompt); | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(Oi)", newmfssobject(&fsdir), ok); | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | mfs_FindFolder(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	short where; | 
					
						
							|  |  |  | 	OSType which; | 
					
						
							|  |  |  | 	int create; | 
					
						
							|  |  |  | 	short refnum; | 
					
						
							|  |  |  | 	long dirid; | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "hO&i", &where, PyMac_GetOSType, &which, &create) ) | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FindFolder(where, which, (Boolean)create, &refnum, &dirid); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return Py_BuildValue("(ii)", refnum, dirid); | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | mfs_FindApplication(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self;	/* Not used */ | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | { | 
					
						
							|  |  |  | 	OSErr err; | 
					
						
							|  |  |  | 	OSType which; | 
					
						
							|  |  |  | 	FSSpec	fss; | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (!PyArg_ParseTuple(args, "O&", PyMac_GetOSType, &which) ) | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | 		return NULL; | 
					
						
							|  |  |  | 	err = FindApplicationFromCreator(which, &fss); | 
					
						
							|  |  |  | 	if ( err ) { | 
					
						
							|  |  |  | 		PyErr_Mac(ErrorObject, err); | 
					
						
							|  |  |  | 		return NULL; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfssobject(&fss); | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static PyObject * | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | mfs_FInfo(self, args) | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *self; | 
					
						
							|  |  |  | 	PyObject *args; | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | {	 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	return (PyObject *)newmfsiobject(); | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | /* List of methods defined in the module */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | static struct PyMethodDef mfs_methods[] = { | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	{"ResolveAliasFile",	mfs_ResolveAliasFile,	1}, | 
					
						
							|  |  |  | 	{"StandardGetFile",		mfs_StandardGetFile,	1}, | 
					
						
							| 
									
										
										
										
											1995-08-14 12:22:56 +00:00
										 |  |  | 	{"PromptGetFile",		mfs_PromptGetFile,		1}, | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	{"StandardPutFile",		mfs_StandardPutFile,	1}, | 
					
						
							| 
									
										
										
										
											1995-02-20 15:45:25 +00:00
										 |  |  | 	{"GetDirectory",		mfs_GetDirectory,		1}, | 
					
						
							| 
									
										
										
										
											1996-07-22 15:26:01 +00:00
										 |  |  | 	{"SetFolder",			mfs_SetFolder,			1}, | 
					
						
							| 
									
										
										
										
											1995-01-26 16:22:07 +00:00
										 |  |  | 	{"FSSpec",				mfs_FSSpec,				1}, | 
					
						
							| 
									
										
										
										
											1995-02-13 12:00:46 +00:00
										 |  |  | 	{"RawFSSpec",			mfs_RawFSSpec,			1}, | 
					
						
							|  |  |  | 	{"RawAlias",			mfs_RawAlias,			1}, | 
					
						
							| 
									
										
										
										
											1995-06-18 20:05:14 +00:00
										 |  |  | 	{"FindFolder",			mfs_FindFolder,			1}, | 
					
						
							| 
									
										
										
										
											1996-09-20 15:25:16 +00:00
										 |  |  | 	{"FindApplication",		mfs_FindApplication,	1}, | 
					
						
							| 
									
										
										
										
											1995-08-07 14:04:10 +00:00
										 |  |  | 	{"FInfo",				mfs_FInfo,				1}, | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  |   | 
					
						
							|  |  |  | 	{NULL,		NULL}		/* sentinel */ | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /* Initialization function for the module (*must* be called initmacfs) */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void | 
					
						
							|  |  |  | initmacfs() | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	PyObject *m, *d; | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Create the module and add the functions */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	m = Py_InitModule("macfs", mfs_methods); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* Add some symbolic constants to the module */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	d = PyModule_GetDict(m); | 
					
						
							|  |  |  | 	ErrorObject = PyString_FromString("macfs.error"); | 
					
						
							|  |  |  | 	PyDict_SetItemString(d, "error", ErrorObject); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	/* XXXX Add constants here */ | 
					
						
							|  |  |  | 	 | 
					
						
							|  |  |  | 	/* Check for errors */ | 
					
						
							| 
									
										
										
										
											1997-01-30 15:48:07 +00:00
										 |  |  | 	if (PyErr_Occurred()) | 
					
						
							|  |  |  | 		Py_FatalError("can't initialize module macfs"); | 
					
						
							| 
									
										
										
										
											1995-01-18 14:04:40 +00:00
										 |  |  | } |