Commit 445fb1d5114ae43cb9a5601feb0e2749cae71e1e
1 parent
25a7945f
Exists in
master
Refactoring .NET native module.
Showing
19 changed files
with
1141 additions
and
986 deletions
Show diff stats
@@ -0,0 +1,165 @@ | @@ -0,0 +1,165 @@ | ||
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 private.h 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 | + * http://www.mono-project.com/docs/advanced/pinvoke/ | ||
31 | + * http://tirania.org/blog/archive/2011/Dec-19.html | ||
32 | + * | ||
33 | + */ | ||
34 | + | ||
35 | +/** | ||
36 | + * @file private.h | ||
37 | + * | ||
38 | + * @brief Internal definitions for the .NET Native module. | ||
39 | + * | ||
40 | + * @author Perry Werneck <perry.werneck@gmail.com> | ||
41 | + * | ||
42 | + */ | ||
43 | + | ||
44 | +#ifndef PRIVATE_H_INCLUDED | ||
45 | + | ||
46 | + #define PRIVATE_H_INCLUDED | ||
47 | + | ||
48 | + #include <config.h> | ||
49 | + | ||
50 | + #if defined(_WIN32) | ||
51 | + | ||
52 | + #include <windows.h> | ||
53 | + | ||
54 | + #define DLL_PRIVATE extern | ||
55 | + #define DLL_PUBLIC extern __declspec (dllexport) __attribute__((cdecl)) | ||
56 | + | ||
57 | + #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) | ||
58 | + | ||
59 | + #define DLL_PRIVATE __hidden extern | ||
60 | + #define DLL_PUBLIC extern | ||
61 | + | ||
62 | + #else | ||
63 | + | ||
64 | + #define DLL_PRIVATE __attribute__((visibility("hidden"))) extern | ||
65 | + #define DLL_PUBLIC __attribute__((visibility("default"))) extern | ||
66 | + | ||
67 | + #endif | ||
68 | + | ||
69 | + #include <cstdio> | ||
70 | + #include <string> | ||
71 | + | ||
72 | + #ifdef DEBUG | ||
73 | + #define debug( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n" , __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr); | ||
74 | + #else | ||
75 | + #define debug( fmt, ... ) /* */ | ||
76 | + #endif // DEBUG | ||
77 | + | ||
78 | + /* | ||
79 | + #ifdef ENABLE_TRACE_TO_FILE | ||
80 | + DLL_PRIVATE void write_trace(const char *fmt, ...); | ||
81 | + #define trace( ... ) write_trace(__VA_ARGS__) | ||
82 | + #else | ||
83 | + #define trace( ... ) | ||
84 | + #endif // ENABLE_TRACE_TO_FILE | ||
85 | + */ | ||
86 | + | ||
87 | + #include <lib3270/ipc.h> | ||
88 | + #include <cerrno> | ||
89 | + #include <cstring> | ||
90 | + #include <functional> | ||
91 | + | ||
92 | + using std::string; | ||
93 | + using std::exception; | ||
94 | + | ||
95 | + DLL_PRIVATE string tn3270_lasterror; | ||
96 | + DLL_PRIVATE int call(TN3270::Host *ses, std::function<int(TN3270::Host &ses)> worker) noexcept; | ||
97 | + DLL_PRIVATE int call(TN3270::Host *ses, char* str, int length, std::function<string(TN3270::Host &ses, int length)> worker); | ||
98 | + | ||
99 | + DLL_PRIVATE int tn3270_set_error(TN3270::Host *ses, const char *msg) noexcept; | ||
100 | + DLL_PRIVATE int tn3270_set_error(TN3270::Host *ses, const std::exception &e) noexcept; | ||
101 | + | ||
102 | + extern "C" { | ||
103 | + | ||
104 | + DLL_PUBLIC TN3270::Host * tn3270_create_session(const char *name); | ||
105 | + | ||
106 | + DLL_PUBLIC int tn3270_destroy_session(TN3270::Host *ses); | ||
107 | + | ||
108 | + DLL_PUBLIC int tn3270_get_version(TN3270::Host *ses, char* str, int strlen); | ||
109 | + DLL_PUBLIC int tn3270_get_revision(TN3270::Host *ses, char* str, int strlen); | ||
110 | + | ||
111 | + DLL_PUBLIC int tn3270_connect(TN3270::Host *ses, const char *host, time_t wait); | ||
112 | + DLL_PUBLIC int tn3270_disconnect(TN3270::Host *ses); | ||
113 | + DLL_PUBLIC int tn3270_is_connected(TN3270::Host *ses); | ||
114 | + DLL_PUBLIC int tn3270_is_ready(TN3270::Host *ses); | ||
115 | + | ||
116 | + DLL_PUBLIC int tn3270_set_url(TN3270::Host *ses, const char *url); | ||
117 | + DLL_PUBLIC int tn3270_get_url(TN3270::Host *ses, char* str, int strlen); | ||
118 | + | ||
119 | + DLL_PUBLIC int tn3270_get_luname(TN3270::Host *ses, char * str, int strlen); | ||
120 | + | ||
121 | + DLL_PUBLIC int tn3270_get_error_message(TN3270::Host *ses, char* str, int strlen); | ||
122 | + | ||
123 | + DLL_PUBLIC int tn3270_set_cursor_position(TN3270::Host *ses, int row, int col); | ||
124 | + DLL_PUBLIC int tn3270_set_cursor_addr(TN3270::Host *ses, int addr); | ||
125 | + DLL_PUBLIC int tn3270_get_cursor_addr(TN3270::Host *ses); | ||
126 | + | ||
127 | + DLL_PUBLIC int tn3270_action(TN3270::Host *ses, const char *name); | ||
128 | + | ||
129 | + DLL_PUBLIC int tn3270_erase(TN3270::Host *ses); | ||
130 | + DLL_PUBLIC int tn3270_erase_eof(TN3270::Host *ses); | ||
131 | + DLL_PUBLIC int tn3270_erase_eol(TN3270::Host *ses); | ||
132 | + DLL_PUBLIC int tn3270_erase_input(TN3270::Host *ses); | ||
133 | + | ||
134 | + DLL_PUBLIC int tn3270_wait_for_ready(TN3270::Host *ses, int seconds); | ||
135 | + DLL_PUBLIC int tn3270_wait(TN3270::Host *ses, int seconds); | ||
136 | + | ||
137 | + DLL_PUBLIC int tn3270_get_cstate(TN3270::Host *ses); | ||
138 | + DLL_PUBLIC int tn3270_get_program_message(TN3270::Host *ses); | ||
139 | + DLL_PUBLIC int tn3270_get_secure(TN3270::Host *ses); | ||
140 | + | ||
141 | + DLL_PUBLIC int tn3270_get_contents(TN3270::Host *ses, char* str, int strlen); | ||
142 | + DLL_PUBLIC int tn3270_get_string(TN3270::Host *ses, int addr, char* str, int strlen); | ||
143 | + DLL_PUBLIC int tn3270_get_string_at(TN3270::Host *ses, int row, int col, char* str, int strlen); | ||
144 | + | ||
145 | + DLL_PUBLIC int tn3270_set_string_at(TN3270::Host *ses, int row, int col, const char* str); | ||
146 | + | ||
147 | + DLL_PUBLIC int tn3270_wait_for_string_at(TN3270::Host *ses, int row, int col, const char *key, int timeout); | ||
148 | + DLL_PUBLIC int tn3270_cmp_string_at(TN3270::Host *ses, int row, int col, const char* str); | ||
149 | + | ||
150 | + DLL_PUBLIC int tn3270_set_unlock_delay(TN3270::Host *ses, int ms); | ||
151 | + | ||
152 | + DLL_PUBLIC int tn3270_enter(TN3270::Host *ses); | ||
153 | + DLL_PUBLIC int tn3270_pfkey(TN3270::Host *ses, int key); | ||
154 | + DLL_PUBLIC int tn3270_pakey(TN3270::Host *ses, int key); | ||
155 | + | ||
156 | + DLL_PUBLIC int tn3270_get_width(TN3270::Host *ses); | ||
157 | + DLL_PUBLIC int tn3270_get_height(TN3270::Host *ses); | ||
158 | + DLL_PUBLIC int tn3270_get_length(TN3270::Host *ses); | ||
159 | + | ||
160 | + DLL_PUBLIC int tn3270_set_charset(TN3270::Host *ses, const char* str); | ||
161 | + | ||
162 | + } | ||
163 | + | ||
164 | + | ||
165 | +#endif // PRIVATE_H_INCLUDED |
src/native/Makefile.in
@@ -27,15 +27,15 @@ | @@ -27,15 +27,15 @@ | ||
27 | #---[ Library configuration ]------------------------------------------------------------ | 27 | #---[ Library configuration ]------------------------------------------------------------ |
28 | 28 | ||
29 | LIBNAME=lib3270-mono | 29 | LIBNAME=lib3270-mono |
30 | -SONAME=@SONAME@ | 30 | +SONAME=@NATIVE_SONAME@ |
31 | 31 | ||
32 | SOURCES= \ | 32 | SOURCES= \ |
33 | - $(wildcard *.cc) \ | 33 | + $(wildcard core/*.cc) \ |
34 | $(wildcard @OSNAME@/*.rc) \ | 34 | $(wildcard @OSNAME@/*.rc) \ |
35 | $(wildcard @OSNAME@/*.cc) | 35 | $(wildcard @OSNAME@/*.cc) |
36 | 36 | ||
37 | TEST_SOURCES= \ | 37 | TEST_SOURCES= \ |
38 | - $(wildcard src/testprogram/*.cc) | 38 | + $(wildcard testprogram/*.cc) |
39 | 39 | ||
40 | #---[ Tools ]---------------------------------------------------------------------------- | 40 | #---[ Tools ]---------------------------------------------------------------------------- |
41 | 41 | ||
@@ -83,7 +83,6 @@ BINRLS=$(BINDIR)/Release | @@ -83,7 +83,6 @@ BINRLS=$(BINDIR)/Release | ||
83 | 83 | ||
84 | DEPENDS= \ | 84 | DEPENDS= \ |
85 | Makefile \ | 85 | Makefile \ |
86 | - *.h \ | ||
87 | $(BASEDIR)/src/include/*.h | 86 | $(BASEDIR)/src/include/*.h |
88 | 87 | ||
89 | 88 |
src/native/actions.cc
@@ -1,131 +0,0 @@ | @@ -1,131 +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 | - */ | ||
29 | - | ||
30 | - /** | ||
31 | - * @file actions.cc | ||
32 | - * | ||
33 | - * @brief Actions wrapper. | ||
34 | - * | ||
35 | - * @author Perry Werneck <perry.werneck@gmail.com> | ||
36 | - * | ||
37 | - */ | ||
38 | - | ||
39 | - #include "private.h" | ||
40 | - | ||
41 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
42 | - | ||
43 | -static int do_action(TN3270::Session *ses, TN3270::Action action) { | ||
44 | - | ||
45 | - if(ses) { | ||
46 | - | ||
47 | - try { | ||
48 | - | ||
49 | - ses->push(action); | ||
50 | - return 0; | ||
51 | - | ||
52 | - } catch(const exception &e) { | ||
53 | - | ||
54 | - tn3270_lasterror = e.what(); | ||
55 | - return -1; | ||
56 | - | ||
57 | - } | ||
58 | - | ||
59 | - } | ||
60 | - | ||
61 | - return -1; | ||
62 | - | ||
63 | -} | ||
64 | - | ||
65 | -int tn3270_enter(TN3270::Session *ses) { | ||
66 | - return do_action(ses,TN3270::ENTER); | ||
67 | -} | ||
68 | - | ||
69 | -int tn3270_pfkey(TN3270::Session *ses, int key) { | ||
70 | - | ||
71 | - try { | ||
72 | - | ||
73 | - ses->pfkey(key); | ||
74 | - return 0; | ||
75 | - | ||
76 | - } catch(const exception &e) { | ||
77 | - | ||
78 | - tn3270_lasterror = e.what(); | ||
79 | - | ||
80 | - } | ||
81 | - return -1; | ||
82 | - | ||
83 | -} | ||
84 | - | ||
85 | -int tn3270_pakey(TN3270::Session *ses, int key) { | ||
86 | - | ||
87 | - try { | ||
88 | - | ||
89 | - ses->pakey(key); | ||
90 | - return 0; | ||
91 | - | ||
92 | - } catch(const exception &e) { | ||
93 | - | ||
94 | - tn3270_lasterror = e.what(); | ||
95 | - | ||
96 | - } | ||
97 | - return -1; | ||
98 | -} | ||
99 | - | ||
100 | -int tn3270_action(TN3270::Session *ses, const char *name) { | ||
101 | - | ||
102 | - try { | ||
103 | - | ||
104 | - ses->action(name); | ||
105 | - return 0; | ||
106 | - | ||
107 | - } catch(const exception &e) { | ||
108 | - | ||
109 | - tn3270_lasterror = e.what(); | ||
110 | - | ||
111 | - } | ||
112 | - return -1; | ||
113 | - | ||
114 | -} | ||
115 | - | ||
116 | -int tn3270_erase(TN3270::Session *ses) { | ||
117 | - return do_action(ses,TN3270::ERASE); | ||
118 | -} | ||
119 | - | ||
120 | -int tn3270_erase_eof(TN3270::Session *ses) { | ||
121 | - return do_action(ses,TN3270::ERASE_EOF); | ||
122 | -} | ||
123 | - | ||
124 | -int tn3270_erase_eol(TN3270::Session *ses) { | ||
125 | - return do_action(ses,TN3270::ERASE_EOL); | ||
126 | -} | ||
127 | - | ||
128 | -int tn3270_erase_input(TN3270::Session *ses) { | ||
129 | - return do_action(ses,TN3270::ERASE_INPUT); | ||
130 | -} | ||
131 | - |
@@ -0,0 +1,124 @@ | @@ -0,0 +1,124 @@ | ||
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 | + */ | ||
29 | + | ||
30 | + /** | ||
31 | + * @file actions.cc | ||
32 | + * | ||
33 | + * @brief Actions wrapper. | ||
34 | + * | ||
35 | + * @author Perry Werneck <perry.werneck@gmail.com> | ||
36 | + * | ||
37 | + */ | ||
38 | + | ||
39 | + #include <native.h> | ||
40 | + | ||
41 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
42 | + | ||
43 | + static int action(TN3270::Host *ses, std::function<void(TN3270::Host &ses)> worker) noexcept { | ||
44 | + | ||
45 | + try { | ||
46 | + | ||
47 | + if(!ses->isConnected()) { | ||
48 | + tn3270_lasterror = "Not connected"; | ||
49 | + } | ||
50 | + | ||
51 | + worker(*ses); | ||
52 | + return 0; | ||
53 | + | ||
54 | + } catch(const std::system_error &e) { | ||
55 | + | ||
56 | + tn3270_set_error(ses,e); | ||
57 | + | ||
58 | + } catch(const std::exception &e) { | ||
59 | + | ||
60 | + tn3270_set_error(ses,e); | ||
61 | + | ||
62 | + } catch(...) { | ||
63 | + | ||
64 | + tn3270_set_error(ses,"Unexpected error"); | ||
65 | + | ||
66 | + } | ||
67 | + | ||
68 | + return -1; | ||
69 | + | ||
70 | + } | ||
71 | + | ||
72 | + | ||
73 | +static int action(TN3270::Host *ses, TN3270::Action id) noexcept { | ||
74 | + | ||
75 | + return action(ses, [id](TN3270::Host &ses) { | ||
76 | + ses.push(id); | ||
77 | + }); | ||
78 | + | ||
79 | +} | ||
80 | + | ||
81 | +int tn3270_pfkey(TN3270::Host *ses, int key) { | ||
82 | + | ||
83 | + return action(ses, [key](TN3270::Host &ses) { | ||
84 | + ses.pfkey(key); | ||
85 | + }); | ||
86 | + | ||
87 | +} | ||
88 | + | ||
89 | +int tn3270_pakey(TN3270::Host *ses, int key) { | ||
90 | + | ||
91 | + return action(ses, [key](TN3270::Host &ses) { | ||
92 | + ses.pakey(key); | ||
93 | + }); | ||
94 | + | ||
95 | +} | ||
96 | + | ||
97 | +int tn3270_action(TN3270::Host *ses, const char *name) { | ||
98 | + | ||
99 | + return action(ses, [name](TN3270::Host &ses) { | ||
100 | + ses.action(name); | ||
101 | + }); | ||
102 | + | ||
103 | +} | ||
104 | + | ||
105 | +int tn3270_enter(TN3270::Host *ses) { | ||
106 | + return action(ses,TN3270::ENTER); | ||
107 | +} | ||
108 | + | ||
109 | +int tn3270_erase(TN3270::Host *ses) { | ||
110 | + return action(ses,TN3270::ERASE); | ||
111 | +} | ||
112 | + | ||
113 | +int tn3270_erase_eof(TN3270::Host *ses) { | ||
114 | + return action(ses,TN3270::ERASE_EOF); | ||
115 | +} | ||
116 | + | ||
117 | +int tn3270_erase_eol(TN3270::Host *ses) { | ||
118 | + return action(ses,TN3270::ERASE_EOL); | ||
119 | +} | ||
120 | + | ||
121 | +int tn3270_erase_input(TN3270::Host *ses) { | ||
122 | + return action(ses,TN3270::ERASE_INPUT); | ||
123 | +} | ||
124 | + |
@@ -0,0 +1,166 @@ | @@ -0,0 +1,166 @@ | ||
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 | + */ | ||
29 | + | ||
30 | + #include <native.h> | ||
31 | + | ||
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | + | ||
34 | + /** | ||
35 | + * @brief Obtém a versão da biblioteca. | ||
36 | + * | ||
37 | + */ | ||
38 | +DLL_PUBLIC int tn3270_get_version(TN3270::Host *ses, char * str, int strlen) { | ||
39 | + | ||
40 | + if(!(str && strlen)) | ||
41 | + return -1; | ||
42 | + | ||
43 | + return call(ses,[str,strlen](TN3270::Host &ses){ | ||
44 | + | ||
45 | + strncpy(str,ses.getVersion().c_str(),strlen); | ||
46 | + return 0; | ||
47 | + | ||
48 | + }); | ||
49 | + | ||
50 | + } | ||
51 | + | ||
52 | + /** | ||
53 | + * @brief Obtém a revisão da biblioteca. | ||
54 | + * | ||
55 | + */ | ||
56 | + int tn3270_get_revision(TN3270::Host *ses, char* str, int strlen) { | ||
57 | + | ||
58 | + if(!(str && strlen)) | ||
59 | + return -1; | ||
60 | + | ||
61 | + return call(ses,[str,strlen](TN3270::Host &ses){ | ||
62 | + | ||
63 | + strncpy(str,ses.getRevision().c_str(),strlen); | ||
64 | + return 0; | ||
65 | + | ||
66 | + }); | ||
67 | + | ||
68 | + } | ||
69 | + | ||
70 | + int tn3270_get_cstate(TN3270::Host *ses) { | ||
71 | + | ||
72 | + return call(ses,[](TN3270::Host &ses){ | ||
73 | + | ||
74 | + return (int) ses.getConnectionState(); | ||
75 | + | ||
76 | + }); | ||
77 | + | ||
78 | + } | ||
79 | + | ||
80 | + int tn3270_get_program_message(TN3270::Host *ses) { | ||
81 | + | ||
82 | + return call(ses,[](TN3270::Host &ses){ | ||
83 | + | ||
84 | + return (int) ses.getProgramMessage(); | ||
85 | + | ||
86 | + }); | ||
87 | + | ||
88 | + } | ||
89 | + | ||
90 | + int tn3270_get_secure(TN3270::Host *ses) { | ||
91 | + | ||
92 | + | ||
93 | + return call(ses,[](TN3270::Host &ses){ | ||
94 | + | ||
95 | + return (int) ses.getSSLState(); | ||
96 | + | ||
97 | + }); | ||
98 | + | ||
99 | + } | ||
100 | + | ||
101 | + int tn3270_get_width(TN3270::Host *ses) { | ||
102 | + | ||
103 | + return call(ses,[](TN3270::Host &ses){ | ||
104 | + | ||
105 | + return (int) ses.getScreenWidth(); | ||
106 | + | ||
107 | + }); | ||
108 | + | ||
109 | + } | ||
110 | + | ||
111 | + int tn3270_get_height(TN3270::Host *ses) { | ||
112 | + | ||
113 | + return call(ses,[](TN3270::Host &ses){ | ||
114 | + | ||
115 | + return (int) ses.getScreenHeight(); | ||
116 | + | ||
117 | + }); | ||
118 | + | ||
119 | + } | ||
120 | + | ||
121 | + int tn3270_get_length(TN3270::Host *ses) { | ||
122 | + | ||
123 | + return call(ses,[](TN3270::Host &ses){ | ||
124 | + | ||
125 | + return (int) ses.getScreenLength(); | ||
126 | + | ||
127 | + }); | ||
128 | + | ||
129 | + } | ||
130 | + | ||
131 | + int tn3270_get_cursor_addr(TN3270::Host *ses) { | ||
132 | + | ||
133 | + return call(ses,[](TN3270::Host &ses){ | ||
134 | + | ||
135 | + return (int) ses.getCursorAddress(); | ||
136 | + | ||
137 | + }); | ||
138 | + | ||
139 | + } | ||
140 | + | ||
141 | + int tn3270_get_url(TN3270::Host *ses, char* str, int length) { | ||
142 | + | ||
143 | + return call(ses, str, length, [](TN3270::Host &ses, int length) { | ||
144 | + | ||
145 | + return ses.getHostURL(); | ||
146 | + | ||
147 | + }); | ||
148 | + | ||
149 | + } | ||
150 | + | ||
151 | + DLL_PUBLIC int tn3270_get_luname(TN3270::Host *ses, char * str, int length) { | ||
152 | + | ||
153 | + return call(ses, str, length, [](TN3270::Host &ses, int length) { | ||
154 | + | ||
155 | + return ses.getLUName(); | ||
156 | + | ||
157 | + }); | ||
158 | + | ||
159 | + } | ||
160 | + | ||
161 | + int tn3270_get_error_message(TN3270::Host *ses, char* str, int length) { | ||
162 | + | ||
163 | + strncpy(str,tn3270_lasterror.c_str(),length); | ||
164 | + return 0; | ||
165 | + | ||
166 | + } |
@@ -0,0 +1,86 @@ | @@ -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 init.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 | + */ | ||
29 | + | ||
30 | + #include <native.h> | ||
31 | + | ||
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | + | ||
34 | + std::string tn3270_lasterror = ""; | ||
35 | + | ||
36 | +/** | ||
37 | + * @brief Cria uma sessão tn3270. | ||
38 | + * | ||
39 | + * @param name Nome da janela ou "" para criar uma sessão oculta. | ||
40 | + * | ||
41 | + * @return Identificador da sessão criada. | ||
42 | + * | ||
43 | + */ | ||
44 | + TN3270::Host * tn3270_create_session(const char *name) { | ||
45 | + | ||
46 | + try { | ||
47 | + | ||
48 | + return new TN3270::Host(name); | ||
49 | + | ||
50 | + } catch(const exception &e) { | ||
51 | + | ||
52 | + tn3270_lasterror = e.what(); | ||
53 | + | ||
54 | + } catch(...) { | ||
55 | + | ||
56 | + tn3270_lasterror = "Unexpected error"; | ||
57 | + | ||
58 | + } | ||
59 | + | ||
60 | + return nullptr; | ||
61 | + } | ||
62 | + | ||
63 | + /** | ||
64 | + * @brief Destrói uma sessão. | ||
65 | + * | ||
66 | + */ | ||
67 | + int tn3270_destroy_session(TN3270::Host *ses) { | ||
68 | + | ||
69 | + try { | ||
70 | + | ||
71 | + delete ses; | ||
72 | + return 0; | ||
73 | + | ||
74 | + } catch(const exception &e) { | ||
75 | + | ||
76 | + tn3270_lasterror = e.what(); | ||
77 | + | ||
78 | + } catch(...) { | ||
79 | + | ||
80 | + tn3270_lasterror = "Unexpected error"; | ||
81 | + | ||
82 | + } | ||
83 | + | ||
84 | + return -1; | ||
85 | + } | ||
86 | + |
@@ -0,0 +1,102 @@ | @@ -0,0 +1,102 @@ | ||
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 network.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 | + */ | ||
29 | + | ||
30 | + #include <native.h> | ||
31 | + | ||
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | + | ||
34 | +int tn3270_connect(TN3270::Host *ses, const char *url, time_t timeout) { | ||
35 | + | ||
36 | + return call(ses,[url,timeout](TN3270::Host &ses){ | ||
37 | + | ||
38 | + ses.connect(url); | ||
39 | + | ||
40 | + if(timeout) { | ||
41 | + ses.waitForReady(timeout); | ||
42 | + } | ||
43 | + | ||
44 | + return 0; | ||
45 | + | ||
46 | + }); | ||
47 | + | ||
48 | +} | ||
49 | + | ||
50 | +int tn3270_disconnect(TN3270::Host *ses) { | ||
51 | + | ||
52 | + return call(ses,[](TN3270::Host &ses){ | ||
53 | + | ||
54 | + ses.disconnect(); | ||
55 | + return 0; | ||
56 | + | ||
57 | + }); | ||
58 | + | ||
59 | +} | ||
60 | + | ||
61 | +int tn3270_is_connected(TN3270::Host *ses) { | ||
62 | + | ||
63 | + return call(ses,[](TN3270::Host &ses){ | ||
64 | + | ||
65 | + return (ses.isConnected() ? 1 : 0); | ||
66 | + | ||
67 | + }); | ||
68 | + | ||
69 | +} | ||
70 | + | ||
71 | +int tn3270_is_ready(TN3270::Host *ses) { | ||
72 | + | ||
73 | + return call(ses,[](TN3270::Host &ses){ | ||
74 | + | ||
75 | + return (int) (ses.isReady() ? 1 : 0); | ||
76 | + | ||
77 | + }); | ||
78 | + | ||
79 | +} | ||
80 | + | ||
81 | +int tn3270_wait_for_ready(TN3270::Host *ses, int seconds) { | ||
82 | + | ||
83 | + return call(ses,[seconds](TN3270::Host &ses){ | ||
84 | + | ||
85 | + ses.waitForReady(seconds); | ||
86 | + return 0; | ||
87 | + | ||
88 | + }); | ||
89 | + | ||
90 | +} | ||
91 | + | ||
92 | +int tn3270_wait(TN3270::Host *ses, int seconds) { | ||
93 | + | ||
94 | + return call(ses,[seconds](TN3270::Host &ses){ | ||
95 | + | ||
96 | + ses.wait(seconds); | ||
97 | + return 0; | ||
98 | + | ||
99 | + }); | ||
100 | + | ||
101 | +} | ||
102 | + |
@@ -0,0 +1,96 @@ | @@ -0,0 +1,96 @@ | ||
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 screen.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 | + */ | ||
29 | + | ||
30 | + #include <native.h> | ||
31 | + | ||
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | + | ||
34 | +int tn3270_get_contents(TN3270::Host *ses, char* str, int length) { | ||
35 | + | ||
36 | + return call(ses,str,length,[](TN3270::Host &ses, int length){ | ||
37 | + | ||
38 | + return ses.toString(0,length); | ||
39 | + | ||
40 | + }); | ||
41 | + | ||
42 | +} | ||
43 | + | ||
44 | +int tn3270_get_string(TN3270::Host *ses, int addr, char* str, int length) { | ||
45 | + | ||
46 | + return call(ses,str,length,[addr](TN3270::Host &ses, int length){ | ||
47 | + | ||
48 | + return ses.toString(addr,length); | ||
49 | + | ||
50 | + }); | ||
51 | + | ||
52 | + | ||
53 | +} | ||
54 | + | ||
55 | +int tn3270_get_string_at(TN3270::Host *ses, int row, int col, char* str, int length) { | ||
56 | + | ||
57 | + return call(ses,str,length,[row,col](TN3270::Host &ses, int length){ | ||
58 | + | ||
59 | + return ses.toString((unsigned int) row, (unsigned int) col, length); | ||
60 | + | ||
61 | + }); | ||
62 | + | ||
63 | +} | ||
64 | + | ||
65 | +int tn3270_set_string_at(TN3270::Host *ses, int row, int col, const char* str) { | ||
66 | + | ||
67 | + return call(ses,[row,col,str](TN3270::Host &ses){ | ||
68 | + | ||
69 | + ses.push((unsigned int) row, (unsigned int) col, str); | ||
70 | + return 0; | ||
71 | + | ||
72 | + }); | ||
73 | + | ||
74 | + | ||
75 | +} | ||
76 | + | ||
77 | +int tn3270_wait_for_string_at(TN3270::Host *ses, int row, int col, const char *key, int timeout) { | ||
78 | + | ||
79 | + return call(ses,[row,col,key,timeout](TN3270::Host &ses){ | ||
80 | + | ||
81 | + ses.wait((unsigned int) row, (unsigned int) col, key, timeout); | ||
82 | + return 0; | ||
83 | + | ||
84 | + }); | ||
85 | + | ||
86 | +} | ||
87 | + | ||
88 | +int tn3270_cmp_string_at(TN3270::Host *ses, int row, int col, const char* str) { | ||
89 | + | ||
90 | + return call(ses,[row,col,str](TN3270::Host &ses){ | ||
91 | + | ||
92 | + return ses.compare((unsigned int) row, (unsigned int) col, str); | ||
93 | + | ||
94 | + }); | ||
95 | + | ||
96 | +} |
@@ -0,0 +1,88 @@ | @@ -0,0 +1,88 @@ | ||
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 | + */ | ||
29 | + | ||
30 | + #include <native.h> | ||
31 | + | ||
32 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | + | ||
34 | +int tn3270_set_unlock_delay(TN3270::Host *ses, int ms) { | ||
35 | + | ||
36 | + return call(ses,[ms](TN3270::Host &ses) { | ||
37 | + | ||
38 | + ses.setUnlockDelay(ms); | ||
39 | + return 0; | ||
40 | + | ||
41 | + }); | ||
42 | + | ||
43 | +} | ||
44 | + | ||
45 | +int tn3270_set_cursor_position(TN3270::Host *ses, int row, int col) { | ||
46 | + | ||
47 | + return call(ses,[row,col](TN3270::Host &ses) { | ||
48 | + | ||
49 | + ses.setCursor((unsigned short) row, (unsigned short) row); | ||
50 | + return 0; | ||
51 | + | ||
52 | + }); | ||
53 | + | ||
54 | + | ||
55 | +} | ||
56 | + | ||
57 | +int tn3270_set_cursor_addr(TN3270::Host *ses, int addr) { | ||
58 | + | ||
59 | + return call(ses,[addr](TN3270::Host &ses) { | ||
60 | + | ||
61 | + ses.setCursor(addr); | ||
62 | + return 0; | ||
63 | + | ||
64 | + }); | ||
65 | + | ||
66 | +} | ||
67 | + | ||
68 | +int tn3270_set_charset(TN3270::Host *ses, const char* str) { | ||
69 | + | ||
70 | + return call(ses,[str](TN3270::Host &ses) { | ||
71 | + | ||
72 | + ses.setCharSet(str); | ||
73 | + return 0; | ||
74 | + | ||
75 | + }); | ||
76 | + | ||
77 | +} | ||
78 | + | ||
79 | +int tn3270_set_url(TN3270::Host *ses, const char *url) { | ||
80 | + | ||
81 | + return call(ses,[url](TN3270::Host &ses) { | ||
82 | + | ||
83 | + ses.setHostURL(url); | ||
84 | + return 0; | ||
85 | + | ||
86 | + }); | ||
87 | +} | ||
88 | + |
@@ -0,0 +1,121 @@ | @@ -0,0 +1,121 @@ | ||
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 | + */ | ||
29 | + | ||
30 | + /** | ||
31 | + * @file | ||
32 | + * | ||
33 | + * @brief | ||
34 | + * | ||
35 | + * @author | ||
36 | + * | ||
37 | + */ | ||
38 | + | ||
39 | + #include <native.h> | ||
40 | + | ||
41 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
42 | + | ||
43 | +int call(TN3270::Host *ses, std::function<int(TN3270::Host &ses)> worker) noexcept { | ||
44 | + | ||
45 | + if(!ses) { | ||
46 | + | ||
47 | + return tn3270_set_error(ses, "Invalid session handle"); | ||
48 | + | ||
49 | + } | ||
50 | + | ||
51 | + try { | ||
52 | + | ||
53 | + return worker(*ses); | ||
54 | + | ||
55 | + } catch(const exception &e) { | ||
56 | + | ||
57 | + tn3270_set_error(ses, e); | ||
58 | + | ||
59 | + } catch(...) { | ||
60 | + | ||
61 | + tn3270_set_error(ses, "Unexpected error"); | ||
62 | + | ||
63 | + } | ||
64 | + | ||
65 | + return -1; | ||
66 | + | ||
67 | +} | ||
68 | + | ||
69 | +int call(TN3270::Host *ses, char* str, int length, std::function<string(TN3270::Host &ses, int length)> worker) { | ||
70 | + | ||
71 | + if(!(str && length)) { | ||
72 | + | ||
73 | + return tn3270_set_error(ses, "The output buffer is invalid"); | ||
74 | + | ||
75 | + } | ||
76 | + | ||
77 | + if(!ses) { | ||
78 | + | ||
79 | + return tn3270_set_error(ses, "Invalid session handle"); | ||
80 | + | ||
81 | + } | ||
82 | + | ||
83 | + try { | ||
84 | + | ||
85 | + std::string contents = worker(*ses, length); | ||
86 | + | ||
87 | + memset(str,0,length); | ||
88 | + strncpy(str,contents.c_str(),length); | ||
89 | + if(contents.size() < ((size_t) length)) { | ||
90 | + str[contents.size()] = 0; | ||
91 | + return contents.size(); | ||
92 | + } | ||
93 | + | ||
94 | + return length; | ||
95 | + | ||
96 | + } catch(const exception &e) { | ||
97 | + | ||
98 | + tn3270_set_error(ses, e); | ||
99 | + | ||
100 | + } catch(...) { | ||
101 | + | ||
102 | + tn3270_set_error(ses, "Unexpected error"); | ||
103 | + | ||
104 | + } | ||
105 | + | ||
106 | + return -1; | ||
107 | + | ||
108 | + | ||
109 | +} | ||
110 | + | ||
111 | +int tn3270_set_error(TN3270::Host *ses, const char *str) noexcept { | ||
112 | + tn3270_lasterror = str; | ||
113 | + return -1; | ||
114 | +} | ||
115 | + | ||
116 | +int tn3270_set_error(TN3270::Host *ses, const std::exception &e) noexcept { | ||
117 | + tn3270_lasterror = e.what(); | ||
118 | + return -1; | ||
119 | +} | ||
120 | + | ||
121 | + |
src/native/get.cc
@@ -1,220 +0,0 @@ | @@ -1,220 +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 | - */ | ||
29 | - | ||
30 | - #include "private.h" | ||
31 | - | ||
32 | - | ||
33 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
34 | - | ||
35 | - /** | ||
36 | - * @brief Obtém a versão da biblioteca. | ||
37 | - * | ||
38 | - */ | ||
39 | - int tn3270_get_version(TN3270::Session *ses, char * str, int strlen) { | ||
40 | - | ||
41 | - if(!ses) { | ||
42 | - return -1; | ||
43 | - } | ||
44 | - | ||
45 | - try { | ||
46 | - | ||
47 | - strncpy(str,ses->getVersion().c_str(),strlen); | ||
48 | - | ||
49 | - } catch(const exception &e) { | ||
50 | - | ||
51 | - tn3270_lasterror = e.what(); | ||
52 | - return -1; | ||
53 | - | ||
54 | - } | ||
55 | - return 0; | ||
56 | - } | ||
57 | - | ||
58 | - /** | ||
59 | - * @brief Obtém a revisão da biblioteca. | ||
60 | - * | ||
61 | - */ | ||
62 | - int tn3270_get_revision(TN3270::Session *ses, char* str, int strlen) { | ||
63 | - | ||
64 | - if(!ses) { | ||
65 | - return -1; | ||
66 | - } | ||
67 | - | ||
68 | - try { | ||
69 | - | ||
70 | - strncpy(str,ses->getRevision().c_str(),strlen); | ||
71 | - | ||
72 | - } catch(const exception &e) { | ||
73 | - | ||
74 | - tn3270_lasterror = e.what(); | ||
75 | - return -1; | ||
76 | - | ||
77 | - } | ||
78 | - return 0; | ||
79 | - } | ||
80 | - | ||
81 | - int tn3270_get_cstate(TN3270::Session *ses) { | ||
82 | - | ||
83 | - if(!ses) { | ||
84 | - return -1; | ||
85 | - } | ||
86 | - | ||
87 | - try { | ||
88 | - | ||
89 | - return (int) ses->getConnectionState(); | ||
90 | - | ||
91 | - } catch(const exception &e) { | ||
92 | - | ||
93 | - tn3270_lasterror = e.what(); | ||
94 | - | ||
95 | - } | ||
96 | - return -1; | ||
97 | - | ||
98 | - } | ||
99 | - | ||
100 | - int tn3270_get_program_message(TN3270::Session *ses) { | ||
101 | - | ||
102 | - if(!ses) { | ||
103 | - return -1; | ||
104 | - } | ||
105 | - | ||
106 | - try { | ||
107 | - | ||
108 | - return (int) ses->getProgramMessage(); | ||
109 | - | ||
110 | - } catch(const exception &e) { | ||
111 | - tn3270_lasterror = e.what(); | ||
112 | - } | ||
113 | - return -1; | ||
114 | - | ||
115 | - } | ||
116 | - | ||
117 | - int tn3270_get_secure(TN3270::Session *ses) { | ||
118 | - | ||
119 | - if(!ses) { | ||
120 | - return -1; | ||
121 | - } | ||
122 | - | ||
123 | - try { | ||
124 | - | ||
125 | - return (int) ses->getSSLState(); | ||
126 | - | ||
127 | - } catch(const exception &e) { | ||
128 | - | ||
129 | - tn3270_lasterror = e.what(); | ||
130 | - | ||
131 | - } | ||
132 | - | ||
133 | - return -1; | ||
134 | - | ||
135 | - } | ||
136 | - | ||
137 | - int tn3270_get_width(TN3270::Session *ses) { | ||
138 | - | ||
139 | - if(!ses) { | ||
140 | - return 0; | ||
141 | - } | ||
142 | - | ||
143 | - try { | ||
144 | - return (int) ses->getScreenWidth(); | ||
145 | - } catch(const exception &e) { | ||
146 | - tn3270_lasterror = e.what(); | ||
147 | - } | ||
148 | - return -1; | ||
149 | - | ||
150 | - } | ||
151 | - | ||
152 | - int tn3270_get_height(TN3270::Session *ses) { | ||
153 | - | ||
154 | - if(!ses) { | ||
155 | - return 0; | ||
156 | - } | ||
157 | - | ||
158 | - try { | ||
159 | - return (int) ses->getScreenHeight(); | ||
160 | - } catch(const exception &e) { | ||
161 | - tn3270_lasterror = e.what(); | ||
162 | - } | ||
163 | - return -1; | ||
164 | - | ||
165 | - } | ||
166 | - | ||
167 | - int tn3270_get_length(TN3270::Session *ses) { | ||
168 | - | ||
169 | - if(!ses) { | ||
170 | - return 0; | ||
171 | - } | ||
172 | - | ||
173 | - try { | ||
174 | - return (int) ses->getScreenLength(); | ||
175 | - } catch(const exception &e) { | ||
176 | - tn3270_lasterror = e.what(); | ||
177 | - } | ||
178 | - return -1; | ||
179 | - | ||
180 | - } | ||
181 | - | ||
182 | - int tn3270_get_cursor_addr(TN3270::Session *ses) { | ||
183 | - | ||
184 | - if(ses) { | ||
185 | - | ||
186 | - try { | ||
187 | - return (int) ses->getCursorAddress(); | ||
188 | - } catch(const exception &e) { | ||
189 | - tn3270_lasterror = e.what(); | ||
190 | - } | ||
191 | - | ||
192 | - } | ||
193 | - return -1; | ||
194 | - | ||
195 | - } | ||
196 | - | ||
197 | - int tn3270_get_url(TN3270::Session *ses, char* str, int strlen) { | ||
198 | - | ||
199 | - if(ses) { | ||
200 | - | ||
201 | - try { | ||
202 | - | ||
203 | - strncpy(str,ses->getHostURL().c_str(),strlen); | ||
204 | - return 0; | ||
205 | - | ||
206 | - } catch(const exception &e) { | ||
207 | - tn3270_lasterror = e.what(); | ||
208 | - } | ||
209 | - | ||
210 | - } | ||
211 | - return -1; | ||
212 | - | ||
213 | - } | ||
214 | - | ||
215 | - int tn3270_get_error_message(TN3270::Session *ses, char* str, int strlen) { | ||
216 | - | ||
217 | - strncpy(str,tn3270_lasterror.c_str(),strlen); | ||
218 | - return 0; | ||
219 | - | ||
220 | - } |
src/native/init.cc
@@ -1,76 +0,0 @@ | @@ -1,76 +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 init.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 | - */ | ||
29 | - | ||
30 | - #include "private.h" | ||
31 | - | ||
32 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | - | ||
34 | - std::string tn3270_lasterror = ""; | ||
35 | - | ||
36 | -/** | ||
37 | - * @brief Cria uma sessão tn3270. | ||
38 | - * | ||
39 | - * @param name Nome da janela ou "" para criar uma sessão oculta. | ||
40 | - * | ||
41 | - * @return Identificador da sessão criada. | ||
42 | - * | ||
43 | - */ | ||
44 | - TN3270::Session * tn3270_create_session(const char *name) { | ||
45 | - | ||
46 | - try { | ||
47 | - | ||
48 | - return TN3270::Session::create(name); | ||
49 | - | ||
50 | - } catch(const exception &e) { | ||
51 | - | ||
52 | - tn3270_lasterror = e.what(); | ||
53 | - } | ||
54 | - | ||
55 | - return nullptr; | ||
56 | - } | ||
57 | - | ||
58 | - /** | ||
59 | - * @brief Destrói uma sessão. | ||
60 | - * | ||
61 | - */ | ||
62 | - int tn3270_destroy_session(TN3270::Session *ses) { | ||
63 | - | ||
64 | - try { | ||
65 | - | ||
66 | - delete ses; | ||
67 | - | ||
68 | - } catch(const exception &e) { | ||
69 | - | ||
70 | - tn3270_lasterror = e.what(); | ||
71 | - return -1; | ||
72 | - | ||
73 | - } | ||
74 | - return 0; | ||
75 | - } | ||
76 | - |
src/native/native.cbp
@@ -32,13 +32,15 @@ | @@ -32,13 +32,15 @@ | ||
32 | <Compiler> | 32 | <Compiler> |
33 | <Add option="-Wall" /> | 33 | <Add option="-Wall" /> |
34 | </Compiler> | 34 | </Compiler> |
35 | - <Unit filename="actions.cc" /> | ||
36 | - <Unit filename="get.cc" /> | ||
37 | - <Unit filename="init.cc" /> | ||
38 | - <Unit filename="network.cc" /> | ||
39 | - <Unit filename="private.h" /> | ||
40 | - <Unit filename="screen.cc" /> | ||
41 | - <Unit filename="set.cc" /> | 35 | + <Unit filename="../include/native.h" /> |
36 | + <Unit filename="core/actions.cc" /> | ||
37 | + <Unit filename="core/get.cc" /> | ||
38 | + <Unit filename="core/init.cc" /> | ||
39 | + <Unit filename="core/network.cc" /> | ||
40 | + <Unit filename="core/screen.cc" /> | ||
41 | + <Unit filename="core/set.cc" /> | ||
42 | + <Unit filename="core/tools.cc" /> | ||
43 | + <Unit filename="testprogram/testprogram.cc" /> | ||
42 | <Unit filename="windows/resources.rc.in" /> | 44 | <Unit filename="windows/resources.rc.in" /> |
43 | <Extensions> | 45 | <Extensions> |
44 | <code_completion /> | 46 | <code_completion /> |
src/native/network.cc
@@ -1,147 +0,0 @@ | @@ -1,147 +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 network.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 | - */ | ||
29 | - | ||
30 | - #include "private.h" | ||
31 | - | ||
32 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | - | ||
34 | -int tn3270_connect(TN3270::Session *ses, const char *url, time_t timeout) { | ||
35 | - | ||
36 | - if(ses) { | ||
37 | - | ||
38 | - try { | ||
39 | - | ||
40 | - ses->connect(url); | ||
41 | - | ||
42 | - if(timeout) { | ||
43 | - ses->waitForReady(timeout); | ||
44 | - } | ||
45 | - | ||
46 | - return 0; | ||
47 | - | ||
48 | - } catch(const exception &e) { | ||
49 | - | ||
50 | - tn3270_lasterror = e.what(); | ||
51 | - | ||
52 | - } | ||
53 | - | ||
54 | - } | ||
55 | - | ||
56 | - return -1; | ||
57 | -} | ||
58 | - | ||
59 | -int tn3270_disconnect(TN3270::Session *ses) { | ||
60 | - | ||
61 | - if(ses) { | ||
62 | - | ||
63 | - try { | ||
64 | - | ||
65 | - ses->disconnect(); | ||
66 | - return 0; | ||
67 | - | ||
68 | - } catch(const exception &e) { | ||
69 | - tn3270_lasterror = e.what(); | ||
70 | - } | ||
71 | - | ||
72 | - } | ||
73 | - | ||
74 | - return -1; | ||
75 | -} | ||
76 | - | ||
77 | -int tn3270_is_connected(TN3270::Session *ses) { | ||
78 | - | ||
79 | - if(ses) { | ||
80 | - | ||
81 | - try { | ||
82 | - | ||
83 | - return (int) (ses->getConnectionState() == TN3270::CONNECTED_TN3270E ? 1 : 0); | ||
84 | - | ||
85 | - } catch(const exception &e) { | ||
86 | - tn3270_lasterror = e.what(); | ||
87 | - } | ||
88 | - | ||
89 | - } | ||
90 | - | ||
91 | - return -1; | ||
92 | -} | ||
93 | - | ||
94 | -int tn3270_is_ready(TN3270::Session *ses) { | ||
95 | - | ||
96 | - if(ses) { | ||
97 | - | ||
98 | - try { | ||
99 | - | ||
100 | - return (int) (ses->getProgramMessage() == TN3270::MESSAGE_NONE ? 1 : 0); | ||
101 | - | ||
102 | - } catch(const exception &e) { | ||
103 | - | ||
104 | - tn3270_lasterror = e.what(); | ||
105 | - | ||
106 | - } | ||
107 | - | ||
108 | - } | ||
109 | - | ||
110 | - return -1; | ||
111 | -} | ||
112 | - | ||
113 | -int tn3270_wait_for_ready(TN3270::Session *ses, int seconds) { | ||
114 | - | ||
115 | - if(ses) { | ||
116 | - | ||
117 | - try { | ||
118 | - | ||
119 | - ses->waitForReady(seconds); | ||
120 | - return 0; | ||
121 | - | ||
122 | - } catch(const exception &e) { | ||
123 | - tn3270_lasterror = e.what(); | ||
124 | - } | ||
125 | - | ||
126 | - } | ||
127 | - return -1; | ||
128 | - | ||
129 | -} | ||
130 | - | ||
131 | -int tn3270_wait(TN3270::Session *ses, int seconds) { | ||
132 | - | ||
133 | - if(ses) { | ||
134 | - | ||
135 | - try { | ||
136 | - | ||
137 | - ses->wait(seconds); | ||
138 | - return 0; | ||
139 | - | ||
140 | - } catch(const exception &e) { | ||
141 | - tn3270_lasterror = e.what(); | ||
142 | - } | ||
143 | - | ||
144 | - } | ||
145 | - return -1; | ||
146 | -} | ||
147 | - |
src/native/private.h
@@ -1,158 +0,0 @@ | @@ -1,158 +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 private.h 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 | - * http://www.mono-project.com/docs/advanced/pinvoke/ | ||
31 | - * http://tirania.org/blog/archive/2011/Dec-19.html | ||
32 | - * | ||
33 | - */ | ||
34 | - | ||
35 | -/** | ||
36 | - * @file private.h | ||
37 | - * | ||
38 | - * @brief Internal definitions for the .NET Native module. | ||
39 | - * | ||
40 | - * @author Perry Werneck <perry.werneck@gmail.com> | ||
41 | - * | ||
42 | - */ | ||
43 | - | ||
44 | -#ifndef PRIVATE_H_INCLUDED | ||
45 | - | ||
46 | - #define PRIVATE_H_INCLUDED | ||
47 | - | ||
48 | - #include <config.h> | ||
49 | - | ||
50 | - #if defined(_WIN32) | ||
51 | - | ||
52 | - #include <windows.h> | ||
53 | - | ||
54 | - #define DLL_PRIVATE extern | ||
55 | - #define DLL_PUBLIC extern __declspec (dllexport) __attribute__((cdecl)) | ||
56 | - | ||
57 | - #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) | ||
58 | - | ||
59 | - #define DLL_PRIVATE __hidden extern | ||
60 | - #define DLL_PUBLIC extern | ||
61 | - | ||
62 | - #else | ||
63 | - | ||
64 | - #define DLL_PRIVATE __attribute__((visibility("hidden"))) extern | ||
65 | - #define DLL_PUBLIC __attribute__((visibility("default"))) extern | ||
66 | - | ||
67 | - #endif | ||
68 | - | ||
69 | - #include <cstdio> | ||
70 | - #include <string> | ||
71 | - | ||
72 | - #ifdef DEBUG | ||
73 | - #define debug( fmt, ... ) fprintf(stderr, "%s(%d) " fmt "\n" , __FILE__, (int) __LINE__, __VA_ARGS__ ); fflush(stderr); | ||
74 | - #else | ||
75 | - #define debug( fmt, ... ) /* */ | ||
76 | - #endif // DEBUG | ||
77 | - | ||
78 | - /* | ||
79 | - #ifdef ENABLE_TRACE_TO_FILE | ||
80 | - DLL_PRIVATE void write_trace(const char *fmt, ...); | ||
81 | - #define trace( ... ) write_trace(__VA_ARGS__) | ||
82 | - #else | ||
83 | - #define trace( ... ) | ||
84 | - #endif // ENABLE_TRACE_TO_FILE | ||
85 | - */ | ||
86 | - | ||
87 | - #include <lib3270/ipc.h> | ||
88 | - #include <cerrno> | ||
89 | - #include <cstring> | ||
90 | - | ||
91 | - using std::string; | ||
92 | - using std::exception; | ||
93 | - | ||
94 | - DLL_PRIVATE string tn3270_lasterror; | ||
95 | - | ||
96 | - extern "C" { | ||
97 | - | ||
98 | - DLL_PUBLIC TN3270::Session * tn3270_create_session(const char *name); | ||
99 | - | ||
100 | - DLL_PUBLIC int tn3270_destroy_session(TN3270::Session *ses); | ||
101 | - | ||
102 | - DLL_PUBLIC int tn3270_get_version(TN3270::Session *ses, char* str, int strlen); | ||
103 | - DLL_PUBLIC int tn3270_get_revision(TN3270::Session *ses, char* str, int strlen); | ||
104 | - | ||
105 | - DLL_PUBLIC int tn3270_connect(TN3270::Session *ses, const char *host, time_t wait); | ||
106 | - DLL_PUBLIC int tn3270_disconnect(TN3270::Session *ses); | ||
107 | - DLL_PUBLIC int tn3270_is_connected(TN3270::Session *ses); | ||
108 | - DLL_PUBLIC int tn3270_is_ready(TN3270::Session *ses); | ||
109 | - | ||
110 | - DLL_PUBLIC int tn3270_set_url(TN3270::Session *ses, const char *url); | ||
111 | - DLL_PUBLIC int tn3270_get_url(TN3270::Session *ses, char* str, int strlen); | ||
112 | - | ||
113 | - DLL_PUBLIC int tn3270_set_error_message(TN3270::Session *ses, const char *url); | ||
114 | - DLL_PUBLIC int tn3270_get_error_message(TN3270::Session *ses, char* str, int strlen); | ||
115 | - | ||
116 | - DLL_PUBLIC int tn3270_set_cursor_addr(TN3270::Session *ses, int addr); | ||
117 | - DLL_PUBLIC int tn3270_get_cursor_addr(TN3270::Session *ses); | ||
118 | - | ||
119 | - DLL_PUBLIC int tn3270_action(TN3270::Session *ses, const char *name); | ||
120 | - | ||
121 | - DLL_PUBLIC int tn3270_erase(TN3270::Session *ses); | ||
122 | - DLL_PUBLIC int tn3270_erase_eof(TN3270::Session *ses); | ||
123 | - DLL_PUBLIC int tn3270_erase_eol(TN3270::Session *ses); | ||
124 | - DLL_PUBLIC int tn3270_erase_input(TN3270::Session *ses); | ||
125 | - | ||
126 | - DLL_PUBLIC int tn3270_wait_for_ready(TN3270::Session *ses, int seconds); | ||
127 | - DLL_PUBLIC int tn3270_wait(TN3270::Session *ses, int seconds); | ||
128 | - | ||
129 | - DLL_PUBLIC int tn3270_get_cstate(TN3270::Session *ses); | ||
130 | - DLL_PUBLIC int tn3270_get_program_message(TN3270::Session *ses); | ||
131 | - DLL_PUBLIC int tn3270_get_secure(TN3270::Session *ses); | ||
132 | - | ||
133 | - DLL_PUBLIC int tn3270_get_contents(TN3270::Session *ses, char* str, int strlen); | ||
134 | - DLL_PUBLIC int tn3270_get_string(TN3270::Session *ses, int addr, char* str, int strlen); | ||
135 | - DLL_PUBLIC int tn3270_get_string_at(TN3270::Session *ses, int row, int col, char* str, int strlen); | ||
136 | - | ||
137 | - DLL_PUBLIC int tn3270_set_string_at(TN3270::Session *ses, int row, int col, const char* str); | ||
138 | - | ||
139 | - DLL_PUBLIC int tn3270_wait_for_string_at(TN3270::Session *ses, int row, int col, const char *key, int timeout); | ||
140 | - DLL_PUBLIC int tn3270_cmp_string_at(TN3270::Session *ses, int row, int col, const char* str); | ||
141 | - | ||
142 | - DLL_PUBLIC int tn3270_set_unlock_delay(TN3270::Session *ses, int ms); | ||
143 | - DLL_PUBLIC int tn3270_set_cursor_position(TN3270::Session *ses, int row, int col); | ||
144 | - | ||
145 | - DLL_PUBLIC int tn3270_enter(TN3270::Session *ses); | ||
146 | - DLL_PUBLIC int tn3270_pfkey(TN3270::Session *ses, int key); | ||
147 | - DLL_PUBLIC int tn3270_pakey(TN3270::Session *ses, int key); | ||
148 | - | ||
149 | - DLL_PUBLIC int tn3270_get_width(TN3270::Session *ses); | ||
150 | - DLL_PUBLIC int tn3270_get_height(TN3270::Session *ses); | ||
151 | - DLL_PUBLIC int tn3270_get_length(TN3270::Session *ses); | ||
152 | - | ||
153 | - DLL_PUBLIC int tn3270_set_charset(TN3270::Session *ses, const char* str); | ||
154 | - | ||
155 | - } | ||
156 | - | ||
157 | - | ||
158 | -#endif // PRIVATE_H_INCLUDED |
src/native/screen.cc
@@ -1,145 +0,0 @@ | @@ -1,145 +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 screen.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 | - */ | ||
29 | - | ||
30 | - #include "private.h" | ||
31 | - | ||
32 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | - | ||
34 | -int tn3270_get_contents(TN3270::Session *ses, char* str, int sz) { | ||
35 | - | ||
36 | - if(!ses) { | ||
37 | - return -1; | ||
38 | - } | ||
39 | - | ||
40 | - try { | ||
41 | - | ||
42 | - std::string contents = ses->toString(0,sz); | ||
43 | - | ||
44 | - memset(str,0,sz); | ||
45 | - strncpy(str,contents.c_str(),sz); | ||
46 | - if(contents.size() < ((size_t) sz)) { | ||
47 | - str[contents.size()] = 0; | ||
48 | - return contents.size(); | ||
49 | - } | ||
50 | - | ||
51 | - } catch(const exception &e) { | ||
52 | - tn3270_lasterror = e.what(); | ||
53 | - return -1; | ||
54 | - } | ||
55 | - | ||
56 | - return sz; | ||
57 | - | ||
58 | -} | ||
59 | - | ||
60 | -int tn3270_get_string(TN3270::Session *ses, int addr, char* str, int strlen) { | ||
61 | - | ||
62 | - if(!ses) { | ||
63 | - return -1; | ||
64 | - } | ||
65 | - | ||
66 | - try { | ||
67 | - memset(str,0,strlen); | ||
68 | - strncpy(str,ses->toString(addr,(size_t) strlen).c_str(),strlen); | ||
69 | - } catch(const exception &e) { | ||
70 | - tn3270_lasterror = e.what(); | ||
71 | - return -1; | ||
72 | - } | ||
73 | - | ||
74 | - return 0; | ||
75 | -} | ||
76 | - | ||
77 | -int tn3270_get_string_at(TN3270::Session *ses, int row, int col, char* str, int length) { | ||
78 | - | ||
79 | - if(!ses) { | ||
80 | - return -1; | ||
81 | - } | ||
82 | - | ||
83 | - try { | ||
84 | - | ||
85 | - memset(str,0,length); | ||
86 | - strncpy(str,ses->toString(row,col,(size_t) length).c_str(),length); | ||
87 | - | ||
88 | - } catch(const exception &e) { | ||
89 | - tn3270_lasterror = e.what(); | ||
90 | - return -1; | ||
91 | - } | ||
92 | - return (int) strlen(str); | ||
93 | -} | ||
94 | - | ||
95 | -int tn3270_set_string_at(TN3270::Session *ses, int row, int col, const char* str) { | ||
96 | - | ||
97 | - if(!ses) { | ||
98 | - return -1; | ||
99 | - } | ||
100 | - | ||
101 | - try { | ||
102 | - | ||
103 | - ses->push(row,col,str); | ||
104 | - | ||
105 | - } catch(const exception &e) { | ||
106 | - tn3270_lasterror = e.what(); | ||
107 | - return -1; | ||
108 | - } | ||
109 | - return 0; | ||
110 | -} | ||
111 | - | ||
112 | -int tn3270_wait_for_string_at(TN3270::Session *ses, int row, int col, const char *key, int timeout) { | ||
113 | - | ||
114 | - if(ses) { | ||
115 | - | ||
116 | - try { | ||
117 | - | ||
118 | - return ses->wait(row,col,key,timeout); | ||
119 | - | ||
120 | - } catch(const exception &e) { | ||
121 | - | ||
122 | - tn3270_lasterror = e.what(); | ||
123 | - | ||
124 | - } | ||
125 | - | ||
126 | - } | ||
127 | - | ||
128 | - return -1; | ||
129 | - | ||
130 | -} | ||
131 | - | ||
132 | -int tn3270_cmp_string_at(TN3270::Session *ses, int row, int col, const char* str) { | ||
133 | - | ||
134 | - if(ses) { | ||
135 | - | ||
136 | - try { | ||
137 | - return ses->compare(row,col,str,strlen(str)); | ||
138 | - } catch(const exception &e) { | ||
139 | - tn3270_lasterror = e.what(); | ||
140 | - } | ||
141 | - | ||
142 | - } | ||
143 | - | ||
144 | - return -1; | ||
145 | -} |
src/native/set.cc
@@ -1,98 +0,0 @@ | @@ -1,98 +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 | - */ | ||
29 | - | ||
30 | - #include "private.h" | ||
31 | - | ||
32 | -/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
33 | - | ||
34 | -int tn3270_set_unlock_delay(TN3270::Session *ses, int ms) { | ||
35 | - try { | ||
36 | - ses->setUnlockDelay((unsigned short) ms); | ||
37 | - } catch(const exception &e) { | ||
38 | - tn3270_lasterror = e.what(); | ||
39 | - return -1; | ||
40 | - } | ||
41 | - return 0; | ||
42 | -} | ||
43 | - | ||
44 | -int tn3270_set_cursor_position(TN3270::Session *ses, int row, int col) { | ||
45 | - try { | ||
46 | - ses->setCursor((unsigned short) row, (unsigned short) col); | ||
47 | - } catch(const exception &e) { | ||
48 | - tn3270_lasterror = e.what(); | ||
49 | - return -1; | ||
50 | - } | ||
51 | - return 0; | ||
52 | -} | ||
53 | - | ||
54 | -int tn3270_set_cursor_addr(TN3270::Session *ses, int addr) { | ||
55 | - try { | ||
56 | - ses->setCursor((unsigned short) addr); | ||
57 | - } catch(const exception &e) { | ||
58 | - tn3270_lasterror = e.what(); | ||
59 | - return -1; | ||
60 | - } | ||
61 | - return 0; | ||
62 | -} | ||
63 | - | ||
64 | -int tn3270_set_charset(TN3270::Session *ses, const char* str) { | ||
65 | - | ||
66 | - try { | ||
67 | - | ||
68 | - ses->setCharSet(str); | ||
69 | - | ||
70 | - } catch(const exception &e) { | ||
71 | - | ||
72 | - tn3270_lasterror = e.what(); | ||
73 | - return -1; | ||
74 | - | ||
75 | - } | ||
76 | - | ||
77 | - return 0; | ||
78 | - | ||
79 | -} | ||
80 | - | ||
81 | -int tn3270_set_url(TN3270::Session *ses, const char *url) { | ||
82 | - | ||
83 | - try { | ||
84 | - | ||
85 | - ses->setHostURL(url); | ||
86 | - | ||
87 | - } catch(const exception &e) { | ||
88 | - tn3270_lasterror = e.what(); | ||
89 | - return -1; | ||
90 | - } | ||
91 | - | ||
92 | - return 0; | ||
93 | -} | ||
94 | - | ||
95 | -int tn3270_set_error_message(TN3270::Session *ses, const char *str) { | ||
96 | - tn3270_lasterror = str; | ||
97 | - return 0; | ||
98 | -} |
@@ -0,0 +1,167 @@ | @@ -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 - 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 | + */ | ||
29 | + | ||
30 | +/** | ||
31 | + * @file | ||
32 | + * | ||
33 | + * @brief | ||
34 | + * | ||
35 | + * @author perry.werneck@gmail.com | ||
36 | + * | ||
37 | + */ | ||
38 | + | ||
39 | + #include <getopt.h> | ||
40 | + #include <cstdlib> | ||
41 | + #include <native.h> | ||
42 | + | ||
43 | + using namespace std; | ||
44 | + | ||
45 | +/*---[ Implement ]----------------------------------------------------------------------------------*/ | ||
46 | + | ||
47 | + | ||
48 | +/* | ||
49 | + // test host object | ||
50 | + static void testHost(const char *session) { | ||
51 | + | ||
52 | + TN3270::Host host{session,nullptr,10}; | ||
53 | + | ||
54 | + try { | ||
55 | + | ||
56 | + cout | ||
57 | + << "Version: " << host.getVersion() | ||
58 | + << "\tRevision: " << host.getRevision() | ||
59 | + << std::endl; | ||
60 | + | ||
61 | + host.connect(nullptr); | ||
62 | + | ||
63 | + cout | ||
64 | + << "Wait for unlock returns " << host.getKeyboardLockState() << std::endl | ||
65 | + << "Connection state is " << toCharString(host.getConnectionState()) << std::endl | ||
66 | + << "Program message is " << toCharString(host.getProgramMessage()) << std::endl | ||
67 | + << "Luname is " << host.getLUName() << std::endl | ||
68 | + << std::endl; | ||
69 | + | ||
70 | + if(host) { | ||
71 | + cout << host << endl; | ||
72 | + } | ||
73 | + | ||
74 | + host.setCursor(10,10); | ||
75 | + | ||
76 | + host.wait(10); | ||
77 | + | ||
78 | + // host.input("test@0another line"); | ||
79 | + | ||
80 | + host.push(TN3270::ENTER); | ||
81 | + | ||
82 | + cout << endl << "[" << host.toString((unsigned int) 1, (unsigned int) 3,7) << "]" << endl; | ||
83 | + cout << endl << "[" << host.toString((int) 15, (int) 10) << "]" << endl; | ||
84 | + | ||
85 | + host.pfkey(3); | ||
86 | + | ||
87 | + host.wait(10); | ||
88 | + | ||
89 | + host.disconnect(); | ||
90 | + | ||
91 | + } catch(const std::exception &e) { | ||
92 | + | ||
93 | + cerr << std::endl << e.what() << std::endl << std::endl; | ||
94 | + | ||
95 | + } | ||
96 | + | ||
97 | + } | ||
98 | + */ | ||
99 | + | ||
100 | + int main(int argc, char **argv) { | ||
101 | + | ||
102 | + const char * session = ""; // "pw3270:a"; | ||
103 | + char buffer[4096]; | ||
104 | + | ||
105 | + #pragma GCC diagnostic push | ||
106 | + #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant" | ||
107 | + static struct option options[] = { | ||
108 | + { "session", required_argument, 0, 's' }, | ||
109 | + { 0, 0, 0, 0} | ||
110 | + | ||
111 | + }; | ||
112 | + #pragma GCC diagnostic pop | ||
113 | + | ||
114 | + int long_index =0; | ||
115 | + int opt; | ||
116 | + while((opt = getopt_long(argc, argv, "s:", options, &long_index )) != -1) { | ||
117 | + | ||
118 | + switch(opt) { | ||
119 | + case 's': | ||
120 | + session = optarg; | ||
121 | + break; | ||
122 | + | ||
123 | + } | ||
124 | + | ||
125 | + } | ||
126 | + | ||
127 | + cout << "Session: " << session << endl; | ||
128 | + | ||
129 | + TN3270::Host * host = tn3270_create_session(session); | ||
130 | + | ||
131 | + tn3270_get_version(host,buffer,sizeof(buffer)); | ||
132 | + cout << "Version: " << buffer << endl; | ||
133 | + | ||
134 | + tn3270_get_revision(host,buffer,sizeof(buffer)); | ||
135 | + cout << "Revision: " << buffer << endl; | ||
136 | + | ||
137 | + tn3270_connect(host,nullptr,10); | ||
138 | + | ||
139 | + cout << "Connection state is " << tn3270_get_cstate(host) << std::endl | ||
140 | + << "Program message is " << tn3270_get_program_message(host) << std::endl; | ||
141 | + | ||
142 | + tn3270_get_contents(host,buffer,sizeof(buffer)); | ||
143 | + cout << buffer << endl; | ||
144 | + | ||
145 | + tn3270_set_cursor_position(host,10,10); | ||
146 | + tn3270_wait(host,10); | ||
147 | + | ||
148 | + tn3270_enter(host); | ||
149 | + tn3270_wait_for_ready(host,10); | ||
150 | + | ||
151 | + tn3270_get_contents(host,buffer,sizeof(buffer)); | ||
152 | + cout << buffer << endl; | ||
153 | + | ||
154 | + tn3270_pfkey(host,3); | ||
155 | + tn3270_wait_for_ready(host,10); | ||
156 | + | ||
157 | + tn3270_get_contents(host,buffer,sizeof(buffer)); | ||
158 | + cout << buffer << endl; | ||
159 | + | ||
160 | + tn3270_disconnect(host); | ||
161 | + | ||
162 | + tn3270_destroy_session(host); | ||
163 | + | ||
164 | + return 0; | ||
165 | + } | ||
166 | + | ||
167 | + |