diff options
Diffstat (limited to 'objects/process-object.c')
| -rw-r--r-- | objects/process-object.c | 222 |
1 files changed, 0 insertions, 222 deletions
diff --git a/objects/process-object.c b/objects/process-object.c deleted file mode 100644 index 43c0fd7..0000000 --- a/objects/process-object.c +++ /dev/null @@ -1,222 +0,0 @@ -#include <Python.h> -#include "pyirssi_irc.h" -#include "pymodule.h" -#include "process-object.h" -#include "pycore.h" - -/* monitor "exec remove" signal */ -static void process_cleanup(PROCESS_REC *process, int status) -{ - PyProcess *pyprocess = signal_get_user_data(); - - if (process == pyprocess->data) - { - pyprocess->data = NULL; - pyprocess->cleanup_installed = 0; - signal_remove_data("exec remove", process_cleanup, pyprocess); - } -} - -static void PyProcess_dealloc(PyProcess *self) -{ - if (self->cleanup_installed) - signal_remove_data("exec remove", process_cleanup, self); - - Py_XDECREF(self->target_win); - - self->ob_type->tp_free((PyObject*)self); -} - -static PyObject *PyProcess_new(PyTypeObject *type, PyObject *args, PyObject *kwds) -{ - PyProcess *self; - - self = (PyProcess *)type->tp_alloc(type, 0); - if (!self) - return NULL; - - return (PyObject *)self; -} - -/* Getters */ -PyDoc_STRVAR(PyProcess_id_doc, - "ID for the process" -); -static PyObject *PyProcess_id_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyInt_FromLong(self->data->id); -} - -PyDoc_STRVAR(PyProcess_name_doc, - "Name for the process (if given)" -); -static PyObject *PyProcess_name_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_STRING_OR_NONE(self->data->name); -} - -PyDoc_STRVAR(PyProcess_args_doc, - "The command that is being executed" -); -static PyObject *PyProcess_args_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_STRING_OR_NONE(self->data->args); -} - -PyDoc_STRVAR(PyProcess_pid_doc, - "PID for the executed command" -); -static PyObject *PyProcess_pid_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyInt_FromLong(self->data->pid); -} - -PyDoc_STRVAR(PyProcess_target_doc, - "send text with /msg <target> ..." -); -static PyObject *PyProcess_target_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_STRING_OR_NONE(self->data->target); -} - -PyDoc_STRVAR(PyProcess_target_win_doc, - "print text to this window" -); -static PyObject *PyProcess_target_win_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - RET_AS_OBJ_OR_NONE(self->target_win); -} - -PyDoc_STRVAR(PyProcess_shell_doc, - "start the program via /bin/sh" -); -static PyObject *PyProcess_shell_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->shell); -} - -PyDoc_STRVAR(PyProcess_notice_doc, - "send text with /notice, not /msg if target is set" -); -static PyObject *PyProcess_notice_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->notice); -} - -PyDoc_STRVAR(PyProcess_silent_doc, - "don't print \"process exited with level xx\"" -); -static PyObject *PyProcess_silent_get(PyProcess *self, void *closure) -{ - RET_NULL_IF_INVALID(self->data); - return PyBool_FromLong(self->data->silent); -} - -/* specialized getters/setters */ -static PyGetSetDef PyProcess_getseters[] = { - {"id", (getter)PyProcess_id_get, NULL, - PyProcess_id_doc, NULL}, - {"name", (getter)PyProcess_name_get, NULL, - PyProcess_name_doc, NULL}, - {"args", (getter)PyProcess_args_get, NULL, - PyProcess_args_doc, NULL}, - {"pid", (getter)PyProcess_pid_get, NULL, - PyProcess_pid_doc, NULL}, - {"target", (getter)PyProcess_target_get, NULL, - PyProcess_target_doc, NULL}, - {"target_win", (getter)PyProcess_target_win_get, NULL, - PyProcess_target_win_doc, NULL}, - {"shell", (getter)PyProcess_shell_get, NULL, - PyProcess_shell_doc, NULL}, - {"notice", (getter)PyProcess_notice_get, NULL, - PyProcess_notice_doc, NULL}, - {"silent", (getter)PyProcess_silent_get, NULL, - PyProcess_silent_doc, NULL}, - {NULL} -}; - -/* Methods */ -/* Methods for object */ -static PyMethodDef PyProcess_methods[] = { - {NULL} /* Sentinel */ -}; - -PyTypeObject PyProcessType = { - PyObject_HEAD_INIT(NULL) - 0, /*ob_size*/ - "Process", /*tp_name*/ - sizeof(PyProcess), /*tp_basicsize*/ - 0, /*tp_itemsize*/ - (destructor)PyProcess_dealloc, /*tp_dealloc*/ - 0, /*tp_print*/ - 0, /*tp_getattr*/ - 0, /*tp_setattr*/ - 0, /*tp_compare*/ - 0, /*tp_repr*/ - 0, /*tp_as_number*/ - 0, /*tp_as_sequence*/ - 0, /*tp_as_mapping*/ - 0, /*tp_hash */ - 0, /*tp_call*/ - 0, /*tp_str*/ - 0, /*tp_getattro*/ - 0, /*tp_setattro*/ - 0, /*tp_as_buffer*/ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ - "PyProcess objects", /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - PyProcess_methods, /* tp_methods */ - 0, /* tp_members */ - PyProcess_getseters, /* tp_getset */ - 0, /* tp_base */ - 0, /* tp_dict */ - 0, /* tp_descr_get */ - 0, /* tp_descr_set */ - 0, /* tp_dictoffset */ - 0, /* tp_init */ - 0, /* tp_alloc */ - PyProcess_new, /* tp_new */ -}; - - -/* process factory function */ -PyObject *pyprocess_new(void *process) -{ - PyProcess *pyprocess; - - pyprocess = py_inst(PyProcess, PyProcessType); - if (!pyprocess) - return NULL; - - pyprocess->data = process; - pyprocess->cleanup_installed = 1; - signal_add_last_data("exec remove", process_cleanup, pyprocess); - - return (PyObject *)pyprocess; -} - -int process_object_init(void) -{ - g_return_val_if_fail(py_module != NULL, 0); - - if (PyType_Ready(&PyProcessType) < 0) - return 0; - - Py_INCREF(&PyProcessType); - PyModule_AddObject(py_module, "Process", (PyObject *)&PyProcessType); - - return 1; -} |
