Import Upstream version 2.7.18

This commit is contained in:
geos_one
2025-08-15 16:28:06 +02:00
commit ba1f69ab39
4521 changed files with 1778434 additions and 0 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,123 @@
f = Function(MenuHandle, 'as_Menu', (Handle, 'h', InMode))
functions.append(f)
f = Method(Handle, 'as_Resource', (MenuHandle, 'h', InMode))
methods.append(f)
# The following have "Mac" prepended to their names in the include file
# since UH 3.1, sigh...
f = Function(MenuHandle, 'GetMenu',
(short, 'resourceID', InMode),
)
functions.append(f)
f = Method(void, 'AppendMenu',
(MenuHandle, 'menu', InMode),
(ConstStr255Param, 'data', InMode),
)
methods.append(f)
f = Method(void, 'InsertMenu',
(MenuHandle, 'theMenu', InMode),
(short, 'beforeID', InMode),
)
methods.append(f)
f = Function(void, 'DeleteMenu',
(short, 'menuID', InMode),
)
functions.append(f)
f = Method(void, 'InsertMenuItem',
(MenuHandle, 'theMenu', InMode),
(ConstStr255Param, 'itemString', InMode),
(short, 'afterItem', InMode),
)
methods.append(f)
f = Method(void, 'EnableMenuItem',
(MenuHandle, 'theMenu', InMode),
(UInt16, 'item', InMode),
)
methods.append(f)
f = Method(void, 'CheckMenuItem',
(MenuRef, 'theMenu', InMode),
(short, 'item', InMode),
(Boolean, 'checked', InMode),
)
methods.append(f)
f = Function(void, 'DrawMenuBar',
)
functions.append(f)
#
# The following functions take an *optional* MenuRef as their first argument
#
f = Function(ItemCount, 'CountMenuItemsWithCommandID',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
)
functions.append(f)
f = Function(OSStatus, 'GetIndMenuItemWithCommandID',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
(UInt32, 'inItemIndex', InMode),
(MenuRef, 'outMenu', OutMode),
(MenuItemIndex, 'outIndex', OutMode),
)
functions.append(f)
f = Function(void, 'EnableMenuCommand',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
)
functions.append(f)
f = Function(void, 'DisableMenuCommand',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
)
functions.append(f)
f = Function(Boolean, 'IsMenuCommandEnabled',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
)
functions.append(f)
f = Function(OSStatus, 'SetMenuCommandMark',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
(UniChar, 'inMark', InMode),
)
functions.append(f)
f = Function(OSStatus, 'GetMenuCommandMark',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
(UniChar, 'outMark', OutMode),
)
functions.append(f)
f = Function(OSStatus, 'GetMenuCommandPropertySize',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
(OSType, 'inPropertyCreator', InMode),
(OSType, 'inPropertyTag', InMode),
(ByteCount, 'outSize', OutMode),
)
functions.append(f)
f = Function(OSStatus, 'RemoveMenuCommandProperty',
(OptMenuRef, 'inMenu', InMode),
(MenuCommand, 'inCommandID', InMode),
(OSType, 'inPropertyCreator', InMode),
(OSType, 'inPropertyTag', InMode),
)
functions.append(f)

View File

@@ -0,0 +1,96 @@
# Scan <Menus.h>, generating menugen.py.
import sys
from bgenlocations import TOOLBOXDIR, BGENDIR
sys.path.append(BGENDIR)
from scantools import Scanner
def main():
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 ==="
class MyScanner(Scanner):
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
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',
]
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",
]
def makerepairinstructions(self):
return [
([("Str255", "itemString", "InMode")],
[("*", "*", "OutMode")]),
([("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")
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,108 @@
# 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
MACHEADERFILE = 'Menus.h' # The Apple header file
MODNAME = '_Menu' # The name of the module
OBJECTNAME = 'Menu' # The basic name of the objects used here
# The following is *usually* unchanged but may still require tuning
MODPREFIX = 'Menu' # The prefix for module-wide routines
OBJECTTYPE = OBJECTNAME + 'Handle' # 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
EXTRAFILE = string.lower(MODPREFIX) + 'edit.py' # A similar file but hand-made
OUTPUTFILE = MODNAME + "module.c" # The file generated by this program
from macsupport import *
# Create the type objects
MenuHandle = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
MenuRef = MenuHandle
OptMenuRef = OpaqueByValueType(OBJECTTYPE, "Opt" + OBJECTPREFIX)
Handle = OpaqueByValueType("Handle", "ResObj")
MenuBarHandle = OpaqueByValueType("MenuBarHandle", "ResObj")
MenuID = Type("MenuID", "h")
MenuItemIndex = Type("MenuItemIndex", "h")
MenuItemID = Type("MenuItemID", "l")
MenuCommand = Type("MenuCommand", "l")
MenuAttributes = Type("MenuAttributes", "l")
MenuItemAttributes = Type("MenuItemAttributes", "l")
unsigned_char = Type('unsigned char', 'b')
FMFontFamily = Type("FMFontFamily", "h")
FMFontStyle = Type("FMFontStyle", "h")
UniChar = Type("UniChar", "h")
includestuff = includestuff + """
#include <Carbon/Carbon.h>
#ifdef USE_TOOLBOX_OBJECT_GLUE
extern PyObject *_MenuObj_New(MenuHandle);
extern int _MenuObj_Convert(PyObject *, MenuHandle *);
#define MenuObj_New _MenuObj_New
#define MenuObj_Convert _MenuObj_Convert
#endif
#define as_Menu(h) ((MenuHandle)h)
#define as_Resource(h) ((Handle)h)
/* Alternative version of MenuObj_New, which returns None for NULL argument */
PyObject *OptMenuObj_New(MenuRef itself)
{
if (itself == NULL) {
Py_INCREF(Py_None);
return Py_None;
}
return MenuObj_New(itself);
}
/* Alternative version of MenuObj_Convert, which returns NULL for a None argument */
int OptMenuObj_Convert(PyObject *v, MenuRef *p_itself)
{
if ( v == Py_None ) {
*p_itself = NULL;
return 1;
}
return MenuObj_Convert(v, p_itself);
}
"""
initstuff = initstuff + """
PyMac_INIT_TOOLBOX_OBJECT_NEW(MenuHandle, MenuObj_New);
PyMac_INIT_TOOLBOX_OBJECT_CONVERT(MenuHandle, MenuObj_Convert);
"""
class MyObjectDefinition(PEP253Mixin, GlobalObjectDefinition):
pass
# 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 = OSErrWeakLinkFunctionGenerator
Method = OSErrWeakLinkMethodGenerator
# Create and populate the lists
functions = []
methods = []
execfile(INPUTFILE)
execfile(EXTRAFILE)
# add the populated lists to the generator groups
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()