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