Commit ae4b6698cea3aaeef923e62153794bbdbb8eddcf

Authored by perry.werneck@gmail.com
1 parent d088caa0

Trabalhando no novo mecanismo de trace

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