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 @@ |
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 | 27 | #---[ Library configuration ]------------------------------------------------------------ |
28 | 28 | |
29 | 29 | LIBNAME=lib3270-mono |
30 | -SONAME=@SONAME@ | |
30 | +SONAME=@NATIVE_SONAME@ | |
31 | 31 | |
32 | 32 | SOURCES= \ |
33 | - $(wildcard *.cc) \ | |
33 | + $(wildcard core/*.cc) \ | |
34 | 34 | $(wildcard @OSNAME@/*.rc) \ |
35 | 35 | $(wildcard @OSNAME@/*.cc) |
36 | 36 | |
37 | 37 | TEST_SOURCES= \ |
38 | - $(wildcard src/testprogram/*.cc) | |
38 | + $(wildcard testprogram/*.cc) | |
39 | 39 | |
40 | 40 | #---[ Tools ]---------------------------------------------------------------------------- |
41 | 41 | |
... | ... | @@ -83,7 +83,6 @@ BINRLS=$(BINDIR)/Release |
83 | 83 | |
84 | 84 | DEPENDS= \ |
85 | 85 | Makefile \ |
86 | - *.h \ | |
87 | 86 | $(BASEDIR)/src/include/*.h |
88 | 87 | |
89 | 88 | ... | ... |
src/native/actions.cc
... | ... | @@ -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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 | -/* | |
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 | -/* | |
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 | 32 | <Compiler> |
33 | 33 | <Add option="-Wall" /> |
34 | 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 | 44 | <Unit filename="windows/resources.rc.in" /> |
43 | 45 | <Extensions> |
44 | 46 | <code_completion /> | ... | ... |
src/native/network.cc
... | ... | @@ -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 | -/* | |
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 | -/* | |
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 | -/* | |
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 @@ |
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 | + | ... | ... |