Commit 615e14f3488b8c9021bfbf08d6ef3c0c4df63058

Authored by perry.werneck@gmail.com
1 parent 0a721dd2

Melhorando teste de "TerminalReady"

src/include/lib3270.h
... ... @@ -189,7 +189,7 @@
189 189 LIB3270_MESSAGE_NUMERIC, /**< 8 - */
190 190 LIB3270_MESSAGE_OVERFLOW, /**< 9 - */
191 191 LIB3270_MESSAGE_INHIBIT, /**< 10 - */
192   - LIB3270_MESSAGE_KYBDLOCK, /**< 11 - */
  192 + LIB3270_MESSAGE_KYBDLOCK, /**< 11 - Keyboard is locked */
193 193  
194 194 LIB3270_MESSAGE_X, /**< 12 - */
195 195 LIB3270_MESSAGE_RESOLVING, /**< 13 - Resolving hostname (running DNS query) */
... ... @@ -707,9 +707,10 @@
707 707 LIB3270_EXPORT int lib3270_in_sscp(H3270 *h);
708 708 LIB3270_EXPORT int lib3270_in_tn3270e(H3270 *h);
709 709 LIB3270_EXPORT int lib3270_in_e(H3270 *h);
  710 + LIB3270_EXPORT int lib3270_lock_status(H3270 *h);
  711 + LIB3270_EXPORT int lib3270_is_ready(H3270 *h);
710 712  
711 713 #define lib3270_is_connected(h) lib3270_in_tn3270e(h)
712   - #define lib3270_is_ready(h) lib3270_get_program_message(h) == LIB3270_MESSAGE_NONE
713 714  
714 715 LIB3270_EXPORT LIB3270_SSL_STATE lib3270_get_secure(H3270 *session);
715 716 LIB3270_EXPORT long lib3270_get_SSL_verify_result(H3270 *session);
... ...
src/lib3270/ctlr.c
... ... @@ -2205,21 +2205,20 @@ int ctlr_any_data(H3270 *session)
2205 2205 * Clear the text (non-status) portion of the display. Also resets the cursor
2206 2206 * and buffer addresses and extended attributes.
2207 2207 */
2208   -void
2209   -ctlr_clear(H3270 *session, Boolean can_snap)
  2208 +void ctlr_clear(H3270 *session, Boolean can_snap)
2210 2209 {
2211 2210 /* Snap any data that is about to be lost into the trace file. */
  2211 +#if defined(X3270_TRACE)
  2212 +
2212 2213 if (ctlr_any_data(session))
2213 2214 {
2214   -#if defined(X3270_TRACE) /*[*/
2215 2215 if (can_snap && !session->trace_skipping && lib3270_get_toggle(session,LIB3270_TOGGLE_SCREEN_TRACE))
2216 2216 trace_screen(session);
2217   -#endif /*]*/
2218   -// scroll_save(session->maxROWS, ever_3270 ? False : True);
2219 2217 }
2220   -#if defined(X3270_TRACE) /*[*/
  2218 +
2221 2219 session->trace_skipping = 0;
2222   -#endif /*]*/
  2220 +
  2221 +#endif
2223 2222  
2224 2223 /* Clear the screen. */
2225 2224 (void) memset((char *)session->ea_buf, 0, session->rows*session->cols*sizeof(struct lib3270_ea));
... ...
src/lib3270/iocalls.c
... ... @@ -726,14 +726,14 @@ LIB3270_EXPORT int lib3270_wait_for_ready(H3270 *hSession, int seconds)
726 726 {
727 727 time_t end = time(0)+seconds;
728 728  
729   - if(hSession->oia_status == LIB3270_STATUS_BLANK)
  729 + if(!lib3270_lock_status(hSession))
730 730 return 0;
731 731  
732 732 while(time(0) < end)
733 733 {
734 734 event_dispatcher(hSession,1);
735 735  
736   - if(hSession->oia_status == LIB3270_STATUS_BLANK)
  736 + if(!lib3270_lock_status(hSession))
737 737 return 0;
738 738  
739 739 if(!lib3270_connected(hSession))
... ...
src/lib3270/kybd.c
... ... @@ -384,7 +384,7 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits)
384 384 hSession->unlock_delay_time = time(NULL);
385 385 }
386 386 hSession->kybdlock = n;
387   - status_changed(hSession,LIB3270_STATUS_KYBDLOCK);
  387 + status_changed(hSession,LIB3270_MESSAGE_KYBDLOCK);
388 388 }
389 389 }
390 390  
... ... @@ -409,7 +409,7 @@ void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits)
409 409 hSession->unlock_delay_time = 0;
410 410 }
411 411 hSession->kybdlock = n;
412   - status_changed(hSession,LIB3270_STATUS_KYBDLOCK);
  412 + status_changed(hSession,LIB3270_MESSAGE_KYBDLOCK);
413 413 }
414 414 }
415 415  
... ...
src/lib3270/screen.c
... ... @@ -528,6 +528,42 @@ LIB3270_EXPORT LIB3270_STATUS lib3270_get_program_message(H3270 *session)
528 528 return session->oia_status;
529 529 }
530 530  
  531 +/**
  532 + * Check if the terminal is ready for commands.
  533 + *
  534 + * @param h Session handle.
  535 + *
  536 + * @return 0 if the terminal is ready (no message, keyboard unlocked), LIB3270_MESSAGE if not
  537 + *
  538 + */
  539 +LIB3270_EXPORT int lib3270_lock_status(H3270 *hSession)
  540 +{
  541 + CHECK_SESSION_HANDLE(hSession);
  542 +
  543 + if(hSession->oia_status)
  544 + return hSession->oia_status;
  545 +
  546 + if(hSession->kybdlock)
  547 + return LIB3270_MESSAGE_KYBDLOCK;
  548 +
  549 + return LIB3270_MESSAGE_NONE;
  550 +
  551 +}
  552 +
  553 +/**
  554 + * Check if terminal is ready for actions.
  555 + *
  556 + * @param h Session handle.
  557 + *
  558 + * @return Non zero if terminal is ready for commands.
  559 + *
  560 + */
  561 +LIB3270_EXPORT int lib3270_is_ready(H3270 *hSession)
  562 +{
  563 + return lib3270_lock_status(hSession) == LIB3270_MESSAGE_NONE;
  564 +}
  565 +
  566 +
531 567 void status_changed(H3270 *session, LIB3270_STATUS id)
532 568 {
533 569 CHECK_SESSION_HANDLE(session);
... ...
src/lib3270/statusc.h
... ... @@ -35,7 +35,4 @@ LIB3270_INTERNAL void set_status(H3270 *session, OIA_FLAG id, Boolean on);
35 35  
36 36  
37 37 #define status_typeahead(h,on) set_status(h,OIA_FLAG_TYPEAHEAD,on)
38   -// #define status_kybdlock(h) status_changed(h,LIB3270_STATUS_KYBDLOCK)
39   -// #define status_syswait(h) status_changed(h,LIB3270_STATUS_SYSWAIT)
40   -// #define status_minus() status_changed(NULL,LIB3270_STATUS_MINUS)
41 38  
... ...