From 43cf27edb64a2c3ed32ed6a08dcddfdc91c444db Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Fri, 13 Jan 2017 15:33:38 -0200 Subject: [PATCH] Copiando fontes do projeto original. --- .gitignore | 10 ++++++++++ python-pw3270.cbp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/actions.cc | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/get.cc | 154 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/init.cc | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/misc.cc | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/private.h | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/py3270.cc | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/set.cc | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 9 files changed, 906 insertions(+), 0 deletions(-) create mode 100644 python-pw3270.cbp create mode 100644 src/actions.cc create mode 100644 src/get.cc create mode 100644 src/init.cc create mode 100644 src/misc.cc create mode 100644 src/private.h create mode 100644 src/py3270.cc create mode 100644 src/set.cc diff --git a/.gitignore b/.gitignore index 5236e1e..aa7e400 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,12 @@ *~ +*.layout +.bin +.obj +ChangeLog +aclocal.m4 +autom4te.cache +config.* +configure +*.depend +stamp-h1 diff --git a/python-pw3270.cbp b/python-pw3270.cbp new file mode 100644 index 0000000..71bb34e --- /dev/null +++ b/python-pw3270.cbp @@ -0,0 +1,57 @@ + + + + + + diff --git a/src/actions.cc b/src/actions.cc new file mode 100644 index 0000000..5d8aebe --- /dev/null +++ b/src/actions.cc @@ -0,0 +1,129 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como actions.cc e possui - linhas de código. + * + * Contatos + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Referências: + * + * + * + * + */ + + #include "private.h" + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + + PyObject * terminal_pfkey(PyObject *self, PyObject *args) { + + int rc, key; + + if (!PyArg_ParseTuple(args, "i", &key)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->pfkey(key); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + PyObject * terminal_pakey(PyObject *self, PyObject *args) { + + int rc, key; + + if (!PyArg_ParseTuple(args, "i", &key)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->pakey(key); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + PyObject * terminal_enter(PyObject *self, PyObject *args) { + + int rc; + + try { + + rc = ((pw3270_TerminalObject *) self)->session->enter(); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + + } + + PyObject * terminal_action(PyObject *self, PyObject *args) { + + int rc; + const char *name; + + if (!PyArg_ParseTuple(args, "s", &name)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->action(name); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + + } + diff --git a/src/get.cc b/src/get.cc new file mode 100644 index 0000000..d3ea909 --- /dev/null +++ b/src/get.cc @@ -0,0 +1,154 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como get.cc e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Referências: + * + * + * + * + */ + + #include "private.h" + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + +PyObject * terminal_get_version(PyObject *self, PyObject *args) { + + return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_version().c_str() ); + +} + +PyObject * terminal_get_revision(PyObject *self, PyObject *args) { + + return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_revision().c_str() ); + +} + +PyObject * terminal_is_connected(PyObject *self, PyObject *args) { + + return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_connected() ); + +} + +PyObject * terminal_is_ready(PyObject *self, PyObject *args) { + + return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_ready() ); + +} + +PyObject * terminal_is_protected_at(PyObject *self, PyObject *args) { + + int rc, row, col; + + if (!PyArg_ParseTuple(args, "ii", &row, &col)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->get_is_protected_at(row,col); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyBool_FromLong( rc ); + +} + + +PyObject * terminal_cmp_string_at(PyObject *self, PyObject *args) { + + int row, col, rc; + const char *text; + + if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->cmp_string_at(row,col,text); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + +} + +PyObject * terminal_get_string_at(PyObject *self, PyObject *args) { + + int row, col, sz; + string rc; + + if (!PyArg_ParseTuple(args, "iii", &row, &col, &sz)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->get_string_at(row,col,sz); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyString_FromString(rc.c_str()); + +} + +PyObject * terminal_get_contents(PyObject *self) { + + string rc; + + try { + + rc = ((pw3270_TerminalObject *) self)->session->get_string(); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyString_FromString(rc.c_str()); + + + +} diff --git a/src/init.cc b/src/init.cc new file mode 100644 index 0000000..34b9662 --- /dev/null +++ b/src/init.cc @@ -0,0 +1,87 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como py3270.cc e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Implementa métodos básicos inicio/final do objeto python + * + * Referências: + * + * + * + * + */ + + #include "private.h" + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + +PyObject * terminal_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { + + PW3270_NAMESPACE::session * session; + const char *id = ""; + + if (!PyArg_ParseTuple(args, "s", &id)) { + id = ""; + } + + trace("%s(%s)",__FUNCTION__,id); + + try { + + session = PW3270_NAMESPACE::session::create(id); + + } catch(std::exception &e) { + + trace("%s failed: %s",__FUNCTION__,e.what()); + PyErr_SetString(terminalError, e.what()); + return NULL; + + } + + pw3270_TerminalObject *self = (pw3270_TerminalObject *) type->tp_alloc(type, 0); + + self->session = session; + + return (PyObject *)self; +} + + +int terminal_init(pw3270_TerminalObject *self, PyObject *args, PyObject *kwds) { + + return 0; + +} + +void terminal_dealloc(pw3270_TerminalObject * self) { + + trace("%s",__FUNCTION__); + + delete self->session; + + self->ob_type->tp_free((PyObject*)self); + +} diff --git a/src/misc.cc b/src/misc.cc new file mode 100644 index 0000000..d9ccb8c --- /dev/null +++ b/src/misc.cc @@ -0,0 +1,134 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como misc.cc e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Implementa métodos básicos inicio/final do objeto python + * + * Referências: + * + * + * + * + */ + + #include "private.h" + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + + PyObject * terminal_connect(PyObject *self, PyObject *args) { + + int rc = -1; + int wait = 60; + const char * host = ""; + + if (!PyArg_ParseTuple(args, "s|i", &host, &wait)) { + PyErr_SetString(terminalError, "connect requires a host URL"); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->connect(host,wait); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + PyObject * terminal_disconnect(PyObject *self, PyObject *args) { + + int rc = -1; + + try { + + rc = ((pw3270_TerminalObject *) self)->session->disconnect(); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + PyObject * terminal_wait_for_ready(PyObject *self, PyObject *args) { + + int rc; + int timeout = 60; + + if (!PyArg_ParseTuple(args, "|i", &timeout)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->wait_for_ready(timeout); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + + PyObject * terminal_wait_for_string_at(PyObject *self, PyObject *args) { + + int row, col, rc; + int timeout = 10; + const char *text; + + if (!PyArg_ParseTuple(args, "iis|i", &row, &col, &text, &timeout)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->wait_for_string_at(row,col,text,timeout); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + diff --git a/src/private.h b/src/private.h new file mode 100644 index 0000000..4ee6733 --- /dev/null +++ b/src/private.h @@ -0,0 +1,87 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como private.h e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#ifndef PRIVATE_H_INCLUDED + + #define PRIVATE_H_INCLUDED + + // http://stackoverflow.com/questions/28683358/error-hypot-has-not-been-declared-in-cmath-while-trying-to-embed-python + #include + + #include + + #include + #include + + using namespace std; + + typedef struct { + + PyObject_HEAD + + PW3270_NAMESPACE::session * session; + + } pw3270_TerminalObject; + + extern PyObject * terminalError; + + extern "C" { + + PyObject * terminal_new(PyTypeObject *type, PyObject *args, PyObject *kwds); + int terminal_init(pw3270_TerminalObject *self, PyObject *args, PyObject *kwds); + void terminal_dealloc(pw3270_TerminalObject * self); + + PyObject * terminal_get_version(PyObject *self, PyObject *args); + PyObject * terminal_get_revision(PyObject *self, PyObject *args); + + PyObject * terminal_is_connected(PyObject *self, PyObject *args); + PyObject * terminal_is_ready(PyObject *self, PyObject *args); + + PyObject * terminal_connect(PyObject *self, PyObject *args); + PyObject * terminal_disconnect(PyObject *self, PyObject *args); + + PyObject * terminal_get_string_at(PyObject *self, PyObject *args); + PyObject * terminal_get_contents(PyObject *self); + PyObject * terminal_set_string_at(PyObject *self, PyObject *args); + PyObject * terminal_cmp_string_at(PyObject *self, PyObject *args); + + PyObject * terminal_pfkey(PyObject *self, PyObject *args); + PyObject * terminal_pakey(PyObject *self, PyObject *args); + PyObject * terminal_enter(PyObject *self, PyObject *args); + PyObject * terminal_action(PyObject *self, PyObject *args); + + PyObject * terminal_is_protected_at(PyObject *self, PyObject *args); + PyObject * terminal_set_cursor_at(PyObject *self, PyObject *args); + + PyObject * terminal_wait_for_ready(PyObject *self, PyObject *args); + PyObject * terminal_wait_for_string_at(PyObject *self, PyObject *args); + + } + +#endif // PRIVATE_H_INCLUDED diff --git a/src/py3270.cc b/src/py3270.cc new file mode 100644 index 0000000..7347da8 --- /dev/null +++ b/src/py3270.cc @@ -0,0 +1,162 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como py3270.cc e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Implementa métodos básicos para a extensão python. + * + * Referências: + * + * + * + * + */ + + #include "private.h" + +/*---[ Globals ]------------------------------------------------------------------------------------*/ + + PyObject * terminalError = NULL; + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + +static PyObject * get_revision(PyObject *self, PyObject *args) { + + return PyLong_FromLong(atoi(PACKAGE_REVISION)); + +} + +static PyMethodDef terminal_methods[] = { + + { "Version", terminal_get_version, METH_NOARGS, "Get the lib3270 version string." }, + { "Revision", terminal_get_revision, METH_NOARGS, "Get the lib3270 revision number." }, + + { "IsConnected", terminal_is_connected, METH_NOARGS, "True if the terminal is connected to the host." }, + { "IsReady", terminal_is_ready, METH_NOARGS, "True if the terminal has finished network activity." }, + { "IsProtected", terminal_is_protected_at, METH_VARARGS, "True if the position is read-only." }, + + { "SetCursorPosition", terminal_set_cursor_at, METH_VARARGS, "Set cursor position." }, + + { "WaitForStringAt", terminal_wait_for_string_at, METH_VARARGS, "Wait for string at position" }, + { "WaitForReady", terminal_wait_for_ready, METH_VARARGS, "Wait for network communication to finish" }, + + { "Connect", terminal_connect, METH_VARARGS, "Connect to the host." }, + { "Disconnect", terminal_disconnect, METH_NOARGS, "Disconnect from host." }, + + { "CmpStringAt", terminal_cmp_string_at, METH_VARARGS, "Compare string with terminal buffer at the position." }, + { "GetStringAt", terminal_get_string_at, METH_VARARGS, "Get string from terminal buffer." }, + { "SetStringAt", terminal_set_string_at, METH_VARARGS, "Set string in terminal buffer." }, + + { "PFKey", terminal_pfkey, METH_VARARGS, "Send PF key." }, + { "PAKey", terminal_pakey, METH_VARARGS, "Send PA key." }, + { "Enter", terminal_enter, METH_NOARGS, "Send Enter Key." }, + { "Action", terminal_action, METH_VARARGS, "Send Action by name." }, + + {NULL} // Sentinel + +}; + +/* +static PyMemberDef terminal_members[] = { + + { NULL } // Sentinel + +}; +*/ + +static PyTypeObject pw3270_TerminalType = { + PyObject_HEAD_INIT(NULL) + 0, /*ob_size*/ + "py3270.terminal", /*tp_name*/ + sizeof(pw3270_TerminalObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor) terminal_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*/ + terminal_get_contents, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/ + "3270 terminal object", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + terminal_methods, /* tp_methods */ + 0, // terminal_members, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc) terminal_init, /* tp_init */ + 0, /* tp_alloc */ + terminal_new, /* tp_new */ + +}; + +static PyMethodDef MyMethods[] = { + + { "Revision", get_revision, METH_VARARGS, "Get module revision." }, + + {NULL, NULL, 0, NULL} /* Sentinel */ + +}; + +PyMODINIT_FUNC initpy3270(void) { + + // Cria o módulo + + PyObject *m = Py_InitModule("py3270", MyMethods); + + if (m == NULL) + return; + + // Adiciona objeto para tratamento de erros. + terminalError = PyErr_NewException((char *) "py3270.error", NULL, NULL); + + (void) Py_INCREF(terminalError); + PyModule_AddObject(m, "error", terminalError); + + // Adiciona terminal + if(PyType_Ready(&pw3270_TerminalType) < 0) + return + + (void) Py_INCREF(&pw3270_TerminalType); + PyModule_AddObject(m, "Terminal", (PyObject *)&pw3270_TerminalType); + +} diff --git a/src/set.cc b/src/set.cc new file mode 100644 index 0000000..759495d --- /dev/null +++ b/src/set.cc @@ -0,0 +1,86 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como set.cc e possui - linhas de código. + * + * Contatos + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + * Referências: + * + * + * + * + */ + + #include "private.h" + + +/*---[ Implement ]----------------------------------------------------------------------------------*/ + + PyObject * terminal_set_string_at(PyObject *self, PyObject *args) { + + int row, col, rc; + const char *text; + + if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->set_string_at(row,col,text); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + + PyObject * terminal_set_cursor_at(PyObject *self, PyObject *args) { + + int row, col, rc; + + if (!PyArg_ParseTuple(args, "ii", &row, &col)) { + PyErr_SetString(terminalError, strerror(EINVAL)); + return NULL; + } + + try { + + rc = ((pw3270_TerminalObject *) self)->session->set_cursor_position(row,col); + + } catch(std::exception &e) { + + PyErr_SetString(terminalError, e.what()); + return NULL; + } + + return PyLong_FromLong(rc); + + } + -- libgit2 0.21.2