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,17 +34,27 @@ | ||
34 | #include "v3270/v3270.h" | 34 | #include "v3270/v3270.h" |
35 | #include <lib3270/actions.h> | 35 | #include <lib3270/actions.h> |
36 | #include <lib3270/selection.h> | 36 | #include <lib3270/selection.h> |
37 | + #include <lib3270/trace.h> | ||
37 | #include <stdlib.h> | 38 | #include <stdlib.h> |
38 | 39 | ||
39 | #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) | 40 | #define ERROR_DOMAIN g_quark_from_static_string(PACKAGE_NAME) |
40 | #define TOGGLE_GDKDEBUG LIB3270_TOGGLE_COUNT+1 | 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 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 50 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
43 | 51 | ||
44 | static void lib3270_action(GtkAction *action, GtkWidget *widget) | 52 | static void lib3270_action(GtkAction *action, GtkWidget *widget) |
45 | { | 53 | { |
46 | int (*call)(H3270 *h) = (int (*)(H3270 *h)) g_object_get_data(G_OBJECT(action),"lib3270_call"); | 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 | call(v3270_get_session(widget)); | 58 | call(v3270_get_session(widget)); |
49 | } | 59 | } |
50 | 60 | ||
@@ -52,7 +62,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | @@ -52,7 +62,7 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | ||
52 | { | 62 | { |
53 | gchar *host = (gchar *) g_object_get_data(G_OBJECT(action),"host"); | 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 | if(host) | 67 | if(host) |
58 | { | 68 | { |
@@ -74,24 +84,24 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | @@ -74,24 +84,24 @@ static void connect_action(GtkAction *action, GtkWidget *widget) | ||
74 | 84 | ||
75 | static void nop_action(GtkAction *action, GtkWidget *widget) | 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 | static void disconnect_action(GtkAction *action, GtkWidget *widget) | 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 | v3270_disconnect(widget); | 93 | v3270_disconnect(widget); |
84 | } | 94 | } |
85 | 95 | ||
86 | static void activate_action(GtkAction *action, GtkWidget *widget) | 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 | gtk_widget_activate(widget); | 99 | gtk_widget_activate(widget); |
90 | } | 100 | } |
91 | 101 | ||
92 | static void reload_action(GtkAction *action, GtkWidget *widget) | 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 | v3270_reload(widget); | 105 | v3270_reload(widget); |
96 | } | 106 | } |
97 | 107 | ||
@@ -124,25 +134,25 @@ static void copy_action(GtkAction *action, GtkWidget *widget) | @@ -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 | v3270_copy(widget,mode); | 138 | v3270_copy(widget,mode); |
129 | } | 139 | } |
130 | 140 | ||
131 | static void append_action(GtkAction *action, GtkWidget *widget) | 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 | v3270_copy_append(widget); | 144 | v3270_copy_append(widget); |
135 | } | 145 | } |
136 | 146 | ||
137 | static void paste_clipboard_action(GtkAction *action, GtkWidget *widget) | 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 | v3270_paste(widget); | 150 | v3270_paste(widget); |
141 | } | 151 | } |
142 | 152 | ||
143 | static void paste_next_action(GtkAction *action, GtkWidget *widget) | 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 | lib3270_pastenext(v3270_get_session(widget)); | 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,7 +230,7 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | ||
220 | { | 230 | { |
221 | LIB3270_TOGGLE toggle = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); | 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 | if(toggle == TOGGLE_GDKDEBUG) | 235 | if(toggle == TOGGLE_GDKDEBUG) |
226 | gdk_window_set_debug_updates(gtk_toggle_action_get_active(action)); | 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,14 +240,19 @@ static void lib3270_toggle_action(GtkToggleAction *action,GtkWidget *widget) | ||
230 | 240 | ||
231 | static void selection_move_action(GtkAction *action, GtkWidget *widget) | 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 | lib3270_move_selection(v3270_get_session(widget),(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); | 244 | lib3270_move_selection(v3270_get_session(widget),(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); |
235 | } | 245 | } |
236 | 246 | ||
237 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) | 247 | static void cursor_move_action(GtkAction *action, GtkWidget *widget) |
238 | { | 248 | { |
239 | int flags = (int) g_object_get_data(G_OBJECT(action),"move_flags"); | 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 | lib3270_move_cursor(v3270_get_session(widget),(LIB3270_DIRECTION) (flags & 0x03), (flags & 0x80) ); | 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,27 +286,27 @@ static void connect_move_action(GtkAction *action, GtkWidget *widget, const gcha | ||
271 | 286 | ||
272 | static void action_pfkey(GtkAction *action, GtkWidget *widget) | 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 | lib3270_pfkey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pfkey")); | 290 | lib3270_pfkey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pfkey")); |
276 | } | 291 | } |
277 | 292 | ||
278 | static void action_pakey(GtkAction *action, GtkWidget *widget) | 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 | lib3270_pakey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pakey")); | 296 | lib3270_pakey(v3270_get_session(widget),(int) g_object_get_data(G_OBJECT(action),"pakey")); |
282 | } | 297 | } |
283 | 298 | ||
284 | static void action_set_toggle(GtkAction *action, GtkWidget *widget) | 299 | static void action_set_toggle(GtkAction *action, GtkWidget *widget) |
285 | { | 300 | { |
286 | LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); | 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 | lib3270_set_toggle(v3270_get_session(widget),id,1); | 303 | lib3270_set_toggle(v3270_get_session(widget),id,1); |
289 | } | 304 | } |
290 | 305 | ||
291 | static void action_reset_toggle(GtkAction *action, GtkWidget *widget) | 306 | static void action_reset_toggle(GtkAction *action, GtkWidget *widget) |
292 | { | 307 | { |
293 | LIB3270_TOGGLE id = (LIB3270_TOGGLE) g_object_get_data(G_OBJECT(action),"toggle_id"); | 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 | lib3270_set_toggle(v3270_get_session(widget),id,0); | 310 | lib3270_set_toggle(v3270_get_session(widget),id,0); |
296 | } | 311 | } |
297 | 312 |
src/include/lib3270/trace.h
@@ -33,5 +33,35 @@ | @@ -33,5 +33,35 @@ | ||
33 | 33 | ||
34 | #define LIB3270_TRACE_H_INCLUDED 1 | 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 | #endif // LIB3270_TRACE_H_INCLUDED | 67 | #endif // LIB3270_TRACE_H_INCLUDED |
src/lib3270/trace_ds.c
@@ -74,14 +74,14 @@ | @@ -74,14 +74,14 @@ | ||
74 | #define MAX_HEADER_SIZE (10*1024) | 74 | #define MAX_HEADER_SIZE (10*1024) |
75 | 75 | ||
76 | /* Minimum size of a trace file. */ | 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 | /* System calls which may not be there. */ | 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 | // #include <lib3270/api.h> | 86 | // #include <lib3270/api.h> |
87 | 87 | ||
@@ -106,16 +106,22 @@ static int dscnt = 0; | @@ -106,16 +106,22 @@ static int dscnt = 0; | ||
106 | // static char *tracef_midpoint_header = CN; | 106 | // static char *tracef_midpoint_header = CN; |
107 | // static off_t tracef_midpoint = 0; | 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 | static void wtrace(const char *fmt, ...); | 110 | static void wtrace(const char *fmt, ...); |
111 | // static char *create_tracefile_header(const char *mode); | 111 | // static char *create_tracefile_header(const char *mode); |
112 | static void stop_tracing(void); | 112 | static void stop_tracing(void); |
113 | 113 | ||
114 | /* Globals */ | 114 | /* Globals */ |
115 | struct timeval ds_ts; | 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 | Boolean trace_skipping = False; | 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 | /* display a (row,col) */ | 125 | /* display a (row,col) */ |
120 | const char * | 126 | const char * |
121 | rcba(int baddr) | 127 | rcba(int baddr) |
@@ -217,7 +223,7 @@ trace_event(const char *fmt, ...) | @@ -217,7 +223,7 @@ trace_event(const char *fmt, ...) | ||
217 | 223 | ||
218 | /* print out message */ | 224 | /* print out message */ |
219 | va_start(args, fmt); | 225 | va_start(args, fmt); |
220 | - vwtrace(fmt, args); | 226 | + vwtrace(&h3270,fmt, args); |
221 | va_end(args); | 227 | va_end(args); |
222 | } | 228 | } |
223 | 229 | ||
@@ -232,7 +238,7 @@ trace_dsn(const char *fmt, ...) | @@ -232,7 +238,7 @@ trace_dsn(const char *fmt, ...) | ||
232 | 238 | ||
233 | /* print out message */ | 239 | /* print out message */ |
234 | va_start(args, fmt); | 240 | va_start(args, fmt); |
235 | - vwtrace(fmt, args); | 241 | + vwtrace(&h3270,fmt, args); |
236 | va_end(args); | 242 | va_end(args); |
237 | } | 243 | } |
238 | 244 | ||
@@ -241,9 +247,10 @@ trace_dsn(const char *fmt, ...) | @@ -241,9 +247,10 @@ trace_dsn(const char *fmt, ...) | ||
241 | * This is the only function that actually does output to the trace file -- | 247 | * This is the only function that actually does output to the trace file -- |
242 | * all others are wrappers around this function. | 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 | vfprintf(stdout,fmt,args); | 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,10 +279,36 @@ static void wtrace(const char *fmt, ...) | ||
272 | { | 279 | { |
273 | va_list args; | 280 | va_list args; |
274 | va_start(args, fmt); | 281 | va_start(args, fmt); |
275 | - vwtrace(fmt, args); | 282 | + vwtrace(&h3270,fmt, args); |
276 | va_end(args); | 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 | static void stop_tracing(void) | 313 | static void stop_tracing(void) |
281 | { | 314 | { |
ui/99debug.xml
@@ -31,16 +31,11 @@ | @@ -31,16 +31,11 @@ | ||
31 | <ui> | 31 | <ui> |
32 | <menubar name='topmenu'> | 32 | <menubar name='topmenu'> |
33 | 33 | ||
34 | - <!--- | ||
35 | <menu name='View' > | 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 | <menuitem action='toggle' id='dstrace' label='DS Trace' /> | 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 | </menu> | 39 | </menu> |
45 | </menu> | 40 | </menu> |
46 | 41 |