Commit 981dd162807dd8490849dcc2ae67df9ea9e5cf37

Authored by Perry Werneck
1 parent 56b8c549
Exists in master and in 1 other branch develop

Refactoring test method.

Makefile.in
... ... @@ -36,12 +36,25 @@ PLUGIN_SOURCES= \
36 36 $(wildcard src/$(PLUGIN_NAME)/@OSNAME@/*.rc)
37 37  
38 38 PLUGIN_TEST_SOURCES= \
39   - src/testprograms/plugin.c
  39 + src/testprograms/$(PLUGIN_NAME).c
  40 +
  41 +#---[ Library configuration ]------------------------------------------------------------
  42 +
  43 +LIBRARY_NAME=hllapi
  44 +
  45 +LIBRARY_SOURCES= \
  46 + $(wildcard src/$(LIBRARY_NAME)/*.c) \
  47 + $(wildcard src/$(LIBRARY_NAME)/@OSNAME@/*.c) \
  48 + $(wildcard src/$(LIBRARY_NAME)/@OSNAME@/*.rc)
  49 +
  50 +LIBRARY_TEST_SOURCES= \
  51 + src/testprograms/$(LIBRARY_NAME).c
40 52  
41 53 #---[ Tools ]----------------------------------------------------------------------------
42 54  
43 55 CC=@CC@
44 56 LD=@CC@
  57 +CXX=@CXX@
45 58 LN_S=@LN_S@
46 59 MKDIR=@MKDIR_P@
47 60 INSTALL=@INSTALL@
... ... @@ -190,7 +203,8 @@ all: \
190 203 $(POTDIR)/$(PLUGIN_NAME).pot
191 204  
192 205 Release: \
193   - $(BINRLS)/$(PLUGIN_NAME)@DLLEXT@
  206 + $(BINRLS)/$(PLUGIN_NAME)@DLLEXT@ \
  207 + $(BINRLS)/lib$(LIBRARY_NAME)@DLLEXT@
194 208  
195 209 $(BINRLS)/$(PLUGIN_NAME)@DLLEXT@: \
196 210 $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJRLS)/$(SRC).o)
... ... @@ -240,36 +254,41 @@ run-plugin: \
240 254  
241 255 $(BINDBG)/$(PLUGIN_NAME)@EXEEXT@
242 256  
243   -#---[ Debug Targets ]--------------------------------------------------------------------
  257 +run-library: \
  258 + $(BINDBG)/$(LIBRARY_NAME)@DLLEXT@ \
  259 + $(BINDBG)/$(LIBRARY_NAME)@EXEEXT@
244 260  
245   -Debug: \
246   - $(BINDBG)/$(PLUGIN_NAME)@DLLEXT@ \
247   - $(BINDBG)/$(PLUGIN_NAME)@EXEEXT@
  261 + $(BINDBG)/$(LIBRARY_NAME)@EXEEXT@
248 262  
249   -$(BINDBG)/lib$(PLUGIN_NAME).a: \
250   - $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJDBG)/$(SRC).o)
  263 +#---[ Debug Targets ]--------------------------------------------------------------------
251 264  
252   - @$(MKDIR) $(@D)
253   - @echo $< ...
  265 +Debug: \
  266 + Debug-plugin \
  267 + Debug-library
254 268  
255   - @$(AR) rcs $@ $^
  269 +Debug-plugin: \
  270 + $(BINDBG)/$(PLUGIN_NAME)@EXEEXT@
256 271  
  272 +Debug-library: \
  273 + $(BINDBG)/$(LIBRARY_NAME)@EXEEXT@
257 274  
258 275 $(BINDBG)/$(PLUGIN_NAME)@EXEEXT@: \
259   - $(foreach SRC, $(basename $(PLUGIN_TEST_SOURCES)), $(OBJDBG)/$(SRC).o)
  276 + $(foreach SRC, $(basename $(PLUGIN_TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \
  277 + $(BINDBG)/$(PLUGIN_NAME)@DLLEXT@
260 278  
261 279 @$(MKDIR) $(@D)
262 280 @echo $< ...
263 281 @$(LD) \
264 282 -o $@ \
265   - $^ \
  283 + $(foreach SRC, $(basename $(PLUGIN_TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \
266 284 -L$(BINDBG) \
267 285 -Wl,-rpath,$(BINDBG) \
268 286 $(LDFLAGS) \
269 287 $(LIBS) \
270 288 $(V3270_LIBS) \
271 289 $(GTK_LIBS) \
272   - $(GLIB_LIBS)
  290 + $(GLIB_LIBS) \
  291 + $(DBUS_LIBS)
273 292  
274 293 $(BINDBG)/$(PLUGIN_NAME)@DLLEXT@: \
275 294 $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJDBG)/$(SRC).o)
... ... @@ -279,14 +298,48 @@ $(BINDBG)/$(PLUGIN_NAME)@DLLEXT@: \
279 298 @$(LD) \
280 299 -shared -Wl,-soname,$(@F) \
281 300 -o $@ \
282   - $(LDFLAGS) \
283 301 $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJDBG)/$(SRC).o) \
  302 + $(LDFLAGS) \
284 303 -L$(BINDBG) \
  304 + $(LIBS) \
285 305 $(V3270_LIBS) \
  306 + $(GTK_LIBS) \
  307 + $(GLIB_LIBS) \
  308 + $(DBUS_LIBS)
  309 +
  310 +$(BINDBG)/$(LIBRARY_NAME)@EXEEXT@: \
  311 + $(foreach SRC, $(basename $(LIBRARY_TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \
  312 + $(BINDBG)/lib$(LIBRARY_NAME)@DLLEXT@
  313 +
  314 + @$(MKDIR) $(@D)
  315 + @echo $< ...
  316 + @$(CXX) \
  317 + -o $@ \
  318 + $(foreach SRC, $(basename $(LIBRARY_TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \
  319 + -Wl,-rpath,$(BINDBG) \
  320 + $(LDFLAGS) \
  321 + -L$(BINDBG) \
  322 + -l$(LIBRARY_NAME) \
286 323 $(LIBS) \
  324 + $(V3270_LIBS) \
287 325 $(GTK_LIBS) \
  326 + $(GLIB_LIBS) \
288 327 $(DBUS_LIBS)
289 328  
  329 +$(BINDBG)/lib$(LIBRARY_NAME)@DLLEXT@: \
  330 + $(foreach SRC, $(basename $(LIBRARY_SOURCES)), $(OBJDBG)/$(SRC).o)
  331 +
  332 + @$(MKDIR) $(@D)
  333 + @echo $< ...
  334 + @$(CXX) \
  335 + -shared -Wl,-soname,$(@F) \
  336 + -o $@ \
  337 + $(LDFLAGS) \
  338 + $(foreach SRC, $(basename $(LIBRARY_SOURCES)), $(OBJDBG)/$(SRC).o) \
  339 + -lpw3270cpp \
  340 + -L$(BINDBG) \
  341 + $(LIBS) \
  342 + $(DBUS_LIBS)
290 343  
291 344 #---[ Clean Targets ]--------------------------------------------------------------------
292 345  
... ...
src/hllapi/testprogram.c
... ... @@ -1,169 +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 testprogram.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   - #include <stdio.h>
31   - #include <string.h>
32   - #include <time.h>
33   - #include <pw3270/hllapi.h>
34   -
35   - #if defined(DEBUG) && defined(_WIN32)
36   - #undef trace
37   - #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } }
38   - #endif // DEBUG
39   -
40   - #define MAX_DATA_SIZE 8000 //< Maximum data size for this application.
41   -
42   - static CHAR hllapi_data[MAX_DATA_SIZE];
43   -
44   -/*---[ Implement ]--------------------------------------------------------------------------------*/
45   -
46   - static void connect_ps(const char *session)
47   - {
48   - WORD len;
49   - WORD fn = HLLAPI_CMD_CONNECTPS;
50   - WORD rc = 0;
51   -
52   - strncpy(hllapi_data,session,MAX_DATA_SIZE);
53   -
54   - len = strlen(session);
55   - hllapi(&fn,hllapi_data,&len,&rc);
56   -
57   - /*
58   - if(rc)
59   - {
60   - trace("HLLAPI_CMD_CONNECTPS(%s) exits with rc=%d", session, (int) rc);
61   - }
62   - */
63   -
64   - }
65   -
66   - int main(int numpar, char *param[])
67   - {
68   - const char *session = "pw3270:A";
69   -
70   - connect_ps(session);
71   -
72   - /*
73   -
74   - printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session));
75   - printf("revision=%d\n",(int) hllapi_get_revision());
76   - printf("connect=%d\n",(int) hllapi_connect((char *) "fandezhi.efglobe.com:23",1));
77   - printf("wait_for_ready=%d\n",(int) hllapi_wait_for_ready(10));
78   - printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No");
79   -
80   -// printf("disconnect=%d\n",(int) hllapi_disconnect());
81   -
82   -
83   - printf("deinit=%d\n",(int) hllapi_deinit());
84   -
85   - DWORD revision;
86   - int rc;
87   -
88   - rc = hllapi_init("");
89   - if(rc)
90   - {
91   - printf("Init exits with rc=%d\n",rc);
92   - return rc;
93   - }
94   -
95   - if(!hllapi_get_revision(&revision))
96   - printf("Library revision is %d\n",(int) revision);
97   -
98   -
99   - printf("Deinit exits with rc=%d\n",rc);
100   - rc = hllapi_deinit();
101   -*/
102   - return 0;
103   - }
104   -
105   -/*
106   - int main(int numpar, char *param[])
107   - {
108   - char buffer[BUFFER_LENGTH];
109   - unsigned short rc;
110   - unsigned short len;
111   - unsigned long fn;
112   -
113   - static const struct _cmd
114   - {
115   - const char * name;
116   - unsigned short fn;
117   - const char * arg;
118   - } cmd[] =
119   - {
120   - { "GetRevision", HLLAPI_CMD_GETREVISION, " " },
121   - { "ConnectPS", HLLAPI_CMD_CONNECTPS, "pw3270A" },
122   - { "InputString", HLLAPI_CMD_INPUTSTRING, "test" },
123   -
124   - };
125   -
126   - int f;
127   -
128   -
129   - for(f=0;f< (sizeof(cmd)/sizeof(struct _cmd)); f++)
130   - {
131   - len = strlen(cmd[f].arg);
132   - memcpy(buffer,cmd[f].arg,len);
133   - hllapi((LPWORD) &cmd[f].fn,buffer,&len,&rc);
134   - printf("%s exits with rc=%d\n[%s]\n",cmd[f].name,rc,buffer);
135   - }
136   -
137   - len = 80;
138   - rc = 1040;
139   - fn = HLLAPI_CMD_COPYPSTOSTR;
140   - hllapi((LPWORD) &fn,buffer,&len,&rc);
141   - printf("%s exits with rc=%d\n%s\n","HLLAPI_CMD_COPYPSTOSTR",rc,buffer);
142   -
143   - // Performance
144   - len = strlen(cmd[0].arg);
145   - memcpy(buffer,cmd[0].arg,len);
146   - if(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0)
147   - {
148   - time_t end = time(0) + 5;
149   - int qtd = 0;
150   - do
151   - {
152   - qtd++;
153   - } while(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0 && time(0)<end);
154   - printf("%d interacoes em 5 segundos (rc=%d)\n",qtd,rc);
155   -
156   - }
157   -
158   - // Disconnect
159   - len = 10;
160   - rc = 1;
161   - fn = HLLAPI_CMD_DISCONNECTPS;
162   - *buffer = 0;
163   - hllapi((LPWORD) &fn,buffer,&len,&rc);
164   - printf("%s exits with rc=%d\n[%s]\n","HLLAPI_CMD_DISCONNECTPS",rc,buffer);
165   -
166   -
167   - return 0;
168   - }
169   -*/
src/testprograms/hllapi.c 0 → 100644
... ... @@ -0,0 +1,169 @@
  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 testprogram.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 + #include <stdio.h>
  31 + #include <string.h>
  32 + #include <time.h>
  33 + #include <pw3270/hllapi.h>
  34 +
  35 + #if defined(DEBUG) && defined(_WIN32)
  36 + #undef trace
  37 + #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } }
  38 + #endif // DEBUG
  39 +
  40 + #define MAX_DATA_SIZE 8000 //< Maximum data size for this application.
  41 +
  42 + static CHAR hllapi_data[MAX_DATA_SIZE];
  43 +
  44 +/*---[ Implement ]--------------------------------------------------------------------------------*/
  45 +
  46 + static void connect_ps(const char *session)
  47 + {
  48 + WORD len;
  49 + WORD fn = HLLAPI_CMD_CONNECTPS;
  50 + WORD rc = 0;
  51 +
  52 + strncpy(hllapi_data,session,MAX_DATA_SIZE);
  53 +
  54 + len = strlen(session);
  55 + hllapi(&fn,hllapi_data,&len,&rc);
  56 +
  57 + /*
  58 + if(rc)
  59 + {
  60 + trace("HLLAPI_CMD_CONNECTPS(%s) exits with rc=%d", session, (int) rc);
  61 + }
  62 + */
  63 +
  64 + }
  65 +
  66 + int main(int numpar, char *param[])
  67 + {
  68 + const char *session = "pw3270:A";
  69 +
  70 + connect_ps(session);
  71 +
  72 + /*
  73 +
  74 + printf("init(%s)=%d\n",session,(int) hllapi_init((LPSTR) session));
  75 + printf("revision=%d\n",(int) hllapi_get_revision());
  76 + printf("connect=%d\n",(int) hllapi_connect((char *) "fandezhi.efglobe.com:23",1));
  77 + printf("wait_for_ready=%d\n",(int) hllapi_wait_for_ready(10));
  78 + printf("connected=%s\n",(int) hllapi_is_connected() ? "Yes" : "No");
  79 +
  80 +// printf("disconnect=%d\n",(int) hllapi_disconnect());
  81 +
  82 +
  83 + printf("deinit=%d\n",(int) hllapi_deinit());
  84 +
  85 + DWORD revision;
  86 + int rc;
  87 +
  88 + rc = hllapi_init("");
  89 + if(rc)
  90 + {
  91 + printf("Init exits with rc=%d\n",rc);
  92 + return rc;
  93 + }
  94 +
  95 + if(!hllapi_get_revision(&revision))
  96 + printf("Library revision is %d\n",(int) revision);
  97 +
  98 +
  99 + printf("Deinit exits with rc=%d\n",rc);
  100 + rc = hllapi_deinit();
  101 +*/
  102 + return 0;
  103 + }
  104 +
  105 +/*
  106 + int main(int numpar, char *param[])
  107 + {
  108 + char buffer[BUFFER_LENGTH];
  109 + unsigned short rc;
  110 + unsigned short len;
  111 + unsigned long fn;
  112 +
  113 + static const struct _cmd
  114 + {
  115 + const char * name;
  116 + unsigned short fn;
  117 + const char * arg;
  118 + } cmd[] =
  119 + {
  120 + { "GetRevision", HLLAPI_CMD_GETREVISION, " " },
  121 + { "ConnectPS", HLLAPI_CMD_CONNECTPS, "pw3270A" },
  122 + { "InputString", HLLAPI_CMD_INPUTSTRING, "test" },
  123 +
  124 + };
  125 +
  126 + int f;
  127 +
  128 +
  129 + for(f=0;f< (sizeof(cmd)/sizeof(struct _cmd)); f++)
  130 + {
  131 + len = strlen(cmd[f].arg);
  132 + memcpy(buffer,cmd[f].arg,len);
  133 + hllapi((LPWORD) &cmd[f].fn,buffer,&len,&rc);
  134 + printf("%s exits with rc=%d\n[%s]\n",cmd[f].name,rc,buffer);
  135 + }
  136 +
  137 + len = 80;
  138 + rc = 1040;
  139 + fn = HLLAPI_CMD_COPYPSTOSTR;
  140 + hllapi((LPWORD) &fn,buffer,&len,&rc);
  141 + printf("%s exits with rc=%d\n%s\n","HLLAPI_CMD_COPYPSTOSTR",rc,buffer);
  142 +
  143 + // Performance
  144 + len = strlen(cmd[0].arg);
  145 + memcpy(buffer,cmd[0].arg,len);
  146 + if(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0)
  147 + {
  148 + time_t end = time(0) + 5;
  149 + int qtd = 0;
  150 + do
  151 + {
  152 + qtd++;
  153 + } while(hllapi((LPWORD) &cmd[0].fn,buffer,&len,&rc) == 0 && rc == 0 && time(0)<end);
  154 + printf("%d interacoes em 5 segundos (rc=%d)\n",qtd,rc);
  155 +
  156 + }
  157 +
  158 + // Disconnect
  159 + len = 10;
  160 + rc = 1;
  161 + fn = HLLAPI_CMD_DISCONNECTPS;
  162 + *buffer = 0;
  163 + hllapi((LPWORD) &fn,buffer,&len,&rc);
  164 + printf("%s exits with rc=%d\n[%s]\n","HLLAPI_CMD_DISCONNECTPS",rc,buffer);
  165 +
  166 +
  167 + return 0;
  168 + }
  169 +*/
... ...
src/testprograms/ipc3270c.c 0 → 100644
... ... @@ -0,0 +1,248 @@
  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. Registro no INPI sob
  5 + * o nome G3270.
  6 + *
  7 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  8 + *
  9 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  10 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  11 + * Free Software Foundation.
  12 + *
  13 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  14 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  15 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  16 + * obter mais detalhes.
  17 + *
  18 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  19 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  21 + *
  22 + * Este programa está nomeado como testprogram.c e possui - linhas de código.
  23 + *
  24 + * Contatos:
  25 + *
  26 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  27 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  28 + *
  29 + */
  30 +
  31 +
  32 + /**
  33 + * @brief Test program for pw3270 HLLAPI compatibility plugin.
  34 + *
  35 + */
  36 +
  37 + #include <config.h>
  38 + #include <v3270.h>
  39 + #include <v3270/trace.h>
  40 + #include <pw3270/plugin.h>
  41 + #include <string.h>
  42 + #include <stdlib.h>
  43 + #include <pw3270.h>
  44 +
  45 + /*---[ Globals ]------------------------------------------------------------------------------------*/
  46 +
  47 + const gchar * plugin_path = ".bin/Debug";
  48 + const gchar * session_name = "pw3270";
  49 + const gchar * plugin_name = "ipc3270c." G_MODULE_SUFFIX;
  50 +
  51 + /*---[ Implement ]----------------------------------------------------------------------------------*/
  52 +
  53 + static void close_module(GtkWidget *widget, GModule *module)
  54 + {
  55 + g_message("Closing module %p",module);
  56 +
  57 + static void (*stop)(GtkWidget *window, GtkWidget *terminal) = NULL;
  58 + if(!g_module_symbol(module,"pw3270_plugin_stop",(void **) &stop))
  59 + {
  60 + g_message("Can't get stop method from plugin: %s",g_module_error());
  61 + }
  62 + else
  63 + {
  64 + stop(gtk_widget_get_toplevel(widget),widget);
  65 + }
  66 +
  67 + g_module_close(module);
  68 + g_message("Module %p was closed",module);
  69 + }
  70 +
  71 + static void toggle_ds_trace(GtkToggleToolButton *button, GtkWidget *terminal)
  72 + {
  73 + v3270_set_toggle(terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_tool_button_get_active(button));
  74 + }
  75 +
  76 + static void toggle_event_trace(GtkToggleToolButton *button, GtkWidget *terminal)
  77 + {
  78 + v3270_set_toggle(terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_tool_button_get_active(button));
  79 + }
  80 +
  81 + static void toggle_ssl_trace(GtkToggleToolButton *button, GtkWidget *terminal)
  82 + {
  83 + v3270_set_toggle(terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_tool_button_get_active(button));
  84 + }
  85 +
  86 + static void toggle_screen_trace(GtkToggleToolButton *button, GtkWidget *terminal)
  87 + {
  88 + v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button));
  89 + }
  90 +
  91 + static void toggle_started_trace(GtkToggleToolButton *button, GModule *module)
  92 + {
  93 + if(!module)
  94 + return;
  95 +
  96 + GtkWidget * terminal = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"terminal"));
  97 +
  98 + const gchar * method_name = (gtk_toggle_tool_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop");
  99 +
  100 + static void (*call)(GtkWidget *window, GtkWidget *terminal) = NULL;
  101 + if(!g_module_symbol(module,method_name,(void **) &call))
  102 + {
  103 + g_message("Can't get method \"%s\": %s",method_name,g_module_error());
  104 + return;
  105 + }
  106 +
  107 + g_message("Calling %s",method_name);
  108 + call(gtk_widget_get_toplevel(terminal), GTK_WIDGET(terminal));
  109 +
  110 + }
  111 +
  112 + static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback)
  113 + {
  114 + GtkToolItem * item = gtk_toggle_tool_button_new();
  115 + gtk_tool_button_set_label(GTK_TOOL_BUTTON(item),label);
  116 +
  117 + g_signal_connect(GTK_WIDGET(item), "toggled", G_CALLBACK(callback), terminal);
  118 +
  119 + if(tooltip)
  120 + gtk_widget_set_tooltip_text(GTK_WIDGET(item),tooltip);
  121 +
  122 + return item;
  123 + }
  124 +
  125 + static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
  126 +
  127 + GtkWidget * window = gtk_application_window_new(app);
  128 + GtkWidget * terminal = v3270_new();
  129 + GtkWidget * notebook = gtk_notebook_new();
  130 + GModule * module = NULL;
  131 +
  132 + gtk_widget_set_name(window,session_name);
  133 +
  134 + // Setup tabs
  135 + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new(v3270_get_session_name(terminal)));
  136 +
  137 + // Load plugin
  138 + {
  139 + g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL);
  140 +
  141 + g_message("Loading %s",plugin);
  142 +
  143 + module = g_module_open(plugin,G_MODULE_BIND_LOCAL);
  144 +
  145 + if(module)
  146 + {
  147 + g_signal_connect (terminal, "destroy", G_CALLBACK(close_module), module);
  148 + }
  149 + else
  150 + {
  151 + g_message("Can't open \"%s\": %s",plugin,g_module_error());
  152 + gtk_main_quit();
  153 + }
  154 +
  155 + }
  156 + // Create trace window
  157 + {
  158 + GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
  159 + GtkWidget * trace = v3270_trace_new(terminal);
  160 + GtkWidget * toolbar = gtk_toolbar_new();
  161 + GtkToolItem * start = gtk_toggle_tool_button_new();
  162 +
  163 + gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL);
  164 +
  165 + g_object_set_data(G_OBJECT(start),"terminal",terminal);
  166 +
  167 + gtk_tool_button_set_label(GTK_TOOL_BUTTON(start),"Enable");
  168 + g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started_trace), module);
  169 + gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module");
  170 +
  171 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar), start, -1);
  172 +
  173 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1);
  174 +
  175 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1);
  176 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1);
  177 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1);
  178 + gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1);
  179 +
  180 + gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0);
  181 + gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0);
  182 + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace"));
  183 + }
  184 +
  185 + // Setup and show main window
  186 + gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
  187 + gtk_window_set_default_size (GTK_WINDOW (window), 800, 500);
  188 + gtk_container_add(GTK_CONTAINER(window),notebook);
  189 + gtk_widget_show_all (window);
  190 +
  191 + // Setup title.
  192 + const gchar *url = lib3270_get_url(v3270_get_session(terminal));
  193 + if(url) {
  194 +
  195 + v3270_set_url(terminal,url);
  196 + v3270_reconnect(terminal);
  197 +
  198 + gchar * title = g_strdup_printf("%s - %s", v3270_get_session_name(terminal), url);
  199 + gtk_window_set_title(GTK_WINDOW(window), title);
  200 + g_free(title);
  201 +
  202 + } else {
  203 +
  204 + gtk_window_set_title(GTK_WINDOW(window), v3270_get_session_name(terminal));
  205 +
  206 + }
  207 +
  208 +}
  209 +
  210 +int main (int argc, char **argv) {
  211 +
  212 + /*
  213 + GVariantBuilder builder;
  214 +
  215 + g_variant_builder_init(&builder,G_VARIANT_TYPE("(isi)"));
  216 +
  217 + g_variant_builder_add(&builder, "i", 10);
  218 + g_variant_builder_add(&builder, "s", "teste");
  219 + g_variant_builder_add(&builder, "i", 20);
  220 +
  221 + GVariant *value = g_variant_builder_end(&builder);
  222 +
  223 + size_t szPacket = 0;
  224 + g_autofree unsigned char * buffer = ipc3270_pack("teste", value, &szPacket);
  225 + g_variant_unref(value);
  226 +
  227 + debug("Package \"%s\" was created with %u bytes", buffer, (unsigned int) szPacket);
  228 +
  229 + value = ipc3270_unpack(buffer);
  230 +
  231 + g_variant_unref(value);
  232 + */
  233 +
  234 + GtkApplication *app;
  235 + int status;
  236 +
  237 + app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE);
  238 +
  239 + g_signal_connect (app, "activate", G_CALLBACK(activate), NULL);
  240 +
  241 + status = g_application_run (G_APPLICATION (app), argc, argv);
  242 + g_object_unref (app);
  243 +
  244 + g_message("rc=%d",status);
  245 + return status;
  246 +
  247 +}
  248 +
... ...
src/testprograms/plugin.c
... ... @@ -1,248 +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. Registro no INPI sob
5   - * o nome G3270.
6   - *
7   - * Copyright (C) <2008> <Banco do Brasil S.A.>
8   - *
9   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
10   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
11   - * Free Software Foundation.
12   - *
13   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
14   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
15   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
16   - * obter mais detalhes.
17   - *
18   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
19   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
20   - * St, Fifth Floor, Boston, MA 02110-1301 USA
21   - *
22   - * Este programa está nomeado como testprogram.c e possui - linhas de código.
23   - *
24   - * Contatos:
25   - *
26   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
27   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
28   - *
29   - */
30   -
31   -
32   - /**
33   - * @brief Test program for pw3270 HLLAPI compatibility plugin.
34   - *
35   - */
36   -
37   - #include <config.h>
38   - #include <v3270.h>
39   - #include <v3270/trace.h>
40   - #include <pw3270/plugin.h>
41   - #include <string.h>
42   - #include <stdlib.h>
43   - #include <pw3270.h>
44   -
45   - /*---[ Globals ]------------------------------------------------------------------------------------*/
46   -
47   - const gchar * plugin_path = ".bin/Debug";
48   - const gchar * session_name = "pw3270";
49   - const gchar * plugin_name = "ipc3270c." G_MODULE_SUFFIX;
50   -
51   - /*---[ Implement ]----------------------------------------------------------------------------------*/
52   -
53   - static void close_module(GtkWidget *widget, GModule *module)
54   - {
55   - g_message("Closing module %p",module);
56   -
57   - static void (*stop)(GtkWidget *window, GtkWidget *terminal) = NULL;
58   - if(!g_module_symbol(module,"pw3270_plugin_stop",(void **) &stop))
59   - {
60   - g_message("Can't get stop method from plugin: %s",g_module_error());
61   - }
62   - else
63   - {
64   - stop(gtk_widget_get_toplevel(widget),widget);
65   - }
66   -
67   - g_module_close(module);
68   - g_message("Module %p was closed",module);
69   - }
70   -
71   - static void toggle_ds_trace(GtkToggleToolButton *button, GtkWidget *terminal)
72   - {
73   - v3270_set_toggle(terminal,LIB3270_TOGGLE_DS_TRACE,gtk_toggle_tool_button_get_active(button));
74   - }
75   -
76   - static void toggle_event_trace(GtkToggleToolButton *button, GtkWidget *terminal)
77   - {
78   - v3270_set_toggle(terminal,LIB3270_TOGGLE_EVENT_TRACE,gtk_toggle_tool_button_get_active(button));
79   - }
80   -
81   - static void toggle_ssl_trace(GtkToggleToolButton *button, GtkWidget *terminal)
82   - {
83   - v3270_set_toggle(terminal,LIB3270_TOGGLE_SSL_TRACE,gtk_toggle_tool_button_get_active(button));
84   - }
85   -
86   - static void toggle_screen_trace(GtkToggleToolButton *button, GtkWidget *terminal)
87   - {
88   - v3270_set_toggle(terminal,LIB3270_TOGGLE_SCREEN_TRACE,gtk_toggle_tool_button_get_active(button));
89   - }
90   -
91   - static void toggle_started_trace(GtkToggleToolButton *button, GModule *module)
92   - {
93   - if(!module)
94   - return;
95   -
96   - GtkWidget * terminal = GTK_WIDGET(g_object_get_data(G_OBJECT(button),"terminal"));
97   -
98   - const gchar * method_name = (gtk_toggle_tool_button_get_active(button) ? "pw3270_plugin_start" : "pw3270_plugin_stop");
99   -
100   - static void (*call)(GtkWidget *window, GtkWidget *terminal) = NULL;
101   - if(!g_module_symbol(module,method_name,(void **) &call))
102   - {
103   - g_message("Can't get method \"%s\": %s",method_name,g_module_error());
104   - return;
105   - }
106   -
107   - g_message("Calling %s",method_name);
108   - call(gtk_widget_get_toplevel(terminal), GTK_WIDGET(terminal));
109   -
110   - }
111   -
112   - static GtkToolItem * create_tool_item(GtkWidget *terminal, const gchar *label, const gchar *tooltip, GCallback callback)
113   - {
114   - GtkToolItem * item = gtk_toggle_tool_button_new();
115   - gtk_tool_button_set_label(GTK_TOOL_BUTTON(item),label);
116   -
117   - g_signal_connect(GTK_WIDGET(item), "toggled", G_CALLBACK(callback), terminal);
118   -
119   - if(tooltip)
120   - gtk_widget_set_tooltip_text(GTK_WIDGET(item),tooltip);
121   -
122   - return item;
123   - }
124   -
125   - static void activate(GtkApplication* app, G_GNUC_UNUSED gpointer user_data) {
126   -
127   - GtkWidget * window = gtk_application_window_new(app);
128   - GtkWidget * terminal = v3270_new();
129   - GtkWidget * notebook = gtk_notebook_new();
130   - GModule * module = NULL;
131   -
132   - gtk_widget_set_name(window,session_name);
133   -
134   - // Setup tabs
135   - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),terminal,gtk_label_new(v3270_get_session_name(terminal)));
136   -
137   - // Load plugin
138   - {
139   - g_autofree gchar * plugin = g_build_filename(plugin_path,plugin_name,NULL);
140   -
141   - g_message("Loading %s",plugin);
142   -
143   - module = g_module_open(plugin,G_MODULE_BIND_LOCAL);
144   -
145   - if(module)
146   - {
147   - g_signal_connect (terminal, "destroy", G_CALLBACK(close_module), module);
148   - }
149   - else
150   - {
151   - g_message("Can't open \"%s\": %s",plugin,g_module_error());
152   - gtk_main_quit();
153   - }
154   -
155   - }
156   - // Create trace window
157   - {
158   - GtkWidget * box = gtk_box_new(GTK_ORIENTATION_VERTICAL,0);
159   - GtkWidget * trace = v3270_trace_new(terminal);
160   - GtkWidget * toolbar = gtk_toolbar_new();
161   - GtkToolItem * start = gtk_toggle_tool_button_new();
162   -
163   - gtk_widget_set_sensitive(GTK_WIDGET(start),module != NULL);
164   -
165   - g_object_set_data(G_OBJECT(start),"terminal",terminal);
166   -
167   - gtk_tool_button_set_label(GTK_TOOL_BUTTON(start),"Enable");
168   - g_signal_connect(GTK_WIDGET(start), "toggled", G_CALLBACK(toggle_started_trace), module);
169   - gtk_widget_set_tooltip_text(GTK_WIDGET(start),"Start/Stop plugin module");
170   -
171   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar), start, -1);
172   -
173   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),gtk_separator_tool_item_new(),-1);
174   -
175   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "DS Trace","Toggle DS Trace",G_CALLBACK(toggle_ds_trace)),-1);
176   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Event Trace","Toggle Event Trace",G_CALLBACK(toggle_event_trace)),-1);
177   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "Screen Trace","Toggle Screen Trace",G_CALLBACK(toggle_screen_trace)),-1);
178   - gtk_toolbar_insert(GTK_TOOLBAR(toolbar),create_tool_item(terminal, "SSL Trace","Toggle SSL Trace",G_CALLBACK(toggle_ssl_trace)),-1);
179   -
180   - gtk_box_pack_start(GTK_BOX(box),toolbar,FALSE,FALSE,0);
181   - gtk_box_pack_start(GTK_BOX(box),trace,TRUE,TRUE,0);
182   - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),box,gtk_label_new("Trace"));
183   - }
184   -
185   - // Setup and show main window
186   - gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
187   - gtk_window_set_default_size (GTK_WINDOW (window), 800, 500);
188   - gtk_container_add(GTK_CONTAINER(window),notebook);
189   - gtk_widget_show_all (window);
190   -
191   - // Setup title.
192   - const gchar *url = lib3270_get_url(v3270_get_session(terminal));
193   - if(url) {
194   -
195   - v3270_set_url(terminal,url);
196   - v3270_reconnect(terminal);
197   -
198   - gchar * title = g_strdup_printf("%s - %s", v3270_get_session_name(terminal), url);
199   - gtk_window_set_title(GTK_WINDOW(window), title);
200   - g_free(title);
201   -
202   - } else {
203   -
204   - gtk_window_set_title(GTK_WINDOW(window), v3270_get_session_name(terminal));
205   -
206   - }
207   -
208   -}
209   -
210   -int main (int argc, char **argv) {
211   -
212   - /*
213   - GVariantBuilder builder;
214   -
215   - g_variant_builder_init(&builder,G_VARIANT_TYPE("(isi)"));
216   -
217   - g_variant_builder_add(&builder, "i", 10);
218   - g_variant_builder_add(&builder, "s", "teste");
219   - g_variant_builder_add(&builder, "i", 20);
220   -
221   - GVariant *value = g_variant_builder_end(&builder);
222   -
223   - size_t szPacket = 0;
224   - g_autofree unsigned char * buffer = ipc3270_pack("teste", value, &szPacket);
225   - g_variant_unref(value);
226   -
227   - debug("Package \"%s\" was created with %u bytes", buffer, (unsigned int) szPacket);
228   -
229   - value = ipc3270_unpack(buffer);
230   -
231   - g_variant_unref(value);
232   - */
233   -
234   - GtkApplication *app;
235   - int status;
236   -
237   - app = gtk_application_new ("br.com.bb.pw3270",G_APPLICATION_FLAGS_NONE);
238   -
239   - g_signal_connect (app, "activate", G_CALLBACK(activate), NULL);
240   -
241   - status = g_application_run (G_APPLICATION (app), argc, argv);
242   - g_object_unref (app);
243   -
244   - g_message("rc=%d",status);
245   - return status;
246   -
247   -}
248   -