From ae4b6698cea3aaeef923e62153794bbdbb8eddcf Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Wed, 18 Apr 2012 20:39:25 +0000 Subject: [PATCH] Trabalhando no novo mecanismo de trace --- src/gtk/actions.c | 49 ++++++++++++++++++++++++++++++++----------------- src/include/lib3270/trace.h | 30 ++++++++++++++++++++++++++++++ src/lib3270/trace_ds.c | 57 +++++++++++++++++++++++++++++++++++++++++++++------------ ui/99debug.xml | 11 +++-------- 4 files changed, 110 insertions(+), 37 deletions(-) diff --git a/src/gtk/actions.c b/src/gtk/actions.c index 1395f8d..7a53c2a 100644 --- a/src/gtk/actions.c +++ b/src/gtk/actions.c @@ -34,17 +34,27 @@ #include "v3270/v3270.h" #include #include + #include #include #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 + #ifdef X3270_TRACE + #define trace_action(a,w) lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(a),w); + #else + #define trace_action(a,w) /* */ + #endif // X3270_TRACE + + /*--[ Implement ]------------------------------------------------------------------------------------*/ static void lib3270_action(GtkAction *action, GtkWidget *widget) { int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call"); - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + + trace_action(action,widget); + call(v3270_get_session(widget)); } @@ -52,7 +62,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) { gchar *host = (gchar *) g_object_get_data(G_OBJECT(action),"host"); - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); if(host) { @@ -74,24 +84,24 @@ static void connect_action(GtkAction *action, GtkWidget *widget) static void nop_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); } static void disconnect_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); v3270_disconnect(widget); } static void activate_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); gtk_widget_activate(widget); } static void reload_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); v3270_reload(widget); } @@ -124,25 +134,25 @@ static void copy_action(GtkAction *action, GtkWidget *widget) } } - trace("Action %s activated on widget %p mode=%d",gtk_action_get_name(action),widget,(int) mode); + trace_action(action,widget); v3270_copy(widget,mode); } static void append_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); v3270_copy_append(widget); } static void paste_clipboard_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); v3270_paste(widget); } static void paste_next_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); lib3270_pastenext(v3270_get_session(widget)); } @@ -220,7 +230,7 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) { LIB3270_TOGGLE toggle = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); - trace("Action %s toggled on widget %p (id=%d)",gtk_action_get_name(GTK_ACTION(action)),widget,(int) toggle); + lib3270_trace_event(NULL,"Action %s toggled on widget %p (id=%d)\n",gtk_action_get_name(GTK_ACTION(action)),widget,(int) toggle); if(toggle == TOGGLE_GDKDEBUG) gdk_window_set_debug_updates(gtk_toggle_action_get_active(action)); @@ -230,14 +240,19 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) static void selection_move_action(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); + trace_action(action,widget); lib3270_move_selection(v3270_get_session(widget),(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); } static void cursor_move_action(GtkAction *action, GtkWidget *widget) { int flags = (int) g_object_get_data(G_OBJECT(action),"move_flags"); - trace("Action %s activated on widget %p flags=%04x",gtk_action_get_name(action),widget,(unsigned short) g_object_get_data(G_OBJECT(action),"move_flags")); + + lib3270_trace_event(NULL,"Action %s activated on widget %p flags=%04x\n", + gtk_action_get_name(action), + widget, + (unsigned int) g_object_get_data(G_OBJECT(action),"move_flags")); + lib3270_move_cursor(v3270_get_session(widget),(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); } @@ -271,27 +286,27 @@ static void connect_move_action(GtkAction *action, GtkWidget *widget, const gcha static void action_pfkey(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p key=%p",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pfkey")); + lib3270_trace_event(NULL,"Action %s activated on widget %p key=%p\n",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pfkey")); lib3270_pfkey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pfkey")); } static void action_pakey(GtkAction *action, GtkWidget *widget) { - trace("Action %s activated on widget %p key=%p",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pakey")); + lib3270_trace_event(NULL,"Action %s activated on widget %p key=%p\n",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pakey")); lib3270_pakey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pakey")); } static void action_set_toggle(GtkAction *action, GtkWidget *widget) { LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); - trace("Action %s activated on widget %p toggle=%d",gtk_action_get_name(action),widget,id); + lib3270_trace_event(NULL,"Action %s activated on widget %p toggle=%d\n",gtk_action_get_name(action),widget,id); lib3270_set_toggle(v3270_get_session(widget),id,1); } static void action_reset_toggle(GtkAction *action, GtkWidget *widget) { LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); - trace("Action %s activated on widget %p toggle=%d",gtk_action_get_name(action),widget,id); + lib3270_trace_event(NULL,"Action %s activated on widget %p toggle=%d\n",gtk_action_get_name(action),widget,id); lib3270_set_toggle(v3270_get_session(widget),id,0); } diff --git a/src/include/lib3270/trace.h b/src/include/lib3270/trace.h index 9ca25af..00344e1 100644 --- a/src/include/lib3270/trace.h +++ b/src/include/lib3270/trace.h @@ -33,5 +33,35 @@ #define LIB3270_TRACE_H_INCLUDED 1 + /** + * Set trace handle callback. + * + * @param handle Callback to write in trace file or show trace window (NULL send all trace to stdout). + * + */ + LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) ); + + /** + * Write on trace file. + * + * Write text on trace file, if DStrace is enabled. + * + * @param fmt String format. + * @param ... Arguments. + * + */ + LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...); + + /** + * Write on trace file. + * + * Write text on trace file, if event is enabled. + * + * @param fmt String format. + * @param ... Arguments. + * + */ + LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...); + #endif // LIB3270_TRACE_H_INCLUDED diff --git a/src/lib3270/trace_ds.c b/src/lib3270/trace_ds.c index bed9ed8..535d3a7 100644 --- a/src/lib3270/trace_ds.c +++ b/src/lib3270/trace_ds.c @@ -74,14 +74,14 @@ #define MAX_HEADER_SIZE (10*1024) /* Minimum size of a trace file. */ -#define MIN_TRACEFILE_SIZE (64*1024) -#define MIN_TRACEFILE_SIZE_NAME "64K" +// #define MIN_TRACEFILE_SIZE (64*1024) +// #define MIN_TRACEFILE_SIZE_NAME "64K" /* System calls which may not be there. */ -#if !defined(HAVE_FSEEKO) /*[*/ -#define fseeko(s, o, w) fseek(s, (long)o, w) -#define ftello(s) (off_t)ftell(s) -#endif /*]*/ +// #if !defined(HAVE_FSEEKO) +// #define fseeko(s, o, w) fseek(s, (long)o, w) +// #define ftello(s) (off_t)ftell(s) +// #endif // #include @@ -106,16 +106,22 @@ static int dscnt = 0; // static char *tracef_midpoint_header = CN; // static off_t tracef_midpoint = 0; -static void __vwtrace(const char *fmt, va_list args); +static void __vwtrace(H3270 *session, const char *fmt, va_list args); static void wtrace(const char *fmt, ...); // static char *create_tracefile_header(const char *mode); static void stop_tracing(void); /* Globals */ struct timeval ds_ts; -static void (*vwtrace)(const char *fmt, va_list args) = __vwtrace; +static void (*vwtrace)(H3270 *session, const char *fmt, va_list args) = __vwtrace; Boolean trace_skipping = False; + +LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) ) +{ + vwtrace = handler ? handler : __vwtrace; +} + /* display a (row,col) */ const char * rcba(int baddr) @@ -217,7 +223,7 @@ trace_event(const char *fmt, ...) /* print out message */ va_start(args, fmt); - vwtrace(fmt, args); + vwtrace(&h3270,fmt, args); va_end(args); } @@ -232,7 +238,7 @@ trace_dsn(const char *fmt, ...) /* print out message */ va_start(args, fmt); - vwtrace(fmt, args); + vwtrace(&h3270,fmt, args); va_end(args); } @@ -241,9 +247,10 @@ trace_dsn(const char *fmt, ...) * This is the only function that actually does output to the trace file -- * all others are wrappers around this function. */ -static void __vwtrace(const char *fmt, va_list args) +static void __vwtrace(H3270 *session, const char *fmt, va_list args) { vfprintf(stdout,fmt,args); + fflush(stdout); } /* @@ -272,10 +279,36 @@ static void wtrace(const char *fmt, ...) { va_list args; va_start(args, fmt); - vwtrace(fmt, args); + vwtrace(&h3270,fmt, args); va_end(args); } +LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) +{ + va_list args; + + if(!lib3270_get_toggle(session,LIB3270_TOGGLE_DS_TRACE)) + return; + + va_start(args, fmt); + vwtrace(session,fmt, args); + va_end(args); +} + +LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) +{ + va_list args; + + if(!lib3270_get_toggle(session,LIB3270_TOGGLE_EVENT_TRACE)) + return; + + va_start(args, fmt); + vwtrace(session,fmt, args); + va_end(args); +} + + + /* static void stop_tracing(void) { diff --git a/ui/99debug.xml b/ui/99debug.xml index 400c5f0..8ed848c 100644 --- a/ui/99debug.xml +++ b/ui/99debug.xml @@ -31,16 +31,11 @@ - - - - + + + -- libgit2 0.21.2