diff options
Diffstat (limited to 'Mac/Modules/launch/launchsupport.py')
-rw-r--r-- | Mac/Modules/launch/launchsupport.py | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/Mac/Modules/launch/launchsupport.py b/Mac/Modules/launch/launchsupport.py new file mode 100644 index 0000000..066d3c6 --- /dev/null +++ b/Mac/Modules/launch/launchsupport.py @@ -0,0 +1,111 @@ +# This script generates a Python interface for an Apple Macintosh Manager. +# It uses the "bgen" package to generate C code. +# The function specifications are generated by scanning the mamager's header file, +# using the "scantools" package (customized for this particular manager). + +import string + +# Declarations that change for each manager +MODNAME = '_Launch' # The name of the module +OBJECTNAME = 'UNUSED' # The basic name of the objects used here +KIND = 'Record' # Usually 'Ptr' or 'Handle' + +# The following is *usually* unchanged but may still require tuning +MODPREFIX = 'Launch' # The prefix for module-wide routines +OBJECTTYPE = OBJECTNAME + KIND # The C type used to represent them +OBJECTPREFIX = MODPREFIX + 'Obj' # The prefix for object methods +INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner +OUTPUTFILE = MODNAME + "module.c" # The file generated by this program + +from macsupport import * + +# Create the type objects +LSAcceptanceFlags = Type("LSAcceptanceFlags", "l") +LSInitializeFlags = Type("LSInitializeFlags", "l") +LSRequestedInfo = Type("LSRequestedInfo", "l") +LSRolesMask = Type("LSRolesMask", "l") +OptCFStringRef = OpaqueByValueType("CFStringRef", "OptCFStringRefObj") +LSItemInfoRecord = OpaqueType("LSItemInfoRecord", "LSItemInfoRecord") +#MenuRef = OpaqueByValueType("MenuRef", "MenuObj") +#MenuItemIndex = Type("MenuItemIndex", "H") + +#WindowPeek = OpaqueByValueType("WindowPeek", OBJECTPREFIX) + +#RgnHandle = FakeType("(RgnHandle)0") +# XXXX Should be next, but this will break a lot of code... +# RgnHandle = OpaqueByValueType("RgnHandle", "OptResObj") + +#KeyMap = ArrayOutputBufferType("KeyMap") +##MacOSEventKind = Type("MacOSEventKind", "h") # Old-style +##MacOSEventMask = Type("MacOSEventMask", "h") # Old-style +#EventMask = Type("EventMask", "H") +#EventKind = Type("EventKind", "H") + +includestuff = includestuff + """ +#include <ApplicationServices/ApplicationServices.h> + +/* +** Optional CFStringRef. None will pass NULL +*/ +static int +OptCFStringRefObj_Convert(PyObject *v, CFStringRef *spec) +{ + if (v == Py_None) { + *spec = NULL; + return 1; + } + return CFStringRefObj_Convert(v, spec); +} + +PyObject * +OptCFStringRefObj_New(CFStringRef it) +{ + if (it == NULL) { + Py_INCREF(Py_None); + return Py_None; + } + return CFStringRefObj_New(it); +} + +/* +** Convert LSItemInfoRecord to Python. +*/ +PyObject * +LSItemInfoRecord_New(LSItemInfoRecord *it) +{ + return Py_BuildValue("{s:is:O&s:O&s:O&s:O&s:i}", + "flags", it->flags, + "filetype", PyMac_BuildOSType, it->filetype, + "creator", PyMac_BuildOSType, it->creator, + "extension", OptCFStringRefObj_New, it->extension, + "iconFileName", OptCFStringRefObj_New, it->iconFileName, + "kindID", it->kindID); +} +""" + +# From here on it's basically all boiler plate... +execfile(string.lower(MODPREFIX) + 'typetest.py') + +# Create the generator groups and link them +module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) +##object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE) +##module.addobject(object) + +# Create the generator classes used to populate the lists +Function = OSErrFunctionGenerator +##Method = OSErrMethodGenerator + +# Create and populate the lists +functions = [] +##methods = [] +execfile(INPUTFILE) + +# add the populated lists to the generator groups +# (in a different wordl the scan program would generate this) +for f in functions: module.add(f) +##for f in methods: object.add(f) + +# generate output (open the output file as late as possible) +SetOutputFileName(OUTPUTFILE) +module.generate() + |