From 4baad403775c49eb7fafd4957ace935effe51545 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 15 Feb 2013 10:34:11 +0000 Subject: [PATCH] Implementando macros no widget do emulador --- pw3270.cbp | 4 ++++ src/include/pw3270/v3270.h | 1 + src/pw3270/actions.c | 12 ++++++++---- src/pw3270/v3270/widget.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 4 deletions(-) diff --git a/pw3270.cbp b/pw3270.cbp index 93d0b2c..c093a20 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -291,9 +291,13 @@ + + + diff --git a/src/include/pw3270/v3270.h b/src/include/pw3270/v3270.h index 6ca2b47..ff505ff 100644 --- a/src/include/pw3270/v3270.h +++ b/src/include/pw3270/v3270.h @@ -157,6 +157,7 @@ LIB3270_EXPORT const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); LIB3270_EXPORT const gchar * v3270_copy_append(GtkWidget *widget); + LIB3270_EXPORT int v3270_run_script(GtkWidget *widget, const gchar *script); LIB3270_EXPORT const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut); LIB3270_EXPORT const gchar * v3270_get_copy(GtkWidget *widget); diff --git a/src/pw3270/actions.c b/src/pw3270/actions.c index 17a2cd0..1870be7 100644 --- a/src/pw3270/actions.c +++ b/src/pw3270/actions.c @@ -861,10 +861,15 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash } static void action_text_script(GtkAction *action, GtkWidget *widget) -{ +{ + v3270_run_script(widget,g_object_get_data(G_OBJECT(action),"script_text")); + +/* gchar **ln = g_strsplit(g_object_get_data(G_OBJECT(action),"script_text"),"\n",-1); int f; H3270 * hSession = v3270_get_session(widget); + + lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); for(f=0;ln[f];f++) { @@ -893,7 +898,8 @@ static void action_text_script(GtkAction *action, GtkWidget *widget) } - g_strfreev(ln); + g_strfreev(ln); +*/ } void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *script_text, GError **error) @@ -902,8 +908,6 @@ void ui_connect_text_script(GtkWidget *widget, GtkAction *action, const gchar *s gchar *text = g_strdup(base); g_free(base); - lib3270_trace_event(v3270_get_session(widget),"Action %s activated on widget %p\n",gtk_action_get_name(action),widget); - gtk_action_set_sensitive(action,TRUE); g_object_set_data_full(G_OBJECT(action),"script_text",text,g_free); g_signal_connect(action,"activate",G_CALLBACK(action_text_script),widget); diff --git a/src/pw3270/v3270/widget.c b/src/pw3270/v3270/widget.c index 5779a64..424c244 100644 --- a/src/pw3270/v3270/widget.c +++ b/src/pw3270/v3270/widget.c @@ -33,6 +33,7 @@ #include #include #include + #include #include #ifdef HAVE_MALLOC_H @@ -1542,3 +1543,45 @@ gboolean v3270_is_connected(GtkWidget *widget) g_return_val_if_fail(GTK_IS_V3270(widget),FALSE); 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