Commit d4b83619 authored by Jack Jansen's avatar Jack Jansen

Fixed the mis-guessed parameters and added support for a few optional...

Fixed the mis-guessed parameters and added support for a few optional parameter types. There's a good chance that this is usable now (but there's no test code yet).
parent 19864124
...@@ -38,8 +38,37 @@ staticforward int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *); ...@@ -38,8 +38,37 @@ staticforward int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *);
#endif #endif
/* /*
** Parse/generate ADD records ** Parse an optional fsspec
*/ */
static int
OptFSSpecPtr_Convert(PyObject *v, FSSpec **p_itself)
{
static FSSpec fss;
if (v == Py_None)
{
*p_itself = NULL;
return 1;
}
*p_itself = &fss;
return PyMac_GetFSSpec(v, *p_itself);
}
/*
** Parse an optional rect
*/
static int
OptRectPtr_Convert(PyObject *v, Rect **p_itself)
{
static Rect r;
if (v == Py_None)
{
*p_itself = NULL;
return 1;
}
*p_itself = &r;
return PyMac_GetRect(v, *p_itself);
}
static PyObject *Mlte_Error; static PyObject *Mlte_Error;
...@@ -192,13 +221,13 @@ static PyObject *TXNObj_TXNTSMCheck(TXNObjectObject *_self, PyObject *_args) ...@@ -192,13 +221,13 @@ static PyObject *TXNObj_TXNTSMCheck(TXNObjectObject *_self, PyObject *_args)
Boolean _rv; Boolean _rv;
EventRecord iEvent; EventRecord iEvent;
PyMac_PRECHECK(TXNTSMCheck); PyMac_PRECHECK(TXNTSMCheck);
if (!PyArg_ParseTuple(_args, "")) if (!PyArg_ParseTuple(_args, "O&",
PyMac_GetEventRecord, &iEvent))
return NULL; return NULL;
_rv = TXNTSMCheck(_self->ob_itself, _rv = TXNTSMCheck(_self->ob_itself,
&iEvent); &iEvent);
_res = Py_BuildValue("bO&", _res = Py_BuildValue("b",
_rv, _rv);
PyMac_BuildEventRecord, &iEvent);
return _res; return _res;
} }
...@@ -665,10 +694,11 @@ static PyObject *TXNObj_TXNSave(TXNObjectObject *_self, PyObject *_args) ...@@ -665,10 +694,11 @@ static PyObject *TXNObj_TXNSave(TXNObjectObject *_self, PyObject *_args)
SInt16 iDataReference; SInt16 iDataReference;
SInt16 iResourceReference; SInt16 iResourceReference;
PyMac_PRECHECK(TXNSave); PyMac_PRECHECK(TXNSave);
if (!PyArg_ParseTuple(_args, "O&O&lhh", if (!PyArg_ParseTuple(_args, "O&O&lO&hh",
PyMac_GetOSType, &iType, PyMac_GetOSType, &iType,
PyMac_GetOSType, &iResType, PyMac_GetOSType, &iResType,
&iPermanentEncoding, &iPermanentEncoding,
PyMac_GetFSSpec, &iFileSpecification,
&iDataReference, &iDataReference,
&iResourceReference)) &iResourceReference))
return NULL; return NULL;
...@@ -680,8 +710,8 @@ static PyObject *TXNObj_TXNSave(TXNObjectObject *_self, PyObject *_args) ...@@ -680,8 +710,8 @@ static PyObject *TXNObj_TXNSave(TXNObjectObject *_self, PyObject *_args)
iDataReference, iDataReference,
iResourceReference); iResourceReference);
if (_err != noErr) return PyMac_Error(_err); if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&", Py_INCREF(Py_None);
PyMac_BuildFSSpec, iFileSpecification); _res = Py_None;
return _res; return _res;
} }
...@@ -903,7 +933,7 @@ static PyMethodDef TXNObj_methods[] = { ...@@ -903,7 +933,7 @@ static PyMethodDef TXNObj_methods[] = {
{"TXNClick", (PyCFunction)TXNObj_TXNClick, 1, {"TXNClick", (PyCFunction)TXNObj_TXNClick, 1,
"(EventRecord iEvent) -> None"}, "(EventRecord iEvent) -> None"},
{"TXNTSMCheck", (PyCFunction)TXNObj_TXNTSMCheck, 1, {"TXNTSMCheck", (PyCFunction)TXNObj_TXNTSMCheck, 1,
"() -> (Boolean _rv, EventRecord iEvent)"}, "(EventRecord iEvent) -> (Boolean _rv)"},
{"TXNSelectAll", (PyCFunction)TXNObj_TXNSelectAll, 1, {"TXNSelectAll", (PyCFunction)TXNObj_TXNSelectAll, 1,
"() -> None"}, "() -> None"},
{"TXNFocus", (PyCFunction)TXNObj_TXNFocus, 1, {"TXNFocus", (PyCFunction)TXNObj_TXNFocus, 1,
...@@ -961,7 +991,7 @@ static PyMethodDef TXNObj_methods[] = { ...@@ -961,7 +991,7 @@ static PyMethodDef TXNObj_methods[] = {
{"TXNGetChangeCount", (PyCFunction)TXNObj_TXNGetChangeCount, 1, {"TXNGetChangeCount", (PyCFunction)TXNObj_TXNGetChangeCount, 1,
"() -> (ItemCount _rv)"}, "() -> (ItemCount _rv)"},
{"TXNSave", (PyCFunction)TXNObj_TXNSave, 1, {"TXNSave", (PyCFunction)TXNObj_TXNSave, 1,
"(OSType iType, OSType iResType, TXNPermanentTextEncodingType iPermanentEncoding, SInt16 iDataReference, SInt16 iResourceReference) -> (FSSpec iFileSpecification)"}, "(OSType iType, OSType iResType, TXNPermanentTextEncodingType iPermanentEncoding, FSSpec iFileSpecification, SInt16 iDataReference, SInt16 iResourceReference) -> None"},
{"TXNRevert", (PyCFunction)TXNObj_TXNRevert, 1, {"TXNRevert", (PyCFunction)TXNObj_TXNRevert, 1,
"() -> None"}, "() -> None"},
{"TXNPageSetup", (PyCFunction)TXNObj_TXNPageSetup, 1, {"TXNPageSetup", (PyCFunction)TXNObj_TXNPageSetup, 1,
...@@ -1140,9 +1170,9 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args) ...@@ -1140,9 +1170,9 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args)
{ {
PyObject *_res = NULL; PyObject *_res = NULL;
OSStatus _err; OSStatus _err;
FSSpec iFileSpec; FSSpec * iFileSpec;
WindowPtr iWindow; WindowPtr iWindow;
Rect iFrame; Rect * iFrame;
TXNFrameOptions iFrameOptions; TXNFrameOptions iFrameOptions;
TXNFrameType iFrameType; TXNFrameType iFrameType;
TXNFileType iFileType; TXNFileType iFileType;
...@@ -1150,17 +1180,18 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args) ...@@ -1150,17 +1180,18 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args)
TXNObject oTXNObject; TXNObject oTXNObject;
TXNFrameID oTXNFrameID; TXNFrameID oTXNFrameID;
PyMac_PRECHECK(TXNNewObject); PyMac_PRECHECK(TXNNewObject);
if (!PyArg_ParseTuple(_args, "O&O&llO&l", if (!PyArg_ParseTuple(_args, "O&O&O&llO&l",
PyMac_GetFSSpec, &iFileSpec, OptFSSpecPtr_Convert, &iFileSpec,
WinObj_Convert, &iWindow, WinObj_Convert, &iWindow,
OptRectPtr_Convert, &iFrame,
&iFrameOptions, &iFrameOptions,
&iFrameType, &iFrameType,
PyMac_GetOSType, &iFileType, PyMac_GetOSType, &iFileType,
&iPermanentEncoding)) &iPermanentEncoding))
return NULL; return NULL;
_err = TXNNewObject(&iFileSpec, _err = TXNNewObject(iFileSpec,
iWindow, iWindow,
&iFrame, iFrame,
iFrameOptions, iFrameOptions,
iFrameType, iFrameType,
iFileType, iFileType,
...@@ -1169,8 +1200,7 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args) ...@@ -1169,8 +1200,7 @@ static PyObject *Mlte_TXNNewObject(PyObject *_self, PyObject *_args)
&oTXNFrameID, &oTXNFrameID,
(TXNObjectRefcon)0); (TXNObjectRefcon)0);
if (_err != noErr) return PyMac_Error(_err); if (_err != noErr) return PyMac_Error(_err);
_res = Py_BuildValue("O&O&l", _res = Py_BuildValue("O&l",
PyMac_BuildRect, &iFrame,
TXNObj_New, oTXNObject, TXNObj_New, oTXNObject,
oTXNFrameID); oTXNFrameID);
return _res; return _res;
...@@ -1268,9 +1298,30 @@ static PyObject *Mlte_TXNVersionInformation(PyObject *_self, PyObject *_args) ...@@ -1268,9 +1298,30 @@ static PyObject *Mlte_TXNVersionInformation(PyObject *_self, PyObject *_args)
return _res; return _res;
} }
static PyObject *Mlte_TXNInitTextension(PyObject *_self, PyObject *_args)
{
PyObject *_res = NULL;
OSStatus _err;
TXNMacOSPreferredFontDescription * iDefaultFonts = NULL;
ItemCount iCountDefaultFonts = 0;
TXNInitOptions iUsageFlags;
PyMac_PRECHECK(TXNInitTextension);
if (!PyArg_ParseTuple(_args, "l", &iUsageFlags))
return NULL;
_err = TXNInitTextension(iDefaultFonts,
iCountDefaultFonts,
iUsageFlags);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
}
static PyMethodDef Mlte_methods[] = { static PyMethodDef Mlte_methods[] = {
{"TXNNewObject", (PyCFunction)Mlte_TXNNewObject, 1, {"TXNNewObject", (PyCFunction)Mlte_TXNNewObject, 1,
"(FSSpec iFileSpec, WindowPtr iWindow, TXNFrameOptions iFrameOptions, TXNFrameType iFrameType, TXNFileType iFileType, TXNPermanentTextEncodingType iPermanentEncoding) -> (Rect iFrame, TXNObject oTXNObject, TXNFrameID oTXNFrameID)"}, "(FSSpec * iFileSpec, WindowPtr iWindow, Rect * iFrame, TXNFrameOptions iFrameOptions, TXNFrameType iFrameType, TXNFileType iFileType, TXNPermanentTextEncodingType iPermanentEncoding) -> (TXNObject oTXNObject, TXNFrameID oTXNFrameID)"},
{"TXNTerminateTextension", (PyCFunction)Mlte_TXNTerminateTextension, 1, {"TXNTerminateTextension", (PyCFunction)Mlte_TXNTerminateTextension, 1,
"() -> None"}, "() -> None"},
{"TXNIsScrapPastable", (PyCFunction)Mlte_TXNIsScrapPastable, 1, {"TXNIsScrapPastable", (PyCFunction)Mlte_TXNIsScrapPastable, 1,
...@@ -1283,6 +1334,8 @@ static PyMethodDef Mlte_methods[] = { ...@@ -1283,6 +1334,8 @@ static PyMethodDef Mlte_methods[] = {
"(MenuHandle iFontMenuHandle, SInt16 iMenuID, SInt16 iStartHierMenuID) -> (TXNFontMenuObject oTXNFontMenuObject)"}, "(MenuHandle iFontMenuHandle, SInt16 iMenuID, SInt16 iStartHierMenuID) -> (TXNFontMenuObject oTXNFontMenuObject)"},
{"TXNVersionInformation", (PyCFunction)Mlte_TXNVersionInformation, 1, {"TXNVersionInformation", (PyCFunction)Mlte_TXNVersionInformation, 1,
"() -> (TXNVersionValue _rv, TXNFeatureBits oFeatureFlags)"}, "() -> (TXNVersionValue _rv, TXNFeatureBits oFeatureFlags)"},
{"TXNInitTextension", (PyCFunction)Mlte_TXNInitTextension, 1,
"(TXNInitOptions) -> None"},
{NULL, NULL, 0} {NULL, NULL, 0}
}; };
......
...@@ -41,6 +41,9 @@ class MyScanner(Scanner_OSX): ...@@ -41,6 +41,9 @@ class MyScanner(Scanner_OSX):
def makeblacklistnames(self): def makeblacklistnames(self):
return [ return [
"TXNGetFontDefaults", # Arg is too difficult
"TXNSetFontDefaults", # Arg is too difficult
"TXNInitTextension", # done manually
] ]
def makegreylist(self): def makegreylist(self):
...@@ -63,6 +66,22 @@ class MyScanner(Scanner_OSX): ...@@ -63,6 +66,22 @@ class MyScanner(Scanner_OSX):
def makerepairinstructions(self): def makerepairinstructions(self):
return [ return [
# TXNNewObject has a lot of optional parameters
([("FSSpec_ptr", "iFileSpec", "InMode")],
[("OptFSSpecPtr", "*", "*")]),
([("Rect", "iFrame", "OutMode")],
[("OptRectPtr", "*", "InMode")]),
# In UH 332 some of the "const" are missing for input parameters passed
# by reference. We fix that up here.
([("EventRecord", "iEvent", "OutMode")],
[("EventRecord_ptr", "*", "InMode")]),
([("FSSpec", "iFileSpecification", "OutMode")],
[("FSSpec_ptr", "*", "InMode")]),
([("TXNMacOSPreferredFontDescription", "iFontDefaults", "OutMode")],
[("TXNMacOSPreferredFontDescription_ptr", "*", "InMode")]),
# In buffers are passed as void *
([("void", "*", "OutMode"), ("ByteCount", "*", "InMode")], ([("void", "*", "OutMode"), ("ByteCount", "*", "InMode")],
[("MlteInBuffer", "*", "InMode")]), [("MlteInBuffer", "*", "InMode")]),
] ]
......
...@@ -42,8 +42,37 @@ staticforward int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *); ...@@ -42,8 +42,37 @@ staticforward int TXNFontMenuObj_Convert(PyObject *, TXNFontMenuObject *);
#endif #endif
/* /*
** Parse/generate ADD records ** Parse an optional fsspec
*/ */
static int
OptFSSpecPtr_Convert(PyObject *v, FSSpec **p_itself)
{
static FSSpec fss;
if (v == Py_None)
{
*p_itself = NULL;
return 1;
}
*p_itself = &fss;
return PyMac_GetFSSpec(v, *p_itself);
}
/*
** Parse an optional rect
*/
static int
OptRectPtr_Convert(PyObject *v, Rect **p_itself)
{
static Rect r;
if (v == Py_None)
{
*p_itself = NULL;
return 1;
}
*p_itself = &r;
return PyMac_GetRect(v, *p_itself);
}
""" """
...@@ -81,6 +110,8 @@ RgnHandle = OpaqueByValueType("RgnHandle", "ResObj") ...@@ -81,6 +110,8 @@ RgnHandle = OpaqueByValueType("RgnHandle", "ResObj")
GWorldPtr = OpaqueByValueType("GWorldPtr", "GWorldObj") GWorldPtr = OpaqueByValueType("GWorldPtr", "GWorldObj")
MlteInBuffer = VarInputBufferType('void *', 'ByteCount', 'l') MlteInBuffer = VarInputBufferType('void *', 'ByteCount', 'l')
OptFSSpecPtr = OpaqueByValueType("FSSpec *", "OptFSSpecPtr")
OptRectPtr = OpaqueByValueType("Rect *", "OptRectPtr")
# ADD object type here # ADD object type here
execfile("mltetypetest.py") execfile("mltetypetest.py")
...@@ -131,6 +162,26 @@ for f in TXNObject_methods: TXNObject_object.add(f) ...@@ -131,6 +162,26 @@ for f in TXNObject_methods: TXNObject_object.add(f)
for f in TXNFontMenuObject_methods: TXNFontMenuObject_object.add(f) for f in TXNFontMenuObject_methods: TXNFontMenuObject_object.add(f)
# ADD Manual generators here # ADD Manual generators here
inittextension_body = """
OSStatus _err;
TXNMacOSPreferredFontDescription * iDefaultFonts = NULL;
ItemCount iCountDefaultFonts = 0;
TXNInitOptions iUsageFlags;
PyMac_PRECHECK(TXNInitTextension);
if (!PyArg_ParseTuple(_args, "l", &iUsageFlags))
return NULL;
_err = TXNInitTextension(iDefaultFonts,
iCountDefaultFonts,
iUsageFlags);
if (_err != noErr) return PyMac_Error(_err);
Py_INCREF(Py_None);
_res = Py_None;
return _res;
"""
f = ManualGenerator("TXNInitTextension", inittextension_body);
f.docstring = lambda: "(TXNInitOptions) -> None"
module.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)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment