1 /***********************************************************
2 Copyright 1991-1997 by Stichting Mathematisch Centrum, Amsterdam,
7 Permission to use, copy, modify, and distribute this software and its
8 documentation for any purpose and without fee is hereby granted,
9 provided that the above copyright notice appear in all copies and that
10 both that copyright notice and this permission notice appear in
11 supporting documentation, and that the names of Stichting Mathematisch
12 Centrum or CWI not be used in advertising or publicity pertaining to
13 distribution of the software without specific, written prior permission.
15 STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO
16 THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
17 FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE
18 FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
21 OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 ******************************************************************/
31 #include <StandardFile.h>
35 #include "getapplbycreator.h"
38 #define FileFilterUPP FileFilterProcPtr
41 static PyObject
*ErrorObject
;
43 /* ----------------------------------------------------- */
44 /* Declarations for objects of type Alias */
51 staticforward PyTypeObject Mfsatype
;
53 #define is_mfsaobject(v) ((v)->ob_type == &Mfsatype)
55 /* ---------------------------------------------------------------- */
56 /* Declarations for objects of type FSSpec */
63 staticforward PyTypeObject Mfsstype
;
65 #define is_mfssobject(v) ((v)->ob_type == &Mfsstype)
68 /* ---------------------------------------------------------------- */
69 /* Declarations for objects of type FInfo */
76 staticforward PyTypeObject Mfsitype
;
78 #define is_mfsiobject(v) ((v)->ob_type == &Mfsitype)
81 mfssobject
*newmfssobject(FSSpec
*fss
); /* Forward */
83 /* ---------------------------------------------------------------- */
86 mfsa_Resolve(self
, args
)
90 FSSpec from
, *fromp
, result
;
95 if (!PyArg_ParseTuple(args
, "|O&", PyMac_GetFSSpec
, &from
))
101 err
= ResolveAlias(fromp
, self
->alias
, &result
, &changed
);
102 if ( err
&& err
!= fnfErr
) {
103 PyErr_Mac(ErrorObject
, err
);
106 return Py_BuildValue("(Oi)", newmfssobject(&result
), (int)changed
);
110 mfsa_GetInfo(self
, args
)
118 if (!PyArg_ParseTuple(args
, "i", &i
))
120 err
= GetAliasInfo(self
->alias
, (AliasInfoType
)i
, value
);
122 PyErr_Mac(ErrorObject
, err
);
125 return PyString_FromStringAndSize((char *)&value
[1], value
[0]);
129 mfsa_Update(self
, args
)
133 FSSpec target
, fromfile
, *fromfilep
;
137 fromfile
.name
[0] = 0;
138 if (!PyArg_ParseTuple(args
, "O&|O&", PyMac_GetFSSpec
, &target
,
139 PyMac_GetFSSpec
, &fromfile
))
141 if ( fromfile
.name
[0] )
142 fromfilep
= &fromfile
;
145 err
= UpdateAlias(fromfilep
, &target
, self
->alias
, &changed
);
147 PyErr_Mac(ErrorObject
, err
);
150 return Py_BuildValue("i", (int)changed
);
153 static struct PyMethodDef mfsa_methods
[] = {
154 {"Resolve", (PyCFunction
)mfsa_Resolve
, 1},
155 {"GetInfo", (PyCFunction
)mfsa_GetInfo
, 1},
156 {"Update", (PyCFunction
)mfsa_Update
, 1},
158 {NULL
, NULL
} /* sentinel */
164 mfsa_getattr(self
, name
)
168 if ( strcmp(name
, "data") == 0 ) {
172 size
= GetHandleSize((Handle
)self
->alias
);
173 HLock((Handle
)self
->alias
);
174 rv
= PyString_FromStringAndSize(*(Handle
)self
->alias
, size
);
175 HUnlock((Handle
)self
->alias
);
178 return Py_FindMethod(mfsa_methods
, (PyObject
*)self
, name
);
187 self
= PyObject_NEW(mfsaobject
, &Mfsatype
);
201 should we
do something here
?
208 statichere PyTypeObject Mfsatype
= {
209 PyObject_HEAD_INIT(&PyType_Type
)
212 sizeof(mfsaobject
), /*tp_basicsize*/
215 (destructor
)mfsa_dealloc
, /*tp_dealloc*/
216 (printfunc
)0, /*tp_print*/
217 (getattrfunc
)mfsa_getattr
, /*tp_getattr*/
218 (setattrfunc
)0, /*tp_setattr*/
219 (cmpfunc
)0, /*tp_compare*/
220 (reprfunc
)0, /*tp_repr*/
222 0, /*tp_as_sequence*/
224 (hashfunc
)0, /*tp_hash*/
227 /* End of code for Alias objects */
228 /* -------------------------------------------------------- */
230 /* ---------------------------------------------------------------- */
232 static struct PyMethodDef mfsi_methods
[] = {
234 {NULL
, NULL
} /* sentinel */
244 self
= PyObject_NEW(mfsiobject
, &Mfsitype
);
247 memset((char *)&self
->finfo
, '\0', sizeof(self
->finfo
));
259 mfsi_getattr(self
, name
)
263 if ( strcmp(name
, "Type") == 0 )
264 return PyMac_BuildOSType(self
->finfo
.fdType
);
265 else if ( strcmp(name
, "Creator") == 0 )
266 return PyMac_BuildOSType(self
->finfo
.fdCreator
);
267 else if ( strcmp(name
, "Flags") == 0 )
268 return Py_BuildValue("i", (int)self
->finfo
.fdFlags
);
269 else if ( strcmp(name
, "Location") == 0 )
270 return PyMac_BuildPoint(self
->finfo
.fdLocation
);
271 else if ( strcmp(name
, "Fldr") == 0 )
272 return Py_BuildValue("i", (int)self
->finfo
.fdFldr
);
274 return Py_FindMethod(mfsi_methods
, (PyObject
*)self
, name
);
279 mfsi_setattr(self
, name
, v
)
288 PyErr_SetString(PyExc_AttributeError
, "Cannot delete attribute");
291 if ( strcmp(name
, "Type") == 0 )
292 rv
= PyMac_GetOSType(v
, &self
->finfo
.fdType
);
293 else if ( strcmp(name
, "Creator") == 0 )
294 rv
= PyMac_GetOSType(v
, &self
->finfo
.fdCreator
);
295 else if ( strcmp(name
, "Flags") == 0 ) {
296 rv
= PyArg_Parse(v
, "i", &i
);
297 self
->finfo
.fdFlags
= (short)i
;
298 } else if ( strcmp(name
, "Location") == 0 )
299 rv
= PyMac_GetPoint(v
, &self
->finfo
.fdLocation
);
300 else if ( strcmp(name
, "Fldr") == 0 ) {
301 rv
= PyArg_Parse(v
, "i", &i
);
302 self
->finfo
.fdFldr
= (short)i
;
304 PyErr_SetString(PyExc_AttributeError
, "No such attribute");
313 static PyTypeObject Mfsitype
= {
314 PyObject_HEAD_INIT(&PyType_Type
)
317 sizeof(mfsiobject
), /*tp_basicsize*/
320 (destructor
)mfsi_dealloc
, /*tp_dealloc*/
321 (printfunc
)0, /*tp_print*/
322 (getattrfunc
)mfsi_getattr
, /*tp_getattr*/
323 (setattrfunc
)mfsi_setattr
, /*tp_setattr*/
324 (cmpfunc
)0, /*tp_compare*/
325 (reprfunc
)0, /*tp_repr*/
327 0, /*tp_as_sequence*/
329 (hashfunc
)0, /*tp_hash*/
332 /* End of code for FInfo object objects */
333 /* -------------------------------------------------------- */
337 ** Helper routine for other modules: return an FSSpec * if the
338 ** object is a python fsspec object, else NULL
341 mfs_GetFSSpecFSSpec(self
)
344 if ( is_mfssobject(self
) )
345 return &((mfssobject
*)self
)->fsspec
;
350 ** Two generally useful routines
353 PyMac_GetFileDates(fss
, crdat
, mddat
, bkdat
)
355 unsigned long *crdat
, *mddat
, *bkdat
;
360 pb
.dirInfo
.ioNamePtr
= fss
->name
;
361 pb
.dirInfo
.ioFDirIndex
= 0;
362 pb
.dirInfo
.ioVRefNum
= fss
->vRefNum
;
363 pb
.dirInfo
.ioDrDirID
= fss
->parID
;
364 error
= PBGetCatInfoSync(&pb
);
365 if ( error
) return error
;
366 *crdat
= pb
.hFileInfo
.ioFlCrDat
;
367 *mddat
= pb
.hFileInfo
.ioFlMdDat
;
368 *bkdat
= pb
.hFileInfo
.ioFlBkDat
;
373 PyMac_SetFileDates(fss
, crdat
, mddat
, bkdat
)
375 unsigned long crdat
, mddat
, bkdat
;
380 pb
.dirInfo
.ioNamePtr
= fss
->name
;
381 pb
.dirInfo
.ioFDirIndex
= 0;
382 pb
.dirInfo
.ioVRefNum
= fss
->vRefNum
;
383 pb
.dirInfo
.ioDrDirID
= fss
->parID
;
384 error
= PBGetCatInfoSync(&pb
);
385 if ( error
) return error
;
386 pb
.dirInfo
.ioNamePtr
= fss
->name
;
387 pb
.dirInfo
.ioFDirIndex
= 0;
388 pb
.dirInfo
.ioVRefNum
= fss
->vRefNum
;
389 pb
.dirInfo
.ioDrDirID
= fss
->parID
;
390 pb
.hFileInfo
.ioFlCrDat
= crdat
;
391 pb
.hFileInfo
.ioFlMdDat
= mddat
;
392 pb
.hFileInfo
.ioFlBkDat
= bkdat
;
393 error
= PBSetCatInfoSync(&pb
);
398 mfss_as_pathname(self
, args
)
405 if (!PyArg_ParseTuple(args
, ""))
407 err
= PyMac_GetFullPath(&self
->fsspec
, strbuf
);
409 PyErr_Mac(ErrorObject
, err
);
412 return PyString_FromString(strbuf
);
416 mfss_as_tuple(self
, args
)
420 if (!PyArg_ParseTuple(args
, ""))
422 return Py_BuildValue("(iis#)", self
->fsspec
.vRefNum
, self
->fsspec
.parID
,
423 &self
->fsspec
.name
[1], self
->fsspec
.name
[0]);
427 mfss_NewAlias(self
, args
)
436 if (!PyArg_ParseTuple(args
, "|O&", PyMac_GetFSSpec
, &src
))
442 err
= NewAlias(srcp
, &self
->fsspec
, &alias
);
444 PyErr_Mac(ErrorObject
, err
);
448 return (PyObject
*)newmfsaobject(alias
);
452 mfss_NewAliasMinimal(self
, args
)
459 if (!PyArg_ParseTuple(args
, ""))
461 err
= NewAliasMinimal(&self
->fsspec
, &alias
);
463 PyErr_Mac(ErrorObject
, err
);
466 return (PyObject
*)newmfsaobject(alias
);
469 /* XXXX These routines should be replaced by a wrapper to the *FInfo routines */
471 mfss_GetCreatorType(self
, args
)
478 if (!PyArg_ParseTuple(args
, ""))
480 err
= FSpGetFInfo(&self
->fsspec
, &info
);
482 PyErr_Mac(ErrorObject
, err
);
485 return Py_BuildValue("(O&O&)",
486 PyMac_BuildOSType
, info
.fdCreator
, PyMac_BuildOSType
, info
.fdType
);
490 mfss_SetCreatorType(self
, args
)
495 OSType creator
, type
;
498 if (!PyArg_ParseTuple(args
, "O&O&", PyMac_GetOSType
, &creator
, PyMac_GetOSType
, &type
))
500 err
= FSpGetFInfo(&self
->fsspec
, &info
);
502 PyErr_Mac(ErrorObject
, err
);
506 info
.fdCreator
= creator
;
507 err
= FSpSetFInfo(&self
->fsspec
, &info
);
509 PyErr_Mac(ErrorObject
, err
);
517 mfss_GetFInfo(self
, args
)
525 if (!PyArg_ParseTuple(args
, ""))
527 if ( (fip
=newmfsiobject()) == NULL
)
529 err
= FSpGetFInfo(&self
->fsspec
, &fip
->finfo
);
531 PyErr_Mac(ErrorObject
, err
);
535 return (PyObject
*)fip
;
539 mfss_SetFInfo(self
, args
)
546 if (!PyArg_ParseTuple(args
, "O!", &Mfsitype
, &fip
))
548 err
= FSpSetFInfo(&self
->fsspec
, &fip
->finfo
);
550 PyErr_Mac(ErrorObject
, err
);
558 mfss_GetDates(self
, args
)
563 unsigned long crdat
, mddat
, bkdat
;
565 if (!PyArg_ParseTuple(args
, ""))
567 err
= PyMac_GetFileDates(&self
->fsspec
, &crdat
, &mddat
, &bkdat
);
569 PyErr_Mac(ErrorObject
, err
);
572 return Py_BuildValue("ddd", (double)crdat
, (double)mddat
, (double)bkdat
);
576 mfss_SetDates(self
, args
)
581 double crdat
, mddat
, bkdat
;
583 if (!PyArg_ParseTuple(args
, "ddd", &crdat
, &mddat
, &bkdat
))
585 err
= PyMac_SetFileDates(&self
->fsspec
, (unsigned long)crdat
,
586 (unsigned long)mddat
, (unsigned long)bkdat
);
588 PyErr_Mac(ErrorObject
, err
);
595 static struct PyMethodDef mfss_methods
[] = {
596 {"as_pathname", (PyCFunction
)mfss_as_pathname
, 1},
597 {"as_tuple", (PyCFunction
)mfss_as_tuple
, 1},
598 {"NewAlias", (PyCFunction
)mfss_NewAlias
, 1},
599 {"NewAliasMinimal", (PyCFunction
)mfss_NewAliasMinimal
, 1},
600 {"GetCreatorType", (PyCFunction
)mfss_GetCreatorType
, 1},
601 {"SetCreatorType", (PyCFunction
)mfss_SetCreatorType
, 1},
602 {"GetFInfo", (PyCFunction
)mfss_GetFInfo
, 1},
603 {"SetFInfo", (PyCFunction
)mfss_SetFInfo
, 1},
604 {"GetDates", (PyCFunction
)mfss_GetDates
, 1},
605 {"SetDates", (PyCFunction
)mfss_SetDates
, 1},
607 {NULL
, NULL
} /* sentinel */
613 mfss_getattr(self
, name
)
617 if ( strcmp(name
, "data") == 0)
618 return PyString_FromStringAndSize((char *)&self
->fsspec
, sizeof(FSSpec
));
619 return Py_FindMethod(mfss_methods
, (PyObject
*)self
, name
);
628 self
= PyObject_NEW(mfssobject
, &Mfsstype
);
648 sprintf(buf
, "FSSpec((%d, %d, '%.*s'))",
649 self
->fsspec
.vRefNum
,
651 self
->fsspec
.name
[0], self
->fsspec
.name
+1);
652 return PyString_FromString(buf
);
662 if ( v
->fsspec
.vRefNum
< w
->fsspec
.vRefNum
) return -1;
663 if ( v
->fsspec
.vRefNum
> w
->fsspec
.vRefNum
) return 1;
664 if ( v
->fsspec
.parID
< w
->fsspec
.parID
) return -1;
665 if ( v
->fsspec
.parID
> w
->fsspec
.parID
) return 1;
666 minlen
= v
->fsspec
.name
[0];
667 if ( w
->fsspec
.name
[0] < minlen
) minlen
= w
->fsspec
.name
[0];
668 res
= strncmp((char *)v
->fsspec
.name
+1, (char *)w
->fsspec
.name
+1, minlen
);
669 if ( res
) return res
;
670 if ( v
->fsspec
.name
[0] < w
->fsspec
.name
[0] ) return -1;
671 if ( v
->fsspec
.name
[0] > w
->fsspec
.name
[0] ) return 1;
675 statichere PyTypeObject Mfsstype
= {
676 PyObject_HEAD_INIT(&PyType_Type
)
678 "FSSpec", /*tp_name*/
679 sizeof(mfssobject
), /*tp_basicsize*/
682 (destructor
)mfss_dealloc
, /*tp_dealloc*/
683 (printfunc
)0, /*tp_print*/
684 (getattrfunc
)mfss_getattr
, /*tp_getattr*/
685 (setattrfunc
)0, /*tp_setattr*/
686 (cmpfunc
)mfss_compare
, /*tp_compare*/
687 (reprfunc
)mfss_repr
, /*tp_repr*/
689 0, /*tp_as_sequence*/
691 (hashfunc
)0, /*tp_hash*/
694 /* End of code for FSSpec objects */
695 /* -------------------------------------------------------- */
698 mfs_ResolveAliasFile(self
, args
)
699 PyObject
*self
; /* Not used */
703 Boolean chain
= 1, isfolder
, wasaliased
;
706 if (!PyArg_ParseTuple(args
, "O&|i", PyMac_GetFSSpec
, &fss
, &chain
))
708 err
= ResolveAliasFile(&fss
, chain
, &isfolder
, &wasaliased
);
710 PyErr_Mac(ErrorObject
, err
);
713 return Py_BuildValue("Oii", newmfssobject(&fss
), (int)isfolder
, (int)wasaliased
);
717 mfs_StandardGetFile(self
, args
)
718 PyObject
*self
; /* Not used */
723 StandardFileReply reply
;
725 list
[0] = list
[1] = list
[2] = list
[3] = 0;
727 if (!PyArg_ParseTuple(args
, "|O&O&O&O&", PyMac_GetOSType
, &list
[0],
728 PyMac_GetOSType
, &list
[1], PyMac_GetOSType
, &list
[2],
729 PyMac_GetOSType
, &list
[3]) )
731 while ( numtypes
< 4 && list
[numtypes
] ) {
736 StandardGetFile((FileFilterUPP
)0, numtypes
, list
, &reply
);
737 return Py_BuildValue("(Oi)", newmfssobject(&reply
.sfFile
), reply
.sfGood
);
741 mfs_PromptGetFile(self
, args
)
742 PyObject
*self
; /* Not used */
747 StandardFileReply reply
;
750 list
[0] = list
[1] = list
[2] = list
[3] = 0;
752 if (!PyArg_ParseTuple(args
, "s|O&O&O&O&", &prompt
, PyMac_GetOSType
, &list
[0],
753 PyMac_GetOSType
, &list
[1], PyMac_GetOSType
, &list
[2],
754 PyMac_GetOSType
, &list
[3]) )
756 while ( numtypes
< 4 && list
[numtypes
] ) {
761 PyMac_PromptGetFile(numtypes
, list
, &reply
, prompt
);
762 return Py_BuildValue("(Oi)", newmfssobject(&reply
.sfFile
), reply
.sfGood
);
766 mfs_StandardPutFile(self
, args
)
767 PyObject
*self
; /* Not used */
771 StandardFileReply reply
;
774 if (!PyArg_ParseTuple(args
, "O&|O&", PyMac_GetStr255
, &prompt
, PyMac_GetStr255
, &dft
) )
776 StandardPutFile(prompt
, dft
, &reply
);
777 return Py_BuildValue("(Oi)",newmfssobject(&reply
.sfFile
), reply
.sfGood
);
781 ** Set initial directory for file dialogs */
783 mfs_SetFolder(self
, args
)
793 orefnum
= -LMGetSFSaveDisk();
794 oparid
= LMGetCurDirStore();
795 (void)FSMakeFSSpec(orefnum
, oparid
, "\pplaceholder", &ospec
);
797 /* Go to working directory by default */
798 (void)FSMakeFSSpec(0, 0, "\p:placeholder", &spec
);
799 if (!PyArg_ParseTuple(args
, "|O&", PyMac_GetFSSpec
, &spec
))
801 /* Set standard-file working directory */
802 LMSetSFSaveDisk(-spec
.vRefNum
);
803 LMSetCurDirStore(spec
.parID
);
804 return (PyObject
*)newmfssobject(&ospec
);
808 mfs_FSSpec(self
, args
)
809 PyObject
*self
; /* Not used */
814 if (!PyArg_ParseTuple(args
, "O&", PyMac_GetFSSpec
, &fss
))
816 return (PyObject
*)newmfssobject(&fss
);
820 mfs_RawFSSpec(self
, args
)
821 PyObject
*self
; /* Not used */
827 if (!PyArg_ParseTuple(args
, "s#", &fssp
, &size
))
829 if ( size
!= sizeof(FSSpec
) ) {
830 PyErr_SetString(PyExc_TypeError
, "Incorrect size for FSSpec record");
833 return (PyObject
*)newmfssobject(fssp
);
837 mfs_RawAlias(self
, args
)
838 PyObject
*self
; /* Not used */
845 if (!PyArg_ParseTuple(args
, "s#", &dataptr
, &size
))
853 memcpy((char *)*h
, dataptr
, size
);
855 return (PyObject
*)newmfsaobject((AliasHandle
)h
);
859 mfs_GetDirectory(self
, args
)
860 PyObject
*self
; /* Not used */
867 if (!PyArg_ParseTuple(args
, "|s", &prompt
) )
870 ok
= PyMac_GetDirectory(&fsdir
, prompt
);
871 return Py_BuildValue("(Oi)", newmfssobject(&fsdir
), ok
);
875 mfs_FindFolder(self
, args
)
876 PyObject
*self
; /* Not used */
886 if (!PyArg_ParseTuple(args
, "hO&i", &where
, PyMac_GetOSType
, &which
, &create
) )
888 err
= FindFolder(where
, which
, (Boolean
)create
, &refnum
, &dirid
);
890 PyErr_Mac(ErrorObject
, err
);
893 return Py_BuildValue("(ii)", refnum
, dirid
);
897 mfs_FindApplication(self
, args
)
898 PyObject
*self
; /* Not used */
905 if (!PyArg_ParseTuple(args
, "O&", PyMac_GetOSType
, &which
) )
907 err
= FindApplicationFromCreator(which
, &fss
);
909 PyErr_Mac(ErrorObject
, err
);
912 return (PyObject
*)newmfssobject(&fss
);
916 mfs_FInfo(self
, args
)
920 return (PyObject
*)newmfsiobject();
924 mfs_NewAliasMinimalFromFullPath(self
, args
)
925 PyObject
*self
; /* Not used */
935 if (!PyArg_ParseTuple(args
, "s#", &fullpath
, &fullpathlen
) )
939 err
= NewAliasMinimalFromFullPath(fullpathlen
, (Ptr
)fullpath
, zonename
,
942 PyErr_Mac(ErrorObject
, err
);
945 return (PyObject
*)newmfsaobject(alias
);
949 /* List of methods defined in the module */
951 static struct PyMethodDef mfs_methods
[] = {
952 {"ResolveAliasFile", mfs_ResolveAliasFile
, 1},
953 {"StandardGetFile", mfs_StandardGetFile
, 1},
954 {"PromptGetFile", mfs_PromptGetFile
, 1},
955 {"StandardPutFile", mfs_StandardPutFile
, 1},
956 {"GetDirectory", mfs_GetDirectory
, 1},
957 {"SetFolder", mfs_SetFolder
, 1},
958 {"FSSpec", mfs_FSSpec
, 1},
959 {"RawFSSpec", mfs_RawFSSpec
, 1},
960 {"RawAlias", mfs_RawAlias
, 1},
961 {"FindFolder", mfs_FindFolder
, 1},
962 {"FindApplication", mfs_FindApplication
, 1},
963 {"FInfo", mfs_FInfo
, 1},
964 {"NewAliasMinimalFromFullPath", mfs_NewAliasMinimalFromFullPath
, 1},
966 {NULL
, NULL
} /* sentinel */
970 /* Initialization function for the module (*must* be called initmacfs) */
977 /* Create the module and add the functions */
978 m
= Py_InitModule("macfs", mfs_methods
);
980 /* Add some symbolic constants to the module */
981 d
= PyModule_GetDict(m
);
982 ErrorObject
= PyErr_NewException("macfs.error", NULL
, NULL
);
983 PyDict_SetItemString(d
, "error", ErrorObject
);
985 Mfsatype
.ob_type
= &PyType_Type
;
986 Py_INCREF(&Mfsatype
);
987 PyDict_SetItemString(d
, "AliasType", (PyObject
*)&Mfsatype
);
988 Mfsstype
.ob_type
= &PyType_Type
;
989 Py_INCREF(&Mfsstype
);
990 PyDict_SetItemString(d
, "FSSpecType", (PyObject
*)&Mfsstype
);
991 Mfsitype
.ob_type
= &PyType_Type
;
992 Py_INCREF(&Mfsitype
);
993 PyDict_SetItemString(d
, "FInfoType", (PyObject
*)&Mfsitype
);
994 /* XXXX Add constants here */