Commit c7bab6e71f64ca41815b8bdd0037662aa5177de5

Authored by perry.werneck@gmail.com
1 parent 4409c836

Movendo todas as funções do terminal para a lib3270 para facilitar a implementação de plugins

@@ -250,6 +250,9 @@ @@ -250,6 +250,9 @@
250 <Unit filename="src/pw3270/print.c"> 250 <Unit filename="src/pw3270/print.c">
251 <Option compilerVar="CC" /> 251 <Option compilerVar="CC" />
252 </Unit> 252 </Unit>
  253 + <Unit filename="src/pw3270/tools.c">
  254 + <Option compilerVar="CC" />
  255 + </Unit>
253 <Unit filename="src/pw3270/uiparser/Makefile.in" /> 256 <Unit filename="src/pw3270/uiparser/Makefile.in" />
254 <Unit filename="src/pw3270/uiparser/accelerator.c"> 257 <Unit filename="src/pw3270/uiparser/accelerator.c">
255 <Option compilerVar="CC" /> 258 <Option compilerVar="CC" />
src/include/pw3270.h
@@ -56,6 +56,7 @@ @@ -56,6 +56,7 @@
56 LIB3270_EXPORT gboolean pw3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix); 56 LIB3270_EXPORT gboolean pw3270_get_toggle(GtkWidget *widget, LIB3270_TOGGLE ix);
57 LIB3270_EXPORT H3270 * pw3270_get_session(GtkWidget *widget); 57 LIB3270_EXPORT H3270 * pw3270_get_session(GtkWidget *widget);
58 LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget); 58 LIB3270_EXPORT GtkWidget * pw3270_get_terminal_widget(GtkWidget *widget);
  59 + LIB3270_EXPORT gchar * pw3270_build_filename(GtkWidget *widget, const gchar *first_element, ...);
59 60
60 G_END_DECLS 61 G_END_DECLS
61 62
src/pw3270/Makefile.in
@@ -56,11 +56,12 @@ include uiparser/sources.mak @@ -56,11 +56,12 @@ include uiparser/sources.mak
56 56
57 #---[ Targets ]---------------------------------------------------------------- 57 #---[ Targets ]----------------------------------------------------------------
58 58
59 -APP_SOURCES= main.c window.c actions.c fonts.c dialog.c print.c colors.c \  
60 - filetransfer.c \  
61 - $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) 59 +APP_SOURCES= main.c
62 60
63 -LIB_SOURCES= $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \ 61 +LIB_SOURCES= window.c actions.c fonts.c dialog.c print.c colors.c \
  62 + filetransfer.c tools.c \
  63 + $(foreach SRC, $(UI_PARSER_SRC), uiparser/$(SRC)) \
  64 + $(foreach SRC, $(V3270_SRC), v3270/$(SRC)) \
64 $(foreach SRC, $(COMMON_SRC), common/$(SRC)) 65 $(foreach SRC, $(COMMON_SRC), common/$(SRC))
65 66
66 DEPENDS=*.h common/*.h uiparser/*.h v3270/*.h $(GLOBAL_DEPS) 67 DEPENDS=*.h common/*.h uiparser/*.h v3270/*.h $(GLOBAL_DEPS)
src/pw3270/common/common.h.in
@@ -54,22 +54,6 @@ @@ -54,22 +54,6 @@
54 #define PACKAGE_NAME "@PACKAGE_NAME@" 54 #define PACKAGE_NAME "@PACKAGE_NAME@"
55 #endif 55 #endif
56 56
57 - #if defined(_WIN32)  
58 -  
59 - #include <windows.h>  
60 - #define DLL_EXPORT __declspec (dllexport)  
61 -  
62 - #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)  
63 -  
64 - #define DLL_EXPORT  
65 -  
66 - #else  
67 -  
68 - #define DLL_EXPORT __attribute__((visibility("default"))) extern  
69 -  
70 - #endif  
71 -  
72 -  
73 #define ENABLE_NLS 57 #define ENABLE_NLS
74 58
75 #ifndef GETTEXT_PACKAGE 59 #ifndef GETTEXT_PACKAGE
@@ -86,26 +70,27 @@ @@ -86,26 +70,27 @@
86 #endif 70 #endif
87 71
88 // Configuration 72 // Configuration
89 - DLL_EXPORT void configuration_init(void);  
90 - DLL_EXPORT void configuration_deinit(void); 73 + void configuration_init(void);
  74 + void configuration_deinit(void);
91 75
92 - DLL_EXPORT gchar * get_string_from_config(const gchar *group, const gchar *key, const gchar *def);  
93 - DLL_EXPORT gboolean get_boolean_from_config(const gchar *group, const gchar *key, gboolean def);  
94 - DLL_EXPORT gint get_integer_from_config(const gchar *group, const gchar *key, gint def); 76 + gchar * get_string_from_config(const gchar *group, const gchar *key, const gchar *def);
  77 + gboolean get_boolean_from_config(const gchar *group, const gchar *key, gboolean def);
  78 + gint get_integer_from_config(const gchar *group, const gchar *key, gint def);
95 79
96 - DLL_EXPORT void set_string_to_config(const gchar *group, const gchar *key, const gchar *fmt, ...);  
97 - DLL_EXPORT void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val);  
98 - DLL_EXPORT void set_integer_to_config(const gchar *group, const gchar *key, gint val); 80 + void set_string_to_config(const gchar *group, const gchar *key, const gchar *fmt, ...);
  81 + void set_boolean_to_config(const gchar *group, const gchar *key, gboolean val);
  82 + void set_integer_to_config(const gchar *group, const gchar *key, gint val);
99 83
100 - DLL_EXPORT gchar * build_data_filename(const gchar *first_element, ...); 84 + gchar * build_data_filename(const gchar *first_element, ...);
  85 + gchar * filename_from_va(const gchar *first_element, va_list args);
101 86
102 #ifdef WIN_REGISTRY_ENABLED 87 #ifdef WIN_REGISTRY_ENABLED
103 - DLL_EXPORT gboolean get_registry_handle(const gchar *group, HKEY *hKey, REGSAM samDesired);  
104 - DLL_EXPORT void registry_foreach(HKEY parent, const gchar *name,void (*cbk)(const gchar *key, const gchar *val, gpointer *user_data), gpointer *user_data);  
105 - DLL_EXPORT void registry_set_double(HKEY hKey, const gchar *key, gdouble value);  
106 - DLL_EXPORT gboolean registry_get_double(HKEY hKey, const gchar *key, gdouble *value); 88 + gboolean get_registry_handle(const gchar *group, HKEY *hKey, REGSAM samDesired);
  89 + void registry_foreach(HKEY parent, const gchar *name,void (*cbk)(const gchar *key, const gchar *val, gpointer *user_data), gpointer *user_data);
  90 + void registry_set_double(HKEY hKey, const gchar *key, gdouble value);
  91 + gboolean registry_get_double(HKEY hKey, const gchar *key, gdouble *value);
107 #else 92 #else
108 - DLL_EXPORT GKeyFile * get_application_keyfile(void); 93 + GKeyFile * get_application_keyfile(void);
109 #endif // WIN_REGISTRY_ENABLED 94 #endif // WIN_REGISTRY_ENABLED
110 95
111 #endif 96 #endif
src/pw3270/common/config.c
@@ -380,10 +380,7 @@ gchar * get_last_error_msg(void) @@ -380,10 +380,7 @@ gchar * get_last_error_msg(void)
380 380
381 void configuration_init(void) 381 void configuration_init(void)
382 { 382 {
383 -#ifdef WIN_REGISTRY_ENABLED  
384 -  
385 -#else  
386 - 383 +#ifndef WIN_REGISTRY_ENABLED
387 gchar *filename = search_for_ini(); 384 gchar *filename = search_for_ini();
388 385
389 if(program_config) 386 if(program_config)
@@ -554,11 +551,21 @@ void configuration_deinit(void) @@ -554,11 +551,21 @@ void configuration_deinit(void)
554 551
555 gchar * build_data_filename(const gchar *first_element, ...) 552 gchar * build_data_filename(const gchar *first_element, ...)
556 { 553 {
  554 + va_list args;
  555 + gchar *path;
  556 +
  557 + va_start(args, first_element);
  558 + path = filename_from_va(first_element,args);
  559 + va_end(args);
  560 + return path;
  561 +}
  562 +
  563 +gchar * filename_from_va(const gchar *first_element, va_list args)
  564 +{
557 static const gchar * datadir = NULL; 565 static const gchar * datadir = NULL;
558 const gchar * appname[] = { g_get_application_name(), PACKAGE_NAME }; 566 const gchar * appname[] = { g_get_application_name(), PACKAGE_NAME };
559 GString * result = NULL; 567 GString * result = NULL;
560 const gchar * element; 568 const gchar * element;
561 - va_list args;  
562 569
563 if(datadir) 570 if(datadir)
564 result = g_string_new(datadir); 571 result = g_string_new(datadir);
@@ -627,16 +634,12 @@ gchar * build_data_filename(const gchar *first_element, ...) @@ -627,16 +634,12 @@ gchar * build_data_filename(const gchar *first_element, ...)
627 g_warning("Unable to find application datadir, using %s",result->str); 634 g_warning("Unable to find application datadir, using %s",result->str);
628 } 635 }
629 636
630 - va_start(args, first_element);  
631 -  
632 for(element = first_element;element;element = va_arg(args, gchar *)) 637 for(element = first_element;element;element = va_arg(args, gchar *))
633 { 638 {
634 g_string_append_c(result,G_DIR_SEPARATOR); 639 g_string_append_c(result,G_DIR_SEPARATOR);
635 g_string_append(result,element); 640 g_string_append(result,element);
636 } 641 }
637 642
638 - va_end(args);  
639 -  
640 return g_string_free(result, FALSE); 643 return g_string_free(result, FALSE);
641 } 644 }
642 645
src/pw3270/main.c
@@ -75,7 +75,7 @@ static int initialize(void) @@ -75,7 +75,7 @@ static int initialize(void)
75 static void toplevel_setup(GtkWindow *window) 75 static void toplevel_setup(GtkWindow *window)
76 { 76 {
77 gchar * name = g_strdup_printf("%s.png",g_get_application_name()); 77 gchar * name = g_strdup_printf("%s.png",g_get_application_name());
78 - gchar * filename = build_data_filename(name,NULL); 78 + gchar * filename = pw3270_build_filename(GTK_WIDGET(window),name,NULL);
79 79
80 gtk_window_set_type_hint(window,GDK_WINDOW_TYPE_HINT_NORMAL); 80 gtk_window_set_type_hint(window,GDK_WINDOW_TYPE_HINT_NORMAL);
81 gtk_window_set_position(window,GTK_WIN_POS_CENTER); 81 gtk_window_set_position(window,GTK_WIN_POS_CENTER);
@@ -200,7 +200,6 @@ int main(int argc, char *argv[]) @@ -200,7 +200,6 @@ int main(int argc, char *argv[])
200 if(!rc) 200 if(!rc)
201 { 201 {
202 GtkSettings *settings = gtk_settings_get_default(); 202 GtkSettings *settings = gtk_settings_get_default();
203 - configuration_init();  
204 203
205 if(settings) 204 if(settings)
206 { 205 {
@@ -218,7 +217,6 @@ int main(int argc, char *argv[]) @@ -218,7 +217,6 @@ int main(int argc, char *argv[])
218 217
219 gtk_main(); 218 gtk_main();
220 219
221 - configuration_deinit();  
222 } 220 }
223 221
224 return rc; 222 return rc;
src/pw3270/tools.c 0 → 100644
@@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
  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 tools.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 "globals.h"
  31 +
  32 +#if defined WIN32
  33 + BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd);
  34 +
  35 + static int libpw3270_loaded(void);
  36 + static int libpw3270_unloaded(void);
  37 +
  38 +#else
  39 + int libpw3270_loaded(void) __attribute__((constructor));
  40 + int libpw3270_unloaded(void) __attribute__((destructor));
  41 +#endif
  42 +
  43 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  44 +
  45 +#if defined WIN32
  46 +
  47 +BOOL WINAPI DllMain(HANDLE hinst, DWORD dwcallpurpose, LPVOID lpvResvd)
  48 +{
  49 +// Trace("%s - Library %s",__FUNCTION__,(dwcallpurpose == DLL_PROCESS_ATTACH) ? "Loaded" : "Unloaded");
  50 +
  51 + switch(dwcallpurpose)
  52 + {
  53 + case DLL_PROCESS_ATTACH:
  54 + libpw3270_loaded();
  55 + break;
  56 +
  57 + case DLL_PROCESS_DETACH:
  58 + libpw3270_unloaded();
  59 + break;
  60 + }
  61 +
  62 + return TRUE;
  63 +}
  64 +
  65 +#endif // WIN32
  66 +
  67 +int libpw3270_loaded(void)
  68 +{
  69 + trace("%s",__FUNCTION__);
  70 + return 0;
  71 +}
  72 +
  73 +int libpw3270_unloaded(void)
  74 +{
  75 + trace("%s",__FUNCTION__);
  76 + configuration_deinit();
  77 + return 0;
  78 +}
  79 +
  80 +
  81 +gchar * pw3270_build_filename(GtkWidget *widget, const gchar *first_element, ...)
  82 +{
  83 + va_list args;
  84 + gchar *path;
  85 +
  86 + va_start(args, first_element);
  87 + path = filename_from_va(first_element,args);
  88 + va_end(args);
  89 + return path;
  90 +}
src/pw3270/window.c
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin 18 * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19 * St, Fifth Floor, Boston, MA 02110-1301 USA 19 * St, Fifth Floor, Boston, MA 02110-1301 USA
20 * 20 *
21 - * Este programa está nomeado como mainwindow.c e possui - linhas de código. 21 + * Este programa está nomeado como window.c e possui - linhas de código.
22 * 22 *
23 * Contatos: 23 * Contatos:
24 * 24 *
@@ -149,8 +149,6 @@ @@ -149,8 +149,6 @@
149 149
150 static void pw3270_class_init(pw3270Class *klass) 150 static void pw3270_class_init(pw3270Class *klass)
151 { 151 {
152 -// GObjectClass * gobject_class = G_OBJECT_CLASS(klass);  
153 -  
154 #if GTK_CHECK_VERSION(3,0,0) 152 #if GTK_CHECK_VERSION(3,0,0)
155 GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); 153 GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass);
156 widget_class->destroy = pw3270_destroy; 154 widget_class->destroy = pw3270_destroy;
@@ -161,6 +159,7 @@ @@ -161,6 +159,7 @@
161 } 159 }
162 #endif // GTK3 160 #endif // GTK3
163 161
  162 + configuration_init();
164 lib3270_set_popup_handler(popup_handler); 163 lib3270_set_popup_handler(popup_handler);
165 164
166 } 165 }
@@ -426,7 +425,7 @@ @@ -426,7 +425,7 @@
426 425
427 // Load UI 426 // Load UI
428 { 427 {
429 - gchar *path = build_data_filename("ui",NULL); 428 + gchar *path = pw3270_build_filename(GTK_WIDGET(widget),"ui",NULL);
430 429
431 if(ui_parse_xml_folder(GTK_WINDOW(widget),path,groupname,popupname,widget->terminal,widget_setup)) 430 if(ui_parse_xml_folder(GTK_WINDOW(widget),path,groupname,popupname,widget->terminal,widget_setup))
432 { 431 {