Jack Jansen | da6a971 | 1996-04-12 16:25:30 +0000 | [diff] [blame] | 1 | # This script generates a Python interface for an Apple Macintosh Manager. |
| 2 | # It uses the "bgen" package to generate C code. |
| 3 | # The function specifications are generated by scanning the mamager's header file, |
| 4 | # using the "scantools" package (customized for this particular manager). |
| 5 | |
| 6 | # NOTE: the scrap include file is so bad that the bgen output has to be |
| 7 | # massaged by hand. |
| 8 | |
| 9 | import string |
| 10 | |
| 11 | # Declarations that change for each manager |
| 12 | MACHEADERFILE = 'Scrap.h' # The Apple header file |
| 13 | MODNAME = 'Scrap' # The name of the module |
| 14 | |
| 15 | # The following is *usually* unchanged but may still require tuning |
| 16 | MODPREFIX = MODNAME # The prefix for module-wide routines |
| 17 | INPUTFILE = string.lower(MODPREFIX) + 'gen.py' # The file generated by the scanner |
| 18 | OUTPUTFILE = '@' + MODNAME + "module.c" # The file generated by this program |
| 19 | |
| 20 | from macsupport import * |
| 21 | |
| 22 | # Create the type objects |
| 23 | |
| 24 | includestuff = includestuff + """ |
| 25 | #include <%s>""" % MACHEADERFILE + """ |
| 26 | |
| 27 | /* |
| 28 | ** Generate ScrapInfo records |
| 29 | */ |
Jack Jansen | 7b3cc1f | 2001-01-24 16:04:01 +0000 | [diff] [blame^] | 30 | static PyObject * |
| 31 | SCRRec_New(itself) |
Jack Jansen | da6a971 | 1996-04-12 16:25:30 +0000 | [diff] [blame] | 32 | ScrapStuff *itself; |
| 33 | { |
| 34 | |
| 35 | return Py_BuildValue("lO&hhO&", itself->scrapSize, |
| 36 | ResObj_New, itself->scrapHandle, itself->scrapCount, itself->scrapState, |
Jack Jansen | 7b3cc1f | 2001-01-24 16:04:01 +0000 | [diff] [blame^] | 37 | PyMac_BuildStr255, itself->scrapName); |
Jack Jansen | da6a971 | 1996-04-12 16:25:30 +0000 | [diff] [blame] | 38 | } |
| 39 | """ |
| 40 | |
Jack Jansen | 7b3cc1f | 2001-01-24 16:04:01 +0000 | [diff] [blame^] | 41 | ScrapStuffPtr = OpaqueByValueType('ScrapStuffPtr', 'SCRRec') |
| 42 | ScrapFlavorType = OSTypeType('ScrapFlavorType') |
Jack Jansen | da6a971 | 1996-04-12 16:25:30 +0000 | [diff] [blame] | 43 | putscrapbuffer = FixedInputBufferType('void *') |
| 44 | |
| 45 | # Create the generator groups and link them |
| 46 | module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff) |
| 47 | |
| 48 | # Create the generator classes used to populate the lists |
| 49 | Function = OSErrFunctionGenerator |
| 50 | |
| 51 | # Create and populate the lists |
| 52 | functions = [] |
| 53 | execfile(INPUTFILE) |
| 54 | |
| 55 | # add the populated lists to the generator groups |
| 56 | # (in a different wordl the scan program would generate this) |
| 57 | for f in functions: module.add(f) |
| 58 | |
| 59 | # generate output (open the output file as late as possible) |
| 60 | SetOutputFileName(OUTPUTFILE) |
| 61 | module.generate() |
| 62 | |