mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +00:00 
			
		
		
		
	gestaltmodule.c: interface to Gestalt Manager.
macosmodule.c: interface to random collection of Managers. macsetfiletype.c: set file type, for import.c.
This commit is contained in:
		
							parent
							
								
									bf677edc45
								
							
						
					
					
						commit
						2d16703d65
					
				
					 3 changed files with 475 additions and 0 deletions
				
			
		
							
								
								
									
										45
									
								
								Mac/Modules/gestaltmodule.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								Mac/Modules/gestaltmodule.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,45 @@ | ||||||
|  | /* Macintosh Gestalt interface */ | ||||||
|  | 
 | ||||||
|  | #include "allobjects.h" | ||||||
|  | #include "modsupport.h" | ||||||
|  | 
 | ||||||
|  | #include <Types.h> | ||||||
|  | #include <GestaltEqu.h> | ||||||
|  | 
 | ||||||
|  | static object * | ||||||
|  | gestalt_gestalt(self, args) | ||||||
|  | 	object *self; | ||||||
|  | 	object *args; | ||||||
|  | { | ||||||
|  | 	OSErr iErr; | ||||||
|  | 	char *str; | ||||||
|  | 	int size; | ||||||
|  | 	OSType selector; | ||||||
|  | 	long response; | ||||||
|  | 	if (!getargs(args, "s#", &str, &size)) | ||||||
|  | 		return NULL; | ||||||
|  | 	if (size != 4) { | ||||||
|  | 		err_setstr(TypeError, "gestalt arg must be 4-char string"); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 	selector = *(OSType*)str; | ||||||
|  | 	iErr = Gestalt ( selector, &response ); | ||||||
|  | 	if (iErr != 0) { | ||||||
|  | 		char buf[100]; | ||||||
|  | 		sprintf(buf, "Gestalt error code %d", iErr); | ||||||
|  | 		err_setstr(RuntimeError, buf); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 	return newintobject(response); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static struct methodlist gestalt_methods[] = { | ||||||
|  | 	{"gestalt", gestalt_gestalt}, | ||||||
|  | 	{NULL, NULL} /* Sentinel */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | initgestalt() | ||||||
|  | { | ||||||
|  | 	initmodule("gestalt", gestalt_methods); | ||||||
|  | } | ||||||
							
								
								
									
										405
									
								
								Mac/Modules/macosmodule.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										405
									
								
								Mac/Modules/macosmodule.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,405 @@ | ||||||
|  | /***********************************************************
 | ||||||
|  | Copyright 1991, 1992, 1993, 1994 by Stichting Mathematisch Centrum, | ||||||
|  | Amsterdam, The Netherlands. | ||||||
|  | 
 | ||||||
|  |                         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. | ||||||
|  | 
 | ||||||
|  | ******************************************************************/ | ||||||
|  | 
 | ||||||
|  | /* Macintosh OS-specific interface */ | ||||||
|  | 
 | ||||||
|  | #include "Python.h" | ||||||
|  | 
 | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <errno.h> | ||||||
|  | 
 | ||||||
|  | #include <Resources.h> | ||||||
|  | #include <Sound.h> | ||||||
|  | 
 | ||||||
|  | /*----------------------------------------------------------------------*/ | ||||||
|  | /* General tools */ | ||||||
|  | 
 | ||||||
|  | static PyObject *MacOS_Error; /* Exception MacOS.Error */ | ||||||
|  | 
 | ||||||
|  | /* Set a MAC-specific error from errno, and return NULL; return None if no error */ | ||||||
|  | static PyObject *  | ||||||
|  | Err(OSErr err) | ||||||
|  | { | ||||||
|  | 	char buf[100]; | ||||||
|  | 	PyObject *v; | ||||||
|  | 	if (err == 0) { | ||||||
|  | 		Py_INCREF(Py_None); | ||||||
|  | 		return Py_None; | ||||||
|  | 	} | ||||||
|  | 	sprintf(buf, "Mac OS error code %d", (int)err); | ||||||
|  | 	v = Py_BuildValue("(is)", (int)err, buf); | ||||||
|  | 	PyErr_SetObject(MacOS_Error, v); | ||||||
|  | 	Py_DECREF(v); | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check for a ResType argument */ | ||||||
|  | static int | ||||||
|  | GetOSType(PyObject *v, ResType *pr) | ||||||
|  | { | ||||||
|  | 	if (!PyString_Check(v) || PyString_Size(v) != 4) { | ||||||
|  | 		PyErr_SetString(MacOS_Error, | ||||||
|  | 			"OSType arg must be string of 4 chars"); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 	memcpy((char *)pr, PyString_AsString(v), 4); | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Check for a Str255 argument */ | ||||||
|  | static int | ||||||
|  | GetStr255(PyObject *v, Str255 pbuf) | ||||||
|  | { | ||||||
|  | 	int len; | ||||||
|  | 	if (!PyString_Check(v) || (len = PyString_Size(v)) > 255) { | ||||||
|  | 		PyErr_SetString(MacOS_Error, | ||||||
|  | 			"Str255 arg must be string <= 255 chars"); | ||||||
|  | 		return 0; | ||||||
|  | 	} | ||||||
|  | 	pbuf[0] = len; | ||||||
|  | 	memcpy((char *)(pbuf+1), PyString_AsString(v), len); | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*----------------------------------------------------------------------*/ | ||||||
|  | /* Resource objects */ | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  | 	OB_HEAD | ||||||
|  | 	Handle h; | ||||||
|  | } RsrcObject; | ||||||
|  | 
 | ||||||
|  | staticforward PyTypeObject RsrcType; | ||||||
|  | 
 | ||||||
|  | #define RsrcObject_Check(r) ((r)->ob_type == &RsrcType) | ||||||
|  | 
 | ||||||
|  | static RsrcObject * | ||||||
|  | Rsrc_FromHandle(Handle h) | ||||||
|  | { | ||||||
|  | 	RsrcObject *r; | ||||||
|  | 	if (h == NULL) | ||||||
|  | 		return (RsrcObject *)Err(ResError()); | ||||||
|  | 	r = PyObject_NEW(RsrcObject, &RsrcType); | ||||||
|  | 	if (r != NULL) | ||||||
|  | 		r->h = h; | ||||||
|  | 	return r; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void | ||||||
|  | Rsrc_Dealloc(RsrcObject *r) | ||||||
|  | { | ||||||
|  | 	PyMem_DEL(r); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | Rsrc_GetResInfo(RsrcObject *r, PyObject *args) | ||||||
|  | { | ||||||
|  | 	short id; | ||||||
|  | 	ResType type; | ||||||
|  | 	Str255 name; | ||||||
|  | 	if (!PyArg_Parse(args, "()")) | ||||||
|  | 		return NULL; | ||||||
|  | 	GetResInfo(r->h, &id, &type, name); | ||||||
|  | 	return Py_BuildValue("(is#s#)", | ||||||
|  | 		(int)id, (char *)&type, 4, name+1, (int)name[0]); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyMethodDef Rsrc_Methods[] = { | ||||||
|  | 	{"GetResInfo",	(PyCFunction)Rsrc_GetResInfo, 1}, | ||||||
|  | 	{NULL,			NULL}		 /* Sentinel */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | Rsrc_GetAttr(PyObject *r, char *name) | ||||||
|  | { | ||||||
|  | 	return Py_FindMethod(Rsrc_Methods, r, name); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyTypeObject RsrcType = { | ||||||
|  | 	PyObject_HEAD_INIT(&PyType_Type) | ||||||
|  | 	0, | ||||||
|  | 	"Resource",			/*tp_name*/ | ||||||
|  | 	sizeof(RsrcObject),	/*tp_basicsize*/ | ||||||
|  | 	0,			/*tp_itemsize*/ | ||||||
|  | 	/* methods */ | ||||||
|  | 	(destructor)Rsrc_Dealloc, /*tp_dealloc*/ | ||||||
|  | 	0,			/*tp_print*/ | ||||||
|  | 	(getattrfunc)Rsrc_GetAttr, /*tp_getattr*/ | ||||||
|  | 	0,			/*tp_setattr*/ | ||||||
|  | 	0,			/*tp_compare*/ | ||||||
|  | 	0,			/*tp_repr*/ | ||||||
|  | 	0,			/*tp_as_number*/ | ||||||
|  | 	0,			/*tp_as_sequence*/ | ||||||
|  | 	0,			/*tp_as_mapping*/ | ||||||
|  | 	0,			/*tp_hash*/ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | MacOS_GetResource(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	ResType rt; | ||||||
|  | 	int id; | ||||||
|  | 	Handle h; | ||||||
|  | 	if (!PyArg_Parse(args, "(O&i)", GetOSType, &rt, &id)) | ||||||
|  | 		return NULL; | ||||||
|  | 	h = GetResource(rt, id); | ||||||
|  | 	return (PyObject *)Rsrc_FromHandle(h); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | MacOS_GetNamedResource(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	ResType rt; | ||||||
|  | 	Str255 name; | ||||||
|  | 	Handle h; | ||||||
|  | 	if (!PyArg_Parse(args, "(O&O&)", GetOSType, &rt, GetStr255, &name)) | ||||||
|  | 		return NULL; | ||||||
|  | 	h = GetNamedResource(rt, name); | ||||||
|  | 	return (PyObject *)Rsrc_FromHandle(h); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /*----------------------------------------------------------------------*/ | ||||||
|  | /* SoundChannel objects */ | ||||||
|  | 
 | ||||||
|  | /* Check for a SndCommand argument */ | ||||||
|  | static int | ||||||
|  | GetSndCommand(PyObject *v, SndCommand *pc) | ||||||
|  | { | ||||||
|  | 	int len; | ||||||
|  | 	pc->param1 = 0; | ||||||
|  | 	pc->param2 = 0; | ||||||
|  | 	if (PyArg_Parse(v, "h", &pc->cmd)) | ||||||
|  | 		return 1; | ||||||
|  | 	PyErr_Clear(); | ||||||
|  | 	if (PyArg_Parse(v, "(h)", &pc->cmd)) | ||||||
|  | 		return 1; | ||||||
|  | 	PyErr_Clear(); | ||||||
|  | 	if (PyArg_Parse(v, "(hh)", &pc->cmd, &pc->param1)) | ||||||
|  | 		return 1; | ||||||
|  | 	PyErr_Clear(); | ||||||
|  | 	if (PyArg_Parse(v, "(hhl)", | ||||||
|  | 			&pc->cmd, &pc->param1, &pc->param2)) | ||||||
|  | 		return 1; | ||||||
|  | 	PyErr_Clear(); | ||||||
|  | 	if (PyArg_Parse(v, "(hhs#);SndCommand arg must be 1-3 ints or 2 ints + string", | ||||||
|  | 			&pc->cmd, &pc->param1, &pc->param2, &len)) | ||||||
|  | 		return 1; | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | typedef struct { | ||||||
|  | 	OB_HEAD | ||||||
|  | 	SndChannelPtr chan; | ||||||
|  | } SndChObject; | ||||||
|  | 
 | ||||||
|  | staticforward PyTypeObject SndChType; | ||||||
|  | 
 | ||||||
|  | #define SndChObject_Check(s) ((s)->ob_type == &SndChType) | ||||||
|  | 
 | ||||||
|  | static SndChObject * | ||||||
|  | SndCh_FromSndChannelPtr(SndChannelPtr chan) | ||||||
|  | { | ||||||
|  | 	SndChObject *s = PyObject_NEW(SndChObject, &SndChType); | ||||||
|  | 	if (s != NULL) | ||||||
|  | 		s->chan = chan; | ||||||
|  | 	return s; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void | ||||||
|  | SndCh_Dealloc(SndChObject *s) | ||||||
|  | { | ||||||
|  | 	if (s->chan != NULL) { | ||||||
|  | 		SndDisposeChannel(s->chan, 1); | ||||||
|  | 		s->chan = NULL; | ||||||
|  | 	} | ||||||
|  | 	PyMem_DEL(s); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | SndCh_Close(SndChObject *s, PyObject *args) | ||||||
|  | { | ||||||
|  | 	int quietNow = 1; | ||||||
|  | 	if (args != NULL) { | ||||||
|  | 		if (!PyArg_Parse(args, "i", &quietNow)) | ||||||
|  | 			return NULL; | ||||||
|  | 	} | ||||||
|  | 	if (s->chan != NULL) { | ||||||
|  | 		SndDisposeChannel(s->chan, quietNow); | ||||||
|  | 		s->chan = NULL; | ||||||
|  | 	} | ||||||
|  | 	Py_INCREF(Py_None); | ||||||
|  | 	return Py_None; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | SndCh_SndPlay(SndChObject *s, PyObject *args) | ||||||
|  | { | ||||||
|  | 	RsrcObject *r; | ||||||
|  | 	int async = 0; | ||||||
|  | 	if (!PyArg_Parse(args, "(O)", &r)) { | ||||||
|  | 		PyErr_Clear(); | ||||||
|  | 		if (!PyArg_Parse(args, "(Oi)", &r, &async)) | ||||||
|  | 			return NULL; | ||||||
|  | 	} | ||||||
|  | 	if (!RsrcObject_Check(r)) { | ||||||
|  | 		PyErr_SetString(MacOS_Error, | ||||||
|  | 			"SndPlay argument must be resource"); | ||||||
|  | 		return NULL; | ||||||
|  | 	} | ||||||
|  | 	SndPlay(s->chan, r->h, async); | ||||||
|  | 	Py_INCREF(Py_None); | ||||||
|  | 	return Py_None; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | SndCh_SndDoCommand(SndChObject *s, PyObject *args) | ||||||
|  | { | ||||||
|  | 	SndCommand c; | ||||||
|  | 	int noWait = 0; | ||||||
|  | 	OSErr err; | ||||||
|  | 	if (!PyArg_Parse(args, "(O&)", GetSndCommand, &c)) { | ||||||
|  | 		PyErr_Clear(); | ||||||
|  | 		if (!PyArg_Parse(args, "(O&i)", GetSndCommand, &c, &noWait)) | ||||||
|  | 			return 0; | ||||||
|  | 	} | ||||||
|  | 	err = SndDoCommand(s->chan, &c, noWait); | ||||||
|  | 	return Err(err); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | SndCh_SndDoImmediate(SndChObject *s, PyObject *args) | ||||||
|  | { | ||||||
|  | 	SndCommand c; | ||||||
|  | 	OSErr err; | ||||||
|  | 	if (!PyArg_Parse(args, "(O&)", GetSndCommand, &c)) | ||||||
|  | 		return 0; | ||||||
|  | 	err = SndDoImmediate(s->chan, &c); | ||||||
|  | 	return Err(err); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyMethodDef SndCh_Methods[] = { | ||||||
|  | 	{"close",				(PyCFunction)SndCh_Close}, | ||||||
|  | 	{"SndDisposeChannel",	(PyCFunction)SndCh_Close}, | ||||||
|  | 	{"SndPlay",				(PyCFunction)SndCh_SndPlay, 1}, | ||||||
|  | 	{"SndDoCommand",		(PyCFunction)SndCh_SndDoCommand, 1}, | ||||||
|  | 	{"SndDoImmediate",		(PyCFunction)SndCh_SndDoImmediate, 1}, | ||||||
|  | 	{NULL,					NULL}		 /* Sentinel */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | SndCh_GetAttr(PyObject *s, char *name) | ||||||
|  | { | ||||||
|  | 	return Py_FindMethod(SndCh_Methods, s, name); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyTypeObject SndChType = { | ||||||
|  | 	PyObject_HEAD_INIT(&PyType_Type) | ||||||
|  | 	0, | ||||||
|  | 	"SoundChannel",			/*tp_name*/ | ||||||
|  | 	sizeof(SndChObject),	/*tp_basicsize*/ | ||||||
|  | 	0,			/*tp_itemsize*/ | ||||||
|  | 	/* methods */ | ||||||
|  | 	(destructor)SndCh_Dealloc, /*tp_dealloc*/ | ||||||
|  | 	0,			/*tp_print*/ | ||||||
|  | 	(getattrfunc)SndCh_GetAttr, /*tp_getattr*/ | ||||||
|  | 	0,			/*tp_setattr*/ | ||||||
|  | 	0,			/*tp_compare*/ | ||||||
|  | 	0,			/*tp_repr*/ | ||||||
|  | 	0,			/*tp_as_number*/ | ||||||
|  | 	0,			/*tp_as_sequence*/ | ||||||
|  | 	0,			/*tp_as_mapping*/ | ||||||
|  | 	0,			/*tp_hash*/ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | /*----------------------------------------------------------------------*/ | ||||||
|  | /* Module */ | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | MacOS_SndNewChannel(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	SndChannelPtr chan; | ||||||
|  | 	short synth; | ||||||
|  | 	long init = 0; | ||||||
|  | 	OSErr err; | ||||||
|  | 	if (!PyArg_Parse(args, "(h)", &synth)) { | ||||||
|  | 		PyErr_Clear(); | ||||||
|  | 		if (!PyArg_Parse(args, "(hl)", &synth, &init)) | ||||||
|  | 			return NULL; | ||||||
|  | 	} | ||||||
|  | 	chan = NULL; | ||||||
|  | 	err = SndNewChannel(&chan, synth, init, (SndCallBackProcPtr)NULL); | ||||||
|  | 	if (err) | ||||||
|  | 		return Err(err); | ||||||
|  | 	return (PyObject *)SndCh_FromSndChannelPtr(chan); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | MacOS_SndPlay(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	RsrcObject *r; | ||||||
|  | 	OSErr err; | ||||||
|  | 	if (!PyArg_Parse(args, "(O!)", &RsrcType, &r)) | ||||||
|  | 		return NULL; | ||||||
|  | 	err = SndPlay((SndChannelPtr)NULL, r->h, 0); | ||||||
|  | 	return Err(err); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyObject * | ||||||
|  | MacOS_SndControl(PyObject *self, PyObject *args) | ||||||
|  | { | ||||||
|  | 	int id; | ||||||
|  | 	SndCommand c; | ||||||
|  | 	OSErr err; | ||||||
|  | 	if (!PyArg_Parse(args, "(iO&)", &id, GetSndCommand, &c)) | ||||||
|  | 		return NULL; | ||||||
|  | 	err = SndControl(id, &c); | ||||||
|  | 	if (err) | ||||||
|  | 		return Err(err); | ||||||
|  | 	return Py_BuildValue("(hhl)", c.cmd, c.param1, c.param2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static PyMethodDef MacOS_Methods[] = { | ||||||
|  | 	{"GetResource",			MacOS_GetResource, 1}, | ||||||
|  | 	{"GetNamedResource",	MacOS_GetNamedResource, 1}, | ||||||
|  | 	{"SndNewChannel",		MacOS_SndNewChannel, 1}, | ||||||
|  | 	{"SndPlay",				MacOS_SndPlay, 1}, | ||||||
|  | 	{"SndControl",			MacOS_SndControl, 1}, | ||||||
|  | 	{NULL,					NULL}		 /* Sentinel */ | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | MacOS_Init() | ||||||
|  | { | ||||||
|  | 	PyObject *m, *d; | ||||||
|  | 	 | ||||||
|  | 	m = Py_InitModule("MacOS", MacOS_Methods); | ||||||
|  | 	d = PyModule_GetDict(m); | ||||||
|  | 	 | ||||||
|  | 	/* Initialize MacOS.Error exception */ | ||||||
|  | 	MacOS_Error = PyString_FromString("MacOS.Error"); | ||||||
|  | 	if (MacOS_Error == NULL || PyDict_SetItemString(d, "Error", MacOS_Error) != 0) | ||||||
|  | 		Py_FatalError("can't define MacOS.Error"); | ||||||
|  | } | ||||||
							
								
								
									
										25
									
								
								Mac/Python/macsetfiletype.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								Mac/Python/macsetfiletype.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  *  macsetfiletype - Set the mac's idea of file type | ||||||
|  |  * | ||||||
|  |  */ | ||||||
|  |   | ||||||
|  | #include <Files.h> | ||||||
|  | #include <pascal.h> | ||||||
|  | 
 | ||||||
|  | int | ||||||
|  | setfiletype(name, creator, type) | ||||||
|  | char *name; | ||||||
|  | long creator, type; | ||||||
|  | { | ||||||
|  | 	FInfo info; | ||||||
|  | 	unsigned char *pname; | ||||||
|  | 	 | ||||||
|  | 	pname = c2pstr(name); | ||||||
|  | 	if ( GetFInfo(pname, 0, &info) < 0 ) | ||||||
|  | 		return -1; | ||||||
|  | 	info.fdType = type; | ||||||
|  | 	info.fdCreator = creator; | ||||||
|  | 	return SetFInfo(pname, 0, &info); | ||||||
|  | } | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum