Commit 73a8eff3196a9df1501e114a032a0017e92d37e1

Authored by perry.werneck@gmail.com
1 parent 522fe180
Exists in master and in 1 other branch develop

Incluindo suporte a macros no widget do emulador

Showing 3 changed files with 121 additions and 42 deletions   Show diff stats
macros.c 0 → 100644
... ... @@ -0,0 +1,120 @@
  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 macros.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 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda)
  30 + *
  31 + */
  32 +
  33 + #include "private.h"
  34 + #include <lib3270/macros.h>
  35 +
  36 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  37 +
  38 + static int v3270_macro_copy(GtkWidget *widget, int argc, const char **argv)
  39 + {
  40 + v3270_copy(widget, V3270_SELECT_TEXT, FALSE);
  41 + return 0;
  42 + }
  43 +
  44 + static int v3270_macro_append(GtkWidget *widget, int argc, const char **argv)
  45 + {
  46 + v3270_copy_append(widget);
  47 + return 0;
  48 + }
  49 +
  50 + static int run_macro(GtkWidget *widget, int argc, const char **argv)
  51 + {
  52 + #define V3270_MACRO( name ) { #name, v3270_macro_ ## name }
  53 +
  54 + static const struct _list
  55 + {
  56 + const char *name;
  57 + int (*exec)(GtkWidget *widget, int argc, const char **argv);
  58 + } list[] =
  59 + {
  60 + V3270_MACRO( copy ),
  61 + V3270_MACRO( append ),
  62 + };
  63 +
  64 + int f;
  65 + gchar *rsp;
  66 +
  67 + for(f=0;f<G_N_ELEMENTS(list);f++)
  68 + {
  69 + if(!g_ascii_strcasecmp(argv[0],list[f].name))
  70 + return list[f].exec(widget,argc,argv);
  71 + }
  72 +
  73 + rsp = lib3270_run_macro(GTK_V3270(widget)->host,argv);
  74 + if(rsp)
  75 + {
  76 + g_free(rsp);
  77 + return 0;
  78 + }
  79 +
  80 + return -1;
  81 + }
  82 +
  83 + int v3270_run_script(GtkWidget *widget, const gchar *script)
  84 +{
  85 + gchar **ln;
  86 + int f;
  87 +
  88 + if(!script)
  89 + return 0;
  90 +
  91 + g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
  92 +
  93 + ln = g_strsplit(script,"\n",-1);
  94 +
  95 + for(f=0;ln[f];f++)
  96 + {
  97 + GError * error = NULL;
  98 + gint argc = 0;
  99 + gchar **argv = NULL;
  100 +
  101 + if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error))
  102 + {
  103 + run_macro(widget, argc, (const char **) argv);
  104 + }
  105 + else
  106 + {
  107 + g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message);
  108 + g_error_free(error);
  109 + }
  110 +
  111 + if(argv)
  112 + g_strfreev(argv);
  113 +
  114 + }
  115 +
  116 + g_strfreev(ln);
  117 +
  118 + return 0;
  119 +}
  120 +
... ...
sources.mak
... ... @@ -27,5 +27,5 @@
27 27 #
28 28  
29 29 V3270_SRC=marshal.c widget.c oia.c iocallback.c keyboard.c draw.c mouse.c selection.c \
30   - accessible.c security.c
  30 + accessible.c security.c macros.c
31 31  
... ...
widget.c
... ... @@ -1544,44 +1544,3 @@ gboolean v3270_is_connected(GtkWidget *widget)
1544 1544 return lib3270_connected(GTK_V3270(widget)->host) ? TRUE : FALSE;
1545 1545 }
1546 1546  
1547   -int v3270_run_script(GtkWidget *widget, const gchar *script)
1548   -{
1549   - gchar **ln;
1550   - int f;
1551   - H3270 * hSession;
1552   -
1553   - if(!script)
1554   - return 0;
1555   -
1556   - g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL);
1557   -
1558   - hSession = v3270_get_session(widget);
1559   - ln = g_strsplit(script,"\n",-1);
1560   -
1561   - for(f=0;ln[f];f++)
1562   - {
1563   - GError * error = NULL;
1564   - gint argc = 0;
1565   - gchar **argv = NULL;
1566   -
1567   - if(g_shell_parse_argv(g_strstrip(ln[f]),&argc,&argv,&error))
1568   - {
1569   - gchar *rsp = lib3270_run_macro(hSession,(const gchar **) argv);
1570   - if(rsp)
1571   - g_free(rsp);
1572   - }
1573   - else
1574   - {
1575   - g_warning("Error parsing \"%s\": %s",g_strstrip(ln[f]),error->message);
1576   - g_error_free(error);
1577   - }
1578   -
1579   - if(argv)
1580   - g_strfreev(argv);
1581   -
1582   - }
1583   -
1584   - g_strfreev(ln);
1585   -
1586   - return 0;
1587   -}
... ...