Commit b9f0d78eeed5c1df18aa6bedb984cfa6df46e212
1 parent
ef0594fa
Exists in
master
and in
5 other branches
Atualizando classe de referência
Showing
9 changed files
with
271 additions
and
191 deletions
Show diff stats
src/classlib/Makefile
... | ... | @@ -57,7 +57,7 @@ DEBUG_CFLAGS=-DDEBUG=1 -g -Wall |
57 | 57 | CXX=g++ |
58 | 58 | LD=g++ |
59 | 59 | |
60 | -DEPENDS=*.h ../include/*.h ../include/lib3270/*.h Makefile | |
60 | +DEPENDS=../include/*.h ../include/lib3270/*.h ../include/pw3270/*.h Makefile | |
61 | 61 | |
62 | 62 | $(OBJDBG)/%.o: %.cc $(DEPENDS) |
63 | 63 | @echo " CC `basename $@`" | ... | ... |
src/classlib/exception.cc
src/classlib/local.cc
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | |
47 | 47 | #endif |
48 | 48 | |
49 | -#include "pw3270class.h" | |
49 | +#include <pw3270/class.h> | |
50 | 50 | #include <lib3270/log.h> |
51 | 51 | #include <lib3270/popup.h> |
52 | 52 | #include <string.h> |
... | ... | @@ -466,6 +466,20 @@ |
466 | 466 | return new string(""); |
467 | 467 | } |
468 | 468 | |
469 | + int set_cursor_position(int row, int col) | |
470 | + { | |
471 | + return _set_cursor_position(hSession,row,col); | |
472 | + } | |
473 | + | |
474 | + int set_cursor_addr(int addr) | |
475 | + { | |
476 | + return _set_cursor_addr(hSession,addr); | |
477 | + } | |
478 | + | |
479 | + int get_cursor_addr(void) | |
480 | + { | |
481 | + return _get_cursor_addr(hSession); | |
482 | + } | |
469 | 483 | |
470 | 484 | }; |
471 | 485 | ... | ... |
src/classlib/pw3270class.h
... | ... | @@ -1,164 +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., 59 Temple | |
19 | - * Place, Suite 330, Boston, MA, 02111-1307, USA | |
20 | - * | |
21 | - * Este programa está nomeado como pw3270class.c 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 | -#ifndef PW3270_CLASS_H_INCLUDED | |
31 | - | |
32 | - #define PW3270_CLASS_H_INCLUDED 1 | |
33 | - | |
34 | - #ifdef WIN32 | |
35 | - #define SYSTEM_CHARSET "CP1252" | |
36 | - #else | |
37 | - #define SYSTEM_CHARSET "UTF-8" | |
38 | - #endif // WIN32 | |
39 | - | |
40 | - #include <exception> | |
41 | - #include <lib3270/config.h> | |
42 | - #include <lib3270.h> | |
43 | - | |
44 | - #ifdef HAVE_ICONV | |
45 | - #include <iconv.h> | |
46 | - #endif // HAVE_ICONV | |
47 | - | |
48 | - #include <string> | |
49 | - #include <stdarg.h> | |
50 | - #include <lib3270.h> | |
51 | - | |
52 | - namespace pw3270 | |
53 | - { | |
54 | - using namespace std; | |
55 | - | |
56 | - class exception : public std::exception | |
57 | - { | |
58 | - public: | |
59 | - exception(int code, const char *fmt, ...); | |
60 | - exception(const char *fmt, ...); | |
61 | - | |
62 | - virtual const char * what() const throw(); | |
63 | - | |
64 | - private: | |
65 | - int code; | |
66 | - char msg[4096]; | |
67 | - | |
68 | - }; | |
69 | - | |
70 | - class session | |
71 | - { | |
72 | - public: | |
73 | - | |
74 | - session(); | |
75 | - virtual ~session(); | |
76 | - | |
77 | - // Factory methods and settings | |
78 | - static session * create(const char *name = 0); | |
79 | - static session * start(const char *name = 0); | |
80 | - static session * get_default(void); | |
81 | - static void set_plugin(session * (*factory)(const char *name)); | |
82 | - | |
83 | - // Object settings | |
84 | - void set_charset(const char *charset); | |
85 | - | |
86 | - // Log management | |
87 | - void log(const char *fmt, ...); | |
88 | - void logva(const char *fmt, va_list args); | |
89 | - | |
90 | - // 3270 methods | |
91 | - virtual string get_version(void); | |
92 | - virtual string get_revision(void); | |
93 | - | |
94 | - virtual bool is_connected(void) = 0; | |
95 | - virtual bool is_ready(void) = 0; | |
96 | - | |
97 | - virtual LIB3270_CSTATE get_cstate(void) = 0; | |
98 | - | |
99 | - virtual int connect(const char *uri, bool wait = true) = 0; | |
100 | - virtual int disconnect(void) = 0; | |
101 | - | |
102 | - virtual int wait_for_ready(int seconds) = 0; | |
103 | - virtual int wait(int seconds) = 0; | |
104 | - virtual int iterate(bool wait = true) = 0; | |
105 | - | |
106 | - virtual string * get_text_at(int row, int col, size_t sz) = 0; | |
107 | - virtual int set_text_at(int row, int col, const char *str) = 0; | |
108 | - virtual string * get_text(int baddr, size_t len) = 0; | |
109 | - virtual int cmp_text_at(int row, int col, const char *text) = 0; | |
110 | - virtual int wait_for_text_at(int row, int col, const char *key, int timeout); | |
111 | - | |
112 | -// virtual int set_cursor_position(int row, int col) = 0; | |
113 | -// virtual int set_cursor_addr(int addr) = 0; | |
114 | -// virtual int get_cursor_addr(void) = 0; | |
115 | - | |
116 | -// virtual int set_toggle(LIB3270_TOGGLE ix, bool value) = 0; | |
117 | - | |
118 | -// virtual int enter(void) = 0; | |
119 | -// virtual int pfkey(int key) = 0; | |
120 | -// virtual int pakey(int key) = 0; | |
121 | - | |
122 | -// virtual int emulate_input(const char *str) = 0; | |
123 | - | |
124 | -// virtual int get_field_start(int baddr = -1) = 0; | |
125 | -// virtual int get_field_len(int baddr = -1) = 0; | |
126 | -// virtual int get_next_unprotected(int baddr = -1) = 0; | |
127 | - | |
128 | -// virtual int set_copy(const char *text); | |
129 | -// virtual char * get_copy(void); | |
130 | - | |
131 | -// virtual char * get_clipboard(void); | |
132 | -// virtual int set_clipboard(const char *text); | |
133 | - | |
134 | -// virtual int quit(void) = 0; | |
135 | - | |
136 | - // Dialogs | |
137 | -// virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | |
138 | -// virtual char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); | |
139 | - | |
140 | - private: | |
141 | - | |
142 | - session * prev; | |
143 | - session * next; | |
144 | - | |
145 | - static session * first; | |
146 | - static session * last; | |
147 | - | |
148 | - static session * (*factory)(const char *name); | |
149 | - | |
150 | - static session * create_remote(const char *name); | |
151 | - static session * create_local(void); | |
152 | - | |
153 | -#ifdef HAVE_ICONV | |
154 | - iconv_t conv2Local; | |
155 | - iconv_t conv2Host; | |
156 | -#endif | |
157 | - | |
158 | - }; | |
159 | - | |
160 | - | |
161 | - } | |
162 | - | |
163 | - | |
164 | -#endif // PW3270_CLASS_H_INCLUDED |
src/classlib/remote.cc
... | ... | @@ -43,7 +43,7 @@ |
43 | 43 | #include <pw3270/ipcpackets.h> |
44 | 44 | #endif // WIN32 |
45 | 45 | |
46 | - #include "pw3270class.h" | |
46 | + #include <pw3270/class.h> | |
47 | 47 | #include <lib3270/log.h> |
48 | 48 | |
49 | 49 | #if defined(HAVE_DBUS) |
... | ... | @@ -63,6 +63,17 @@ |
63 | 63 | |
64 | 64 | HANDLE hPipe; |
65 | 65 | |
66 | + int query_intval(HLLAPI_PACKET id) | |
67 | + { | |
68 | + struct hllapi_packet_query query = { id }; | |
69 | + struct hllapi_packet_result response; | |
70 | + DWORD cbSize = sizeof(query); | |
71 | + if(TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL)) | |
72 | + return response.rc; | |
73 | + | |
74 | + throw exception("Error %d in TransactNamedPipe",GetLastError()); | |
75 | + } | |
76 | + | |
66 | 77 | #elif defined(HAVE_DBUS) |
67 | 78 | |
68 | 79 | DBusConnection * conn; |
... | ... | @@ -390,11 +401,7 @@ |
390 | 401 | { |
391 | 402 | #if defined(WIN32) |
392 | 403 | |
393 | - static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_CONNECTED }; | |
394 | - struct hllapi_packet_result response; | |
395 | - DWORD cbSize = sizeof(query); | |
396 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
397 | - return response.rc != 0; | |
404 | + return query_intval(HLLAPI_PACKET_IS_CONNECTED) != 0; | |
398 | 405 | |
399 | 406 | #elif defined(HAVE_DBUS) |
400 | 407 | |
... | ... | @@ -409,11 +416,7 @@ |
409 | 416 | { |
410 | 417 | #if defined(WIN32) |
411 | 418 | |
412 | - static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_CSTATE }; | |
413 | - struct hllapi_packet_result response; | |
414 | - DWORD cbSize = sizeof(query); | |
415 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
416 | - return (LIB3270_CSTATE) response.rc; | |
419 | + return (LIB3270_CSTATE) query_intval(HLLAPI_PACKET_GET_CSTATE); | |
417 | 420 | |
418 | 421 | #elif defined(HAVE_DBUS) |
419 | 422 | |
... | ... | @@ -531,11 +534,7 @@ |
531 | 534 | { |
532 | 535 | #if defined(WIN32) |
533 | 536 | |
534 | - static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_READY }; | |
535 | - struct hllapi_packet_result response; | |
536 | - DWORD cbSize = sizeof(query); | |
537 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
538 | - return response.rc != 0; | |
537 | + return query_intval(HLLAPI_PACKET_IS_READY) != 0; | |
539 | 538 | |
540 | 539 | #elif defined(HAVE_DBUS) |
541 | 540 | |
... | ... | @@ -551,11 +550,7 @@ |
551 | 550 | { |
552 | 551 | #if defined(WIN32) |
553 | 552 | |
554 | - static const struct hllapi_packet_query query = { HLLAPI_PACKET_DISCONNECT }; | |
555 | - struct hllapi_packet_result response; | |
556 | - DWORD cbSize = sizeof(query); | |
557 | - TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
558 | - return 0; | |
553 | + return query_intval(HLLAPI_PACKET_DISCONNECT); | |
559 | 554 | |
560 | 555 | #elif defined(HAVE_DBUS) |
561 | 556 | |
... | ... | @@ -776,6 +771,77 @@ |
776 | 771 | } |
777 | 772 | |
778 | 773 | |
774 | + int set_cursor_position(int row, int col) | |
775 | + { | |
776 | +#if defined(WIN32) | |
777 | + | |
778 | + struct hllapi_packet_cursor query = { HLLAPI_PACKET_SET_CURSOR_POSITION, (unsigned short) row, (unsigned short) col }; | |
779 | + struct hllapi_packet_result response; | |
780 | + DWORD cbSize = sizeof(query); | |
781 | + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
782 | + return response.rc != 0; | |
783 | + | |
784 | +#elif defined(HAVE_DBUS) | |
785 | + | |
786 | + dbus_int32_t r = (dbus_int32_t) row; | |
787 | + dbus_int32_t c = (dbus_int32_t) col; | |
788 | + | |
789 | + DBusMessage * msg = create_message("setCursorAt"); | |
790 | + if(msg) | |
791 | + { | |
792 | + dbus_message_append_args(msg, DBUS_TYPE_INT32, &r, DBUS_TYPE_INT32, &c, DBUS_TYPE_INVALID); | |
793 | + return get_intval(call(msg)); | |
794 | + } | |
795 | + | |
796 | +#endif | |
797 | + | |
798 | + return -1; | |
799 | + } | |
800 | + | |
801 | + int set_cursor_addr(int addr) | |
802 | + { | |
803 | +#if defined(WIN32) | |
804 | + | |
805 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; | |
806 | + struct hllapi_packet_result response; | |
807 | + DWORD cbSize = sizeof(query); | |
808 | + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
809 | + return response.rc; | |
810 | + | |
811 | +#elif defined(HAVE_DBUS) | |
812 | + | |
813 | + dbus_int32_t k = (dbus_int32_t) addr; | |
814 | + | |
815 | + DBusMessage * msg = create_message("setCursorAddress"); | |
816 | + if(msg) | |
817 | + { | |
818 | + dbus_message_append_args(msg, DBUS_TYPE_INT32, &k, DBUS_TYPE_INVALID); | |
819 | + return get_intval(call(msg)); | |
820 | + } | |
821 | + | |
822 | +#endif | |
823 | + | |
824 | + return -1; | |
825 | + } | |
826 | + | |
827 | + int get_cursor_addr(void) | |
828 | + { | |
829 | +#if defined(WIN32) | |
830 | + | |
831 | + return query_intval(HLLAPI_PACKET_GET_CURSOR); | |
832 | + | |
833 | +#elif defined(HAVE_DBUS) | |
834 | + | |
835 | + return query_intval("getCursorAddress"); | |
836 | + | |
837 | +#else | |
838 | + | |
839 | + return -1; | |
840 | + | |
841 | +#endif | |
842 | + } | |
843 | + | |
844 | + | |
779 | 845 | }; |
780 | 846 | |
781 | 847 | session * session::create_remote(const char *session) | ... | ... |
src/classlib/session.cc
src/classlib/testprogram.cc
... | ... | @@ -0,0 +1,164 @@ |
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., 59 Temple | |
19 | + * Place, Suite 330, Boston, MA, 02111-1307, USA | |
20 | + * | |
21 | + * Este programa está nomeado como pw3270class.c 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 | +#ifndef PW3270_CLASS_H_INCLUDED | |
31 | + | |
32 | + #define PW3270_CLASS_H_INCLUDED 1 | |
33 | + | |
34 | + #ifdef WIN32 | |
35 | + #define SYSTEM_CHARSET "CP1252" | |
36 | + #else | |
37 | + #define SYSTEM_CHARSET "UTF-8" | |
38 | + #endif // WIN32 | |
39 | + | |
40 | + #include <exception> | |
41 | + #include <lib3270/config.h> | |
42 | + #include <lib3270.h> | |
43 | + | |
44 | + #ifdef HAVE_ICONV | |
45 | + #include <iconv.h> | |
46 | + #endif // HAVE_ICONV | |
47 | + | |
48 | + #include <string> | |
49 | + #include <stdarg.h> | |
50 | + #include <lib3270.h> | |
51 | + | |
52 | + namespace pw3270 | |
53 | + { | |
54 | + using namespace std; | |
55 | + | |
56 | + class exception : public std::exception | |
57 | + { | |
58 | + public: | |
59 | + exception(int code, const char *fmt, ...); | |
60 | + exception(const char *fmt, ...); | |
61 | + | |
62 | + virtual const char * what() const throw(); | |
63 | + | |
64 | + private: | |
65 | + int code; | |
66 | + char msg[4096]; | |
67 | + | |
68 | + }; | |
69 | + | |
70 | + class session | |
71 | + { | |
72 | + public: | |
73 | + | |
74 | + session(); | |
75 | + virtual ~session(); | |
76 | + | |
77 | + // Factory methods and settings | |
78 | + static session * create(const char *name = 0); | |
79 | + static session * start(const char *name = 0); | |
80 | + static session * get_default(void); | |
81 | + static void set_plugin(session * (*factory)(const char *name)); | |
82 | + | |
83 | + // Object settings | |
84 | + void set_charset(const char *charset); | |
85 | + | |
86 | + // Log management | |
87 | + void log(const char *fmt, ...); | |
88 | + void logva(const char *fmt, va_list args); | |
89 | + | |
90 | + // 3270 methods | |
91 | + virtual string get_version(void); | |
92 | + virtual string get_revision(void); | |
93 | + | |
94 | + virtual bool is_connected(void) = 0; | |
95 | + virtual bool is_ready(void) = 0; | |
96 | + | |
97 | + virtual LIB3270_CSTATE get_cstate(void) = 0; | |
98 | + | |
99 | + virtual int connect(const char *uri, bool wait = true) = 0; | |
100 | + virtual int disconnect(void) = 0; | |
101 | + | |
102 | + virtual int wait_for_ready(int seconds) = 0; | |
103 | + virtual int wait(int seconds) = 0; | |
104 | + virtual int iterate(bool wait = true) = 0; | |
105 | + | |
106 | + virtual string * get_text_at(int row, int col, size_t sz) = 0; | |
107 | + virtual int set_text_at(int row, int col, const char *str) = 0; | |
108 | + virtual string * get_text(int baddr, size_t len) = 0; | |
109 | + virtual int cmp_text_at(int row, int col, const char *text) = 0; | |
110 | + virtual int wait_for_text_at(int row, int col, const char *key, int timeout); | |
111 | + | |
112 | + virtual int set_cursor_position(int row, int col) = 0; | |
113 | + virtual int set_cursor_addr(int addr) = 0; | |
114 | + virtual int get_cursor_addr(void) = 0; | |
115 | + | |
116 | +// virtual int set_toggle(LIB3270_TOGGLE ix, bool value) = 0; | |
117 | + | |
118 | +// virtual int enter(void) = 0; | |
119 | +// virtual int pfkey(int key) = 0; | |
120 | +// virtual int pakey(int key) = 0; | |
121 | + | |
122 | +// virtual int emulate_input(const char *str) = 0; | |
123 | + | |
124 | +// virtual int get_field_start(int baddr = -1) = 0; | |
125 | +// virtual int get_field_len(int baddr = -1) = 0; | |
126 | +// virtual int get_next_unprotected(int baddr = -1) = 0; | |
127 | + | |
128 | +// virtual int set_copy(const char *text); | |
129 | +// virtual char * get_copy(void); | |
130 | + | |
131 | +// virtual char * get_clipboard(void); | |
132 | +// virtual int set_clipboard(const char *text); | |
133 | + | |
134 | +// virtual int quit(void) = 0; | |
135 | + | |
136 | + // Dialogs | |
137 | +// virtual int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | |
138 | +// virtual char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); | |
139 | + | |
140 | + private: | |
141 | + | |
142 | + session * prev; | |
143 | + session * next; | |
144 | + | |
145 | + static session * first; | |
146 | + static session * last; | |
147 | + | |
148 | + static session * (*factory)(const char *name); | |
149 | + | |
150 | + static session * create_remote(const char *name); | |
151 | + static session * create_local(void); | |
152 | + | |
153 | +#ifdef HAVE_ICONV | |
154 | + iconv_t conv2Local; | |
155 | + iconv_t conv2Host; | |
156 | +#endif | |
157 | + | |
158 | + }; | |
159 | + | |
160 | + | |
161 | + } | |
162 | + | |
163 | + | |
164 | +#endif // PW3270_CLASS_H_INCLUDED | ... | ... |
src/plugins/rx3270/remote.cc
... | ... | @@ -1132,7 +1132,7 @@ int remote::set_cursor_addr(int addr) |
1132 | 1132 | |
1133 | 1133 | if(hPipe != INVALID_HANDLE_VALUE) |
1134 | 1134 | { |
1135 | - struct hllapi_packet_addr query = { HLLAPI_PACKET_FIELD_LEN, (unsigned short) addr }; | |
1135 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, (unsigned short) addr }; | |
1136 | 1136 | struct hllapi_packet_result response; |
1137 | 1137 | DWORD cbSize = sizeof(query); |
1138 | 1138 | TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | ... | ... |