+ PyObject_HEAD
+ eConsoleAppContainer *cont;
+ PyObject *in_weakreflist; /* List of weak references */
+};
+
+static PyObject *
+eConsolePy_dataAvail(eConsolePy *self, void *closure)
+{
+ return self->cont->dataAvail.get();
+}
+
+static PyObject *
+eConsolePy_stdoutAvail(eConsolePy *self, void *closure)
+{
+ return self->cont->stdoutAvail.get();
+}
+
+static PyObject *
+eConsolePy_stderrAvail(eConsolePy *self, void *closure)
+{
+ return self->cont->stderrAvail.get();
+}
+
+static PyObject *
+eConsolePy_dataSent(eConsolePy *self, void *closure)
+{
+ return self->cont->dataSent.get();
+}
+
+static PyObject *
+eConsolePy_appClosed(eConsolePy *self, void *closure)
+{
+ return self->cont->appClosed.get();
+}
+
+static PyGetSetDef eConsolePy_getseters[] = {
+ {"dataAvail",
+ (getter)eConsolePy_dataAvail, (setter)0,
+ "dataAvail callback list",
+ NULL},
+ {"stdoutAvail",
+ (getter)eConsolePy_stdoutAvail, (setter)0,
+ "stdoutAvail callback list",
+ NULL},
+ {"stderrAvail",
+ (getter)eConsolePy_stderrAvail, (setter)0,
+ "stderrAvail callback list",
+ NULL},
+ {"dataSent",
+ (getter)eConsolePy_dataSent, (setter)0,
+ "dataSent callback list",
+ NULL},
+ {"appClosed",
+ (getter)eConsolePy_appClosed, (setter)0,
+ "appClosed callback list",
+ NULL},
+ {NULL} /* Sentinel */
+};
+
+static int
+eConsolePy_traverse(eConsolePy *self, visitproc visit, void *arg)
+{
+ PyObject *obj = self->cont->dataAvail.getSteal();
+ if (obj) {
+ Py_VISIT(obj);
+ }
+ obj = self->cont->stdoutAvail.getSteal();
+ if (obj) {
+ Py_VISIT(obj);
+ }
+ obj = self->cont->stderrAvail.getSteal();
+ if (obj) {
+ Py_VISIT(obj);
+ }
+ obj = self->cont->dataSent.getSteal();
+ if (obj) {
+ Py_VISIT(obj);
+ }
+ obj = self->cont->appClosed.getSteal();
+ if (obj) {
+ Py_VISIT(obj);
+ }
+ return 0;
+}
+
+static int
+eConsolePy_clear(eConsolePy *self)
+{
+ PyObject *obj = self->cont->dataAvail.getSteal(true);
+ if (obj) {
+ Py_CLEAR(obj);
+ }
+ obj = self->cont->stdoutAvail.getSteal(true);
+ if (obj) {
+ Py_CLEAR(obj);
+ }
+ obj = self->cont->stderrAvail.getSteal(true);
+ if (obj) {
+ Py_CLEAR(obj);
+ }
+ obj = self->cont->dataSent.getSteal(true);
+ if (obj) {
+ Py_CLEAR(obj);
+ }
+ obj = self->cont->appClosed.getSteal(true);
+ if (obj) {
+ Py_CLEAR(obj);
+ }
+ return 0;
+}
+
+static void
+eConsolePy_dealloc(eConsolePy* self)
+{
+ if (self->in_weakreflist != NULL)
+ PyObject_ClearWeakRefs((PyObject *) self);
+ eConsolePy_clear(self);
+ self->cont->Release();
+ self->ob_type->tp_free((PyObject*)self);
+}
+
+static PyObject *
+eConsolePy_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
+{
+ eConsolePy *self = (eConsolePy *)type->tp_alloc(type, 0);
+ self->cont = new eConsoleAppContainer();
+ self->cont->AddRef();
+ self->in_weakreflist = NULL;
+ return (PyObject *)self;
+}
+
+static PyObject *
+eConsolePy_running(eConsolePy* self)
+{
+ PyObject *ret = NULL;
+ ret = self->cont->running() ? Py_True : Py_False;
+ Org_Py_INCREF(ret);
+ return ret;
+}
+
+static PyObject *
+eConsolePy_execute(eConsolePy* self, PyObject *argt)
+{
+ Py_ssize_t argc = PyTuple_Size(argt);
+ if (argc > 1)