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,10 +77,20 @@ static void changed(H3270 *session, int offset, int len)
77 trace("%s: offset=%d len=%d",__FUNCTION__,offset,len); 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 if(text) 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 lib3270_free(text); 92 lib3270_free(text);
  93 + }
84 } 94 }
85 95
86 pw3270_jni_post_message(2,offset,len); 96 pw3270_jni_post_message(2,offset,len);
@@ -258,16 +268,25 @@ static void ctlr_done(H3270 *session) @@ -258,16 +268,25 @@ static void ctlr_done(H3270 *session)
258 268
259 static void autostart(H3270 *session) 269 static void autostart(H3270 *session)
260 { 270 {
261 - // pw3270_jni_post_message(10);  
262 -  
263 { 271 {
264 char *text = lib3270_get_text(PW3270_SESSION,0,-1); 272 char *text = lib3270_get_text(PW3270_SESSION,0,-1);
265 if(text) 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 lib3270_free(text); 284 lib3270_free(text);
269 } 285 }
270 } 286 }
  287 +
  288 + pw3270_jni_post_message(10);
  289 +
271 } 290 }
272 291
273 jint JNI_OnLoad(JavaVM *vm, void *reserved) 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,16 +139,18 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj
139 PW3270_JNI_END 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 int rc = -1; 144 int rc = -1;
145 145
146 PW3270_JNI_BEGIN 146 PW3270_JNI_BEGIN
147 147
148 if(lib3270_connected(PW3270_SESSION)) 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 PW3270_JNI_END 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,22 +140,11 @@ public abstract class lib3270
140 break; 140 break;
141 141
142 case 10: // Run autostart 142 case 10: // Run autostart
143 - Log.v(TAG, "AAA---------------------------------------------------------------");  
144 - Log.v(TAG, "In3270="+(in3270() ? "Yes" : "No"));  
145 143
146 - /*  
147 String str = settings.getString("logonstring",""); 144 String str = settings.getString("logonstring","");
148 Log.v(TAG, "Logon string is \"" + str + "\""); 145 Log.v(TAG, "Logon string is \"" + str + "\"");
149 if( str != "") 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 break; 148 break;
160 149
161 } 150 }
@@ -176,7 +165,7 @@ public abstract class lib3270 @@ -176,7 +165,7 @@ public abstract class lib3270
176 this.screenState = -1; 165 this.screenState = -1;
177 166
178 for(int f = 0; f < toggle.length; f++) 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,7 +621,7 @@ public abstract class lib3270
632 621
633 public native void setTextAt(int offset, byte[] str, int len); 622 public native void setTextAt(int offset, byte[] str, int len);
634 623
635 - public native int input(String text, int pasting);  
636 -  
637 public native boolean in3270(); 624 public native boolean in3270();
  625 +
  626 + public native void runStartupString(String text);
638 } 627 }
src/include/lib3270.h
@@ -441,7 +441,7 @@ @@ -441,7 +441,7 @@
441 * @param len Size of the string (or -1 to null terminated strings) 441 * @param len Size of the string (or -1 to null terminated strings)
442 * @param pasting Non zero for pasting (See comments). 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 LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, const char *s, int len, int pasting); 446 LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, const char *s, int len, int pasting);
447 447
@@ -769,6 +769,17 @@ @@ -769,6 +769,17 @@
769 LIB3270_EXPORT char * lib3270_get_field_at(H3270 *h, int baddr); 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 * Find the buffer address of the field attribute for a given buffer address. 783 * Find the buffer address of the field attribute for a given buffer address.
773 * 784 *
774 * @param h Session handle. 785 * @param h Session handle.
src/include/lib3270/log.h
@@ -45,7 +45,8 @@ @@ -45,7 +45,8 @@
45 #define lib3270_write_rc(s,m,r,f,...) __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, f "\n", __VA_ARGS__ ) 45 #define lib3270_write_rc(s,m,r,f,...) __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, f "\n", __VA_ARGS__ )
46 #define lib3270_write_va_log(s,m,f,a) __android_log_vprint(ANDROID_LOG_VERBOSE, PACKAGE_NAME, f "\n", a) 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 #else 51 #else
51 52
src/lib3270/ctlr.c
@@ -240,7 +240,6 @@ static void set_formatted(H3270 *hSession, int state) @@ -240,7 +240,6 @@ static void set_formatted(H3270 *hSession, int state)
240 hSession->update_formatted(hSession,hSession->formatted); 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,12 +365,7 @@ unsigned char get_field_attribute(H3270 *hSession, int baddr)
366 return hSession->ea_buf[find_field_attribute(hSession,baddr)].fa; 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 register int baddr, nbaddr; 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,7 +61,9 @@ LIB3270_INTERNAL enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int b
61 LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], int buflen); 61 LIB3270_INTERNAL void ctlr_write_sscp_lu(H3270 *session, unsigned char buf[], int buflen);
62 LIB3270_INTERNAL void mdt_clear(H3270 *hSession, int baddr); 62 LIB3270_INTERNAL void mdt_clear(H3270 *hSession, int baddr);
63 LIB3270_INTERNAL void mdt_set(H3270 *hSession, int baddr); 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 LIB3270_INTERNAL enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen); 67 LIB3270_INTERNAL enum pds process_ds(H3270 *hSession, unsigned char *buf, int buflen);
66 LIB3270_INTERNAL void ps_process(H3270 *hSession); 68 LIB3270_INTERNAL void ps_process(H3270 *hSession);
67 69
src/lib3270/kybd.c
@@ -86,7 +86,9 @@ struct ta; @@ -86,7 +86,9 @@ struct ta;
86 #include "api.h" 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 /* Statics */ 93 /* Statics */
92 // static enum { NONE, COMPOSE, FIRST } composing = NONE; 94 // static enum { NONE, COMPOSE, FIRST } composing = NONE;
@@ -372,12 +374,9 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits) @@ -372,12 +374,9 @@ static void kybdlock_set(H3270 *hSession, unsigned int bits)
372 n = hSession->kybdlock | bits; 374 n = hSession->kybdlock | bits;
373 if (n != hSession->kybdlock) 375 if (n != hSession->kybdlock)
374 { 376 {
375 -/*  
376 #if defined(KYBDLOCK_TRACE) 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 #endif 379 #endif
380 -*/  
381 if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK) 380 if ((hSession->kybdlock ^ bits) & KL_DEFERRED_UNLOCK)
382 { 381 {
383 /* Turned on deferred unlock. */ 382 /* Turned on deferred unlock. */
@@ -396,10 +395,12 @@ void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits) @@ -396,10 +395,12 @@ void lib3270_kybdlock_clear(H3270 *hSession, LIB3270_KL_STATE bits)
396 { 395 {
397 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits); 396 unsigned int n = hSession->kybdlock & ~( (unsigned int) bits);
398 397
  398 + trace("%s: kybdlock=%d",__FUNCTION__,n);
  399 +
399 if (n != hSession->kybdlock) 400 if (n != hSession->kybdlock)
400 { 401 {
401 #if defined(KYBDLOCK_TRACE) 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 #endif 404 #endif
404 if ((hSession->kybdlock ^ n) & KL_DEFERRED_UNLOCK) 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,7 +2503,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len
2502 len = mb_to_unicode(s, len, w_ibuf, w_ibuf_len, NULL); 2503 len = mb_to_unicode(s, len, w_ibuf, w_ibuf_len, NULL);
2503 if (len < 0) 2504 if (len < 0)
2504 { 2505 {
2505 - return 0; /* failed */ 2506 + return -1; /* failed */
2506 } 2507 }
2507 ws = w_ibuf; 2508 ws = w_ibuf;
2508 #else /*][*/ 2509 #else /*][*/
@@ -2523,7 +2524,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len @@ -2523,7 +2524,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len
2523 if (hSession->kybdlock) 2524 if (hSession->kybdlock)
2524 { 2525 {
2525 lib3270_trace_event(hSession," keyboard locked, string dropped\n"); 2526 lib3270_trace_event(hSession," keyboard locked, string dropped\n");
2526 - return 0; 2527 + return -1;
2527 } 2528 }
2528 2529
2529 if (pasting && IN_3270) 2530 if (pasting && IN_3270)
src/lib3270/screen.c
@@ -372,10 +372,14 @@ void screen_update(H3270 *session, int bstart, int bend) @@ -372,10 +372,14 @@ void screen_update(H3270 *session, int bstart, int bend)
372 session->changed(session,first,len); 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 session->starting = 0; 377 session->starting = 0;
  378 +
  379 +// cursor_move(session,next_unprotected(session,0));
  380 +// lib3270_emulate_input(session,"\\n",-1,0);
378 session->autostart(session); 381 session->autostart(session);
  382 +
379 #ifdef DEBUG 383 #ifdef DEBUG
380 { 384 {
381 char *text = lib3270_get_text(session,0,-1); 385 char *text = lib3270_get_text(session,0,-1);