Commit a046e5a6cb6d43a3ec76834f58f89c5e635dc712

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

Android - Implementando string de logon para passar automaticamente pela tela inicial

android/jni/main.cpp
... ... @@ -77,10 +77,20 @@ static void changed(H3270 *session, int offset, int len)
77 77 trace("%s: offset=%d len=%d",__FUNCTION__,offset,len);
78 78  
79 79 {
80   - char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
81   -
  80 + char *text = lib3270_get_text(PW3270_SESSION,0,-1);
82 81 if(text)
  82 + {
  83 + char *strtok_r(char *str, const char *delim, char **saveptr);
  84 + char *save;
  85 +
  86 +/*
  87 + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Contents:\n");
  88 + for(char *ptr = strtok_r(text,"\n",&save);ptr;ptr = strtok_r(NULL,"\n",&save))
  89 + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s\n",ptr);
  90 +*/
  91 +
83 92 lib3270_free(text);
  93 + }
84 94 }
85 95  
86 96 pw3270_jni_post_message(2,offset,len);
... ... @@ -258,16 +268,25 @@ static void ctlr_done(H3270 *session)
258 268  
259 269 static void autostart(H3270 *session)
260 270 {
261   - // pw3270_jni_post_message(10);
262   -
263 271 {
264 272 char *text = lib3270_get_text(PW3270_SESSION,0,-1);
265 273 if(text)
266 274 {
267   - __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Contents:\n%s\n",text);
  275 + char *strtok_r(char *str, const char *delim, char **saveptr);
  276 + char *save;
  277 +
  278 +/*
  279 + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Contents:\n");
  280 + for(char *ptr = strtok_r(text,"\n",&save);ptr;ptr = strtok_r(NULL,"\n",&save))
  281 + __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s\n",ptr);
  282 +*/
  283 +
268 284 lib3270_free(text);
269 285 }
270 286 }
  287 +
  288 + pw3270_jni_post_message(10);
  289 +
271 290 }
272 291  
273 292 jint JNI_OnLoad(JavaVM *vm, void *reserved)
... ...
android/jni/text.cpp
... ... @@ -139,16 +139,18 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj
139 139 PW3270_JNI_END
140 140 }
141 141  
142   -JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_input(JNIEnv *env, jobject obj, jstring str, jint pasting)
  142 +JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_runStartupString(JNIEnv *env, jobject obj, jstring str)
143 143 {
144 144 int rc = -1;
145 145  
146 146 PW3270_JNI_BEGIN
147 147  
148 148 if(lib3270_connected(PW3270_SESSION))
149   - rc = lib3270_emulate_input(PW3270_SESSION, env->GetStringUTFChars(str, 0), -1, (int) pasting);
  149 + {
  150 + lib3270_set_cursor_address(PW3270_SESSION,lib3270_get_next_unprotected(PW3270_SESSION,0));
  151 + lib3270_emulate_input(PW3270_SESSION, env->GetStringUTFChars(str, 0), -1, 0);
  152 + }
150 153  
151 154 PW3270_JNI_END
152 155  
153   - return rc;
154 156 }
... ...
android/src/br/com/bb/pw3270/lib3270.java
... ... @@ -140,22 +140,11 @@ public abstract class lib3270
140 140 break;
141 141  
142 142 case 10: // Run autostart
143   - Log.v(TAG, "AAA---------------------------------------------------------------");
144   - Log.v(TAG, "In3270="+(in3270() ? "Yes" : "No"));
145 143  
146   - /*
147 144 String str = settings.getString("logonstring","");
148 145 Log.v(TAG, "Logon string is \"" + str + "\"");
149 146 if( str != "")
150   - {
151   - int sz = input(str,0);
152   - Log.v(TAG, "Input exits with "+sz);
153   - }
154   - */
155   -
156   - Log.v(TAG, "Contents:\n" + getText() + "\n");
157   -
158   - Log.v(TAG, "AAA---------------------------------------------------------------");
  147 + runStartupString(str);
159 148 break;
160 149  
161 150 }
... ... @@ -176,7 +165,7 @@ public abstract class lib3270
176 165 this.screenState = -1;
177 166  
178 167 for(int f = 0; f < toggle.length; f++)
179   - setToggle(toggle[f],settings.getBoolean(toggle[f],true));
  168 + setToggle(toggle[f],settings.getBoolean(toggle[f],false));
180 169  
181 170 }
182 171  
... ... @@ -632,7 +621,7 @@ public abstract class lib3270
632 621  
633 622 public native void setTextAt(int offset, byte[] str, int len);
634 623  
635   - public native int input(String text, int pasting);
636   -
637 624 public native boolean in3270();
  625 +
  626 + public native void runStartupString(String text);
638 627 }
... ...
src/include/lib3270.h
... ... @@ -441,7 +441,7 @@
441 441 * @param len Size of the string (or -1 to null terminated strings)
442 442 * @param pasting Non zero for pasting (See comments).
443 443 *
444   - * @return The number of unprocessed characters.
  444 + * @return The number of unprocessed characters or -1 if failed
445 445 */
446 446 LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, const char *s, int len, int pasting);
447 447  
... ... @@ -769,6 +769,17 @@
769 769 LIB3270_EXPORT char * lib3270_get_field_at(H3270 *h, int baddr);
770 770  
771 771 /**
  772 + * Find the next unprotected field.
  773 + *
  774 + * @param hSession Session handle.
  775 + * @param baddr0 Search start addr.
  776 + *
  777 + * @return address following the unprotected attribute byte, or 0 if no nonzero-width unprotected field can be found.
  778 + *
  779 + */
  780 + LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0);
  781 +
  782 + /**
772 783 * Find the buffer address of the field attribute for a given buffer address.
773 784 *
774 785 * @param h Session handle.
... ...
src/include/lib3270/log.h
... ... @@ -45,7 +45,8 @@
45 45 #define lib3270_write_rc(s,m,r,f,...) __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, f "\n", __VA_ARGS__ )
46 46 #define lib3270_write_va_log(s,m,f,a) __android_log_vprint(ANDROID_LOG_VERBOSE, PACKAGE_NAME, f "\n", a)
47 47  
48   - #define trace( fmt, ... ) __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ );
  48 + // #define trace( fmt, ... ) __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ );
  49 + #define trace(x, ...) // __VA_ARGS__
49 50  
50 51 #else
51 52  
... ...
src/lib3270/ctlr.c
... ... @@ -240,7 +240,6 @@ static void set_formatted(H3270 *hSession, int state)
240 240 hSession->update_formatted(hSession,hSession->formatted);
241 241 }
242 242 */
243   - trace("Screen is now %s",hSession->formatted ? "formatted" : "unformatted");
244 243 }
245 244  
246 245 /**
... ... @@ -366,12 +365,7 @@ unsigned char get_field_attribute(H3270 *hSession, int baddr)
366 365 return hSession->ea_buf[find_field_attribute(hSession,baddr)].fa;
367 366 }
368 367  
369   -/*
370   - * Find the next unprotected field. Returns the address following the
371   - * unprotected attribute byte, or 0 if no nonzero-width unprotected field
372   - * can be found.
373   - */
374   -int next_unprotected(H3270 *hSession, int baddr0)
  368 +LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0)
375 369 {
376 370 register int baddr, nbaddr;
377 371  
... ...
src/lib3270/ctlrc.h
... ... @@ -61,7 +61,9 @@ LIB3270_INTERNAL enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int b
61 61 LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], int buflen);
62 62 LIB3270_INTERNAL void mdt_clear(H3270 *hSession, int baddr);
63 63 LIB3270_INTERNAL void mdt_set(H3270 *hSession, int baddr);
64   -LIB3270_INTERNAL int next_unprotected(H3270 *session, int baddr0);
  64 +
  65 +#define next_unprotected(session, baddr0) lib3270_get_next_unprotected(session, baddr0)
  66 +
65 67 LIB3270_INTERNAL enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen);
66 68 LIB3270_INTERNAL void ps_process(H3270 *hSession);
67 69  
... ...
src/lib3270/kybd.c
... ... @@ -86,7 +86,9 @@ struct ta;
86 86 #include "api.h"
87 87  
88 88  
89   -/*#define KYBDLOCK_TRACE 1*/
  89 +#ifdef DEBUG
  90 + #define KYBDLOCK_TRACE
  91 +#endif // DEBUG
90 92  
91 93 /* Statics */
92 94 // static enum { NONE, COMPOSE, FIRST } composing = NONE;
... ... @@ -372,12 +374,9 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits)
372 374 n = hSession->kybdlock | bits;
373 375 if (n != hSession->kybdlock)
374 376 {
375   -/*
376 377 #if defined(KYBDLOCK_TRACE)
377   - lib3270_trace_event(hSession," %s: kybdlock |= 0x%04x, 0x%04x -> 0x%04x\n",
378   - cause, bits, kybdlock, n);
  378 + lib3270_trace_event(hSession," %s: kybdlock |= 0x%04x, 0x%04x -> 0x%04x\n", "set", bits, hSession->kybdlock, n);
379 379 #endif
380   -*/
381 380 if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK)
382 381 {
383 382 /* Turned on deferred unlock. */
... ... @@ -396,10 +395,12 @@ void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits)
396 395 {
397 396 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits);
398 397  
  398 + trace("%s: kybdlock=%d",__FUNCTION__,n);
  399 +
399 400 if (n != hSession->kybdlock)
400 401 {
401 402 #if defined(KYBDLOCK_TRACE)
402   - lib3270_trace_event(hSession," %s: kybdlock &= ~0x%04x, 0x%04x -> 0x%04x\n", __FUNCTION__, bits, kybdlock, n);
  403 + lib3270_trace_event(hSession," %s: kybdlock &= ~0x%04x, 0x%04x -> 0x%04x\n", "clear", bits, hSession->kybdlock, n);
403 404 #endif
404 405 if ((hSession->kybdlock ^ n) & KL_DEFERRED_UNLOCK)
405 406 {
... ... @@ -2502,7 +2503,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len
2502 2503 len = mb_to_unicode(s, len, w_ibuf, w_ibuf_len, NULL);
2503 2504 if (len < 0)
2504 2505 {
2505   - return 0; /* failed */
  2506 + return -1; /* failed */
2506 2507 }
2507 2508 ws = w_ibuf;
2508 2509 #else /*][*/
... ... @@ -2523,7 +2524,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len
2523 2524 if (hSession->kybdlock)
2524 2525 {
2525 2526 lib3270_trace_event(hSession," keyboard locked, string dropped\n");
2526   - return 0;
  2527 + return -1;
2527 2528 }
2528 2529  
2529 2530 if (pasting && IN_3270)
... ...
src/lib3270/screen.c
... ... @@ -372,10 +372,14 @@ void screen_update(H3270 *session, int bstart, int bend)
372 372 session->changed(session,first,len);
373 373 }
374 374  
375   - if(session->starting && session->formatted && lib3270_in_3270(session))
  375 + if(session->starting && session->formatted && !session->kybdlock && lib3270_in_3270(session))
376 376 {
377 377 session->starting = 0;
  378 +
  379 +// cursor_move(session,next_unprotected(session,0));
  380 +// lib3270_emulate_input(session,"\\n",-1,0);
378 381 session->autostart(session);
  382 +
379 383 #ifdef DEBUG
380 384 {
381 385 char *text = lib3270_get_text(session,0,-1);
... ...