Commit ae4b6698cea3aaeef923e62153794bbdbb8eddcf
1 parent
d088caa0
Exists in
master
and in
5 other branches
Trabalhando no novo mecanismo de trace
Showing
4 changed files
with
110 additions
and
37 deletions
Show diff stats
src/gtk/actions.c
| ... | ... | @@ -34,17 +34,27 @@ |
| 34 | 34 | #include "v3270/v3270.h" |
| 35 | 35 | #include <lib3270/actions.h> |
| 36 | 36 | #include <lib3270/selection.h> |
| 37 | + #include <lib3270/trace.h> | |
| 37 | 38 | #include <stdlib.h> |
| 38 | 39 | |
| 39 | 40 | #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) |
| 40 | 41 | #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 |
| 41 | 42 | |
| 43 | + #ifdef X3270_TRACE | |
| 44 | + #define trace_action(a,w) lib3270_trace_event(NULL,"Action %s activated on widget %p\n",gtk_action_get_name(a),w); | |
| 45 | + #else | |
| 46 | + #define trace_action(a,w) /* */ | |
| 47 | + #endif // X3270_TRACE | |
| 48 | + | |
| 49 | + | |
| 42 | 50 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 43 | 51 | |
| 44 | 52 | static void lib3270_action(GtkAction *action, GtkWidget *widget) |
| 45 | 53 | { |
| 46 | 54 | int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call"); |
| 47 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 55 | + | |
| 56 | + trace_action(action,widget); | |
| 57 | + | |
| 48 | 58 | call(v3270_get_session(widget)); |
| 49 | 59 | } |
| 50 | 60 | |
| ... | ... | @@ -52,7 +62,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) |
| 52 | 62 | { |
| 53 | 63 | gchar *host = (gchar *) g_object_get_data(G_OBJECT(action),"host"); |
| 54 | 64 | |
| 55 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 65 | + trace_action(action,widget); | |
| 56 | 66 | |
| 57 | 67 | if(host) |
| 58 | 68 | { |
| ... | ... | @@ -74,24 +84,24 @@ static void connect_action(GtkAction *action, GtkWidget *widget) |
| 74 | 84 | |
| 75 | 85 | static void nop_action(GtkAction *action, GtkWidget *widget) |
| 76 | 86 | { |
| 77 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 87 | + trace_action(action,widget); | |
| 78 | 88 | } |
| 79 | 89 | |
| 80 | 90 | static void disconnect_action(GtkAction *action, GtkWidget *widget) |
| 81 | 91 | { |
| 82 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 92 | + trace_action(action,widget); | |
| 83 | 93 | v3270_disconnect(widget); |
| 84 | 94 | } |
| 85 | 95 | |
| 86 | 96 | static void activate_action(GtkAction *action, GtkWidget *widget) |
| 87 | 97 | { |
| 88 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 98 | + trace_action(action,widget); | |
| 89 | 99 | gtk_widget_activate(widget); |
| 90 | 100 | } |
| 91 | 101 | |
| 92 | 102 | static void reload_action(GtkAction *action, GtkWidget *widget) |
| 93 | 103 | { |
| 94 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 104 | + trace_action(action,widget); | |
| 95 | 105 | v3270_reload(widget); |
| 96 | 106 | } |
| 97 | 107 | |
| ... | ... | @@ -124,25 +134,25 @@ static void copy_action(GtkAction *action, GtkWidget *widget) |
| 124 | 134 | } |
| 125 | 135 | } |
| 126 | 136 | |
| 127 | - trace("Action %s activated on widget %p mode=%d",gtk_action_get_name(action),widget,(int) mode); | |
| 137 | + trace_action(action,widget); | |
| 128 | 138 | v3270_copy(widget,mode); |
| 129 | 139 | } |
| 130 | 140 | |
| 131 | 141 | static void append_action(GtkAction *action, GtkWidget *widget) |
| 132 | 142 | { |
| 133 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 143 | + trace_action(action,widget); | |
| 134 | 144 | v3270_copy_append(widget); |
| 135 | 145 | } |
| 136 | 146 | |
| 137 | 147 | static void paste_clipboard_action(GtkAction *action, GtkWidget *widget) |
| 138 | 148 | { |
| 139 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 149 | + trace_action(action,widget); | |
| 140 | 150 | v3270_paste(widget); |
| 141 | 151 | } |
| 142 | 152 | |
| 143 | 153 | static void paste_next_action(GtkAction *action, GtkWidget *widget) |
| 144 | 154 | { |
| 145 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 155 | + trace_action(action,widget); | |
| 146 | 156 | lib3270_pastenext(v3270_get_session(widget)); |
| 147 | 157 | } |
| 148 | 158 | |
| ... | ... | @@ -220,7 +230,7 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) |
| 220 | 230 | { |
| 221 | 231 | LIB3270_TOGGLE toggle = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); |
| 222 | 232 | |
| 223 | - trace("Action %s toggled on widget %p (id=%d)",gtk_action_get_name(GTK_ACTION(action)),widget,(int) toggle); | |
| 233 | + lib3270_trace_event(NULL,"Action %s toggled on widget %p (id=%d)\n",gtk_action_get_name(GTK_ACTION(action)),widget,(int) toggle); | |
| 224 | 234 | |
| 225 | 235 | if(toggle == TOGGLE_GDKDEBUG) |
| 226 | 236 | gdk_window_set_debug_updates(gtk_toggle_action_get_active(action)); |
| ... | ... | @@ -230,14 +240,19 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) |
| 230 | 240 | |
| 231 | 241 | static void selection_move_action(GtkAction *action, GtkWidget *widget) |
| 232 | 242 | { |
| 233 | - trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 243 | + trace_action(action,widget); | |
| 234 | 244 | lib3270_move_selection(v3270_get_session(widget),(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); |
| 235 | 245 | } |
| 236 | 246 | |
| 237 | 247 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) |
| 238 | 248 | { |
| 239 | 249 | int flags = (int) g_object_get_data(G_OBJECT(action),"move_flags"); |
| 240 | - 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")); | |
| 250 | + | |
| 251 | + lib3270_trace_event(NULL,"Action %s activated on widget %p flags=%04x\n", | |
| 252 | + gtk_action_get_name(action), | |
| 253 | + widget, | |
| 254 | + (unsigned int) g_object_get_data(G_OBJECT(action),"move_flags")); | |
| 255 | + | |
| 241 | 256 | lib3270_move_cursor(v3270_get_session(widget),(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); |
| 242 | 257 | } |
| 243 | 258 | |
| ... | ... | @@ -271,27 +286,27 @@ static void connect_move_action(GtkAction *action, GtkWidget *widget, const gcha |
| 271 | 286 | |
| 272 | 287 | static void action_pfkey(GtkAction *action, GtkWidget *widget) |
| 273 | 288 | { |
| 274 | - trace("Action %s activated on widget %p key=%p",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pfkey")); | |
| 289 | + 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")); | |
| 275 | 290 | lib3270_pfkey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pfkey")); |
| 276 | 291 | } |
| 277 | 292 | |
| 278 | 293 | static void action_pakey(GtkAction *action, GtkWidget *widget) |
| 279 | 294 | { |
| 280 | - trace("Action %s activated on widget %p key=%p",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"pakey")); | |
| 295 | + 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")); | |
| 281 | 296 | lib3270_pakey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pakey")); |
| 282 | 297 | } |
| 283 | 298 | |
| 284 | 299 | static void action_set_toggle(GtkAction *action, GtkWidget *widget) |
| 285 | 300 | { |
| 286 | 301 | LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); |
| 287 | - trace("Action %s activated on widget %p toggle=%d",gtk_action_get_name(action),widget,id); | |
| 302 | + lib3270_trace_event(NULL,"Action %s activated on widget %p toggle=%d\n",gtk_action_get_name(action),widget,id); | |
| 288 | 303 | lib3270_set_toggle(v3270_get_session(widget),id,1); |
| 289 | 304 | } |
| 290 | 305 | |
| 291 | 306 | static void action_reset_toggle(GtkAction *action, GtkWidget *widget) |
| 292 | 307 | { |
| 293 | 308 | LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); |
| 294 | - trace("Action %s activated on widget %p toggle=%d",gtk_action_get_name(action),widget,id); | |
| 309 | + lib3270_trace_event(NULL,"Action %s activated on widget %p toggle=%d\n",gtk_action_get_name(action),widget,id); | |
| 295 | 310 | lib3270_set_toggle(v3270_get_session(widget),id,0); |
| 296 | 311 | } |
| 297 | 312 | ... | ... |
src/include/lib3270/trace.h
| ... | ... | @@ -33,5 +33,35 @@ |
| 33 | 33 | |
| 34 | 34 | #define LIB3270_TRACE_H_INCLUDED 1 |
| 35 | 35 | |
| 36 | + /** | |
| 37 | + * Set trace handle callback. | |
| 38 | + * | |
| 39 | + * @param handle Callback to write in trace file or show trace window (NULL send all trace to stdout). | |
| 40 | + * | |
| 41 | + */ | |
| 42 | + LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) ); | |
| 43 | + | |
| 44 | + /** | |
| 45 | + * Write on trace file. | |
| 46 | + * | |
| 47 | + * Write text on trace file, if DStrace is enabled. | |
| 48 | + * | |
| 49 | + * @param fmt String format. | |
| 50 | + * @param ... Arguments. | |
| 51 | + * | |
| 52 | + */ | |
| 53 | + LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...); | |
| 54 | + | |
| 55 | + /** | |
| 56 | + * Write on trace file. | |
| 57 | + * | |
| 58 | + * Write text on trace file, if event is enabled. | |
| 59 | + * | |
| 60 | + * @param fmt String format. | |
| 61 | + * @param ... Arguments. | |
| 62 | + * | |
| 63 | + */ | |
| 64 | + LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...); | |
| 65 | + | |
| 36 | 66 | |
| 37 | 67 | #endif // LIB3270_TRACE_H_INCLUDED | ... | ... |
src/lib3270/trace_ds.c
| ... | ... | @@ -74,14 +74,14 @@ |
| 74 | 74 | #define MAX_HEADER_SIZE (10*1024) |
| 75 | 75 | |
| 76 | 76 | /* Minimum size of a trace file. */ |
| 77 | -#define MIN_TRACEFILE_SIZE (64*1024) | |
| 78 | -#define MIN_TRACEFILE_SIZE_NAME "64K" | |
| 77 | +// #define MIN_TRACEFILE_SIZE (64*1024) | |
| 78 | +// #define MIN_TRACEFILE_SIZE_NAME "64K" | |
| 79 | 79 | |
| 80 | 80 | /* System calls which may not be there. */ |
| 81 | -#if !defined(HAVE_FSEEKO) /*[*/ | |
| 82 | -#define fseeko(s, o, w) fseek(s, (long)o, w) | |
| 83 | -#define ftello(s) (off_t)ftell(s) | |
| 84 | -#endif /*]*/ | |
| 81 | +// #if !defined(HAVE_FSEEKO) | |
| 82 | +// #define fseeko(s, o, w) fseek(s, (long)o, w) | |
| 83 | +// #define ftello(s) (off_t)ftell(s) | |
| 84 | +// #endif | |
| 85 | 85 | |
| 86 | 86 | // #include <lib3270/api.h> |
| 87 | 87 | |
| ... | ... | @@ -106,16 +106,22 @@ static int dscnt = 0; |
| 106 | 106 | // static char *tracef_midpoint_header = CN; |
| 107 | 107 | // static off_t tracef_midpoint = 0; |
| 108 | 108 | |
| 109 | -static void __vwtrace(const char *fmt, va_list args); | |
| 109 | +static void __vwtrace(H3270 *session, const char *fmt, va_list args); | |
| 110 | 110 | static void wtrace(const char *fmt, ...); |
| 111 | 111 | // static char *create_tracefile_header(const char *mode); |
| 112 | 112 | static void stop_tracing(void); |
| 113 | 113 | |
| 114 | 114 | /* Globals */ |
| 115 | 115 | struct timeval ds_ts; |
| 116 | -static void (*vwtrace)(const char *fmt, va_list args) = __vwtrace; | |
| 116 | +static void (*vwtrace)(H3270 *session, const char *fmt, va_list args) = __vwtrace; | |
| 117 | 117 | Boolean trace_skipping = False; |
| 118 | 118 | |
| 119 | + | |
| 120 | +LIB3270_EXPORT void lib3270_set_trace_handler( void (*handler)(H3270 *session, const char *fmt, va_list args) ) | |
| 121 | +{ | |
| 122 | + vwtrace = handler ? handler : __vwtrace; | |
| 123 | +} | |
| 124 | + | |
| 119 | 125 | /* display a (row,col) */ |
| 120 | 126 | const char * |
| 121 | 127 | rcba(int baddr) |
| ... | ... | @@ -217,7 +223,7 @@ trace_event(const char *fmt, ...) |
| 217 | 223 | |
| 218 | 224 | /* print out message */ |
| 219 | 225 | va_start(args, fmt); |
| 220 | - vwtrace(fmt, args); | |
| 226 | + vwtrace(&h3270,fmt, args); | |
| 221 | 227 | va_end(args); |
| 222 | 228 | } |
| 223 | 229 | |
| ... | ... | @@ -232,7 +238,7 @@ trace_dsn(const char *fmt, ...) |
| 232 | 238 | |
| 233 | 239 | /* print out message */ |
| 234 | 240 | va_start(args, fmt); |
| 235 | - vwtrace(fmt, args); | |
| 241 | + vwtrace(&h3270,fmt, args); | |
| 236 | 242 | va_end(args); |
| 237 | 243 | } |
| 238 | 244 | |
| ... | ... | @@ -241,9 +247,10 @@ trace_dsn(const char *fmt, ...) |
| 241 | 247 | * This is the only function that actually does output to the trace file -- |
| 242 | 248 | * all others are wrappers around this function. |
| 243 | 249 | */ |
| 244 | -static void __vwtrace(const char *fmt, va_list args) | |
| 250 | +static void __vwtrace(H3270 *session, const char *fmt, va_list args) | |
| 245 | 251 | { |
| 246 | 252 | vfprintf(stdout,fmt,args); |
| 253 | + fflush(stdout); | |
| 247 | 254 | } |
| 248 | 255 | |
| 249 | 256 | /* |
| ... | ... | @@ -272,10 +279,36 @@ static void wtrace(const char *fmt, ...) |
| 272 | 279 | { |
| 273 | 280 | va_list args; |
| 274 | 281 | va_start(args, fmt); |
| 275 | - vwtrace(fmt, args); | |
| 282 | + vwtrace(&h3270,fmt, args); | |
| 276 | 283 | va_end(args); |
| 277 | 284 | } |
| 278 | 285 | |
| 286 | +LIB3270_EXPORT void lib3270_write_dstrace(H3270 *session, const char *fmt, ...) | |
| 287 | +{ | |
| 288 | + va_list args; | |
| 289 | + | |
| 290 | + if(!lib3270_get_toggle(session,LIB3270_TOGGLE_DS_TRACE)) | |
| 291 | + return; | |
| 292 | + | |
| 293 | + va_start(args, fmt); | |
| 294 | + vwtrace(session,fmt, args); | |
| 295 | + va_end(args); | |
| 296 | +} | |
| 297 | + | |
| 298 | +LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) | |
| 299 | +{ | |
| 300 | + va_list args; | |
| 301 | + | |
| 302 | + if(!lib3270_get_toggle(session,LIB3270_TOGGLE_EVENT_TRACE)) | |
| 303 | + return; | |
| 304 | + | |
| 305 | + va_start(args, fmt); | |
| 306 | + vwtrace(session,fmt, args); | |
| 307 | + va_end(args); | |
| 308 | +} | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 279 | 312 | /* |
| 280 | 313 | static void stop_tracing(void) |
| 281 | 314 | { | ... | ... |
ui/99debug.xml
| ... | ... | @@ -31,16 +31,11 @@ |
| 31 | 31 | <ui> |
| 32 | 32 | <menubar name='topmenu'> |
| 33 | 33 | |
| 34 | - <!--- | |
| 35 | 34 | <menu name='View' > |
| 36 | - <menuitem action='Toggle' id='DSTrace' label='DS Trace'/> | |
| 37 | - <menuitem action='Toggle' id='EventTrace' label='Event Trace' /> | |
| 38 | - </menu> | |
| 39 | - --> | |
| 40 | - | |
| 41 | - <menu name='SettingsMenu' label='Settings' sysmenu='yes' > | |
| 42 | - <menu name='OptionsMenu' label='_Options' > | |
| 35 | + <menu name='TraceOptions' label='Trace' > | |
| 43 | 36 | <menuitem action='toggle' id='dstrace' label='DS Trace' /> |
| 37 | + <!-- menuitem action='toggle' id='screentrace' label='Screen Trace' / --> | |
| 38 | + <menuitem action='toggle' id='eventtrace' label='Event Trace' /> | |
| 44 | 39 | </menu> |
| 45 | 40 | </menu> |
| 46 | 41 | ... | ... |