diff --git a/Makefile.in b/Makefile.in index 7dc74ff..580900b 100644 --- a/Makefile.in +++ b/Makefile.in @@ -104,7 +104,8 @@ DEPENDS= \ src/include/v3270/*.h \ src/filetransfer/marshal.h \ src/filetransfer/private.h \ - src/terminal/marshal.h + src/terminal/marshal.h \ + src/trace/marshal.h CFLAGS= \ @CFLAGS@ \ @@ -133,7 +134,7 @@ $(OBJDBG)/%.o: \ $(DEPENDS) @echo $< ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(CC) \ $(CFLAGS) \ @@ -145,7 +146,7 @@ $(OBJDBG)/%.o: \ %.rc @echo $< ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(WINDRES) $< -O coff -o $@ %.dll.a: \ @@ -174,7 +175,7 @@ $(OBJRLS)/%.o: \ %.rc @echo $< ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(WINDRES) $< -O coff -o $@ #---[ Misc Rules ]----------------------------------------------------------------------- @@ -183,7 +184,7 @@ $(POTDIR)/$(LIBNAME)/%.pot: \ %.c @echo $(notdir $@) ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(XGETTEXT) \ --language=C \ --keyword=_ \ @@ -207,7 +208,7 @@ src/terminal/marshal.h: \ src/terminal/marshal @echo $@ ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(GENMARSHAL) --prefix=v3270 --header $< > $@ @@ -215,7 +216,7 @@ $(OBJDIR)/marshal/v3270.c: \ src/terminal/marshal @echo $@ ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(GENMARSHAL) --prefix=v3270 --body $< > $@ @@ -224,7 +225,7 @@ src/filetransfer/marshal.h: \ src/filetransfer/marshal @echo $@ ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(GENMARSHAL) --prefix=v3270ft --header $< > $@ @@ -232,16 +233,33 @@ $(OBJDIR)/marshal/v3270ft.c: \ src/filetransfer/marshal @echo $@ ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(GENMARSHAL) --prefix=v3270ft --body $< > $@ +src/trace/marshal.h: \ + src/trace/marshal + + @echo $@ ... + @$(MKDIR) $(@D) + + @$(GENMARSHAL) --prefix=v3270trace --header $< > $@ + +$(OBJDIR)/marshal/trace.c: \ + src/trace/marshal + + @echo $@ ... + @$(MKDIR) $(@D) + + @$(GENMARSHAL) --prefix=v3270trace --body $< > $@ + + $(OBJDIR)/marshal/%.o: \ $(OBJDIR)/marshal/%.c \ $(DEPENDS) @echo $< ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(CC) \ $(CFLAGS) \ @@ -264,9 +282,10 @@ Release: \ $(BINRLS)/$(SONAME): \ $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) \ $(OBJDIR)/marshal/v3270.o \ - $(OBJDIR)/marshal/v3270ft.o + $(OBJDIR)/marshal/v3270ft.o \ + $(OBJDIR)/marshal/trace.o - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ @DLL_LDFLAGS@ \ @@ -280,7 +299,7 @@ $(BINRLS)/static/$(LIBNAME).a: \ $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o) @echo $@ ... - @$(MKDIR) $(dir $@) + @$(MKDIR) $(@D) @$(AR) rcs $@ $^ @@ -402,7 +421,7 @@ $(POTDIR)/$(LIBNAME).pot: \ $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(LIBNAME)/$(SRC).pot) @rm -f $@ - @mkdir -p `dirname $@` + @$(MKDIR) $(@D) @$(MSGCAT) --sort-output $^ > $@ locale: \ @@ -418,7 +437,7 @@ $(BINDBG)/$(LIBNAME)@EXEEXT@: \ $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o) \ $(BINDBG)/$(SONAME) - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ -o $@ \ @@ -454,9 +473,10 @@ endif $(BINDBG)/$(SONAME): \ $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).o) \ $(OBJDIR)/marshal/v3270.o \ - $(OBJDIR)/marshal/v3270ft.o + $(OBJDIR)/marshal/v3270ft.o \ + $(OBJDIR)/marshal/trace.o - @$(MKDIR) `dirname $@` + @$(MKDIR) $(@D) @echo $< ... @$(LD) \ -shared -Wl,-soname,$(@F) \ diff --git a/src/include/v3270.h b/src/include/v3270.h index a0c7101..93249f8 100644 --- a/src/include/v3270.h +++ b/src/include/v3270.h @@ -284,7 +284,6 @@ LIB3270_EXPORT int v3270_save_copy(GtkWidget *widget, const gchar *filename, GError **error); // Misc - LIB3270_EXPORT int v3270_exec_command(GtkWidget *widget, const gchar *cmdline); LIB3270_EXPORT void v3270_zoom_best(GtkWidget *widget); LIB3270_EXPORT void v3270_zoom_in(GtkWidget *widget); LIB3270_EXPORT void v3270_zoom_out(GtkWidget *widget); diff --git a/src/include/v3270/trace.h b/src/include/v3270/trace.h index 6ab5ddc..b85d3dc 100644 --- a/src/include/v3270/trace.h +++ b/src/include/v3270/trace.h @@ -47,6 +47,8 @@ typedef struct _V3270Trace V3270Trace; typedef struct _V3270TraceClass V3270TraceClass; + LIB3270_EXPORT GType V3270Trace_get_type(void); + LIB3270_EXPORT GtkWidget * v3270_trace_new(GtkWidget *terminal); LIB3270_EXPORT void v3270_trace_append_text(GtkWidget *widget, const gchar *text); LIB3270_EXPORT void v3270_trace_vprintf(GtkWidget *widget, const char *fmt, va_list args); @@ -58,6 +60,8 @@ LIB3270_EXPORT void v3270_trace_save(GtkWidget *widget); LIB3270_EXPORT void v3270_trace_select_file(GtkWidget *widget); + LIB3270_EXPORT int v3270_trace_exec_command(GtkWidget *widget, const gchar *cmdline); + LIB3270_EXPORT GtkWidget * v3270_trace_window_new(GtkWidget *widget, const gchar *header); G_END_DECLS diff --git a/src/terminal/properties/init.c b/src/terminal/properties/init.c index d8efced..c29aa4d 100644 --- a/src/terminal/properties/init.c +++ b/src/terminal/properties/init.c @@ -162,7 +162,7 @@ klass->properties.type.toggle = klass->properties.count; for(ix = 0; ix < LIB3270_TOGGLE_COUNT; ix++) { - debug("Property %u=%s (Toggle)",(unsigned int) klass->properties.type.toggle + ix, lib3270_get_toggle_name(ix)); +// debug("Property %u=%s (Toggle)",(unsigned int) klass->properties.type.toggle + ix, lib3270_get_toggle_name(ix)); klass->properties.toggle[ix] = g_param_spec_boolean( @@ -183,7 +183,7 @@ for(ix = 0; bool_props[ix].name; ix++) { - debug("Property %u=%s (Boolean)",(unsigned int) klass->properties.type.boolean + ix, bool_props[ix].name); +// debug("Property %u=%s (Boolean)",(unsigned int) klass->properties.type.boolean + ix, bool_props[ix].name); spec = g_param_spec_boolean( bool_props[ix].name, bool_props[ix].name, @@ -202,7 +202,7 @@ for(ix = 0; int_props[ix].name; ix++) { - debug("Property %u=%s (Integer)",(unsigned int) klass->properties.type.integer + ix, int_props[ix].name); +// debug("Property %u=%s (Integer)",(unsigned int) klass->properties.type.integer + ix, int_props[ix].name); spec = g_param_spec_int( int_props[ix].name, @@ -224,7 +224,7 @@ for(ix = 0; uint_props[ix].name; ix++) { - debug("Property %u=%s (unsigned)",(unsigned int) klass->properties.type.integer + ix, uint_props[ix].name); +// debug("Property %u=%s (unsigned)",(unsigned int) klass->properties.type.integer + ix, uint_props[ix].name); spec = g_param_spec_uint( uint_props[ix].name, @@ -247,7 +247,7 @@ for(ix = 0; str_props[ix].name; ix++) { - debug("Property %u=%s (String)",(unsigned int) klass->properties.type.str + ix, str_props[ix].name); +// debug("Property %u=%s (String)",(unsigned int) klass->properties.type.str + ix, str_props[ix].name); spec = g_param_spec_string( str_props[ix].name, diff --git a/src/testprogram/testprogram.c b/src/testprogram/testprogram.c index 726001b..fc8bcfb 100644 --- a/src/testprogram/testprogram.c +++ b/src/testprogram/testprogram.c @@ -70,7 +70,9 @@ } // Create trace window - gtk_notebook_append_page(GTK_NOTEBOOK(notebook),v3270_trace_new(terminal),gtk_label_new("Trace")); + GtkWidget *trace = v3270_trace_new(terminal); + debug("Trace=%p",trace); + gtk_notebook_append_page(GTK_NOTEBOOK(notebook),trace,gtk_label_new("Trace")); // v3270_trace_window_new(terminal,NULL); // Setup and show main window diff --git a/src/trace/exec.c b/src/trace/exec.c index 5c5eceb..3980230 100644 --- a/src/trace/exec.c +++ b/src/trace/exec.c @@ -27,22 +27,11 @@ * */ - #include + #include "private.h" - #define ENABLE_NLS - #define GETTEXT_PACKAGE PACKAGE_NAME - - #include - #include #include - - #include - #include - #include #include #include - #include - #include #include static const gchar * get_word(gchar **ptr) @@ -155,28 +144,28 @@ return 0; } - int v3270_exec_command(GtkWidget *widget, const gchar *text) + int v3270_trace_exec_command(GtkWidget *t, const gchar *text) { -// size_t ix; - g_return_val_if_fail(GTK_IS_V3270(widget),EINVAL); + g_return_val_if_fail(GTK_IS_V3270_TRACE(t),EINVAL); - H3270 *hSession = v3270_get_session(widget); - g_autofree gchar * cmdline = g_strdup(text); + V3270Trace * trace = GTK_V3270_TRACE(t); + H3270 * hSession = v3270_get_session(trace->terminal); + g_autofree gchar * cmdline = g_strdup(text); g_strstrip(cmdline); - debug("cmdline: \"%s\"",cmdline); + debug("cmdline: \"%s\" widget=%p",cmdline,t); if(g_str_has_prefix(cmdline,"reload")) { - v3270_reload(widget); + v3270_reload(trace->terminal); return 0; } if(g_str_has_prefix(cmdline,"reconfigure")) { - v3270_reconfigure(GTK_V3270(widget)); + v3270_reconfigure(GTK_V3270(trace->terminal)); return 0; } @@ -195,15 +184,15 @@ if(!(*arg && g_ascii_strcasecmp(arg,"text"))) { // No argument or "text" copy text. - v3270_copy_selection(widget, V3270_SELECT_TEXT, FALSE); + v3270_copy_selection(trace->terminal, V3270_SELECT_TEXT, FALSE); } else if(!g_ascii_strcasecmp(arg,"table")) { - v3270_copy_selection(widget, V3270_SELECT_TABLE, FALSE); + v3270_copy_selection(trace->terminal, V3270_SELECT_TABLE, FALSE); } else if(!g_ascii_strcasecmp(arg,"append")) { - v3270_append_selection(widget,FALSE); + v3270_append_selection(trace->terminal,FALSE); } else { @@ -223,15 +212,15 @@ if(!(*arg && g_ascii_strcasecmp(arg,"all"))) { // No argument or "text" copy text. - v3270_print_all(widget,NULL); + v3270_print_all(trace->terminal,NULL); } else if(!g_ascii_strcasecmp(arg,"selected")) { - v3270_print_selected(widget,NULL); + v3270_print_selected(trace->terminal,NULL); } else if(!g_ascii_strcasecmp(arg,"copy")) { - v3270_print_copy(widget,NULL); + v3270_print_copy(trace->terminal,NULL); } else { @@ -250,11 +239,11 @@ if(!*arg) { - v3270_paste(widget); + v3270_paste(trace->terminal); } else if(!g_ascii_strcasecmp(arg,"text")) { - v3270_paste_text(widget); + v3270_paste_text(trace->terminal); } else { @@ -269,7 +258,7 @@ gchar * str = strchr(cmdline,'?'); *str = 0; g_strstrip(cmdline); - return get_property(widget,cmdline); + return get_property(trace->terminal,cmdline); } if(strchr(cmdline,'=')) @@ -278,14 +267,14 @@ *(value++) = 0; g_strstrip(cmdline); g_strstrip(value); - return set_property(widget,cmdline,value); + return set_property(trace->terminal,cmdline,value); } if(g_str_has_prefix(cmdline,"remap")) { gchar *txtptr = cmdline+5; g_strstrip(txtptr); - v3270_set_remap_filename(widget,txtptr); + v3270_set_remap_filename(trace->terminal,txtptr); return 0; } @@ -294,7 +283,7 @@ gchar *txtptr = cmdline+3; const gchar * name = get_word(&txtptr); g_strstrip(txtptr); - return set_property(widget,name,(*txtptr ? txtptr : "1")); + return set_property(trace->terminal,name,(*txtptr ? txtptr : "1")); } if(g_str_has_prefix(cmdline,"get")) @@ -302,7 +291,7 @@ gchar *txtptr = cmdline+3; const gchar * name = get_word(&txtptr); g_strstrip(txtptr); - return get_property(widget,name); + return get_property(trace->terminal,name); } if(g_str_has_prefix(cmdline,"reset")) @@ -310,45 +299,38 @@ gchar *txtptr = cmdline+3; const gchar * name = get_word(&txtptr); g_strstrip(txtptr); - return set_property(widget,name,(*txtptr ? txtptr : "0")); + return set_property(trace->terminal,name,(*txtptr ? txtptr : "0")); } gchar * sep = strchr(cmdline,'='); if(sep) { *(sep++) = 0; - return set_property(widget,g_strstrip(cmdline),g_strstrip(sep)); + return set_property(trace->terminal,g_strstrip(cmdline),g_strstrip(sep)); } else { - const LIB3270_ACTION * action = lib3270_get_action(cmdline); + const LIB3270_ACTION * action = lib3270_action_get_by_name(cmdline); if(action) return lib3270_action_activate(action,hSession); - /* - // Check for lib3270 actions. - const LIB3270_ACTION * actions = lib3270_get_actions(); + } - for(ix=0; actions[ix].name; ix++) - { - if(!g_ascii_strcasecmp(actions[ix].name,cmdline)) - { - if(actions[ix].enabled(hSession)) - { - lib3270_trace_event(hSession,"Activating action \"%s\"\n",actions[ix].name); - return actions[ix].activate(hSession); - } - else - { - lib3270_trace_event(hSession,"Action \"%s\" is disabled\n",actions[ix].name); - return EPERM; - } - } - } - */ + // Check for external interpreters + gboolean handled = FALSE; + gchar * args = cmdline; - } + while(*args && !g_ascii_isspace(*args)) + args++; + + if(*args) + *(args++) = 0; + + g_signal_emit(GTK_WIDGET(trace), v3270_trace_signal[V3270_TRACE_SIGNAL_COMMAND], 0, cmdline, args, &handled); + + if(handled) + return 0; return errno = ENOENT; } diff --git a/src/trace/marshal b/src/trace/marshal new file mode 100644 index 0000000..db9e8e1 --- /dev/null +++ b/src/trace/marshal @@ -0,0 +1,2 @@ +BOOLEAN:POINTER,POINTER + diff --git a/src/trace/private.h b/src/trace/private.h new file mode 100644 index 0000000..6fab6c3 --- /dev/null +++ b/src/trace/private.h @@ -0,0 +1,97 @@ +/* + * "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 private.h e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +#ifndef PRIVATE_H_INCLUDED + + #include + + #include + + #define ENABLE_NLS + #define GETTEXT_PACKAGE PACKAGE_NAME + + #include + #include + + #include + #include + + #include + #include + #include + + /// @brief V3270 Trace Signal list + enum + { + V3270_TRACE_SIGNAL_COMMAND, + + V3270_TRACE_SIGNAL_LAST + }; + + G_GNUC_INTERNAL guint v3270_trace_signal[V3270_TRACE_SIGNAL_LAST]; + + G_BEGIN_DECLS + + struct _V3270TraceClass + { + GtkBoxClass parent_class; + + }; + + struct _V3270Trace + { + + GtkBox parent; + H3270 * hSession; ///< @brief TN3270 Session. + GtkWidget * terminal; ///< @brief V3270 Widget. + GtkScrolledWindow * scroll; + + GtkTextView * view; ///< @brief Text view; + GtkTextBuffer * text; ///< @brief Trace window contents. + GtkEntry * entry; ///< @brief Command line entry. + GtkWidget * buttons; ///< @brief Button bar. + + gchar * filename; ///< @brief Selected file name. + + guint log_handler; ///< @brief GTK Log Handler. + + /// @brief lib3270's saved trace handler. + struct { + void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args); + void *userdata; + } trace; + + }; + + G_END_DECLS + + + +#endif // PRIVATE_H_INCLUDED + diff --git a/src/trace/trace.c b/src/trace/trace.c index 989c2b5..2726e92 100644 --- a/src/trace/trace.c +++ b/src/trace/trace.c @@ -36,62 +36,17 @@ * */ - #include + #include "private.h" - #define ENABLE_NLS - #define GETTEXT_PACKAGE PACKAGE_NAME - - #include - #include - - #include - #include - #include - #include + #include #include - #include - #include #include - -#if defined( HAVE_SYSLOG ) - #include -#endif // HAVE_SYSLOG + #include + #include "marshal.h" /*--[ Widget definition ]----------------------------------------------------------------------------*/ - G_BEGIN_DECLS - - struct _V3270TraceClass - { - GtkBoxClass parent_class; - - }; - - struct _V3270Trace - { - GtkBox parent; - H3270 * hSession; ///< @brief TN3270 Session. - GtkWidget * terminal; ///< @brief V3270 Widget. - GtkScrolledWindow * scroll; - - GtkTextView * view; ///< @brief Text view; - GtkTextBuffer * text; ///< @brief Trace window contents. - GtkEntry * entry; ///< @brief Command line entry. - GtkWidget * buttons; ///< @brief Button bar. - - gchar * filename; ///< @brief Selected file name. - - guint log_handler; ///< @brief GTK Log Handler. - - /// @brief lib3270's saved trace handler. - struct { - void (*handler)(H3270 *session, void *userdata, const char *fmt, va_list args); - void *userdata; - } trace; - - }; - - G_END_DECLS + guint v3270_trace_signal[V3270_TRACE_SIGNAL_LAST] = { 0 }; G_DEFINE_TYPE(V3270Trace, V3270Trace, GTK_TYPE_BOX); @@ -151,9 +106,23 @@ G_OBJECT_CLASS(V3270Trace_parent_class)->finalize(object); } - static void V3270Trace_class_init(G_GNUC_UNUSED V3270TraceClass *klass) + static void V3270Trace_class_init(V3270TraceClass *klass) { - G_OBJECT_CLASS(klass)->finalize = finalize; + GObjectClass * gobject_class = G_OBJECT_CLASS(klass); + + gobject_class->finalize = finalize; + + v3270_trace_signal[V3270_TRACE_SIGNAL_COMMAND] = + g_signal_new( "command", + G_OBJECT_CLASS_TYPE(klass), + G_SIGNAL_RUN_LAST, + 0, + NULL, NULL, + v3270trace_BOOLEAN__POINTER_POINTER, + G_TYPE_BOOLEAN, 2, G_TYPE_POINTER, G_TYPE_POINTER); + + + } static void v3270_trace_execute(GtkWidget *widget, const gchar *cmd) @@ -167,7 +136,7 @@ if(trace->terminal) { - int rc = v3270_exec_command(trace->terminal,cmd); + int rc = v3270_trace_exec_command(widget,cmd); if(rc) v3270_trace_printf(widget, "rc=%d (%s)\n",rc,strerror(rc)); } @@ -249,6 +218,9 @@ static void V3270Trace_init(V3270Trace *widget) { + + debug("%s(%p)",__FUNCTION__,widget); + gtk_orientable_set_orientation(GTK_ORIENTABLE(widget),GTK_ORIENTATION_VERTICAL); // Create toolbar diff --git a/v3270.cbp b/v3270.cbp index dd07b50..1e03a4d 100644 --- a/v3270.cbp +++ b/v3270.cbp @@ -294,6 +294,7 @@ + -- libgit2 0.21.2