mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
still untested (but it compiles)
This commit is contained in:
parent
8b13703fc8
commit
453ced57dc
4 changed files with 7039 additions and 200 deletions
5951
Mac/Modules/qt/Qtmodule.c
Normal file
5951
Mac/Modules/qt/Qtmodule.c
Normal file
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -6,7 +6,7 @@ from scantools import Scanner
|
||||||
|
|
||||||
LONG = "QuickTime"
|
LONG = "QuickTime"
|
||||||
SHORT = "qt"
|
SHORT = "qt"
|
||||||
OBJECT = "Movie"
|
OBJECTS = ("Movie", "Track", "Media", "UserData", "TimeBase")
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
input = "Movies.h"
|
input = "Movies.h"
|
||||||
|
@ -26,52 +26,75 @@ class MyScanner(Scanner):
|
||||||
listname = "functions"
|
listname = "functions"
|
||||||
if arglist:
|
if arglist:
|
||||||
t, n, m = arglist[0]
|
t, n, m = arglist[0]
|
||||||
if t == OBJECT and m == "InMode":
|
if t in OBJECTS and m == "InMode":
|
||||||
classname = "Method"
|
classname = "Method"
|
||||||
listname = "methods"
|
listname = t + "_methods"
|
||||||
return classname, listname
|
return classname, listname
|
||||||
|
|
||||||
def makeblacklistnames(self):
|
def makeblacklistnames(self):
|
||||||
return [
|
return [
|
||||||
"DisposeMovie", # Done on python-object disposal
|
"DisposeMovie", # Done on python-object disposal
|
||||||
|
"DisposeMovieTrack", # ditto
|
||||||
|
"DisposeTrackMedia", # ditto
|
||||||
|
"DisposeUserData", # ditto
|
||||||
|
"DisposeTimeBase", # ditto
|
||||||
"GetMovieCreationTime", # type "unsigned long" in C, inparseable
|
"GetMovieCreationTime", # type "unsigned long" in C, inparseable
|
||||||
"GetMovieModificationTime", # Ditto
|
"GetMovieModificationTime", # Ditto
|
||||||
|
"GetTrackCreationTime", # ditto
|
||||||
|
"GetTrackModificationTime", # Ditto
|
||||||
|
"GetMediaCreationTime", # ditto
|
||||||
|
"GetMediaModificationTime", # Ditto
|
||||||
|
# The following 4 use 'void *' in an uncontrolled way
|
||||||
|
# TBD when I've read the manual...
|
||||||
|
"GetUserDataItem",
|
||||||
|
"SetUserDataItem",
|
||||||
|
"SetTextSampleData",
|
||||||
|
"MCDoAction",
|
||||||
|
# bgen gets the argument in/out wrong..
|
||||||
|
"AddTextSample",
|
||||||
|
"AddTESample",
|
||||||
|
"AddHiliteSample",
|
||||||
|
"HiliteTextSample",
|
||||||
]
|
]
|
||||||
|
|
||||||
def makeblacklisttypes(self):
|
def makeblacklisttypes(self):
|
||||||
return [
|
return [
|
||||||
"MoviesErrorUPP",
|
# I don't think we want to do these
|
||||||
"Track", # XXXX To be done in the future
|
"QTSyncTaskPtr",
|
||||||
"Media",
|
# We dont do callbacks yet, so no need for these
|
||||||
"UserData",
|
|
||||||
"TimeBase",
|
|
||||||
"QTCallBack",
|
"QTCallBack",
|
||||||
"Component",
|
# Skipped for now, due to laziness
|
||||||
"TimeRecord",
|
"TimeRecord",
|
||||||
"TimeRecord_ptr",
|
"TimeRecord_ptr",
|
||||||
"TrackEditState",
|
"TrackEditState",
|
||||||
"MovieEditState",
|
"MovieEditState",
|
||||||
"MoviePreviewCallOutUPP",
|
|
||||||
"CGrafPtr",
|
|
||||||
"GDHandle",
|
|
||||||
"MovieDrawingCompleteUPP",
|
|
||||||
"PixMapHandle",
|
|
||||||
"MatrixRecord",
|
"MatrixRecord",
|
||||||
"MatrixRecord_ptr",
|
"MatrixRecord_ptr",
|
||||||
|
"SampleReferencePtr",
|
||||||
|
# "SampleDescription",
|
||||||
|
# "SoundDescription",
|
||||||
|
# "TextDescription",
|
||||||
|
# "MusicDescription",
|
||||||
|
# I dont know yet how to do these.
|
||||||
|
"CGrafPtr",
|
||||||
|
"GDHandle",
|
||||||
|
# Routine pointers, not yet.
|
||||||
|
"MoviesErrorUPP",
|
||||||
|
"MoviePreviewCallOutUPP",
|
||||||
|
"MovieDrawingCompleteUPP",
|
||||||
"QTCallBackUPP",
|
"QTCallBackUPP",
|
||||||
"TextMediaUPP",
|
"TextMediaUPP",
|
||||||
"MovieProgressUPP",
|
"MovieProgressUPP",
|
||||||
"MovieRgnCoverUPP",
|
"MovieRgnCoverUPP",
|
||||||
"MCActionFilterUPP",
|
"MCActionFilterUPP",
|
||||||
"MCActionFilterWithRefConUPP",
|
"MCActionFilterWithRefConUPP",
|
||||||
"SampleDescription",
|
"GetMovieUPP",
|
||||||
"SoundDescription",
|
"ModalFilterUPP",
|
||||||
"TextDescription",
|
|
||||||
"MusicDescription",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
def makerepairinstructions(self):
|
def makerepairinstructions(self):
|
||||||
return [
|
return [
|
||||||
|
([('FSSpec', '*', 'OutMode')], [('FSSpec_ptr', '*', 'InMode')]),
|
||||||
]
|
]
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -7,7 +7,7 @@ import string
|
||||||
|
|
||||||
# Declarations that change for each manager
|
# Declarations that change for each manager
|
||||||
MACHEADERFILE = 'Movies.h' # The Apple header file
|
MACHEADERFILE = 'Movies.h' # The Apple header file
|
||||||
MODNAME = 'qt' # The name of the module
|
MODNAME = 'Qt' # The name of the module
|
||||||
OBJECTNAME = 'Movie' # The basic name of the objects used here
|
OBJECTNAME = 'Movie' # The basic name of the objects used here
|
||||||
|
|
||||||
# The following is *usually* unchanged but may still require tuning
|
# The following is *usually* unchanged but may still require tuning
|
||||||
|
@ -23,9 +23,59 @@ from macsupport import *
|
||||||
|
|
||||||
includestuff = includestuff + """
|
includestuff = includestuff + """
|
||||||
#include <%s>""" % MACHEADERFILE + """
|
#include <%s>""" % MACHEADERFILE + """
|
||||||
|
|
||||||
|
/* Exported by Cmmodule.c: */
|
||||||
|
extern PyObject *CmpObj_New(Component);
|
||||||
|
extern int CmpObj_Convert(PyObject *, Component *);
|
||||||
|
extern PyObject *CmpInstObj_New(ComponentInstance);
|
||||||
|
extern int CmpInstObj_Convert(PyObject *, ComponentInstance *);
|
||||||
|
|
||||||
|
/* Exported by Qdmodule.c: */
|
||||||
|
extern PyObject *QdRGB_New(RGBColor *);
|
||||||
|
extern int QdRGB_Convert(PyObject *, RGBColor *);
|
||||||
|
|
||||||
|
/* Our own, used before defined: */
|
||||||
|
staticforward PyObject *TrackObj_New(Track);
|
||||||
|
staticforward int TrackObj_Convert(PyObject *, Track *);
|
||||||
|
staticforward PyObject *MovieObj_New(Movie);
|
||||||
|
staticforward int MovieObj_Convert(PyObject *, Movie *);
|
||||||
|
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
Movie = OpaqueByValueType(OBJECTTYPE, OBJECTPREFIX)
|
# Our (opaque) objects
|
||||||
|
Movie = OpaqueByValueType('Movie', 'MovieObj')
|
||||||
|
Track = OpaqueByValueType('Track', 'TrackObj')
|
||||||
|
Media = OpaqueByValueType('Media', 'MediaObj')
|
||||||
|
UserData = OpaqueByValueType('UserData', 'UserDataObj')
|
||||||
|
TimeBase = OpaqueByValueType('TimeBase', 'TimeBaseObj')
|
||||||
|
|
||||||
|
# Other opaque objects
|
||||||
|
Component = OpaqueByValueType('Component', 'CmpObj')
|
||||||
|
MediaHandlerComponent = OpaqueByValueType('MediaHandlerComponent', 'CmpObj')
|
||||||
|
DataHandlerComponent = OpaqueByValueType('DataHandlerComponent', 'CmpObj')
|
||||||
|
|
||||||
|
ComponentInstance = OpaqueByValueType('ComponentInstance', 'CmpInstObj')
|
||||||
|
MediaHandler = OpaqueByValueType('MediaHandler', 'CmpInstObj')
|
||||||
|
DataHandler = OpaqueByValueType('DataHandler', 'CmpInstObj')
|
||||||
|
# XXXX The next one should really be a full-fledged object here, but the
|
||||||
|
# type is sometimes specified as MovieController and some times as
|
||||||
|
# ComponentInstance.
|
||||||
|
MovieController = OpaqueByValueType('MovieController', 'CmpInstObj')
|
||||||
|
|
||||||
|
RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
|
||||||
|
PicHandle = OpaqueByValueType("PicHandle", "ResObj")
|
||||||
|
CTabHandle = OpaqueByValueType("CTabHandle", "ResObj")
|
||||||
|
PixMapHandle = OpaqueByValueType("PixMapHandle", "ResObj")
|
||||||
|
SampleDescriptionHandle = OpaqueByValueType("SampleDescriptionHandle", "ResObj")
|
||||||
|
TEHandle = OpaqueByValueType("TEHandle", "ResObj")
|
||||||
|
# Silly Apple, passing an OStype by reference...
|
||||||
|
OSType_ptr = OpaqueType("OSType", "PyMac_BuildOSType", "PyMac_GetOSType")
|
||||||
|
|
||||||
|
RGBColor = OpaqueType("RGBColor", "QdRGB")
|
||||||
|
RGBColor_ptr = OpaqueType("RGBColor", "QdRGB")
|
||||||
|
|
||||||
|
# Non-opaque types, mostly integer-ish
|
||||||
TimeValue = Type("TimeValue", "l")
|
TimeValue = Type("TimeValue", "l")
|
||||||
TimeScale = Type("TimeScale", "l")
|
TimeScale = Type("TimeScale", "l")
|
||||||
TimeBaseFlags = Type("TimeBaseFlags", "l")
|
TimeBaseFlags = Type("TimeBaseFlags", "l")
|
||||||
|
@ -38,12 +88,13 @@ movieFlattenFlagsEnum = Type("movieFlattenFlagsEnum", "l")
|
||||||
dataRefAttributesFlags = Type("dataRefAttributesFlags", "l")
|
dataRefAttributesFlags = Type("dataRefAttributesFlags", "l")
|
||||||
playHintsEnum = Type("playHintsEnum", "l")
|
playHintsEnum = Type("playHintsEnum", "l")
|
||||||
mediaHandlerFlagsEnum = Type("mediaHandlerFlagsEnum", "l")
|
mediaHandlerFlagsEnum = Type("mediaHandlerFlagsEnum", "l")
|
||||||
|
ComponentResult = Type("ComponentResult", "l")
|
||||||
RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
|
HandlerError = Type("HandlerError", "l")
|
||||||
PicHandle = OpaqueByValueType("PicHandle", "ResObj")
|
Ptr = InputOnlyType("Ptr", "s")
|
||||||
|
StringPtr = InputOnlyType("StringPtr", "s")
|
||||||
|
|
||||||
|
|
||||||
class MyObjectDefinition(GlobalObjectDefinition):
|
class MovieObjectDefinition(GlobalObjectDefinition):
|
||||||
def outputCheckNewArg(self):
|
def outputCheckNewArg(self):
|
||||||
Output("""if (itself == NULL) {
|
Output("""if (itself == NULL) {
|
||||||
PyErr_SetString(Qt_Error,"Cannot create null Movie");
|
PyErr_SetString(Qt_Error,"Cannot create null Movie");
|
||||||
|
@ -52,26 +103,79 @@ class MyObjectDefinition(GlobalObjectDefinition):
|
||||||
def outputFreeIt(self, itselfname):
|
def outputFreeIt(self, itselfname):
|
||||||
Output("DisposeMovie(%s);", itselfname)
|
Output("DisposeMovie(%s);", itselfname)
|
||||||
|
|
||||||
|
class TrackObjectDefinition(GlobalObjectDefinition):
|
||||||
|
def outputCheckNewArg(self):
|
||||||
|
Output("""if (itself == NULL) {
|
||||||
|
PyErr_SetString(Qt_Error,"Cannot create null Track");
|
||||||
|
return NULL;
|
||||||
|
}""")
|
||||||
|
def outputFreeIt(self, itselfname):
|
||||||
|
Output("DisposeMovieTrack(%s);", itselfname)
|
||||||
|
|
||||||
|
class MediaObjectDefinition(GlobalObjectDefinition):
|
||||||
|
def outputCheckNewArg(self):
|
||||||
|
Output("""if (itself == NULL) {
|
||||||
|
PyErr_SetString(Qt_Error,"Cannot create null Media");
|
||||||
|
return NULL;
|
||||||
|
}""")
|
||||||
|
def outputFreeIt(self, itselfname):
|
||||||
|
Output("DisposeTrackMedia(%s);", itselfname)
|
||||||
|
|
||||||
|
class UserDataObjectDefinition(GlobalObjectDefinition):
|
||||||
|
def outputCheckNewArg(self):
|
||||||
|
Output("""if (itself == NULL) {
|
||||||
|
PyErr_SetString(Qt_Error,"Cannot create null UserData");
|
||||||
|
return NULL;
|
||||||
|
}""")
|
||||||
|
def outputFreeIt(self, itselfname):
|
||||||
|
Output("DisposeUserData(%s);", itselfname)
|
||||||
|
|
||||||
|
class TimeBaseObjectDefinition(GlobalObjectDefinition):
|
||||||
|
def outputCheckNewArg(self):
|
||||||
|
Output("""if (itself == NULL) {
|
||||||
|
PyErr_SetString(Qt_Error,"Cannot create null TimeBase");
|
||||||
|
return NULL;
|
||||||
|
}""")
|
||||||
|
def outputFreeIt(self, itselfname):
|
||||||
|
Output("DisposeTimeBase(%s);", itselfname)
|
||||||
|
|
||||||
# From here on it's basically all boiler plate...
|
# From here on it's basically all boiler plate...
|
||||||
|
|
||||||
# Create the generator groups and link them
|
# Create the generator groups and link them
|
||||||
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
|
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
|
||||||
object = MyObjectDefinition(OBJECTNAME, OBJECTPREFIX, OBJECTTYPE)
|
Movie_object = MovieObjectDefinition('Movie', 'MovieObj', 'Movie')
|
||||||
module.addobject(object)
|
Track_object = TrackObjectDefinition('Track', 'TrackObj', 'Track')
|
||||||
|
Media_object = MediaObjectDefinition('Media', 'MediaObj', 'Media')
|
||||||
|
UserData_object = UserDataObjectDefinition('UserData', 'UserDataObj', 'UserData')
|
||||||
|
TimeBase_object = TimeBaseObjectDefinition('TimeBase', 'TimeBaseObj', 'TimeBase')
|
||||||
|
|
||||||
|
module.addobject(TimeBase_object)
|
||||||
|
module.addobject(UserData_object)
|
||||||
|
module.addobject(Media_object)
|
||||||
|
module.addobject(Track_object)
|
||||||
|
module.addobject(Movie_object)
|
||||||
|
|
||||||
# Create the generator classes used to populate the lists
|
# Create the generator classes used to populate the lists
|
||||||
Function = FunctionGenerator
|
Function = OSErrFunctionGenerator
|
||||||
Method = MethodGenerator
|
Method = OSErrMethodGenerator
|
||||||
|
|
||||||
# Create and populate the lists
|
# Create and populate the lists
|
||||||
functions = []
|
functions = []
|
||||||
methods = []
|
TimeBase_methods = []
|
||||||
|
UserData_methods = []
|
||||||
|
Media_methods = []
|
||||||
|
Track_methods = []
|
||||||
|
Movie_methods = []
|
||||||
execfile(INPUTFILE)
|
execfile(INPUTFILE)
|
||||||
|
|
||||||
# add the populated lists to the generator groups
|
# add the populated lists to the generator groups
|
||||||
# (in a different wordl the scan program would generate this)
|
# (in a different wordl the scan program would generate this)
|
||||||
for f in functions: module.add(f)
|
for f in functions: module.add(f)
|
||||||
for f in methods: object.add(f)
|
for f in TimeBase_methods: TimeBase_object.add(f)
|
||||||
|
for f in UserData_methods: UserData_object.add(f)
|
||||||
|
for f in Media_methods: Media_object.add(f)
|
||||||
|
for f in Track_methods: Track_object.add(f)
|
||||||
|
for f in Movie_methods: Movie_object.add(f)
|
||||||
|
|
||||||
# generate output (open the output file as late as possible)
|
# generate output (open the output file as late as possible)
|
||||||
SetOutputFileName(OUTPUTFILE)
|
SetOutputFileName(OUTPUTFILE)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue