Commit ea9215dc1672713a3fde97ef5564e395fb07da46

Authored by perry.werneck@gmail.com
1 parent 4a7c0b1b

Reincluindo função screen-trace

src/lib3270/ctlr.c
@@ -2320,7 +2320,7 @@ ctlr_clear(H3270 *session, Boolean can_snap) @@ -2320,7 +2320,7 @@ ctlr_clear(H3270 *session, Boolean can_snap)
2320 if (ctlr_any_data()) { 2320 if (ctlr_any_data()) {
2321 #if defined(X3270_TRACE) /*[*/ 2321 #if defined(X3270_TRACE) /*[*/
2322 if (can_snap && !trace_skipping && lib3270_get_toggle(session,LIB3270_TOGGLE_SCREEN_TRACE)) 2322 if (can_snap && !trace_skipping && lib3270_get_toggle(session,LIB3270_TOGGLE_SCREEN_TRACE))
2323 - trace_screen(); 2323 + trace_screen(session);
2324 #endif /*]*/ 2324 #endif /*]*/
2325 // scroll_save(session->maxROWS, ever_3270 ? False : True); 2325 // scroll_save(session->maxROWS, ever_3270 ? False : True);
2326 } 2326 }
@@ -2380,7 +2380,7 @@ void ctlr_add(int baddr, unsigned char c, unsigned char cs) @@ -2380,7 +2380,7 @@ void ctlr_add(int baddr, unsigned char c, unsigned char cs)
2380 { 2380 {
2381 #if defined(X3270_TRACE) /*[*/ 2381 #if defined(X3270_TRACE) /*[*/
2382 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE)) 2382 if (lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE))
2383 - trace_screen(); 2383 + trace_screen(&h3270);
2384 #endif /*]*/ 2384 #endif /*]*/
2385 trace_primed = False; 2385 trace_primed = False;
2386 } 2386 }
src/lib3270/kybd.c
@@ -181,7 +181,7 @@ static const char dxl[] = "0123456789abcdef"; @@ -181,7 +181,7 @@ static const char dxl[] = "0123456789abcdef";
181 /* 181 /*
182 * Check if the typeahead queue is available 182 * Check if the typeahead queue is available
183 */ 183 */
184 -static int enq_chk(void) 184 +static int enq_chk(H3270 *session)
185 { 185 {
186 /* If no connection, forget it. */ 186 /* If no connection, forget it. */
187 if (!CONNECTED) 187 if (!CONNECTED)
@@ -191,23 +191,23 @@ static int enq_chk(void) @@ -191,23 +191,23 @@ static int enq_chk(void)
191 } 191 }
192 192
193 /* If operator error, complain and drop it. */ 193 /* If operator error, complain and drop it. */
194 - if (h3270.kybdlock & KL_OERR_MASK) 194 + if (session->kybdlock & KL_OERR_MASK)
195 { 195 {
196 - lib3270_ring_bell(NULL); 196 + lib3270_ring_bell(session);
197 trace_event(" dropped (operator error)\n"); 197 trace_event(" dropped (operator error)\n");
198 return -1; 198 return -1;
199 } 199 }
200 200
201 /* If scroll lock, complain and drop it. */ 201 /* If scroll lock, complain and drop it. */
202 - if (h3270.kybdlock & KL_SCROLLED) 202 + if (session->kybdlock & KL_SCROLLED)
203 { 203 {
204 - lib3270_ring_bell(&h3270); 204 + lib3270_ring_bell(session);
205 trace_event(" dropped (scrolled)\n"); 205 trace_event(" dropped (scrolled)\n");
206 return -1; 206 return -1;
207 } 207 }
208 208
209 /* If typeahead disabled, complain and drop it. */ 209 /* If typeahead disabled, complain and drop it. */
210 - if (!h3270.typeahead) 210 + if (!session->typeahead)
211 { 211 {
212 trace_event(" dropped (no typeahead)\n"); 212 trace_event(" dropped (no typeahead)\n");
213 return -1; 213 return -1;
@@ -219,11 +219,11 @@ static int enq_chk(void) @@ -219,11 +219,11 @@ static int enq_chk(void)
219 /* 219 /*
220 * Put a "Key-aid" on the typeahead queue 220 * Put a "Key-aid" on the typeahead queue
221 */ 221 */
222 - static void enq_key(unsigned char aid_code) 222 + static void enq_key(H3270 *session, unsigned char aid_code)
223 { 223 {
224 struct ta *ta; 224 struct ta *ta;
225 225
226 - if(enq_chk()) 226 + if(enq_chk(session))
227 return; 227 return;
228 228
229 ta = (struct ta *) lib3270_malloc(sizeof(*ta)); 229 ta = (struct ta *) lib3270_malloc(sizeof(*ta));
@@ -240,11 +240,11 @@ static int enq_chk(void) @@ -240,11 +240,11 @@ static int enq_chk(void)
240 else 240 else
241 { 241 {
242 ta_head = ta; 242 ta_head = ta;
243 - status_typeahead(&h3270,True); 243 + status_typeahead(session,True);
244 } 244 }
245 ta_tail = ta; 245 ta_tail = ta;
246 246
247 - trace_event(" Key-aid queued (kybdlock 0x%x)\n", h3270.kybdlock); 247 + trace_event(" Key-aid queued (kybdlock 0x%x)\n", session->kybdlock);
248 } 248 }
249 249
250 /* 250 /*
@@ -254,7 +254,7 @@ static void enq_ta(H3270 *hSession, void (*fn)(H3270 *, const char *, const char @@ -254,7 +254,7 @@ static void enq_ta(H3270 *hSession, void (*fn)(H3270 *, const char *, const char
254 { 254 {
255 struct ta *ta; 255 struct ta *ta;
256 256
257 - if(enq_chk()) 257 + if(enq_chk(hSession))
258 return; 258 return;
259 259
260 CHECK_SESSION_HANDLE(hSession); 260 CHECK_SESSION_HANDLE(hSession);
@@ -566,7 +566,7 @@ LIB3270_FKEY_ACTION( pfkey ) @@ -566,7 +566,7 @@ LIB3270_FKEY_ACTION( pfkey )
566 if (hSession->kybdlock & KL_OIA_MINUS) 566 if (hSession->kybdlock & KL_OIA_MINUS)
567 return -1; 567 return -1;
568 else if (hSession->kybdlock) 568 else if (hSession->kybdlock)
569 - enq_key(pf_xlate[key-1]); 569 + enq_key(hSession,pf_xlate[key-1]);
570 else 570 else
571 key_AID(hSession,pf_xlate[key-1]); 571 key_AID(hSession,pf_xlate[key-1]);
572 572
@@ -583,7 +583,7 @@ LIB3270_FKEY_ACTION( pakey ) @@ -583,7 +583,7 @@ LIB3270_FKEY_ACTION( pakey )
583 if (hSession->kybdlock & KL_OIA_MINUS) 583 if (hSession->kybdlock & KL_OIA_MINUS)
584 return -1; 584 return -1;
585 else if (hSession->kybdlock) 585 else if (hSession->kybdlock)
586 - enq_key(pa_xlate[key-1]); 586 + enq_key(hSession,pa_xlate[key-1]);
587 else 587 else
588 key_AID(hSession,pa_xlate[key-1]); 588 key_AID(hSession,pa_xlate[key-1]);
589 589
src/lib3270/printc.h
@@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
17 * Global declarations for print.c. 17 * Global declarations for print.c.
18 */ 18 */
19 19
20 -LIB3270_INTERNAL Boolean fprint_screen(FILE *f, Boolean even_if_empty, Boolean use_html); 20 +// LIB3270_INTERNAL Boolean fprint_screen(FILE *f, Boolean even_if_empty, Boolean use_html);
21 LIB3270_INTERNAL void PrintText_action(Widget w, XEvent *event, String *params, 21 LIB3270_INTERNAL void PrintText_action(Widget w, XEvent *event, String *params,
22 Cardinal *num_params); 22 Cardinal *num_params);
23 LIB3270_INTERNAL void PrintWindow_action(Widget w, XEvent *event, String *params, 23 LIB3270_INTERNAL void PrintWindow_action(Widget w, XEvent *event, String *params,
src/lib3270/screen.c
@@ -78,7 +78,7 @@ static int logpopup(H3270 *session, void *widget, LIB3270_NOTIFY type, const cha @@ -78,7 +78,7 @@ static int logpopup(H3270 *session, void *widget, LIB3270_NOTIFY type, const cha
78 78
79 static int (*popup_handler)(H3270 *, void *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list) = logpopup; 79 static int (*popup_handler)(H3270 *, void *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list) = logpopup;
80 80
81 -enum ts { TS_AUTO, TS_ON, TS_OFF }; 81 +// enum ts { TS_AUTO, TS_ON, TS_OFF };
82 82
83 static void status_connect(H3270 *session, int ignored, void *dunno); 83 static void status_connect(H3270 *session, int ignored, void *dunno);
84 static void status_3270_mode(H3270 *session, int ignored, void *dunno); 84 static void status_3270_mode(H3270 *session, int ignored, void *dunno);
src/lib3270/trace_ds.c
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple 18 * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
19 * Place, Suite 330, Boston, MA, 02111-1307, USA 19 * Place, Suite 330, Boston, MA, 02111-1307, USA
20 * 20 *
21 - * Este programa está nomeado como trace_ds.c e possui 1089 linhas de código. 21 + * Este programa está nomeado como trace_ds.c e possui - linhas de código.
22 * 22 *
23 * Contatos: 23 * Contatos:
24 * 24 *
@@ -280,544 +280,37 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...) @@ -280,544 +280,37 @@ LIB3270_EXPORT void lib3270_trace_event(H3270 *session, const char *fmt, ...)
280 va_end(args); 280 va_end(args);
281 } 281 }
282 282
283 -  
284 -  
285 -/*  
286 -static void stop_tracing(void)  
287 -{  
288 - if (tracef != NULL && tracef != stdout)  
289 - (void) fclose(tracef);  
290 - tracef = NULL;  
291 - if (tracef_pipe != NULL) {  
292 - (void) fclose(tracef_pipe);  
293 - tracef_pipe = NULL;  
294 - }  
295 -  
296 - lib3270_set_toggle(&h3270,DS_TRACE,0);  
297 - lib3270_set_toggle(&h3270,EVENT_TRACE,0);  
298 -  
299 -}  
300 -*/  
301 -  
302 -/* Check for a trace file rollover event.  
303 -void  
304 -trace_rollover_check(void)  
305 -{  
306 - if (tracef == NULL || tracef_max == 0)  
307 - return;  
308 -  
309 - // See if we've reached the midpoint.  
310 - if (!tracef_midpoint) {  
311 - if (tracef_size >= tracef_max / 2) {  
312 - tracef_midpoint = ftello(tracef);  
313 -#if defined(ROLLOVER_DEBUG)  
314 - printf("midpoint is %lld\n", tracef_midpoint);  
315 -#endif  
316 - tracef_midpoint_header =  
317 - create_tracefile_header("rolled over");  
318 - }  
319 - return;  
320 - }  
321 -  
322 - // See if we've reached a rollover point.  
323 - if (tracef_size >= tracef_max) {  
324 - char buf[8*1024];  
325 - int nr;  
326 - off_t rpos = tracef_midpoint, wpos = 0;  
327 -  
328 - if (!tracef_midpoint)  
329 - Error("Tracefile rollover logic error");  
330 -#if defined(ROLLOVER_DEBUG)  
331 - printf("rolling over at %lld\n", tracef_size);  
332 -#endif  
333 - //  
334 - // Overwrite the file with the midpoint header, and the data  
335 - // which follows the midpoint.  
336 - //  
337 - if (fseeko(tracef, 0, SEEK_SET) < 0) {  
338 - popup_an_errno(errno, "trace file fseeko(0) failed");  
339 - stop_tracing();  
340 - return;  
341 - }  
342 - wtrace("%s", tracef_midpoint_header);  
343 - wpos = ftello(tracef);  
344 - if (wpos < 0) {  
345 - popup_an_errno(errno, "trace file ftello() failed");  
346 - stop_tracing();  
347 - return;  
348 - }  
349 - if (fseeko(tracef, rpos, SEEK_SET) < 0) {  
350 - popup_an_errno(errno, "trace file fseeko(%ld) failed",  
351 - (long)rpos);  
352 - stop_tracing();  
353 - return;  
354 - }  
355 -#if defined(ROLLOVER_DEBUG)  
356 - printf("rpos = %lld, wpos = %lld\n", rpos, wpos);  
357 -#endif  
358 - while ((nr = fread(buf, 1, sizeof(buf), tracef)) > 0) {  
359 - rpos = ftello(tracef);  
360 - if (fseeko(tracef, wpos, SEEK_SET) < 0) {  
361 - popup_an_errno(errno, "trace file fseeko(%ld) "  
362 - "failed", (long)wpos);  
363 - stop_tracing();  
364 - return;  
365 - }  
366 - if (fwrite(buf, nr, 1, tracef) < 1)  
367 - break;  
368 - wpos = ftello(tracef);  
369 - if (wpos < 0) {  
370 - popup_an_errno(errno, "trace file ftello() "  
371 - "failed");  
372 - stop_tracing();  
373 - return;  
374 - }  
375 - if (fseeko(tracef, rpos, SEEK_SET) < 0) {  
376 - popup_an_errno(errno, "trace file fseeko(%ld)"  
377 - "failed", (long)rpos);  
378 - stop_tracing();  
379 - return;  
380 - }  
381 - }  
382 - if (ferror(tracef)) {  
383 - popup_an_errno(errno, "trace file rollover copy "  
384 - "failed");  
385 - stop_tracing();  
386 - return;  
387 - }  
388 -#if defined(ROLLOVER_DEBUG)  
389 - printf("final wpos = %lld\n", wpos);  
390 -#endif  
391 - if (ftruncate(fileno(tracef), wpos) < 0) {  
392 - popup_an_errno(errno, "trace file ftruncate(%ld) "  
393 - "failed", (long)wpos);  
394 - stop_tracing();  
395 - return;  
396 - }  
397 - if (fseeko(tracef, wpos, SEEK_SET) < 0) {  
398 - popup_an_errno(errno, "trace file fseeko(%ld) failed",  
399 - (long)wpos);  
400 - stop_tracing();  
401 - return;  
402 - }  
403 - tracef_size = wpos;  
404 - tracef_midpoint = wpos;  
405 - Replace(tracef_midpoint_header,  
406 - create_tracefile_header("rolled over"));  
407 - }  
408 -}  
409 -*/  
410 -  
411 -/*  
412 -#if defined(X3270_DISPLAY)  
413 -static Widget trace_shell = (Widget)NULL;  
414 -#endif  
415 -static int trace_reason;  
416 -*/  
417 -  
418 -/* Create a trace file header. */ /*  
419 -static char * create_tracefile_header(const char *mode)  
420 -{  
421 - char *buf;  
422 - time_t clk;  
423 -  
424 - // Create a buffer and redirect output.  
425 - buf = lib3270_malloc(MAX_HEADER_SIZE);  
426 - tracef_bufptr = buf;  
427 -  
428 - // Display current status  
429 - clk = time((time_t *)0);  
430 - wtrace("Trace %s %s", mode, ctime(&clk));  
431 - wtrace(" Version: %s\n", build);  
432 - wtrace(" Model %s", h3270.model_name);  
433 - wtrace(", %s display", appres.mono ? "monochrome" : "color");  
434 - if (appres.extended)  
435 - wtrace(", extended data stream");  
436 - wtrace(", %s emulation", appres.m3279 ? "color" : "monochrome");  
437 - wtrace(", %s charset", lib3270_get_charset(&h3270));  
438 - if (appres.apl_mode)  
439 - wtrace(", APL mode");  
440 - wtrace("\n");  
441 - if (CONNECTED)  
442 - wtrace(" Connected to %s, port %u\n",h3270.current_host, h3270.current_port);  
443 -  
444 - // Snap the current TELNET options.  
445 - if (net_snap_options()) {  
446 - wtrace(" TELNET state:\n");  
447 - trace_netdata('<', obuf, obptr - obuf);  
448 - }  
449 -  
450 - // Dump the screen contents and modes into the trace file.  
451 - if (CONNECTED) {  
452 - //  
453 - // Note that if the screen is not formatted, we do not  
454 - // attempt to save what's on it. However, if we're in  
455 - // 3270 SSCP-LU or NVT mode, we'll do a dummy, empty  
456 - // write to ensure that the display is in the right  
457 - // mode.  
458 - //  
459 - if (h3270.formatted) {  
460 - wtrace(" Screen contents:\n");  
461 - obptr = obuf;  
462 -#if defined(X3270_TN3270E)  
463 - (void) net_add_dummy_tn3270e();  
464 -#endif  
465 - ctlr_snap_buffer();  
466 - space3270out(2);  
467 - net_add_eor(obuf, obptr - obuf);  
468 - obptr += 2;  
469 - trace_netdata('<', obuf, obptr - obuf);  
470 -  
471 - obptr = obuf;  
472 -#if defined(X3270_TN3270E)  
473 - (void) net_add_dummy_tn3270e();  
474 -#endif  
475 - if (ctlr_snap_modes()) {  
476 - wtrace(" 3270 modes:\n");  
477 - space3270out(2);  
478 - net_add_eor(obuf, obptr - obuf);  
479 - obptr += 2;  
480 - trace_netdata('<', obuf, obptr - obuf);  
481 - }  
482 - }  
483 -#if defined(X3270_TN3270E)  
484 - else if (IN_E) {  
485 - obptr = obuf;  
486 - if (net_add_dummy_tn3270e()) {  
487 - wtrace(" Screen contents:\n");  
488 - space3270out(2);  
489 - net_add_eor(obuf, obptr - obuf);  
490 - obptr += 2;  
491 - trace_netdata('<', obuf, obptr - obuf);  
492 - }  
493 - }  
494 -#endif  
495 - }  
496 -  
497 - wtrace(" Data stream:\n");  
498 -  
499 - // Return the buffer.  
500 - tracef_bufptr = CN;  
501 - return buf;  
502 -}  
503 -*/  
504 -  
505 -/* Calculate the tracefile maximum size. */ /*  
506 -static void  
507 -get_tracef_max(void)  
508 -{  
509 - static Boolean calculated = False;  
510 - char *ptr;  
511 - Boolean bad = False;  
512 -  
513 - if (calculated)  
514 - return;  
515 -  
516 - calculated = True;  
517 -  
518 - if (appres.trace_file_size == CN ||  
519 - !strcmp(appres.trace_file_size, "0") ||  
520 - !strncasecmp(appres.trace_file_size, "none",  
521 - strlen(appres.trace_file_size))) {  
522 - tracef_max = 0;  
523 - return;  
524 - }  
525 -  
526 - tracef_max = strtoul(appres.trace_file_size, &ptr, 0);  
527 - if (tracef_max == 0 || ptr == appres.trace_file_size || *(ptr + 1)) {  
528 - bad = True;  
529 - } else switch (*ptr) {  
530 - case 'k':  
531 - case 'K':  
532 - tracef_max *= 1024;  
533 - break;  
534 - case 'm':  
535 - case 'M':  
536 - tracef_max *= 1024 * 1024;  
537 - break;  
538 - case '\0':  
539 - break;  
540 - default:  
541 - bad = True;  
542 - break;  
543 - }  
544 -  
545 - if (bad) {  
546 - tracef_max = MIN_TRACEFILE_SIZE;  
547 -#if defined(X3270_DISPLAY)  
548 - popup_an_info("Invalid %s '%s', assuming "  
549 - MIN_TRACEFILE_SIZE_NAME,  
550 - ResTraceFileSize,  
551 - appres.trace_file_size);  
552 -#endif  
553 - } else if (tracef_max < MIN_TRACEFILE_SIZE) {  
554 - tracef_max = MIN_TRACEFILE_SIZE;  
555 - }  
556 -}  
557 -*/  
558 -  
559 -/* Parse the name '/dev/fd<n>', so we can simulate it. */ /*  
560 -static int  
561 -get_devfd(const char *pathname)  
562 -{  
563 - unsigned long fd;  
564 - char *ptr;  
565 -  
566 - if (strncmp(pathname, "/dev/fd/", 8))  
567 - return -1;  
568 - fd = strtoul(pathname + 8, &ptr, 10);  
569 - if (ptr == pathname + 8 || *ptr != '\0' || fd < 0)  
570 - return -1;  
571 - return fd;  
572 -}  
573 -*/  
574 -  
575 -/* Callback for "OK" button on trace popup */ /*  
576 -static void tracefile_callback(Widget w, XtPointer client_data, XtPointer call_data unused) 283 +/**
  284 + * Screen trace function, called when the host clears the screen.
  285 + *
  286 + * @param session Session Handle
  287 + */
  288 +void trace_screen(H3270 *session)
577 { 289 {
578 - char *tfn = CN;  
579 - int devfd = -1;  
580 - char *buf;  
581 -  
582 - tfn = (char *)client_data;  
583 - tfn = do_subst(tfn, True, True);  
584 - if (strchr(tfn, '\'') || ((int)strlen(tfn) > 0 && tfn[strlen(tfn)-1] == '\\'))  
585 - {  
586 - popup_an_error("Illegal file name: %s", tfn);  
587 - lib3270_free(tfn);  
588 - return;  
589 - }  
590 -  
591 - tracef_max = 0;  
592 - tracef_midpoint = 0;  
593 - Replace(tracef_midpoint_header, CN); 290 + trace_skipping = False;
594 291
595 - if (!strcmp(tfn, "stdout")) 292 + if (lib3270_get_toggle(session,LIB3270_TOGGLE_SCREEN_TRACE))
596 { 293 {
597 - tracef = stdout;  
598 - }  
599 - else  
600 - {  
601 - // Get the trace file maximum.  
602 - get_tracef_max();  
603 -  
604 - // If there's a limit, the file can't exist.  
605 - if (tracef_max && !access(tfn, R_OK))  
606 - {  
607 - popup_an_error("Trace file '%s' already exists",tfn);  
608 - lib3270_free(tfn);  
609 - return;  
610 - } 294 + int row, baddr;
611 295
612 - // Open and configure the file.  
613 - if ((devfd = get_devfd(tfn)) >= 0)  
614 - tracef = fdopen(dup(devfd), "a");  
615 - else  
616 - tracef = fopen(tfn, tracef_max? "w+": "a");  
617 - if (tracef == (FILE *)NULL) 296 + for(row=baddr=0;row < session->rows;row++)
618 { 297 {
619 - popup_an_errno(errno, tfn);  
620 - lib3270_free(tfn);  
621 - return; 298 + int col;
  299 + wtrace("%02d ",row+1);
  300 +
  301 + for(col = 0; col < session->cols;col++)
  302 + {
  303 + if(session->text[baddr].attr & LIB3270_ATTR_CG)
  304 + wtrace("%c",'.');
  305 + else if(session->text[baddr].chr)
  306 + wtrace("%c",session->text[baddr].chr);
  307 + else
  308 + wtrace("%c",'.');
  309 + baddr++;
  310 + }
  311 + wtrace("%s\n","");
622 } 312 }
623 - (void) SETLINEBUF(tracef);  
624 -#if !defined(_WIN32)  
625 - (void) fcntl(fileno(tracef), F_SETFD, 1);  
626 -#endif  
627 } 313 }
628 -  
629 - // Open pw3270's console window  
630 - if(!tracewindow_handle)  
631 - tracewindow_handle = console_window_new( tfn, NULL );  
632 -  
633 - lib3270_free(tfn);  
634 -  
635 - // We're really tracing, turn the flag on.  
636 - appres.toggle[trace_reason].value = True;  
637 -// appres.toggle[trace_reason].changed = True;  
638 -// menubar_retoggle(&appres.toggle[trace_reason]);  
639 -  
640 - // Display current status  
641 - buf = create_tracefile_header("started");  
642 - wtrace("%s", buf);  
643 - lib3270_free(buf);  
644 -  
645 -}  
646 -  
647 -#if defined(X3270_DISPLAY)  
648 -// Callback for "No File" button on trace popup  
649 -static void  
650 -no_tracefile_callback(Widget w, XtPointer client_data,  
651 - XtPointer call_data unused)  
652 -{  
653 - tracefile_callback((Widget)NULL, "", PN);  
654 - XtPopdown(trace_shell);  
655 -}  
656 -#endif  
657 -*/  
658 -  
659 -/* Open the trace file.  
660 -static void  
661 -tracefile_on(int reason, LIB3270_TOGGLE_TYPE tt)  
662 -{  
663 - char *tracefile_buf = NULL;  
664 - char *tracefile;  
665 -  
666 - if (tracef != (FILE *)NULL)  
667 - return;  
668 -  
669 - trace_reason = reason;  
670 - if (appres.secure && tt != TT_INITIAL) {  
671 - tracefile_callback((Widget)NULL, "none", PN);  
672 - return;  
673 - }  
674 - if (appres.trace_file)  
675 - {  
676 - tracefile = appres.trace_file;  
677 - }  
678 - else  
679 - {  
680 -#if defined(_WIN32)  
681 - tracefile_buf = xs_buffer("%sx3trc.%u.txt", PROGRAM_DATA,getpid());  
682 -#else  
683 -  
684 - if(appres.trace_dir)  
685 - tracefile_buf = xs_buffer("%s/x3trc.%u", appres.trace_dir,getpid());  
686 - else  
687 - tracefile_buf = xs_buffer("%s/x3trc.%u", ".",getpid());  
688 -  
689 -#endif  
690 - tracefile = tracefile_buf;  
691 - }  
692 -  
693 -  
694 -#if defined(X3270_DISPLAY)  
695 - if (tt == TT_INITIAL || tt == TT_ACTION)  
696 -#endif  
697 - {  
698 - tracefile_callback((Widget)NULL, tracefile, PN);  
699 - if (tracefile_buf != NULL)  
700 - lib3270_free(tracefile_buf);  
701 - return;  
702 - }  
703 -#if defined(X3270_DISPLAY)  
704 - if (trace_shell == NULL) {  
705 - trace_shell = create_form_popup("trace",  
706 - tracefile_callback,  
707 - appres.trace_monitor? no_tracefile_callback: NULL,  
708 - FORM_NO_WHITE);  
709 - XtVaSetValues(XtNameToWidget(trace_shell, ObjDialog),  
710 - XtNvalue, tracefile,  
711 - NULL);  
712 - }  
713 -  
714 - // Turn the toggle _off_ until the popup succeeds.  
715 - appres.toggle[reason].value = False;  
716 - appres.toggle[reason].changed = True;  
717 -  
718 - popup_popup(trace_shell, XtGrabExclusive);  
719 -#endif  
720 -  
721 - if (tracefile_buf != NULL)  
722 - lib3270_free(tracefile_buf);  
723 -}  
724 -  
725 -// Close the trace file.  
726 -static void tracefile_off(void)  
727 -{  
728 - time_t clk;  
729 -  
730 - clk = time((time_t *)0);  
731 - wtrace("Trace stopped %s", ctime(&clk));  
732 -  
733 -#if defined (LIB3270)  
734 -  
735 - if(tracewindow_handle != NULL)  
736 - {  
737 - console_window_delete(tracewindow_handle);  
738 - tracewindow_handle = NULL;  
739 - }  
740 -  
741 -#elif !defined(_WIN32)  
742 -  
743 - if (tracewindow_pid != -1)  
744 - (void) kill(tracewindow_pid, SIGKILL);  
745 - tracewindow_pid = -1;  
746 -  
747 -#else  
748 -  
749 - if (tracewindow_handle != NULL)  
750 - {  
751 - TerminateProcess(tracewindow_handle, 0);  
752 - CloseHandle(tracewindow_handle);  
753 - tracewindow_handle = NULL;  
754 - }  
755 -  
756 -#endif  
757 -  
758 - stop_tracing();  
759 -}  
760 -  
761 -  
762 -void toggle_dsTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt)  
763 -{  
764 - if (lib3270_get_toggle(&h3270,DS_TRACE) && tracef == NULL)  
765 - tracefile_on(DS_TRACE, tt);  
766 -  
767 - // If turning off trace and not still tracing events, close the trace file.  
768 - else if (!lib3270_get_toggle(&h3270,DS_TRACE) && !lib3270_get_toggle(&h3270,EVENT_TRACE))  
769 - tracefile_off();  
770 -  
771 - if (lib3270_get_toggle(&h3270,DS_TRACE))  
772 - (void) gettimeofday(&ds_ts, (struct timezone *)NULL);  
773 -}  
774 -*/  
775 -  
776 -/*  
777 -void toggle_eventTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt)  
778 -{  
779 - // If turning on event debug, and no trace file, open one.  
780 -  
781 - if (lib3270_get_toggle(&h3270,EVENT_TRACE) && tracef == NULL)  
782 - tracefile_on(EVENT_TRACE, tt);  
783 -  
784 - // If turning off event debug, and not tracing the data stream, close the trace file.  
785 - else if (!lib3270_get_toggle(&h3270,EVENT_TRACE) && !lib3270_get_toggle(&h3270,DS_TRACE))  
786 - tracefile_off();  
787 -}  
788 -*/  
789 -  
790 -/* Screen trace file support. */  
791 -  
792 -/*  
793 -#if defined(X3270_DISPLAY)  
794 -static Widget screentrace_shell = (Widget)NULL;  
795 -#endif  
796 -static FILE *screentracef = (FILE *)0;  
797 -*/  
798 -/*  
799 - * Screen trace function, called when the host clears the screen.  
800 - */  
801 -static void do_screentrace(void)  
802 -{  
803 - wtrace("\n%s - Not implemented\n",__FUNCTION__);  
804 -/*  
805 - register int i;  
806 -  
807 - if (fprint_screen(screentracef, False, False)) {  
808 - for (i = 0; i < h3270.cols; i++)  
809 - (void) fputc('=', screentracef);  
810 - (void) fputc('\n', screentracef);  
811 - }  
812 -*/  
813 -}  
814 -  
815 -void trace_screen(void)  
816 -{  
817 - trace_skipping = False;  
818 -  
819 - if (!lib3270_get_toggle(&h3270,LIB3270_TOGGLE_SCREEN_TRACE))  
820 - do_screentrace();  
821 } 314 }
822 315
823 /* Called from ANSI emulation code to log a single character. */ 316 /* Called from ANSI emulation code to log a single character. */
@@ -846,128 +339,5 @@ void trace_ansi_disc(void) @@ -846,128 +339,5 @@ void trace_ansi_disc(void)
846 trace_skipping = True; 339 trace_skipping = True;
847 } 340 }
848 341
849 -/*  
850 - * Screen tracing callback.  
851 - * Returns True for success, False for failure.  
852 - */ /*  
853 -static Boolean  
854 -screentrace_cb(char *tfn)  
855 -{  
856 - tfn = do_subst(tfn, True, True);  
857 - screentracef = fopen(tfn, "a");  
858 - if (screentracef == (FILE *)NULL) {  
859 - popup_an_errno(errno, tfn);  
860 - lib3270_free(tfn);  
861 - return False;  
862 - }  
863 - lib3270_free(tfn);  
864 - (void) SETLINEBUF(screentracef);  
865 -#if !defined(_WIN32)  
866 - (void) fcntl(fileno(screentracef), F_SETFD, 1);  
867 -#endif  
868 -  
869 - // We're really tracing, turn the flag on.  
870 - appres.toggle[SCREEN_TRACE].value = True;  
871 -// appres.toggle[SCREEN_TRACE].changed = True;  
872 -// menubar_retoggle(&appres.toggle[SCREEN_TRACE]);  
873 - return True;  
874 -}  
875 -*/  
876 342
877 -/*  
878 -#if defined(X3270_DISPLAY)  
879 -// Callback for "OK" button on screentrace popup  
880 -static void  
881 -screentrace_callback(Widget w unused, XtPointer client_data,  
882 - XtPointer call_data unused)  
883 -{  
884 - if (screentrace_cb(XawDialogGetValueString((Widget)client_data)))  
885 - XtPopdown(screentrace_shell);  
886 -}  
887 -  
888 -// Callback for second "OK" button on screentrace popup  
889 -static void  
890 -onescreen_callback(Widget w, XtPointer client_data, XtPointer call_data unused)  
891 -{  
892 - char *tfn;  
893 -  
894 - if (w)  
895 - tfn = XawDialogGetValueString((Widget)client_data);  
896 - else  
897 - tfn = (char *)client_data;  
898 - tfn = do_subst(tfn, True, True);  
899 - screentracef = fopen(tfn, "a");  
900 - if (screentracef == (FILE *)NULL) {  
901 - popup_an_errno(errno, tfn);  
902 - XtFree(tfn);  
903 - return;  
904 - }  
905 - (void) fcntl(fileno(screentracef), F_SETFD, 1);  
906 - XtFree(tfn);  
907 -  
908 - // Save the current image, once.  
909 - do_screentrace();  
910 -  
911 - // Close the file, we're done.  
912 - (void) fclose(screentracef);  
913 - screentracef = (FILE *)NULL;  
914 -  
915 - if (w)  
916 - XtPopdown(screentrace_shell);  
917 -}  
918 -#endif */  
919 -  
920 -/*  
921 -void toggle_screenTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt)  
922 -{  
923 - wtrace("Screen trace is %s\n",toggled(SCREEN_TRACE),"Enabled" : "Disabled");  
924 -  
925 - char *tracefile_buf = NULL;  
926 - char *tracefile;  
927 -  
928 - if (lib3270_get_toggle(&h3270,SCREEN_TRACE)) {  
929 - if (appres.screentrace_file)  
930 - tracefile = appres.screentrace_file;  
931 - else {  
932 -#if defined(_WIN32)  
933 - tracefile_buf = xs_buffer("%sx3scr.%u.txt",PROGRAM_DATA, getpid());  
934 -#else  
935 - if(appres.trace_dir)  
936 - tracefile_buf = xs_buffer("%s/x3scr.%u",appres.trace_dir, getpid());  
937 - else  
938 - tracefile_buf = xs_buffer("%s/x3scr.%u",".", getpid());  
939 -#endif  
940 - tracefile = tracefile_buf;  
941 - }  
942 - if (tt == TT_INITIAL || tt == TT_ACTION) {  
943 - (void) screentrace_cb(NewString(tracefile));  
944 - if (tracefile_buf != NULL)  
945 - lib3270_free(tracefile_buf);  
946 - return;  
947 - }  
948 -#if defined(X3270_DISPLAY)  
949 - if (screentrace_shell == NULL) {  
950 - screentrace_shell = create_form_popup("screentrace",  
951 - screentrace_callback, onescreen_callback,  
952 - FORM_NO_WHITE);  
953 - XtVaSetValues(XtNameToWidget(screentrace_shell,  
954 - ObjDialog),  
955 - XtNvalue, tracefile,  
956 - NULL);  
957 - }  
958 - appres.toggle[SCREEN_TRACE].value = False;  
959 - appres.toggle[SCREEN_TRACE].changed = True;  
960 - popup_popup(screentrace_shell, XtGrabExclusive);  
961 #endif 343 #endif
962 - } else {  
963 - if (ctlr_any_data() && !trace_skipping)  
964 - do_screentrace();  
965 - (void) fclose(screentracef);  
966 - }  
967 -  
968 - if (tracefile_buf != NULL)  
969 - lib3270_free(tracefile_buf);  
970 -}  
971 -*/  
972 -  
973 -#endif /*]*/  
src/lib3270/trace_dsc.h
@@ -48,7 +48,7 @@ @@ -48,7 +48,7 @@
48 void trace_ds_nb(const char *fmt, ...) printflike(1, 2); 48 void trace_ds_nb(const char *fmt, ...) printflike(1, 2);
49 void trace_dsn(const char *fmt, ...) printflike(1, 2); 49 void trace_dsn(const char *fmt, ...) printflike(1, 2);
50 void trace_event(const char *fmt, ...) printflike(1, 2); 50 void trace_event(const char *fmt, ...) printflike(1, 2);
51 - void trace_screen(void); 51 + void trace_screen(H3270 *session);
52 // void trace_rollover_check(void); 52 // void trace_rollover_check(void);
53 53
54 #elif defined(__GNUC__) 54 #elif defined(__GNUC__)
ui/99debug.xml
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 <menu name='View' > 38 <menu name='View' >
39 <menu name='TraceOptions' label='Trace' > 39 <menu name='TraceOptions' label='Trace' >
40 <menuitem action='toggle' id='dstrace' label='DS Trace' /> 40 <menuitem action='toggle' id='dstrace' label='DS Trace' />
41 - <!-- menuitem action='toggle' id='screentrace' label='Screen Trace' / --> 41 + <menuitem action='toggle' id='screentrace' label='Screen Trace' />
42 <menuitem action='toggle' id='eventtrace' label='Event Trace' /> 42 <menuitem action='toggle' id='eventtrace' label='Event Trace' />
43 </menu> 43 </menu>
44 </menu> 44 </menu>