| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | # Scan <Menus.h>, generating menugen.py. | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | import sys | 
					
						
							|  |  |  | import os | 
					
						
							| 
									
										
										
										
											2002-08-05 15:39:30 +00:00
										 |  |  | from bgenlocations import TOOLBOXDIR, BGENDIR | 
					
						
							| 
									
										
										
										
											1998-04-17 14:07:56 +00:00
										 |  |  | sys.path.append(BGENDIR) | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from scantools import Scanner | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def main(): | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     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 ===" | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class MyScanner(Scanner): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     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 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     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', | 
					
						
							|  |  |  |                 ] | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     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", | 
					
						
							|  |  |  |                 ] | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     def makerepairinstructions(self): | 
					
						
							|  |  |  |         return [ | 
					
						
							|  |  |  |                 ([("Str255", "itemString", "InMode")], | 
					
						
							|  |  |  |                  [("*", "*", "OutMode")]), | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |                 ([("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") | 
					
						
							| 
									
										
										
										
											1998-04-24 10:28:20 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											1995-01-30 11:53:55 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  |     main() |