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