Commit 6688c6aaceb66ccdc69ebecafaa50e797e9dbc70

Authored by Perry Werneck
1 parent afde7866
Exists in master

Refactoring for new version.

configure.ac
... ... @@ -57,18 +57,6 @@ AC_PROG_LN_S
57 57 AC_LANG([C++])
58 58  
59 59 dnl ---------------------------------------------------------------------------
60   -dnl Initialize defaults
61   -dnl ---------------------------------------------------------------------------
62   -
63   -DBG_CFLAGS="-g -fstack-check -DDEBUG=1"
64   -RLS_CFLAGS="-DNDEBUG=1"
65   -PLUGINS=""
66   -APP_RESOURCES=""
67   -APP_LDFLAGS=""
68   -DLL_LDFLAGS="-shared -Wl,-soname,\$(@F)"
69   -DEPENDS=""
70   -
71   -dnl ---------------------------------------------------------------------------
72 60 dnl Version info
73 61 dnl ---------------------------------------------------------------------------
74 62  
... ... @@ -96,11 +84,6 @@ AC_SUBST(PACKAGE_RELEASE,$app_cv_release)
96 84 AC_SUBST(PACKAGE_MAJOR_RELEASE,$app_rls_major)
97 85 AC_SUBST(PACKAGE_MINOR_RELEASE,$app_rls_minor)
98 86  
99   -AC_ARG_WITH([application-datadir], [AS_HELP_STRING([--with-application-datadir], [Set path for configuration file])], [ app_cv_source_appdatadir="$withval" ],[ app_cv_source_appdatadir="\$(datarootdir)/\$(PACKAGE_NAME)" ])
100   -
101   -AC_DEFINE_UNQUOTED(APPDATADIR, $app_cv_source_appdatadir)
102   -AC_SUBST(APPDATADIR,$app_cv_source_appdatadir)
103   -
104 87 dnl ---------------------------------------------------------------------------
105 88 dnl Check for OS specifics
106 89 dnl ---------------------------------------------------------------------------
... ... @@ -124,14 +107,14 @@ dnl AC_CONFIG_FILES(win/py3270.nsi)
124 107  
125 108 if test "$host_cpu" = "x86_64"; then
126 109 app_cv_programfiles="PROGRAMFILES64"
127   - app_cv_winarch="64"
  110 +dnl app_cv_winarch="64"
128 111 else
129 112 app_cv_programfiles="PROGRAMFILES"
130   - app_cv_winarch="32"
  113 +dnl app_cv_winarch="32"
131 114 fi
132 115  
133 116 AC_SUBST(PROGRAMFILES,$app_cv_programfiles)
134   - AC_SUBST(WINARCH,$app_cv_winarch)
  117 +dnl AC_SUBST(WINARCH,$app_cv_winarch)
135 118 AC_SUBST(SONAME,py3270.dll)
136 119  
137 120 ;;
... ... @@ -139,8 +122,6 @@ dnl AC_CONFIG_FILES(win/py3270.nsi)
139 122 *)
140 123 CFLAGS="$CFLAGS -pthread"
141 124 LDFLAGS="$LDFLAGS -pthread"
142   - app_cv_datadir="/usr/share"
143   - app_cv_confdir="/etc"
144 125 app_cv_osname="linux"
145 126 LOGDIR="/var/log"
146 127 DLLEXT=".so"
... ... @@ -148,16 +129,6 @@ dnl AC_CONFIG_FILES(win/py3270.nsi)
148 129  
149 130 esac
150 131  
151   -AC_SUBST(DATADIR,$app_cv_datadir)
152   -AC_SUBST(CONFDIR,$app_cv_confdir)
153   -AC_SUBST(OSNAME,$app_cv_osname)
154   -AC_SUBST(LIBS)
155   -AC_SUBST(LOGDIR)
156   -AC_SUBST(DLLEXT)
157   -AC_SUBST(DLLPREFIX)
158   -AC_SUBST(LDFLAGS)
159   -AC_SUBST(DLL_LDFLAGS)
160   -
161 132 dnl ---------------------------------------------------------------------------
162 133 dnl Check for other programs
163 134 dnl ---------------------------------------------------------------------------
... ... @@ -237,7 +208,6 @@ PKG_CHECK_MODULES( [PYTHON], [python], AC_DEFINE(HAVE_PYTHON), AC_MSG_ERROR([Pyt
237 208 AC_SUBST(PYTHON_LIBS)
238 209 AC_SUBST(PYTHON_CFLAGS)
239 210  
240   -
241 211 dnl ---------------------------------------------------------------------------
242 212 dnl Check for pic
243 213 dnl ---------------------------------------------------------------------------
... ... @@ -269,6 +239,18 @@ if test "$app_cv_pic" == "yes"; then
269 239 fi
270 240  
271 241 dnl ---------------------------------------------------------------------------
  242 +dnl Configure program options
  243 +dnl ---------------------------------------------------------------------------
  244 +
  245 +AC_SUBST(OSNAME,$app_cv_osname)
  246 +AC_SUBST(LIBS)
  247 +AC_SUBST(DLLEXT)
  248 +AC_SUBST(CFLAGS)
  249 +AC_SUBST(CXXFLAGS)
  250 +AC_SUBST(LDFLAGS)
  251 +AC_SUBST(BASEDIR,$ac_pwd)
  252 +
  253 +dnl ---------------------------------------------------------------------------
272 254 dnl Configure which files to generate.
273 255 dnl ---------------------------------------------------------------------------
274 256  
... ... @@ -277,7 +259,6 @@ dnl ---------------------------------------------------------------------------
277 259 dnl ---------------------------------------------------------------------------
278 260 dnl Output the generated config.status script.
279 261 dnl ---------------------------------------------------------------------------
280   -AC_SUBST(BASEDIR,$ac_pwd)
281 262  
282 263 AC_OUTPUT
283 264  
... ...
src/core/actions.cc
... ... @@ -1,128 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como actions.cc e possui - linhas de código.
22   - *
23   - * Contatos
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Referências:
29   - *
30   - * <https://docs.python.org/2/extending/newtypes.html>
31   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
32   - *
33   - */
34   -
35   - #include "private.h"
36   -
37   -/*---[ Implement ]----------------------------------------------------------------------------------*/
38   -
39   - PyObject * terminal_pfkey(PyObject *self, PyObject *args) {
40   -
41   - int rc, key;
42   -
43   - if (!PyArg_ParseTuple(args, "i", &key)) {
44   - PyErr_SetString(terminalError, strerror(EINVAL));
45   - return NULL;
46   - }
47   -
48   - try {
49   -
50   - rc = ((pw3270_TerminalObject *) self)->session->pfkey(key);
51   -
52   - } catch(std::exception &e) {
53   -
54   - PyErr_SetString(terminalError, e.what());
55   - return NULL;
56   - }
57   -
58   - return PyLong_FromLong(rc);
59   -
60   - }
61   -
62   - PyObject * terminal_pakey(PyObject *self, PyObject *args) {
63   -
64   - int rc, key;
65   -
66   - if (!PyArg_ParseTuple(args, "i", &key)) {
67   - PyErr_SetString(terminalError, strerror(EINVAL));
68   - return NULL;
69   - }
70   -
71   - try {
72   -
73   - rc = ((pw3270_TerminalObject *) self)->session->pakey(key);
74   -
75   - } catch(std::exception &e) {
76   -
77   - PyErr_SetString(terminalError, e.what());
78   - return NULL;
79   - }
80   -
81   - return PyLong_FromLong(rc);
82   -
83   - }
84   -
85   - PyObject * terminal_enter(PyObject *self, PyObject *args) {
86   -
87   - int rc;
88   -
89   - try {
90   -
91   - rc = ((pw3270_TerminalObject *) self)->session->enter();
92   -
93   - } catch(std::exception &e) {
94   -
95   - PyErr_SetString(terminalError, e.what());
96   - return NULL;
97   - }
98   -
99   - return PyLong_FromLong(rc);
100   -
101   -
102   - }
103   -
104   - PyObject * terminal_action(PyObject *self, PyObject *args) {
105   -
106   - int rc;
107   - const char *name;
108   -
109   - if (!PyArg_ParseTuple(args, "s", &name)) {
110   - PyErr_SetString(terminalError, strerror(EINVAL));
111   - return NULL;
112   - }
113   -
114   - try {
115   -
116   - rc = ((pw3270_TerminalObject *) self)->session->action(name);
117   -
118   - } catch(std::exception &e) {
119   -
120   - PyErr_SetString(terminalError, e.what());
121   - return NULL;
122   - }
123   -
124   - return PyLong_FromLong(rc);
125   -
126   -
127   - }
128   -
src/core/get.cc
... ... @@ -1,154 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como get.cc e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Referências:
29   - *
30   - * <https://docs.python.org/2/extending/newtypes.html>
31   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
32   - *
33   - */
34   -
35   - #include "private.h"
36   -
37   -
38   -/*---[ Implement ]----------------------------------------------------------------------------------*/
39   -
40   -PyObject * terminal_get_version(PyObject *self, PyObject *args) {
41   -
42   - return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_version().c_str() );
43   -
44   -}
45   -
46   -PyObject * terminal_get_revision(PyObject *self, PyObject *args) {
47   -
48   - return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_revision().c_str() );
49   -
50   -}
51   -
52   -PyObject * terminal_is_connected(PyObject *self, PyObject *args) {
53   -
54   - return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_connected() );
55   -
56   -}
57   -
58   -PyObject * terminal_is_ready(PyObject *self, PyObject *args) {
59   -
60   - return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_ready() );
61   -
62   -}
63   -
64   -PyObject * terminal_is_protected_at(PyObject *self, PyObject *args) {
65   -
66   - int rc, row, col;
67   -
68   - if (!PyArg_ParseTuple(args, "ii", &row, &col)) {
69   - PyErr_SetString(terminalError, strerror(EINVAL));
70   - return NULL;
71   - }
72   -
73   - try {
74   -
75   - rc = ((pw3270_TerminalObject *) self)->session->get_is_protected_at(row,col);
76   -
77   - } catch(std::exception &e) {
78   -
79   - PyErr_SetString(terminalError, e.what());
80   - return NULL;
81   - }
82   -
83   - return PyBool_FromLong( rc );
84   -
85   -}
86   -
87   -
88   -PyObject * terminal_cmp_string_at(PyObject *self, PyObject *args) {
89   -
90   - int row, col, rc;
91   - const char *text;
92   -
93   - if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) {
94   - PyErr_SetString(terminalError, strerror(EINVAL));
95   - return NULL;
96   - }
97   -
98   - try {
99   -
100   - rc = ((pw3270_TerminalObject *) self)->session->cmp_string_at(row,col,text);
101   -
102   - } catch(std::exception &e) {
103   -
104   - PyErr_SetString(terminalError, e.what());
105   - return NULL;
106   - }
107   -
108   - return PyLong_FromLong(rc);
109   -
110   -}
111   -
112   -PyObject * terminal_get_string_at(PyObject *self, PyObject *args) {
113   -
114   - int row, col, sz;
115   - string rc;
116   -
117   - if (!PyArg_ParseTuple(args, "iii", &row, &col, &sz)) {
118   - PyErr_SetString(terminalError, strerror(EINVAL));
119   - return NULL;
120   - }
121   -
122   - try {
123   -
124   - rc = ((pw3270_TerminalObject *) self)->session->get_string_at(row,col,sz);
125   -
126   - } catch(std::exception &e) {
127   -
128   - PyErr_SetString(terminalError, e.what());
129   - return NULL;
130   - }
131   -
132   - return PyString_FromString(rc.c_str());
133   -
134   -}
135   -
136   -PyObject * terminal_get_contents(PyObject *self) {
137   -
138   - string rc;
139   -
140   - try {
141   -
142   - rc = ((pw3270_TerminalObject *) self)->session->get_string();
143   -
144   - } catch(std::exception &e) {
145   -
146   - PyErr_SetString(terminalError, e.what());
147   - return NULL;
148   - }
149   -
150   - return PyString_FromString(rc.c_str());
151   -
152   -
153   -
154   -}
src/core/init.cc
... ... @@ -1,87 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como py3270.cc e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Implementa métodos básicos inicio/final do objeto python
29   - *
30   - * Referências:
31   - *
32   - * <https://docs.python.org/2/extending/newtypes.html>
33   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
34   - *
35   - */
36   -
37   - #include "private.h"
38   -
39   -
40   -/*---[ Implement ]----------------------------------------------------------------------------------*/
41   -
42   -PyObject * terminal_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
43   -
44   - PW3270_NAMESPACE::session * session;
45   - const char *id = "";
46   -
47   - if (!PyArg_ParseTuple(args, "s", &id)) {
48   - id = "";
49   - }
50   -
51   - trace("%s(%s)",__FUNCTION__,id);
52   -
53   - try {
54   -
55   - session = PW3270_NAMESPACE::session::create(id);
56   -
57   - } catch(std::exception &e) {
58   -
59   - trace("%s failed: %s",__FUNCTION__,e.what());
60   - PyErr_SetString(terminalError, e.what());
61   - return NULL;
62   -
63   - }
64   -
65   - pw3270_TerminalObject *self = (pw3270_TerminalObject *) type->tp_alloc(type, 0);
66   -
67   - self->session = session;
68   -
69   - return (PyObject *)self;
70   -}
71   -
72   -
73   -int terminal_init(pw3270_TerminalObject *self, PyObject *args, PyObject *kwds) {
74   -
75   - return 0;
76   -
77   -}
78   -
79   -void terminal_dealloc(pw3270_TerminalObject * self) {
80   -
81   - trace("%s",__FUNCTION__);
82   -
83   - delete self->session;
84   -
85   - self->ob_type->tp_free((PyObject*)self);
86   -
87   -}
src/core/misc.cc
... ... @@ -1,134 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como misc.cc e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Implementa métodos básicos inicio/final do objeto python
29   - *
30   - * Referências:
31   - *
32   - * <https://docs.python.org/2/extending/newtypes.html>
33   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
34   - *
35   - */
36   -
37   - #include "private.h"
38   -
39   -
40   -/*---[ Implement ]----------------------------------------------------------------------------------*/
41   -
42   - PyObject * terminal_connect(PyObject *self, PyObject *args) {
43   -
44   - int rc = -1;
45   - int wait = 60;
46   - const char * host = "";
47   -
48   - if (!PyArg_ParseTuple(args, "s|i", &host, &wait)) {
49   - PyErr_SetString(terminalError, "connect requires a host URL");
50   - return NULL;
51   - }
52   -
53   - try {
54   -
55   - rc = ((pw3270_TerminalObject *) self)->session->connect(host,wait);
56   -
57   - } catch(std::exception &e) {
58   -
59   - PyErr_SetString(terminalError, e.what());
60   - return NULL;
61   - }
62   -
63   - return PyLong_FromLong(rc);
64   -
65   - }
66   -
67   - PyObject * terminal_disconnect(PyObject *self, PyObject *args) {
68   -
69   - int rc = -1;
70   -
71   - try {
72   -
73   - rc = ((pw3270_TerminalObject *) self)->session->disconnect();
74   -
75   - } catch(std::exception &e) {
76   -
77   - PyErr_SetString(terminalError, e.what());
78   - return NULL;
79   - }
80   -
81   - return PyLong_FromLong(rc);
82   -
83   - }
84   -
85   - PyObject * terminal_wait_for_ready(PyObject *self, PyObject *args) {
86   -
87   - int rc;
88   - int timeout = 60;
89   -
90   - if (!PyArg_ParseTuple(args, "|i", &timeout)) {
91   - PyErr_SetString(terminalError, strerror(EINVAL));
92   - return NULL;
93   - }
94   -
95   - try {
96   -
97   - rc = ((pw3270_TerminalObject *) self)->session->wait_for_ready(timeout);
98   -
99   - } catch(std::exception &e) {
100   -
101   - PyErr_SetString(terminalError, e.what());
102   - return NULL;
103   - }
104   -
105   - return PyLong_FromLong(rc);
106   -
107   - }
108   -
109   -
110   - PyObject * terminal_wait_for_string_at(PyObject *self, PyObject *args) {
111   -
112   - int row, col, rc;
113   - int timeout = 10;
114   - const char *text;
115   -
116   - if (!PyArg_ParseTuple(args, "iis|i", &row, &col, &text, &timeout)) {
117   - PyErr_SetString(terminalError, strerror(EINVAL));
118   - return NULL;
119   - }
120   -
121   - try {
122   -
123   - rc = ((pw3270_TerminalObject *) self)->session->wait_for_string_at(row,col,text,timeout);
124   -
125   - } catch(std::exception &e) {
126   -
127   - PyErr_SetString(terminalError, e.what());
128   - return NULL;
129   - }
130   -
131   - return PyLong_FromLong(rc);
132   -
133   - }
134   -
src/core/py3270.cc
... ... @@ -1,167 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como py3270.cc e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Implementa métodos básicos para a extensão python.
29   - *
30   - * Referências:
31   - *
32   - * <https://docs.python.org/2/extending/newtypes.html>
33   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
34   - *
35   - */
36   -
37   - #include "private.h"
38   -
39   -/*---[ Globals ]------------------------------------------------------------------------------------*/
40   -
41   - PyObject * terminalError = NULL;
42   -
43   -/*---[ Implement ]----------------------------------------------------------------------------------*/
44   -
45   -static PyObject * get_revision(PyObject *self, PyObject *args) {
46   -
47   -#ifdef PACKAGE_REVISION
48   - return PyLong_FromLong(atoi(PACKAGE_REVISION));
49   -#else
50   - return PyLong_FromLong(BUILD_DATE);
51   -#endif // PACKAGE_REVISION
52   -
53   -}
54   -
55   -static PyMethodDef terminal_methods[] = {
56   -
57   - { "Version", terminal_get_version, METH_NOARGS, "Get the lib3270 version string." },
58   - { "Revision", terminal_get_revision, METH_NOARGS, "Get the lib3270 revision number." },
59   -
60   - { "IsConnected", terminal_is_connected, METH_NOARGS, "True if the terminal is connected to the host." },
61   - { "IsReady", terminal_is_ready, METH_NOARGS, "True if the terminal has finished network activity." },
62   - { "IsProtected", terminal_is_protected_at, METH_VARARGS, "True if the position is read-only." },
63   -
64   - { "SetCursorPosition", terminal_set_cursor_at, METH_VARARGS, "Set cursor position." },
65   -
66   - { "WaitForStringAt", terminal_wait_for_string_at, METH_VARARGS, "Wait for string at position" },
67   - { "WaitForReady", terminal_wait_for_ready, METH_VARARGS, "Wait for network communication to finish" },
68   -
69   - { "Connect", terminal_connect, METH_VARARGS, "Connect to the host." },
70   - { "Disconnect", terminal_disconnect, METH_NOARGS, "Disconnect from host." },
71   -
72   - { "CmpStringAt", terminal_cmp_string_at, METH_VARARGS, "Compare string with terminal buffer at the position." },
73   - { "GetStringAt", terminal_get_string_at, METH_VARARGS, "Get string from terminal buffer." },
74   - { "SetStringAt", terminal_set_string_at, METH_VARARGS, "Set string in terminal buffer." },
75   -
76   - { "PFKey", terminal_pfkey, METH_VARARGS, "Send PF key." },
77   - { "PAKey", terminal_pakey, METH_VARARGS, "Send PA key." },
78   - { "Enter", terminal_enter, METH_NOARGS, "Send Enter Key." },
79   - { "Action", terminal_action, METH_VARARGS, "Send Action by name." },
80   -
81   - {NULL} // Sentinel
82   -
83   -};
84   -
85   -/*
86   -static PyMemberDef terminal_members[] = {
87   -
88   - { NULL } // Sentinel
89   -
90   -};
91   -*/
92   -
93   -static PyTypeObject pw3270_TerminalType = {
94   - PyObject_HEAD_INIT(NULL)
95   - 0, /*ob_size*/
96   - "py3270.terminal", /*tp_name*/
97   - sizeof(pw3270_TerminalObject), /*tp_basicsize*/
98   - 0, /*tp_itemsize*/
99   - (destructor) terminal_dealloc, /*tp_dealloc*/
100   - 0, /*tp_print*/
101   - 0, /*tp_getattr*/
102   - 0, /*tp_setattr*/
103   - 0, /*tp_compare*/
104   - 0, /*tp_repr*/
105   - 0, /*tp_as_number*/
106   - 0, /*tp_as_sequence*/
107   - 0, /*tp_as_mapping*/
108   - 0, /*tp_hash */
109   - 0, /*tp_call*/
110   - terminal_get_contents, /*tp_str*/
111   - 0, /*tp_getattro*/
112   - 0, /*tp_setattro*/
113   - 0, /*tp_as_buffer*/
114   - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
115   - "3270 terminal object", /* tp_doc */
116   - 0, /* tp_traverse */
117   - 0, /* tp_clear */
118   - 0, /* tp_richcompare */
119   - 0, /* tp_weaklistoffset */
120   - 0, /* tp_iter */
121   - 0, /* tp_iternext */
122   - terminal_methods, /* tp_methods */
123   - 0, // terminal_members, /* tp_members */
124   - 0, /* tp_getset */
125   - 0, /* tp_base */
126   - 0, /* tp_dict */
127   - 0, /* tp_descr_get */
128   - 0, /* tp_descr_set */
129   - 0, /* tp_dictoffset */
130   - (initproc) terminal_init, /* tp_init */
131   - 0, /* tp_alloc */
132   - terminal_new, /* tp_new */
133   -
134   -};
135   -
136   -static PyMethodDef MyMethods[] = {
137   -
138   - { "Revision", get_revision, METH_VARARGS, "Get module revision." },
139   -
140   - {NULL, NULL, 0, NULL} /* Sentinel */
141   -
142   -};
143   -
144   -PyMODINIT_FUNC initpy3270(void) {
145   -
146   - // Cria o módulo
147   -
148   - PyObject *m = Py_InitModule("py3270", MyMethods);
149   -
150   - if (m == NULL) {
151   - return;
152   - }
153   -
154   - // Adiciona objeto para tratamento de erros.
155   - terminalError = PyErr_NewException((char *) "py3270.error", NULL, NULL);
156   -
157   - (void) Py_INCREF(terminalError);
158   - PyModule_AddObject(m, "error", terminalError);
159   -
160   - // Adiciona terminal
161   - if(PyType_Ready(&pw3270_TerminalType) < 0)
162   - return
163   -
164   - (void) Py_INCREF(&pw3270_TerminalType);
165   - PyModule_AddObject(m, "Terminal", (PyObject *)&pw3270_TerminalType);
166   -
167   -}
src/core/set.cc
... ... @@ -1,86 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como set.cc e possui - linhas de código.
22   - *
23   - * Contatos
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
28   - * Referências:
29   - *
30   - * <https://docs.python.org/2/extending/newtypes.html>
31   - * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
32   - *
33   - */
34   -
35   - #include "private.h"
36   -
37   -
38   -/*---[ Implement ]----------------------------------------------------------------------------------*/
39   -
40   - PyObject * terminal_set_string_at(PyObject *self, PyObject *args) {
41   -
42   - int row, col, rc;
43   - const char *text;
44   -
45   - if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) {
46   - PyErr_SetString(terminalError, strerror(EINVAL));
47   - return NULL;
48   - }
49   -
50   - try {
51   -
52   - rc = ((pw3270_TerminalObject *) self)->session->set_string_at(row,col,text);
53   -
54   - } catch(std::exception &e) {
55   -
56   - PyErr_SetString(terminalError, e.what());
57   - return NULL;
58   - }
59   -
60   - return PyLong_FromLong(rc);
61   -
62   - }
63   -
64   - PyObject * terminal_set_cursor_at(PyObject *self, PyObject *args) {
65   -
66   - int row, col, rc;
67   -
68   - if (!PyArg_ParseTuple(args, "ii", &row, &col)) {
69   - PyErr_SetString(terminalError, strerror(EINVAL));
70   - return NULL;
71   - }
72   -
73   - try {
74   -
75   - rc = ((pw3270_TerminalObject *) self)->session->set_cursor_position(row,col);
76   -
77   - } catch(std::exception &e) {
78   -
79   - PyErr_SetString(terminalError, e.what());
80   - return NULL;
81   - }
82   -
83   - return PyLong_FromLong(rc);
84   -
85   - }
86   -
src/module/actions.cc 0 → 100644
... ... @@ -0,0 +1,128 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como actions.cc e possui - linhas de código.
  22 + *
  23 + * Contatos
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Referências:
  29 + *
  30 + * <https://docs.python.org/2/extending/newtypes.html>
  31 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  32 + *
  33 + */
  34 +
  35 + #include "private.h"
  36 +
  37 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  38 +
  39 + PyObject * terminal_pfkey(PyObject *self, PyObject *args) {
  40 +
  41 + int rc, key;
  42 +
  43 + if (!PyArg_ParseTuple(args, "i", &key)) {
  44 + PyErr_SetString(terminalError, strerror(EINVAL));
  45 + return NULL;
  46 + }
  47 +
  48 + try {
  49 +
  50 + rc = ((pw3270_TerminalObject *) self)->session->pfkey(key);
  51 +
  52 + } catch(std::exception &e) {
  53 +
  54 + PyErr_SetString(terminalError, e.what());
  55 + return NULL;
  56 + }
  57 +
  58 + return PyLong_FromLong(rc);
  59 +
  60 + }
  61 +
  62 + PyObject * terminal_pakey(PyObject *self, PyObject *args) {
  63 +
  64 + int rc, key;
  65 +
  66 + if (!PyArg_ParseTuple(args, "i", &key)) {
  67 + PyErr_SetString(terminalError, strerror(EINVAL));
  68 + return NULL;
  69 + }
  70 +
  71 + try {
  72 +
  73 + rc = ((pw3270_TerminalObject *) self)->session->pakey(key);
  74 +
  75 + } catch(std::exception &e) {
  76 +
  77 + PyErr_SetString(terminalError, e.what());
  78 + return NULL;
  79 + }
  80 +
  81 + return PyLong_FromLong(rc);
  82 +
  83 + }
  84 +
  85 + PyObject * terminal_enter(PyObject *self, PyObject *args) {
  86 +
  87 + int rc;
  88 +
  89 + try {
  90 +
  91 + rc = ((pw3270_TerminalObject *) self)->session->enter();
  92 +
  93 + } catch(std::exception &e) {
  94 +
  95 + PyErr_SetString(terminalError, e.what());
  96 + return NULL;
  97 + }
  98 +
  99 + return PyLong_FromLong(rc);
  100 +
  101 +
  102 + }
  103 +
  104 + PyObject * terminal_action(PyObject *self, PyObject *args) {
  105 +
  106 + int rc;
  107 + const char *name;
  108 +
  109 + if (!PyArg_ParseTuple(args, "s", &name)) {
  110 + PyErr_SetString(terminalError, strerror(EINVAL));
  111 + return NULL;
  112 + }
  113 +
  114 + try {
  115 +
  116 + rc = ((pw3270_TerminalObject *) self)->session->action(name);
  117 +
  118 + } catch(std::exception &e) {
  119 +
  120 + PyErr_SetString(terminalError, e.what());
  121 + return NULL;
  122 + }
  123 +
  124 + return PyLong_FromLong(rc);
  125 +
  126 +
  127 + }
  128 +
... ...
src/module/get.cc 0 → 100644
... ... @@ -0,0 +1,154 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como get.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Referências:
  29 + *
  30 + * <https://docs.python.org/2/extending/newtypes.html>
  31 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  32 + *
  33 + */
  34 +
  35 + #include "private.h"
  36 +
  37 +
  38 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  39 +
  40 +PyObject * terminal_get_version(PyObject *self, PyObject *args) {
  41 +
  42 + return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_version().c_str() );
  43 +
  44 +}
  45 +
  46 +PyObject * terminal_get_revision(PyObject *self, PyObject *args) {
  47 +
  48 + return PyString_FromString( ((pw3270_TerminalObject *) self)->session->get_revision().c_str() );
  49 +
  50 +}
  51 +
  52 +PyObject * terminal_is_connected(PyObject *self, PyObject *args) {
  53 +
  54 + return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_connected() );
  55 +
  56 +}
  57 +
  58 +PyObject * terminal_is_ready(PyObject *self, PyObject *args) {
  59 +
  60 + return PyBool_FromLong( ((pw3270_TerminalObject *) self)->session->is_ready() );
  61 +
  62 +}
  63 +
  64 +PyObject * terminal_is_protected_at(PyObject *self, PyObject *args) {
  65 +
  66 + int rc, row, col;
  67 +
  68 + if (!PyArg_ParseTuple(args, "ii", &row, &col)) {
  69 + PyErr_SetString(terminalError, strerror(EINVAL));
  70 + return NULL;
  71 + }
  72 +
  73 + try {
  74 +
  75 + rc = ((pw3270_TerminalObject *) self)->session->get_is_protected_at(row,col);
  76 +
  77 + } catch(std::exception &e) {
  78 +
  79 + PyErr_SetString(terminalError, e.what());
  80 + return NULL;
  81 + }
  82 +
  83 + return PyBool_FromLong( rc );
  84 +
  85 +}
  86 +
  87 +
  88 +PyObject * terminal_cmp_string_at(PyObject *self, PyObject *args) {
  89 +
  90 + int row, col, rc;
  91 + const char *text;
  92 +
  93 + if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) {
  94 + PyErr_SetString(terminalError, strerror(EINVAL));
  95 + return NULL;
  96 + }
  97 +
  98 + try {
  99 +
  100 + rc = ((pw3270_TerminalObject *) self)->session->cmp_string_at(row,col,text);
  101 +
  102 + } catch(std::exception &e) {
  103 +
  104 + PyErr_SetString(terminalError, e.what());
  105 + return NULL;
  106 + }
  107 +
  108 + return PyLong_FromLong(rc);
  109 +
  110 +}
  111 +
  112 +PyObject * terminal_get_string_at(PyObject *self, PyObject *args) {
  113 +
  114 + int row, col, sz;
  115 + string rc;
  116 +
  117 + if (!PyArg_ParseTuple(args, "iii", &row, &col, &sz)) {
  118 + PyErr_SetString(terminalError, strerror(EINVAL));
  119 + return NULL;
  120 + }
  121 +
  122 + try {
  123 +
  124 + rc = ((pw3270_TerminalObject *) self)->session->get_string_at(row,col,sz);
  125 +
  126 + } catch(std::exception &e) {
  127 +
  128 + PyErr_SetString(terminalError, e.what());
  129 + return NULL;
  130 + }
  131 +
  132 + return PyString_FromString(rc.c_str());
  133 +
  134 +}
  135 +
  136 +PyObject * terminal_get_contents(PyObject *self) {
  137 +
  138 + string rc;
  139 +
  140 + try {
  141 +
  142 + rc = ((pw3270_TerminalObject *) self)->session->get_string();
  143 +
  144 + } catch(std::exception &e) {
  145 +
  146 + PyErr_SetString(terminalError, e.what());
  147 + return NULL;
  148 + }
  149 +
  150 + return PyString_FromString(rc.c_str());
  151 +
  152 +
  153 +
  154 +}
... ...
src/module/init.cc 0 → 100644
... ... @@ -0,0 +1,167 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como py3270.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Implementa métodos básicos para a extensão python.
  29 + *
  30 + * Referências:
  31 + *
  32 + * <https://docs.python.org/2/extending/newtypes.html>
  33 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  34 + *
  35 + */
  36 +
  37 + #include "private.h"
  38 +
  39 +/*---[ Globals ]------------------------------------------------------------------------------------*/
  40 +
  41 + PyObject * terminalError = NULL;
  42 +
  43 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  44 +
  45 +static PyObject * get_revision(PyObject *self, PyObject *args) {
  46 +
  47 +#ifdef PACKAGE_REVISION
  48 + return PyLong_FromLong(atoi(PACKAGE_REVISION));
  49 +#else
  50 + return PyLong_FromLong(BUILD_DATE);
  51 +#endif // PACKAGE_REVISION
  52 +
  53 +}
  54 +
  55 +static PyMethodDef terminal_methods[] = {
  56 +
  57 + { "Version", terminal_get_version, METH_NOARGS, "Get the lib3270 version string." },
  58 + { "Revision", terminal_get_revision, METH_NOARGS, "Get the lib3270 revision number." },
  59 +
  60 + { "IsConnected", terminal_is_connected, METH_NOARGS, "True if the terminal is connected to the host." },
  61 + { "IsReady", terminal_is_ready, METH_NOARGS, "True if the terminal has finished network activity." },
  62 + { "IsProtected", terminal_is_protected_at, METH_VARARGS, "True if the position is read-only." },
  63 +
  64 + { "SetCursorPosition", terminal_set_cursor_at, METH_VARARGS, "Set cursor position." },
  65 +
  66 + { "WaitForStringAt", terminal_wait_for_string_at, METH_VARARGS, "Wait for string at position" },
  67 + { "WaitForReady", terminal_wait_for_ready, METH_VARARGS, "Wait for network communication to finish" },
  68 +
  69 + { "Connect", terminal_connect, METH_VARARGS, "Connect to the host." },
  70 + { "Disconnect", terminal_disconnect, METH_NOARGS, "Disconnect from host." },
  71 +
  72 + { "CmpStringAt", terminal_cmp_string_at, METH_VARARGS, "Compare string with terminal buffer at the position." },
  73 + { "GetStringAt", terminal_get_string_at, METH_VARARGS, "Get string from terminal buffer." },
  74 + { "SetStringAt", terminal_set_string_at, METH_VARARGS, "Set string in terminal buffer." },
  75 +
  76 + { "PFKey", terminal_pfkey, METH_VARARGS, "Send PF key." },
  77 + { "PAKey", terminal_pakey, METH_VARARGS, "Send PA key." },
  78 + { "Enter", terminal_enter, METH_NOARGS, "Send Enter Key." },
  79 + { "Action", terminal_action, METH_VARARGS, "Send Action by name." },
  80 +
  81 + {NULL} // Sentinel
  82 +
  83 +};
  84 +
  85 +/*
  86 +static PyMemberDef terminal_members[] = {
  87 +
  88 + { NULL } // Sentinel
  89 +
  90 +};
  91 +*/
  92 +
  93 +static PyTypeObject pw3270_TerminalType = {
  94 + PyObject_HEAD_INIT(NULL)
  95 + 0, /*ob_size*/
  96 + "py3270.terminal", /*tp_name*/
  97 + sizeof(pw3270_TerminalObject), /*tp_basicsize*/
  98 + 0, /*tp_itemsize*/
  99 + (destructor) terminal_dealloc, /*tp_dealloc*/
  100 + 0, /*tp_print*/
  101 + 0, /*tp_getattr*/
  102 + 0, /*tp_setattr*/
  103 + 0, /*tp_compare*/
  104 + 0, /*tp_repr*/
  105 + 0, /*tp_as_number*/
  106 + 0, /*tp_as_sequence*/
  107 + 0, /*tp_as_mapping*/
  108 + 0, /*tp_hash */
  109 + 0, /*tp_call*/
  110 + terminal_get_contents, /*tp_str*/
  111 + 0, /*tp_getattro*/
  112 + 0, /*tp_setattro*/
  113 + 0, /*tp_as_buffer*/
  114 + Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /*tp_flags*/
  115 + "3270 terminal object", /* tp_doc */
  116 + 0, /* tp_traverse */
  117 + 0, /* tp_clear */
  118 + 0, /* tp_richcompare */
  119 + 0, /* tp_weaklistoffset */
  120 + 0, /* tp_iter */
  121 + 0, /* tp_iternext */
  122 + terminal_methods, /* tp_methods */
  123 + 0, // terminal_members, /* tp_members */
  124 + 0, /* tp_getset */
  125 + 0, /* tp_base */
  126 + 0, /* tp_dict */
  127 + 0, /* tp_descr_get */
  128 + 0, /* tp_descr_set */
  129 + 0, /* tp_dictoffset */
  130 + (initproc) terminal_init, /* tp_init */
  131 + 0, /* tp_alloc */
  132 + terminal_new, /* tp_new */
  133 +
  134 +};
  135 +
  136 +static PyMethodDef MyMethods[] = {
  137 +
  138 + { "Revision", get_revision, METH_VARARGS, "Get module revision." },
  139 +
  140 + {NULL, NULL, 0, NULL} /* Sentinel */
  141 +
  142 +};
  143 +
  144 +PyMODINIT_FUNC initpy3270(void) {
  145 +
  146 + // Cria o módulo
  147 +
  148 + PyObject *m = Py_InitModule("py3270", MyMethods);
  149 +
  150 + if (m == NULL) {
  151 + return;
  152 + }
  153 +
  154 + // Adiciona objeto para tratamento de erros.
  155 + terminalError = PyErr_NewException((char *) "py3270.error", NULL, NULL);
  156 +
  157 + (void) Py_INCREF(terminalError);
  158 + PyModule_AddObject(m, "error", terminalError);
  159 +
  160 + // Adiciona terminal
  161 + if(PyType_Ready(&pw3270_TerminalType) < 0)
  162 + return
  163 +
  164 + (void) Py_INCREF(&pw3270_TerminalType);
  165 + PyModule_AddObject(m, "Terminal", (PyObject *)&pw3270_TerminalType);
  166 +
  167 +}
... ...
src/module/misc.cc 0 → 100644
... ... @@ -0,0 +1,134 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como misc.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Implementa métodos básicos inicio/final do objeto python
  29 + *
  30 + * Referências:
  31 + *
  32 + * <https://docs.python.org/2/extending/newtypes.html>
  33 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  34 + *
  35 + */
  36 +
  37 + #include "private.h"
  38 +
  39 +
  40 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  41 +
  42 + PyObject * terminal_connect(PyObject *self, PyObject *args) {
  43 +
  44 + int rc = -1;
  45 + int wait = 60;
  46 + const char * host = "";
  47 +
  48 + if (!PyArg_ParseTuple(args, "s|i", &host, &wait)) {
  49 + PyErr_SetString(terminalError, "connect requires a host URL");
  50 + return NULL;
  51 + }
  52 +
  53 + try {
  54 +
  55 + rc = ((pw3270_TerminalObject *) self)->session->connect(host,wait);
  56 +
  57 + } catch(std::exception &e) {
  58 +
  59 + PyErr_SetString(terminalError, e.what());
  60 + return NULL;
  61 + }
  62 +
  63 + return PyLong_FromLong(rc);
  64 +
  65 + }
  66 +
  67 + PyObject * terminal_disconnect(PyObject *self, PyObject *args) {
  68 +
  69 + int rc = -1;
  70 +
  71 + try {
  72 +
  73 + rc = ((pw3270_TerminalObject *) self)->session->disconnect();
  74 +
  75 + } catch(std::exception &e) {
  76 +
  77 + PyErr_SetString(terminalError, e.what());
  78 + return NULL;
  79 + }
  80 +
  81 + return PyLong_FromLong(rc);
  82 +
  83 + }
  84 +
  85 + PyObject * terminal_wait_for_ready(PyObject *self, PyObject *args) {
  86 +
  87 + int rc;
  88 + int timeout = 60;
  89 +
  90 + if (!PyArg_ParseTuple(args, "|i", &timeout)) {
  91 + PyErr_SetString(terminalError, strerror(EINVAL));
  92 + return NULL;
  93 + }
  94 +
  95 + try {
  96 +
  97 + rc = ((pw3270_TerminalObject *) self)->session->wait_for_ready(timeout);
  98 +
  99 + } catch(std::exception &e) {
  100 +
  101 + PyErr_SetString(terminalError, e.what());
  102 + return NULL;
  103 + }
  104 +
  105 + return PyLong_FromLong(rc);
  106 +
  107 + }
  108 +
  109 +
  110 + PyObject * terminal_wait_for_string_at(PyObject *self, PyObject *args) {
  111 +
  112 + int row, col, rc;
  113 + int timeout = 10;
  114 + const char *text;
  115 +
  116 + if (!PyArg_ParseTuple(args, "iis|i", &row, &col, &text, &timeout)) {
  117 + PyErr_SetString(terminalError, strerror(EINVAL));
  118 + return NULL;
  119 + }
  120 +
  121 + try {
  122 +
  123 + rc = ((pw3270_TerminalObject *) self)->session->wait_for_string_at(row,col,text,timeout);
  124 +
  125 + } catch(std::exception &e) {
  126 +
  127 + PyErr_SetString(terminalError, e.what());
  128 + return NULL;
  129 + }
  130 +
  131 + return PyLong_FromLong(rc);
  132 +
  133 + }
  134 +
... ...
src/module/set.cc 0 → 100644
... ... @@ -0,0 +1,86 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como set.cc e possui - linhas de código.
  22 + *
  23 + * Contatos
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Referências:
  29 + *
  30 + * <https://docs.python.org/2/extending/newtypes.html>
  31 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  32 + *
  33 + */
  34 +
  35 + #include "private.h"
  36 +
  37 +
  38 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  39 +
  40 + PyObject * terminal_set_string_at(PyObject *self, PyObject *args) {
  41 +
  42 + int row, col, rc;
  43 + const char *text;
  44 +
  45 + if (!PyArg_ParseTuple(args, "iis", &row, &col, &text)) {
  46 + PyErr_SetString(terminalError, strerror(EINVAL));
  47 + return NULL;
  48 + }
  49 +
  50 + try {
  51 +
  52 + rc = ((pw3270_TerminalObject *) self)->session->set_string_at(row,col,text);
  53 +
  54 + } catch(std::exception &e) {
  55 +
  56 + PyErr_SetString(terminalError, e.what());
  57 + return NULL;
  58 + }
  59 +
  60 + return PyLong_FromLong(rc);
  61 +
  62 + }
  63 +
  64 + PyObject * terminal_set_cursor_at(PyObject *self, PyObject *args) {
  65 +
  66 + int row, col, rc;
  67 +
  68 + if (!PyArg_ParseTuple(args, "ii", &row, &col)) {
  69 + PyErr_SetString(terminalError, strerror(EINVAL));
  70 + return NULL;
  71 + }
  72 +
  73 + try {
  74 +
  75 + rc = ((pw3270_TerminalObject *) self)->session->set_cursor_position(row,col);
  76 +
  77 + } catch(std::exception &e) {
  78 +
  79 + PyErr_SetString(terminalError, e.what());
  80 + return NULL;
  81 + }
  82 +
  83 + return PyLong_FromLong(rc);
  84 +
  85 + }
  86 +
... ...
src/object/init.cc 0 → 100644
... ... @@ -0,0 +1,87 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como py3270.cc e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + * Implementa métodos básicos inicio/final do objeto python
  29 + *
  30 + * Referências:
  31 + *
  32 + * <https://docs.python.org/2/extending/newtypes.html>
  33 + * <https://docs.python.org/2.7/extending/extending.html#a-simple-example>
  34 + *
  35 + */
  36 +
  37 + #include "private.h"
  38 +
  39 +
  40 +/*---[ Implement ]----------------------------------------------------------------------------------*/
  41 +
  42 +PyObject * terminal_new(PyTypeObject *type, PyObject *args, PyObject *kwds) {
  43 +
  44 + PW3270_NAMESPACE::session * session;
  45 + const char *id = "";
  46 +
  47 + if (!PyArg_ParseTuple(args, "s", &id)) {
  48 + id = "";
  49 + }
  50 +
  51 + trace("%s(%s)",__FUNCTION__,id);
  52 +
  53 + try {
  54 +
  55 + session = PW3270_NAMESPACE::session::create(id);
  56 +
  57 + } catch(std::exception &e) {
  58 +
  59 + trace("%s failed: %s",__FUNCTION__,e.what());
  60 + PyErr_SetString(terminalError, e.what());
  61 + return NULL;
  62 +
  63 + }
  64 +
  65 + pw3270_TerminalObject *self = (pw3270_TerminalObject *) type->tp_alloc(type, 0);
  66 +
  67 + self->session = session;
  68 +
  69 + return (PyObject *)self;
  70 +}
  71 +
  72 +
  73 +int terminal_init(pw3270_TerminalObject *self, PyObject *args, PyObject *kwds) {
  74 +
  75 + return 0;
  76 +
  77 +}
  78 +
  79 +void terminal_dealloc(pw3270_TerminalObject * self) {
  80 +
  81 + trace("%s",__FUNCTION__);
  82 +
  83 + delete self->session;
  84 +
  85 + self->ob_type->tp_free((PyObject*)self);
  86 +
  87 +}
... ...