Commit 81d94b1360292cad950bc36f02bd73170f515bef

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

Implementando macros para chamada de métodos java de dentro da JNI para evitar a…

… dupĺicação de códigos
android/jni/globals.h
@@ -34,22 +34,40 @@ @@ -34,22 +34,40 @@
34 34
35 /*--[ Defines ]--------------------------------------------------------------------------------------*/ 35 /*--[ Defines ]--------------------------------------------------------------------------------------*/
36 36
37 - typedef struct _info  
38 - {  
39 - JNIEnv * env;  
40 - jobject obj;  
41 -  
42 - } INFO;  
43 -  
44 - #define session_request(env, obj) INFO jni_data = { env, obj }; \  
45 - H3270 * session = lib3270_get_default_session_handle(); \ 37 +/*
  38 + #define session_request(env, obj) H3270 * session = lib3270_get_default_session_handle(); \
46 session->widget = &jni_data; 39 session->widget = &jni_data;
47 40
48 #define session_release() session->widget = 0; 41 #define session_release() session->widget = 0;
  42 +*/
  43 +
  44 +/*
  45 + #define PW3270_JNI_BEGIN pw3270_env = env; pw3270_obj = obj;
  46 + #define PW3270_JNI_END pw3270_env = NULL; pw3270_obj = NULL;
  47 +*/
  48 +
  49 + #define PW3270_JNI_BEGIN pw3270_env = env; pw3270_obj = obj; \
  50 + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "%s.begin env=%p obj=%p",__FUNCTION__,env,obj);
  51 +
  52 + #define PW3270_JNI_END __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "%s.end env=%p obj=%p",__FUNCTION__,pw3270_env,pw3270_obj); \
  53 + pw3270_env = NULL; pw3270_obj = NULL;
  54 +
  55 + #define PW3270_JNI_ENV pw3270_env
  56 + #define PW3270_JNI_OBJ pw3270_obj
  57 +
  58 + #define PW3270_SESSION lib3270_get_default_session_handle()
  59 +
  60 + #define pw3270_jni_call_void(name, sig, ...) pw3270_env->CallVoidMethod(pw3270_obj,lib3270_getmethodID(name,sig), __VA_ARGS__)
  61 + #define pw3270_jni_call_int(name, sig, ...) pw3270_env->CallIntMethod(pw3270_obj,lib3270_getmethodID(name,sig), __VA_ARGS__)
  62 + #define pw3270_jni_new_string(str) pw3270_env->NewStringUTF(str)
  63 + #define pw3270_jni_new_byte_array(len) pw3270_env->NewByteArray(len)
49 64
50 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 65 /*--[ Globals ]--------------------------------------------------------------------------------------*/
51 66
52 - extern const char *java_class_name; 67 + extern JNIEnv * pw3270_env;
  68 + extern jobject pw3270_obj;
  69 +
53 70
  71 + jmethodID lib3270_getmethodID(const char *name, const char *sig);
54 72
55 73
android/jni/main.cpp
@@ -45,49 +45,76 @@ @@ -45,49 +45,76 @@
45 45
46 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 46 /*--[ Globals ]--------------------------------------------------------------------------------------*/
47 47
48 - const char *java_class_name = "br/com/bb/pw3270/lib3270"; 48 + const char * java_class_name = "br/com/bb/pw3270/lib3270";
  49 + JNIEnv * pw3270_env = NULL;
  50 + jobject pw3270_obj = NULL;
  51 +
49 52
50 /*--[ Implement ]------------------------------------------------------------------------------------*/ 53 /*--[ Implement ]------------------------------------------------------------------------------------*/
51 54
52 -static void post_message(H3270 *session, int msgid, int arg1 = 0, int arg2 = 0) 55 +jmethodID lib3270_getmethodID(const char *name, const char *sig)
53 { 56 {
54 - if(session->widget) 57 + if(!pw3270_env)
55 { 58 {
56 - JNIEnv * env = ((INFO *) session->widget)->env;  
57 - jobject obj = ((INFO *) session->widget)->obj;  
58 - jclass cls = env->GetObjectClass(obj);  
59 - jmethodID mid = env->GetMethodID(cls, "postMessage", "(III)V");;  
60 - env->CallVoidMethod(obj,mid,(jint) msgid, (jint) arg1, (jint) arg2); 59 + __android_log_print(ANDROID_LOG_ERROR, PACKAGE_NAME, "%s(%s,%s) called outside jni environment",__FUNCTION__,name,sig);
  60 + return NULL;
61 } 61 }
  62 +
  63 + return pw3270_env->GetMethodID(pw3270_env->GetObjectClass(pw3270_obj), name, sig );
  64 +}
  65 +
  66 +static void post_message(int msgid, int arg1 = 0, int arg2 = 0)
  67 +{
  68 + trace("%s: pw3270_env=%p pw3270_obj=%p",__FUNCTION__,pw3270_env,pw3270_obj);
  69 +
  70 + if(pw3270_env)
  71 + pw3270_jni_call_void("postMessage", "(III)V",(jint) msgid, (jint) arg1, (jint) arg2);
62 } 72 }
63 73
64 static void changed(H3270 *session, int offset, int len) 74 static void changed(H3270 *session, int offset, int len)
65 { 75 {
66 - post_message(session,2,offset,len); 76 + post_message(2,offset,len);
67 } 77 }
68 78
69 static void erase(H3270 *session) 79 static void erase(H3270 *session)
70 { 80 {
71 - post_message(session,4); 81 + post_message(4);
72 } 82 }
73 83
74 static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) 84 static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args)
75 { 85 {
76 - if(session->widget) 86 + if(PW3270_JNI_ENV)
77 { 87 {
78 - JNIEnv * env = ((INFO *) session->widget)->env;  
79 - jobject obj = ((INFO *) session->widget)->obj;  
80 - jclass cls = env->GetObjectClass(obj);  
81 - jmethodID mid = env->GetMethodID(cls, "popupMessage", "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");  
82 - char * descr;  
83 -  
84 - descr = lib3270_vsprintf(fmt, args);  
85 -  
86 - env->CallVoidMethod(obj,mid, (jint) type,  
87 - env->NewStringUTF(title),  
88 - env->NewStringUTF(msg),  
89 - env->NewStringUTF(descr) );  
90 - lib3270_free(descr); 88 + static const char *sig = "(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V";
  89 + char * descr = lib3270_vsprintf(fmt, args);
  90 +
  91 + trace("%s: title=\"%s\"",__FUNCTION__,title);
  92 + trace("%s: msg=\"%s\"",__FUNCTION__,msg);
  93 + trace("%s: descr=\"%s\"",__FUNCTION__,descr);
  94 +
  95 +
  96 +
  97 + if(msg)
  98 + {
  99 + pw3270_jni_call_void( "postPopup",
  100 + sig,
  101 + (jint) type,
  102 + pw3270_jni_new_string(title),
  103 + pw3270_jni_new_string(msg),
  104 + pw3270_jni_new_string(descr) );
  105 +
  106 + }
  107 + else
  108 + {
  109 + pw3270_jni_call_void( "postPopup",
  110 + sig,
  111 + (jint) type,
  112 + pw3270_jni_new_string(title),
  113 + pw3270_jni_new_string(descr),
  114 + pw3270_jni_new_string("") );
  115 + }
  116 +
  117 + lib3270_free(descr);
91 } 118 }
92 else 119 else
93 { 120 {
@@ -97,30 +124,27 @@ static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, con @@ -97,30 +124,27 @@ static int popuphandler(H3270 *session, void *terminal, LIB3270_NOTIFY type, con
97 124
98 static void ctlr_done(H3270 *session) 125 static void ctlr_done(H3270 *session)
99 { 126 {
100 - post_message(session,4); 127 + post_message(4);
101 } 128 }
102 129
103 static int write_buffer(H3270 *session, unsigned const char *buf, int len) 130 static int write_buffer(H3270 *session, unsigned const char *buf, int len)
104 { 131 {
105 int rc = -1; 132 int rc = -1;
106 133
107 - if(session->widget) 134 + if(PW3270_JNI_ENV)
108 { 135 {
109 - JNIEnv * env = ((INFO *) session->widget)->env;  
110 - jobject obj = ((INFO *) session->widget)->obj;  
111 - jclass cls = env->GetObjectClass(obj);  
112 - jmethodID mid = env->GetMethodID(cls, "send_data", "([BI)I");  
113 - jbyteArray buffer = env->NewByteArray(len); 136 + jbyteArray buffer = pw3270_jni_new_byte_array(len);
114 137
115 - env->SetByteArrayRegion(buffer, 0, len, (jbyte*) buf); 138 + pw3270_env->SetByteArrayRegion(buffer, 0, len, (jbyte*) buf);
116 139
117 - rc = env->CallIntMethod(obj, mid, buffer, (jint) len ); 140 + rc = pw3270_jni_call_int("send_data", "([BI)I", buffer, (jint) len );
118 } 141 }
119 else 142 else
120 { 143 {
121 __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can't send %d bytes, no jni env for active session",len); 144 __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can't send %d bytes, no jni env for active session",len);
122 } 145 }
123 146
  147 + trace("%s exits with rc=%d",__FUNCTION__,rc);
124 return rc; 148 return rc;
125 } 149 }
126 150
@@ -128,12 +152,8 @@ static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)( @@ -128,12 +152,8 @@ static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)(
128 { 152 {
129 TIMER * timer = NULL; 153 TIMER * timer = NULL;
130 154
131 - if(session->widget) 155 + if(PW3270_JNI_ENV)
132 { 156 {
133 - JNIEnv * env = ((INFO *) session->widget)->env;  
134 - jobject obj = ((INFO *) session->widget)->obj;  
135 - jclass cls = env->GetObjectClass(obj);  
136 - jmethodID mid = env->GetMethodID(cls, "newTimer", "(JI)V");  
137 157
138 timer = (TIMER *) lib3270_malloc(sizeof(TIMER)); 158 timer = (TIMER *) lib3270_malloc(sizeof(TIMER));
139 timer->sz = sizeof(timer); 159 timer->sz = sizeof(timer);
@@ -143,12 +163,12 @@ static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)( @@ -143,12 +163,12 @@ static void * add_timer(unsigned long interval_ms, H3270 *session, void (*proc)(
143 163
144 trace("Timer %08lx created",(unsigned long) timer); 164 trace("Timer %08lx created",(unsigned long) timer);
145 165
146 - env->CallVoidMethod(obj,mid, (jlong) timer, (jint) interval_ms); 166 + pw3270_jni_call_void("newTimer", "(JI)V", (jlong) timer, (jint) interval_ms);
147 167
148 } 168 }
149 else 169 else
150 { 170 {
151 - __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can set timer, no jni env for active session"); 171 + __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Can't set timer, no jni env for active session");
152 } 172 }
153 173
154 return timer; 174 return timer;
@@ -175,10 +195,9 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo @@ -175,10 +195,9 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo
175 TIMER *timer = (TIMER *) id; 195 TIMER *timer = (TIMER *) id;
176 196
177 if(timer == NULL) 197 if(timer == NULL)
178 - {  
179 -// __android_log_print(ANDROID_LOG_VERBOSE, PACKAGE_NAME, "Unexpected call to %s: No timer ID",__FUNCTION__);  
180 return; 198 return;
181 - } 199 +
  200 + PW3270_JNI_BEGIN
182 201
183 if(timer->enabled) 202 if(timer->enabled)
184 { 203 {
@@ -187,6 +206,9 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo @@ -187,6 +206,9 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_timerFinish(JNIEnv *env, jo
187 } 206 }
188 207
189 lib3270_free(timer); 208 lib3270_free(timer);
  209 +
  210 + PW3270_JNI_END
  211 +
190 } 212 }
191 213
192 #ifdef X3270_TRACE 214 #ifdef X3270_TRACE
@@ -237,6 +259,8 @@ JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass ob @@ -237,6 +259,8 @@ JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass ob
237 { 259 {
238 H3270 * session = lib3270_session_new(""); 260 H3270 * session = lib3270_session_new("");
239 261
  262 + PW3270_JNI_BEGIN
  263 +
240 __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Initializing session %p",session); 264 __android_log_print(ANDROID_LOG_DEBUG, PACKAGE_NAME, "Initializing session %p",session);
241 265
242 #ifdef X3270_TRACE 266 #ifdef X3270_TRACE
@@ -251,35 +275,54 @@ JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass ob @@ -251,35 +275,54 @@ JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_init(JNIEnv *env, jclass ob
251 session->erase = erase; 275 session->erase = erase;
252 session->ctlr_done = ctlr_done; 276 session->ctlr_done = ctlr_done;
253 277
  278 + PW3270_JNI_END
  279 +
254 return 0; 280 return 0;
255 } 281 }
256 282
  283 +/*
257 JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_processEvents(JNIEnv *env, jobject obj) 284 JNIEXPORT jint JNICALL Java_br_com_bb_pw3270_lib3270_processEvents(JNIEnv *env, jobject obj)
258 { 285 {
259 - session_request(env,obj); 286 + PW3270_JNI_BEGIN
260 287
261 lib3270_main_iterate(session,1); 288 lib3270_main_iterate(session,1);
262 289
263 - session_release(); 290 + PW3270_JNI_END
264 291
265 return 0; 292 return 0;
266 } 293 }
  294 +*/
267 295
268 JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isConnected(JNIEnv *env, jobject obj) 296 JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isConnected(JNIEnv *env, jobject obj)
269 { 297 {
270 - return (lib3270_connected(lib3270_get_default_session_handle())) ? JNI_TRUE : JNI_FALSE;; 298 + jboolean rc;
  299 +
  300 + PW3270_JNI_BEGIN
  301 +
  302 + rc = lib3270_connected(lib3270_get_default_session_handle()) ? JNI_TRUE : JNI_FALSE;
  303 +
  304 + PW3270_JNI_END
  305 +
  306 + return rc;
271 } 307 }
272 308
273 JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isTerminalReady(JNIEnv *env, jobject obj) 309 JNIEXPORT jboolean JNICALL Java_br_com_bb_pw3270_lib3270_isTerminalReady(JNIEnv *env, jobject obj)
274 { 310 {
  311 + PW3270_JNI_BEGIN
  312 +
  313 +
  314 + PW3270_JNI_END
  315 +
275 return JNI_FALSE; 316 return JNI_FALSE;
276 } 317 }
277 318
278 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setHost(JNIEnv *env, jobject obj, jstring hostname) 319 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setHost(JNIEnv *env, jobject obj, jstring hostname)
279 { 320 {
280 - session_request(env,obj);  
281 - lib3270_set_host(session,env->GetStringUTFChars(hostname, 0));  
282 - session_release(); 321 + PW3270_JNI_BEGIN
  322 +
  323 + lib3270_set_host(PW3270_SESSION,env->GetStringUTFChars(hostname, 0));
  324 +
  325 + PW3270_JNI_END
283 } 326 }
284 327
285 JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, jobject obj) 328 JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, jobject obj)
@@ -289,28 +332,30 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, job @@ -289,28 +332,30 @@ JNIEXPORT jstring JNICALL Java_br_com_bb_pw3270_lib3270_getHost(JNIEnv *env, job
289 332
290 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_set_1connection_1status(JNIEnv *env, jobject obj, jboolean connected) 333 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_set_1connection_1status(JNIEnv *env, jobject obj, jboolean connected)
291 { 334 {
292 - session_request(env,obj); 335 + PW3270_JNI_BEGIN
  336 +
293 if(connected) 337 if(connected)
294 - lib3270_set_connected(session); 338 + lib3270_set_connected(PW3270_SESSION);
295 else 339 else
296 - lib3270_set_disconnected(session);  
297 - session_release(); 340 + lib3270_set_disconnected(PW3270_SESSION);
  341 +
  342 + PW3270_JNI_END
298 } 343 }
299 344
300 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_procRecvdata(JNIEnv *env, jobject obj, jbyteArray buffer, jint sz) 345 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_procRecvdata(JNIEnv *env, jobject obj, jbyteArray buffer, jint sz)
301 { 346 {
302 unsigned char *netrbuf = (unsigned char *) env->GetByteArrayElements(buffer,NULL); 347 unsigned char *netrbuf = (unsigned char *) env->GetByteArrayElements(buffer,NULL);
303 348
304 - session_request(env,obj); 349 + PW3270_JNI_BEGIN
305 350
306 trace("Processando %d bytes",(size_t) sz); 351 trace("Processando %d bytes",(size_t) sz);
307 352
308 - lib3270_data_recv(session, (size_t) sz, netrbuf); 353 + lib3270_data_recv(PW3270_SESSION, (size_t) sz, netrbuf);
309 354
310 trace("Liberando %d bytes",(size_t) sz); 355 trace("Liberando %d bytes",(size_t) sz);
311 356
312 - env->ReleaseByteArrayElements(buffer, (signed char *) netrbuf, 0); 357 + pw3270_env->ReleaseByteArrayElements(buffer, (signed char *) netrbuf, 0);
313 358
314 - session_release(); 359 + PW3270_JNI_END
315 360
316 } 361 }
android/jni/misc.cpp
@@ -49,11 +49,11 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setToggle(JNIEnv *env, jobj @@ -49,11 +49,11 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setToggle(JNIEnv *env, jobj
49 { 49 {
50 LIB3270_TOGGLE id = lib3270_get_toggle_id(env->GetStringUTFChars(name, 0)); 50 LIB3270_TOGGLE id = lib3270_get_toggle_id(env->GetStringUTFChars(name, 0));
51 51
52 - session_request(env,obj); 52 + PW3270_JNI_BEGIN
53 53
54 if(id >= 0) 54 if(id >= 0)
55 - lib3270_set_toggle(session,id,state ? 1 : 0); 55 + lib3270_set_toggle(PW3270_SESSION,id,state ? 1 : 0);
56 56
57 - session_release(); 57 + PW3270_JNI_END
58 58
59 } 59 }
android/jni/text.cpp
@@ -32,11 +32,11 @@ @@ -32,11 +32,11 @@
32 32
33 /*--[ Implement ]------------------------------------------------------------------------------------*/ 33 /*--[ Implement ]------------------------------------------------------------------------------------*/
34 34
35 -static jbyteArray retString(JNIEnv *env, const char *txt) 35 +static jbyteArray retString(const char *txt)
36 { 36 {
37 size_t len = strlen(txt); 37 size_t len = strlen(txt);
38 - jbyteArray ret = env->NewByteArray(len);  
39 - env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt); 38 + jbyteArray ret = pw3270_env->NewByteArray(len);
  39 + pw3270_env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt);
40 return ret; 40 return ret;
41 } 41 }
42 42
@@ -44,44 +44,38 @@ JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, @@ -44,44 +44,38 @@ JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env,
44 { 44 {
45 jbyteArray ret; 45 jbyteArray ret;
46 46
47 - session_request(env,obj); 47 + PW3270_JNI_BEGIN
48 48
49 - trace("%s starts, session=%p",__FUNCTION__,session); 49 + trace("%s starts, session=%p",__FUNCTION__,PW3270_SESSION);
50 50
51 - if(session)  
52 - {  
53 - char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM)); 51 + char *text = lib3270_get_as_html(PW3270_SESSION,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
54 52
55 - if(text)  
56 - {  
57 - ret = retString(env,text);  
58 - lib3270_free(text);  
59 - }  
60 - else  
61 - {  
62 - ret = retString(env, "<b>Empty session</b>");  
63 - } 53 + if(text)
  54 + {
  55 + ret = retString(text);
  56 + lib3270_free(text);
64 } 57 }
65 else 58 else
66 { 59 {
67 - ret = retString(env, "<b>Invalid Session ID</b>"); 60 + ret = retString("<b>Empty session</b>");
68 } 61 }
69 62
70 trace("%s ends",__FUNCTION__); 63 trace("%s ends",__FUNCTION__);
71 64
72 - session_release(); 65 + PW3270_JNI_END
73 66
74 return ret; 67 return ret;
75 } 68 }
76 69
77 70
  71 +/*
78 JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj) 72 JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj)
79 { 73 {
80 jbyteArray ret; 74 jbyteArray ret;
81 75
82 - session_request(env,obj); 76 + PW3270_JNI_BEGIN
83 77
84 - trace("%s starts, session=%p",__FUNCTION__,session); 78 + trace("%s starts",__FUNCTION__);
85 79
86 if(session) 80 if(session)
87 { 81 {
@@ -106,10 +100,11 @@ JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, @@ -106,10 +100,11 @@ JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env,
106 100
107 trace("%s ends",__FUNCTION__); 101 trace("%s ends",__FUNCTION__);
108 102
109 - session_release(); 103 + PW3270_JNI_END
110 104
111 return ret; 105 return ret;
112 } 106 }
  107 +*/
113 108
114 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobject obj, jint pos, jbyteArray inText, jint szText) 109 JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobject obj, jint pos, jbyteArray inText, jint szText)
115 { 110 {
@@ -117,10 +112,7 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj @@ -117,10 +112,7 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj
117 int f; 112 int f;
118 jbyte * bt; 113 jbyte * bt;
119 114
120 - session_request(env,obj);  
121 -  
122 - if(!session)  
123 - return; 115 + PW3270_JNI_BEGIN
124 116
125 bt = env->GetByteArrayElements(inText,0); 117 bt = env->GetByteArrayElements(inText,0);
126 118
@@ -128,30 +120,31 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj @@ -128,30 +120,31 @@ JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobj
128 str[f] = (char) bt[f]; 120 str[f] = (char) bt[f];
129 str[szText] = 0; 121 str[szText] = 0;
130 122
131 - trace("Buffer(%d/%d)=\"%s\"",(int) pos, lib3270_field_addr(session, (int) pos), str); 123 + trace("Buffer(%d/%d)=\"%s\"",(int) pos, lib3270_field_addr(PW3270_SESSION, (int) pos), str);
132 124
133 125
134 - if( ((int) pos) == lib3270_field_addr(session, (int) pos)) 126 + if( ((int) pos) == lib3270_field_addr(PW3270_SESSION, (int) pos))
135 { 127 {
136 // Begin of field, clear it first 128 // Begin of field, clear it first
137 - int sz = lib3270_field_length(session,pos); 129 + int sz = lib3270_field_length(PW3270_SESSION,pos);
138 unsigned char * buffer = (unsigned char *) lib3270_malloc(sz+1); 130 unsigned char * buffer = (unsigned char *) lib3270_malloc(sz+1);
139 131
140 memset(buffer,' ',sz); 132 memset(buffer,' ',sz);
141 133
142 - lib3270_clear_operator_error(session);  
143 - lib3270_set_cursor_address(session,(int) pos);  
144 - lib3270_set_string(session,buffer); 134 + lib3270_clear_operator_error(PW3270_SESSION);
  135 + lib3270_set_cursor_address(PW3270_SESSION,(int) pos);
  136 + lib3270_set_string(PW3270_SESSION,buffer);
145 137
146 lib3270_free(buffer); 138 lib3270_free(buffer);
147 } 139 }
148 140
149 - lib3270_clear_operator_error(session);  
150 - lib3270_set_cursor_address(session,(int) pos);  
151 - lib3270_set_string(session,str); 141 + lib3270_clear_operator_error(PW3270_SESSION);
  142 + lib3270_set_cursor_address(PW3270_SESSION,(int) pos);
  143 + lib3270_set_string(PW3270_SESSION,str);
152 144
153 - lib3270_clear_operator_error(session); 145 + lib3270_clear_operator_error(PW3270_SESSION);
154 146
155 env->ReleaseByteArrayElements(inText,bt,JNI_ABORT); 147 env->ReleaseByteArrayElements(inText,bt,JNI_ABORT);
156 - session_release(); 148 +
  149 + PW3270_JNI_END
157 } 150 }
android/res/raw/index.html
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 <title>pw3270</title> 8 <title>pw3270</title>
9 </head> 9 </head>
10 10
11 -<body onload="initialize()"> 11 +<body onload="terminalUpdate()">
12 <div id="terminal"> 12 <div id="terminal">
13 </div> 13 </div>
14 14
android/res/raw/jsmain.js
1 1
2 -function setupButtons() 2 +function setupWindow()
3 { 3 {
4 - var form = document.getElementById("form3270"); 4 + var input = document.getElementsByTagName("input");
5 5
6 - if(form == undefined)  
7 - return; 6 + window.onkeypress = function()
  7 + {
  8 + if(event.keyCode == 13)
  9 + {
  10 + xmit();
  11 + return false;
  12 + }
  13 + return true;
  14 + }
8 15
9 - for(var i=0;i < form.elements.length;i++) 16 + for(var i=0;i<input.length;i++)
10 { 17 {
11 - if(form.elements[i].name.substr(0,2) == "PF") 18 + if(input[i].name.substr(0,2) == "PF")
12 { 19 {
13 - form.elements[i].pfkey = parseInt(form.elements[i].name.substr(3));  
14 -  
15 - form.elements[i].onclick = function() 20 + input[i].pfkey = parseInt(input[i].name.substr(3));
  21 +
  22 + input[i].onclick = function()
16 { 23 {
17 pw3270.pfkey(this.pfkey); 24 pw3270.pfkey(this.pfkey);
18 } 25 }
19 } 26 }
20 - }  
21 27
22 -} 28 + }
23 29
24 -function initialize()  
25 -{  
26 - updateScreen();  
27 } 30 }
28 31
29 -function updateScreen() 32 +function terminalUpdate()
30 { 33 {
31 document.getElementById("terminal").innerHTML = pw3270.getscreencontents(); 34 document.getElementById("terminal").innerHTML = pw3270.getscreencontents();
32 - setupButtons(); 35 + setupWindow();
33 } 36 }
34 37
35 function pfkey(id) 38 function pfkey(id)
android/src/br/com/bb/pw3270/lib3270.java
@@ -268,6 +268,10 @@ public class lib3270 @@ -268,6 +268,10 @@ public class lib3270
268 268
269 public void postPopup(int type, String title, String text, String info) 269 public void postPopup(int type, String title, String text, String info)
270 { 270 {
  271 + Log.d(TAG,"Type:"+type);
  272 + Log.d(TAG,"Title:"+title);
  273 + Log.d(TAG,"Text:"+text);
  274 + Log.d(TAG,"Info:"+info);
271 mainloop.postPopup(type, title, text, info); 275 mainloop.postPopup(type, title, text, info);
272 } 276 }
273 277