menuscan.py 3.27 KB
Newer Older
1
# Scan <Menus.h>, generating menugen.py.
2
import sys
3
from bgenlocations import TOOLBOXDIR, BGENDIR
4
sys.path.append(BGENDIR)
5 6 7 8

from scantools import Scanner

def main():
9 10 11 12 13 14 15 16 17 18 19
    input = "Menus.h"
    output = "menugen.py"
    defsoutput = TOOLBOXDIR + "Menus.py"
    scanner = MyScanner(input, output, defsoutput)
    scanner.scan()
    scanner.close()
    print "=== Testing definitions output code ==="
    execfile(defsoutput, {}, {})
    print "=== Done scanning and generating, now doing 'import menusupport' ==="
    import menusupport
    print "=== Done.  It's up to you to compile Menumodule.c ==="
20 21 22

class MyScanner(Scanner):

23 24 25 26 27 28 29 30 31
    def destination(self, type, name, arglist):
        classname = "Function"
        listname = "functions"
        if arglist:
            t, n, m = arglist[0]
            if t in ("MenuHandle", "MenuRef") and m == "InMode":
                classname = "Method"
                listname = "methods"
        return classname, listname
32

33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
    def makeblacklistnames(self):
        return [
##                      "IsShowContextualMenuClick", # Can't find it in the library
##                      "InitContextualMenus", # ditto
                "GetMenuItemProperty",  # difficult for the moment
                "GetMenuItemPropertySize",
                "SetMenuItemProperty",
                "RemoveMenuItemProperty",
                "SetMenuCommandProperty",
                "GetMenuCommandProperty",
                "GetMenuTitle", # Funny arg/returnvalue
                "SetMenuTitle",
                "SetMenuTitleIcon", # void*
                # OS8 calls:
                'GetMenuItemRefCon2',
                'SetMenuItemRefCon2',
                'EnableItem',
                'DisableItem',
                'CheckItem',
                'CountMItems',
                'OpenDeskAcc',
                'SystemEdit',
                'SystemMenu',
                'SetMenuFlash',
                'InitMenus',
                'InitProcMenu',
                ]
60

61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
    def makeblacklisttypes(self):
        return [
                'MCTableHandle',
                'MCEntryPtr',
                'MCTablePtr',
                'AEDesc_ptr', # For now: doable, but not easy
                'ProcessSerialNumber', # ditto
                "MenuDefSpecPtr", # Too difficult for now
                "MenuDefSpec_ptr", # ditto
                "MenuTrackingData",
                "void_ptr",     # Don't know yet.
                "EventRef",     # For now, not exported yet.
                "MenuItemDataPtr", # Not yet.
                "MenuItemDataRec_ptr",
                ]
76

77 78 79 80
    def makerepairinstructions(self):
        return [
                ([("Str255", "itemString", "InMode")],
                 [("*", "*", "OutMode")]),
81

82 83 84 85 86 87 88 89 90 91 92 93
                ([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
                 [("InBuffer", "*", "*")]),

                ([("void", "*", "OutMode"), ("long", "*", "InMode"),
                                            ("long", "*", "OutMode")],
                 [("VarVarOutBuffer", "*", "InOutMode")]),
                ([("MenuRef", 'outHierMenu', "OutMode")],
                 [("OptMenuRef", 'outHierMenu', "OutMode")]),
                ]

    def writeinitialdefs(self):
        self.defsfile.write("def FOUR_CHAR_CODE(x): return x\n")
94

95
if __name__ == "__main__":
96
    main()