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 | ... | ... |