Import Upstream version 2.7.18
This commit is contained in:
559
Mac/Modules/evt/_Evtmodule.c
Normal file
559
Mac/Modules/evt/_Evtmodule.c
Normal file
@@ -0,0 +1,559 @@
|
||||
|
||||
/* ========================== Module _Evt =========================== */
|
||||
|
||||
#include "Python.h"
|
||||
|
||||
#ifndef __LP64__
|
||||
|
||||
|
||||
#include "pymactoolbox.h"
|
||||
|
||||
/* Macro to test whether a weak-loaded CFM function exists */
|
||||
#define PyMac_PRECHECK(rtn) do { if ( &rtn == NULL ) {\
|
||||
PyErr_SetString(PyExc_NotImplementedError, \
|
||||
"Not available in this shared library/OS version"); \
|
||||
return NULL; \
|
||||
}} while(0)
|
||||
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
|
||||
static PyObject *Evt_Error;
|
||||
|
||||
static PyObject *Evt_GetMouse(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Point mouseLoc;
|
||||
#ifndef GetMouse
|
||||
PyMac_PRECHECK(GetMouse);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
GetMouse(&mouseLoc);
|
||||
_res = Py_BuildValue("O&",
|
||||
PyMac_BuildPoint, mouseLoc);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_Button(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
#ifndef Button
|
||||
PyMac_PRECHECK(Button);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = Button();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_StillDown(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
#ifndef StillDown
|
||||
PyMac_PRECHECK(StillDown);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = StillDown();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_WaitMouseUp(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
#ifndef WaitMouseUp
|
||||
PyMac_PRECHECK(WaitMouseUp);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = WaitMouseUp();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetCaretTime(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt32 _rv;
|
||||
#ifndef GetCaretTime
|
||||
PyMac_PRECHECK(GetCaretTime);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = GetCaretTime();
|
||||
_res = Py_BuildValue("l",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetKeys(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
KeyMap theKeys__out__;
|
||||
#ifndef GetKeys
|
||||
PyMac_PRECHECK(GetKeys);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
GetKeys(theKeys__out__);
|
||||
_res = Py_BuildValue("s#",
|
||||
(char *)&theKeys__out__, (int)sizeof(KeyMap));
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetDblTime(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt32 _rv;
|
||||
#ifndef GetDblTime
|
||||
PyMac_PRECHECK(GetDblTime);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = GetDblTime();
|
||||
_res = Py_BuildValue("l",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_SetEventMask(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
EventMask value;
|
||||
#ifndef SetEventMask
|
||||
PyMac_PRECHECK(SetEventMask);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "H",
|
||||
&value))
|
||||
return NULL;
|
||||
SetEventMask(value);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetNextEvent(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
EventMask eventMask;
|
||||
EventRecord theEvent;
|
||||
#ifndef GetNextEvent
|
||||
PyMac_PRECHECK(GetNextEvent);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "H",
|
||||
&eventMask))
|
||||
return NULL;
|
||||
_rv = GetNextEvent(eventMask,
|
||||
&theEvent);
|
||||
_res = Py_BuildValue("bO&",
|
||||
_rv,
|
||||
PyMac_BuildEventRecord, &theEvent);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_EventAvail(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
EventMask eventMask;
|
||||
EventRecord theEvent;
|
||||
#ifndef EventAvail
|
||||
PyMac_PRECHECK(EventAvail);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "H",
|
||||
&eventMask))
|
||||
return NULL;
|
||||
_rv = EventAvail(eventMask,
|
||||
&theEvent);
|
||||
_res = Py_BuildValue("bO&",
|
||||
_rv,
|
||||
PyMac_BuildEventRecord, &theEvent);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_PostEvent(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
OSErr _err;
|
||||
EventKind eventNum;
|
||||
UInt32 eventMsg;
|
||||
#ifndef PostEvent
|
||||
PyMac_PRECHECK(PostEvent);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "Hl",
|
||||
&eventNum,
|
||||
&eventMsg))
|
||||
return NULL;
|
||||
_err = PostEvent(eventNum,
|
||||
eventMsg);
|
||||
if (_err != noErr) return PyMac_Error(_err);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_FlushEvents(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
EventMask whichMask;
|
||||
EventMask stopMask;
|
||||
#ifndef FlushEvents
|
||||
PyMac_PRECHECK(FlushEvents);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "HH",
|
||||
&whichMask,
|
||||
&stopMask))
|
||||
return NULL;
|
||||
FlushEvents(whichMask,
|
||||
stopMask);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetGlobalMouse(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Point globalMouse;
|
||||
#ifndef GetGlobalMouse
|
||||
PyMac_PRECHECK(GetGlobalMouse);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
GetGlobalMouse(&globalMouse);
|
||||
_res = Py_BuildValue("O&",
|
||||
PyMac_BuildPoint, globalMouse);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_GetCurrentKeyModifiers(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt32 _rv;
|
||||
#ifndef GetCurrentKeyModifiers
|
||||
PyMac_PRECHECK(GetCurrentKeyModifiers);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = GetCurrentKeyModifiers();
|
||||
_res = Py_BuildValue("l",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_CheckEventQueueForUserCancel(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
#ifndef CheckEventQueueForUserCancel
|
||||
PyMac_PRECHECK(CheckEventQueueForUserCancel);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = CheckEventQueueForUserCancel();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_KeyScript(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
short code;
|
||||
#ifndef KeyScript
|
||||
PyMac_PRECHECK(KeyScript);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "h",
|
||||
&code))
|
||||
return NULL;
|
||||
KeyScript(code);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_IsCmdChar(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
Boolean _rv;
|
||||
EventRecord event;
|
||||
short test;
|
||||
#ifndef IsCmdChar
|
||||
PyMac_PRECHECK(IsCmdChar);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "O&h",
|
||||
PyMac_GetEventRecord, &event,
|
||||
&test))
|
||||
return NULL;
|
||||
_rv = IsCmdChar(&event,
|
||||
test);
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMGetKeyThresh(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
SInt16 _rv;
|
||||
#ifndef LMGetKeyThresh
|
||||
PyMac_PRECHECK(LMGetKeyThresh);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = LMGetKeyThresh();
|
||||
_res = Py_BuildValue("h",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMSetKeyThresh(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
SInt16 value;
|
||||
#ifndef LMSetKeyThresh
|
||||
PyMac_PRECHECK(LMSetKeyThresh);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "h",
|
||||
&value))
|
||||
return NULL;
|
||||
LMSetKeyThresh(value);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMGetKeyRepThresh(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
SInt16 _rv;
|
||||
#ifndef LMGetKeyRepThresh
|
||||
PyMac_PRECHECK(LMGetKeyRepThresh);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = LMGetKeyRepThresh();
|
||||
_res = Py_BuildValue("h",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMSetKeyRepThresh(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
SInt16 value;
|
||||
#ifndef LMSetKeyRepThresh
|
||||
PyMac_PRECHECK(LMSetKeyRepThresh);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "h",
|
||||
&value))
|
||||
return NULL;
|
||||
LMSetKeyRepThresh(value);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMGetKbdLast(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt8 _rv;
|
||||
#ifndef LMGetKbdLast
|
||||
PyMac_PRECHECK(LMGetKbdLast);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = LMGetKbdLast();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMSetKbdLast(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt8 value;
|
||||
#ifndef LMSetKbdLast
|
||||
PyMac_PRECHECK(LMSetKbdLast);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "b",
|
||||
&value))
|
||||
return NULL;
|
||||
LMSetKbdLast(value);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMGetKbdType(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt8 _rv;
|
||||
#ifndef LMGetKbdType
|
||||
PyMac_PRECHECK(LMGetKbdType);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = LMGetKbdType();
|
||||
_res = Py_BuildValue("b",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_LMSetKbdType(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt8 value;
|
||||
#ifndef LMSetKbdType
|
||||
PyMac_PRECHECK(LMSetKbdType);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, "b",
|
||||
&value))
|
||||
return NULL;
|
||||
LMSetKbdType(value);
|
||||
Py_INCREF(Py_None);
|
||||
_res = Py_None;
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_TickCount(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
UInt32 _rv;
|
||||
#ifndef TickCount
|
||||
PyMac_PRECHECK(TickCount);
|
||||
#endif
|
||||
if (!PyArg_ParseTuple(_args, ""))
|
||||
return NULL;
|
||||
_rv = TickCount();
|
||||
_res = Py_BuildValue("l",
|
||||
_rv);
|
||||
return _res;
|
||||
}
|
||||
|
||||
static PyObject *Evt_WaitNextEvent(PyObject *_self, PyObject *_args)
|
||||
{
|
||||
PyObject *_res = NULL;
|
||||
|
||||
Boolean _rv;
|
||||
EventMask eventMask;
|
||||
EventRecord theEvent;
|
||||
UInt32 sleep;
|
||||
Handle mouseregion = (Handle)0;
|
||||
|
||||
if (!PyArg_ParseTuple(_args, "Hl|O&",
|
||||
&eventMask,
|
||||
&sleep,
|
||||
OptResObj_Convert, &mouseregion))
|
||||
return NULL;
|
||||
_rv = WaitNextEvent(eventMask,
|
||||
&theEvent,
|
||||
sleep,
|
||||
(RgnHandle)mouseregion);
|
||||
_res = Py_BuildValue("bO&",
|
||||
_rv,
|
||||
PyMac_BuildEventRecord, &theEvent);
|
||||
return _res;
|
||||
|
||||
}
|
||||
|
||||
static PyMethodDef Evt_methods[] = {
|
||||
{"GetMouse", (PyCFunction)Evt_GetMouse, 1,
|
||||
PyDoc_STR("() -> (Point mouseLoc)")},
|
||||
{"Button", (PyCFunction)Evt_Button, 1,
|
||||
PyDoc_STR("() -> (Boolean _rv)")},
|
||||
{"StillDown", (PyCFunction)Evt_StillDown, 1,
|
||||
PyDoc_STR("() -> (Boolean _rv)")},
|
||||
{"WaitMouseUp", (PyCFunction)Evt_WaitMouseUp, 1,
|
||||
PyDoc_STR("() -> (Boolean _rv)")},
|
||||
{"GetCaretTime", (PyCFunction)Evt_GetCaretTime, 1,
|
||||
PyDoc_STR("() -> (UInt32 _rv)")},
|
||||
{"GetKeys", (PyCFunction)Evt_GetKeys, 1,
|
||||
PyDoc_STR("() -> (KeyMap theKeys)")},
|
||||
{"GetDblTime", (PyCFunction)Evt_GetDblTime, 1,
|
||||
PyDoc_STR("() -> (UInt32 _rv)")},
|
||||
{"SetEventMask", (PyCFunction)Evt_SetEventMask, 1,
|
||||
PyDoc_STR("(EventMask value) -> None")},
|
||||
{"GetNextEvent", (PyCFunction)Evt_GetNextEvent, 1,
|
||||
PyDoc_STR("(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)")},
|
||||
{"EventAvail", (PyCFunction)Evt_EventAvail, 1,
|
||||
PyDoc_STR("(EventMask eventMask) -> (Boolean _rv, EventRecord theEvent)")},
|
||||
{"PostEvent", (PyCFunction)Evt_PostEvent, 1,
|
||||
PyDoc_STR("(EventKind eventNum, UInt32 eventMsg) -> None")},
|
||||
{"FlushEvents", (PyCFunction)Evt_FlushEvents, 1,
|
||||
PyDoc_STR("(EventMask whichMask, EventMask stopMask) -> None")},
|
||||
{"GetGlobalMouse", (PyCFunction)Evt_GetGlobalMouse, 1,
|
||||
PyDoc_STR("() -> (Point globalMouse)")},
|
||||
{"GetCurrentKeyModifiers", (PyCFunction)Evt_GetCurrentKeyModifiers, 1,
|
||||
PyDoc_STR("() -> (UInt32 _rv)")},
|
||||
{"CheckEventQueueForUserCancel", (PyCFunction)Evt_CheckEventQueueForUserCancel, 1,
|
||||
PyDoc_STR("() -> (Boolean _rv)")},
|
||||
{"KeyScript", (PyCFunction)Evt_KeyScript, 1,
|
||||
PyDoc_STR("(short code) -> None")},
|
||||
{"IsCmdChar", (PyCFunction)Evt_IsCmdChar, 1,
|
||||
PyDoc_STR("(EventRecord event, short test) -> (Boolean _rv)")},
|
||||
{"LMGetKeyThresh", (PyCFunction)Evt_LMGetKeyThresh, 1,
|
||||
PyDoc_STR("() -> (SInt16 _rv)")},
|
||||
{"LMSetKeyThresh", (PyCFunction)Evt_LMSetKeyThresh, 1,
|
||||
PyDoc_STR("(SInt16 value) -> None")},
|
||||
{"LMGetKeyRepThresh", (PyCFunction)Evt_LMGetKeyRepThresh, 1,
|
||||
PyDoc_STR("() -> (SInt16 _rv)")},
|
||||
{"LMSetKeyRepThresh", (PyCFunction)Evt_LMSetKeyRepThresh, 1,
|
||||
PyDoc_STR("(SInt16 value) -> None")},
|
||||
{"LMGetKbdLast", (PyCFunction)Evt_LMGetKbdLast, 1,
|
||||
PyDoc_STR("() -> (UInt8 _rv)")},
|
||||
{"LMSetKbdLast", (PyCFunction)Evt_LMSetKbdLast, 1,
|
||||
PyDoc_STR("(UInt8 value) -> None")},
|
||||
{"LMGetKbdType", (PyCFunction)Evt_LMGetKbdType, 1,
|
||||
PyDoc_STR("() -> (UInt8 _rv)")},
|
||||
{"LMSetKbdType", (PyCFunction)Evt_LMSetKbdType, 1,
|
||||
PyDoc_STR("(UInt8 value) -> None")},
|
||||
{"TickCount", (PyCFunction)Evt_TickCount, 1,
|
||||
PyDoc_STR("() -> (UInt32 _rv)")},
|
||||
{"WaitNextEvent", (PyCFunction)Evt_WaitNextEvent, 1,
|
||||
PyDoc_STR("(EventMask eventMask, UInt32 sleep [,RegionHandle]) -> (Boolean _rv, EventRecord theEvent)")},
|
||||
{NULL, NULL, 0}
|
||||
};
|
||||
|
||||
|
||||
#else /* __LP64__ */
|
||||
|
||||
static PyMethodDef Evt_methods[] = {
|
||||
{NULL, NULL, 0}
|
||||
};
|
||||
#endif /* __LP64__ */
|
||||
|
||||
|
||||
void init_Evt(void)
|
||||
{
|
||||
PyObject *m;
|
||||
#ifndef __LP64__
|
||||
PyObject *d;
|
||||
#endif /* __LP64__ */
|
||||
|
||||
|
||||
|
||||
|
||||
m = Py_InitModule("_Evt", Evt_methods);
|
||||
#ifndef __LP64__
|
||||
d = PyModule_GetDict(m);
|
||||
Evt_Error = PyMac_GetOSErrException();
|
||||
if (Evt_Error == NULL ||
|
||||
PyDict_SetItemString(d, "Error", Evt_Error) != 0)
|
||||
return;
|
||||
#endif /* __LP64__ */
|
||||
}
|
||||
|
||||
/* ======================== End module _Evt ========================= */
|
||||
|
||||
9
Mac/Modules/evt/evtedit.py
Normal file
9
Mac/Modules/evt/evtedit.py
Normal file
@@ -0,0 +1,9 @@
|
||||
f = Function(void, 'SystemClick',
|
||||
(EventRecord_ptr, 'theEvent', InMode),
|
||||
(WindowPtr, 'theWindow', InMode),
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
f = Function(UInt32, 'TickCount',
|
||||
)
|
||||
functions.append(f)
|
||||
80
Mac/Modules/evt/evtscan.py
Normal file
80
Mac/Modules/evt/evtscan.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# Scan an Apple header file, generating a Python file of generator calls.
|
||||
|
||||
import sys
|
||||
from bgenlocations import TOOLBOXDIR, BGENDIR
|
||||
sys.path.append(BGENDIR)
|
||||
from scantools import Scanner
|
||||
|
||||
LONG = "Events"
|
||||
SHORT = "evt"
|
||||
OBJECT = "NOTUSED"
|
||||
|
||||
def main():
|
||||
input = LONG + ".h"
|
||||
output = SHORT + "gen.py"
|
||||
defsoutput = TOOLBOXDIR + LONG + ".py"
|
||||
scanner = MyScanner(input, output, defsoutput)
|
||||
scanner.scan()
|
||||
scanner.close()
|
||||
print "=== Testing definitions output code ==="
|
||||
execfile(defsoutput, {}, {})
|
||||
print "=== Done scanning and generating, now importing the generated code... ==="
|
||||
exec "import " + SHORT + "support"
|
||||
print "=== Done. It's up to you to compile it now! ==="
|
||||
|
||||
class MyScanner(Scanner):
|
||||
|
||||
def destination(self, type, name, arglist):
|
||||
classname = "Function"
|
||||
listname = "functions"
|
||||
if arglist:
|
||||
t, n, m = arglist[0]
|
||||
# This is non-functional today
|
||||
if t == OBJECT and m == "InMode":
|
||||
classname = "Method"
|
||||
listname = "methods"
|
||||
return classname, listname
|
||||
|
||||
def makeblacklistnames(self):
|
||||
return [
|
||||
"KeyTranslate",
|
||||
"GetEventMask", # I cannot seem to find this routine...
|
||||
"WaitNextEvent", # Manually generated because of optional region
|
||||
# Constants with funny definitions
|
||||
"osEvtMessageMask",
|
||||
# OS8 calls
|
||||
'SystemEvent',
|
||||
'SystemTask',
|
||||
'SystemClick',
|
||||
'GetOSEvent',
|
||||
'OSEventAvail',
|
||||
]
|
||||
|
||||
def makeblacklisttypes(self):
|
||||
return [
|
||||
"EvQElPtr", "QHdrPtr"
|
||||
]
|
||||
|
||||
def makerepairinstructions(self):
|
||||
return [
|
||||
([("void_ptr", "*", "InMode"), ("long", "*", "InMode")],
|
||||
[("InBuffer", "*", "*")]),
|
||||
|
||||
([("void", "*", "OutMode"), ("long", "*", "InMode"),
|
||||
("long", "*", "OutMode")],
|
||||
[("VarVarOutBuffer", "*", "InOutMode")]),
|
||||
|
||||
([("void", "wStorage", "OutMode")],
|
||||
[("NullStorage", "*", "InMode")]),
|
||||
|
||||
# GetKeys
|
||||
([('KeyMap', 'theKeys', 'InMode')],
|
||||
[('*', '*', 'OutMode')]),
|
||||
|
||||
# GetTicker
|
||||
([('unsigned long', '*', '*')],
|
||||
[('unsigned_long', '*', '*')]),
|
||||
]
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
92
Mac/Modules/evt/evtsupport.py
Normal file
92
Mac/Modules/evt/evtsupport.py
Normal file
@@ -0,0 +1,92 @@
|
||||
# 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 = 'Events.h' # The Apple header file
|
||||
MODNAME = '_Evt' # The name of the module
|
||||
OBJECTNAME = 'Event' # The basic name of the objects used here
|
||||
KIND = 'Record' # Usually 'Ptr' or 'Handle'
|
||||
|
||||
# The following is *usually* unchanged but may still require tuning
|
||||
MODPREFIX = 'Evt' # The prefix for module-wide routines
|
||||
OBJECTTYPE = OBJECTNAME + KIND # 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
|
||||
OUTPUTFILE = MODNAME + "module.c" # The file generated by this program
|
||||
|
||||
from macsupport import *
|
||||
|
||||
# Create the type objects
|
||||
|
||||
#WindowPeek = OpaqueByValueType("WindowPeek", OBJECTPREFIX)
|
||||
|
||||
RgnHandle = FakeType("(RgnHandle)0")
|
||||
# XXXX Should be next, but this will break a lot of code...
|
||||
# RgnHandle = OpaqueByValueType("RgnHandle", "OptResObj")
|
||||
|
||||
KeyMap = ArrayOutputBufferType("KeyMap")
|
||||
##MacOSEventKind = Type("MacOSEventKind", "h") # Old-style
|
||||
##MacOSEventMask = Type("MacOSEventMask", "h") # Old-style
|
||||
EventMask = Type("EventMask", "H")
|
||||
EventKind = Type("EventKind", "H")
|
||||
|
||||
includestuff = includestuff + """
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
"""
|
||||
|
||||
# From here on it's basically all boiler plate...
|
||||
|
||||
# Create the generator groups and link them
|
||||
module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)
|
||||
|
||||
# Create the generator classes used to populate the lists
|
||||
Function = OSErrWeakLinkFunctionGenerator
|
||||
##Method = OSErrWeakLinkMethodGenerator
|
||||
|
||||
# Create and populate the lists
|
||||
functions = []
|
||||
execfile(INPUTFILE)
|
||||
|
||||
# Move TickCount here, for convenience
|
||||
f = Function(UInt32, 'TickCount',
|
||||
)
|
||||
functions.append(f)
|
||||
|
||||
# add the populated lists to the generator groups
|
||||
# (in a different wordl the scan program would generate this)
|
||||
for f in functions: module.add(f)
|
||||
|
||||
WaitNextEvent_body = """
|
||||
Boolean _rv;
|
||||
EventMask eventMask;
|
||||
EventRecord theEvent;
|
||||
UInt32 sleep;
|
||||
Handle mouseregion = (Handle)0;
|
||||
|
||||
if (!PyArg_ParseTuple(_args, "Hl|O&",
|
||||
&eventMask,
|
||||
&sleep,
|
||||
OptResObj_Convert, &mouseregion))
|
||||
return NULL;
|
||||
_rv = WaitNextEvent(eventMask,
|
||||
&theEvent,
|
||||
sleep,
|
||||
(RgnHandle)mouseregion);
|
||||
_res = Py_BuildValue("bO&",
|
||||
_rv,
|
||||
PyMac_BuildEventRecord, &theEvent);
|
||||
return _res;
|
||||
"""
|
||||
f = ManualGenerator("WaitNextEvent", WaitNextEvent_body);
|
||||
f.docstring = lambda: "(EventMask eventMask, UInt32 sleep [,RegionHandle]) -> (Boolean _rv, EventRecord theEvent)"
|
||||
module.add(f)
|
||||
|
||||
|
||||
# generate output (open the output file as late as possible)
|
||||
SetOutputFileName(OUTPUTFILE)
|
||||
module.generate()
|
||||
Reference in New Issue
Block a user