From 73a8eff3196a9df1501e114a032a0017e92d37e1 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 15 Feb 2013 10:59:13 +0000 Subject: [PATCH] Incluindo suporte a macros no widget do emulador --- macros.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ sources.mak | 2 +- widget.c | 41 ----------------------------------------- 3 files changed, 121 insertions(+), 42 deletions(-) create mode 100644 macros.c diff --git a/macros.c b/macros.c new file mode 100644 index 0000000..2d11a5c --- /dev/null +++ b/macros.c @@ -0,0 +1,120 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como macros.c e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * licinio@bb.com.br (Licínio Luis Branco) + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) + * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) + * + */ + + #include "private.h" + #include + +/*--[ Implement ]------------------------------------------------------------------------------------*/ + + static int v3270_macro_copy(GtkWidget *widget, int argc, const char **argv) + { + v3270_copy(widget, V3270_SELECT_TEXT, FALSE); + return 0; + } + + static int v3270_macro_append(GtkWidget *widget, int argc, const char **argv) + { + v3270_copy_append(widget); + return 0; + } + + static int run_macro(GtkWidget *widget, int argc, const char **argv) + { + #define V3270_MACRO( name ) { #name, v3270_macro_ ## name } + + static const struct _list + { + const char *name; + int (*exec)(GtkWidget *widget, int argc, const char **argv); + } list[] = + { + V3270_MACRO( copy ), + V3270_MACRO( append ), + }; + + int f; + gchar *rsp; + + for(f=0;fhost,argv); + if(rsp) + { + g_free(rsp); + return 0; + } + + return -1; + } + + int v3270_run_script(GtkWidget *widget, const gchar *script) +{ + gchar **ln; + int f; + + if(!script) + return 0; + + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); + + ln = g_strsplit(script,"\n",-1); + + for(f=0;ln[f];f++) + { + GError * error = NULL; + gint argc = 0; + gchar **argv = NULL; + + if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error)) + { + run_macro(widget, argc, (const char **) argv); + } + else + { + g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message); + g_error_free(error); + } + + if(argv) + g_strfreev(argv); + + } + + g_strfreev(ln); + + return 0; +} + diff --git a/sources.mak b/sources.mak index 83c5203..eeecbef 100644 --- a/sources.mak +++ b/sources.mak @@ -27,5 +27,5 @@ # V3270_SRC=marshal.c widget.c oia.c iocallback.c keyboard.c draw.c mouse.c selection.c \ - accessible.c security.c + accessible.c security.c macros.c diff --git a/widget.c b/widget.c index 424c244..4148a77 100644 --- a/widget.c +++ b/widget.c @@ -1544,44 +1544,3 @@ gboolean v3270_is_connected(GtkWidget *widget) return lib3270_connected(GTK_V3270(widget)->host) ? TRUE : FALSE; } -int v3270_run_script(GtkWidget *widget, const gchar *script) -{ - gchar **ln; - int f; - H3270 * hSession; - - if(!script) - return 0; - - g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); - - hSession = v3270_get_session(widget); - ln = g_strsplit(script,"\n",-1); - - for(f=0;ln[f];f++) - { - GError * error = NULL; - gint argc = 0; - gchar **argv = NULL; - - if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error)) - { - gchar *rsp = lib3270_run_macro(hSession,(const gchar **) argv); - if(rsp) - g_free(rsp); - } - else - { - g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message); - g_error_free(error); - } - - if(argv) - g_strfreev(argv); - - } - - g_strfreev(ln); - - return 0; -} -- libgit2 0.21.2