Commit a046e5a6cb6d43a3ec76834f58f89c5e635dc712
1 parent
a2c1ad41
Exists in
master
and in
5 other branches
Android - Implementando string de logon para passar automaticamente pela tela inicial
Showing
9 changed files
with
65 additions
and
42 deletions
Show diff stats
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); |