Commit 844f2ac240556597dfb14ec803ef409c659248a6

Authored by perry.werneck@gmail.com
1 parent 14e89689

Iniciando implementação da passagem de valores da interface jni para o buffer de terminal

android/jni/Android.mk
... ... @@ -34,7 +34,7 @@ LOCAL_DEFAULT_CPP_EXTENSION := cpp
34 34 LOCAL_MODULE := lib3270
35 35 LOCAL_LDLIBS := -llog
36 36 LOCAL_SRC_FILES := $(foreach SRC, $(TERMINAL_SOURCES) $(NETWORK_SOURCES), ../../src/lib3270/$(SRC)) \
37   - main.cpp misc.cpp html.cpp actions.cpp
  37 + main.cpp misc.cpp text.cpp actions.cpp
38 38  
39 39 include $(BUILD_SHARED_LIBRARY)
40 40  
... ...
android/jni/html.cpp
... ... @@ -1,112 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
19   - * Place, Suite 330, Boston, MA, 02111-1307, USA
20   - *
21   - * Este programa está nomeado como main.cpp e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - *
27   - */
28   -
29   - #include "globals.h"
30   - #include <lib3270/html.h>
31   - #include <string.h>
32   -
33   -/*--[ Implement ]------------------------------------------------------------------------------------*/
34   -
35   -static jbyteArray retString(JNIEnv *env, const char *txt)
36   -{
37   - size_t len = strlen(txt);
38   - jbyteArray ret = env->NewByteArray(len);
39   - env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt);
40   - return ret;
41   -}
42   -
43   -JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
44   -{
45   - jbyteArray ret;
46   -
47   - session_request(env,obj);
48   -
49   - trace("%s starts, session=%p",__FUNCTION__,session);
50   -
51   - if(session)
52   - {
53   - char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
54   -
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   - }
64   - }
65   - else
66   - {
67   - ret = retString(env, "<b>Invalid Session ID</b>");
68   - }
69   -
70   - trace("%s ends",__FUNCTION__);
71   -
72   - session_release();
73   -
74   - return ret;
75   -}
76   -
77   -
78   -JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj)
79   -{
80   - jbyteArray ret;
81   -
82   - session_request(env,obj);
83   -
84   - trace("%s starts, session=%p",__FUNCTION__,session);
85   -
86   - if(session)
87   - {
88   - char *text = lib3270_get_text(session,0,-1);
89   -
90   - trace("%s will return \"%s\"",__FUNCTION__,text ? text : "");
91   -
92   - if(text)
93   - {
94   - ret = retString(env,text);
95   - lib3270_free(text);
96   - }
97   - else
98   - {
99   - ret = retString(env, "");
100   - }
101   - }
102   - else
103   - {
104   - ret = retString(env, "<b>Invalid Session ID</b>");
105   - }
106   -
107   - trace("%s ends",__FUNCTION__);
108   -
109   - session_release();
110   -
111   - return ret;
112   -}
android/jni/text.cpp 0 → 100644
... ... @@ -0,0 +1,136 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como text.cpp e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + *
  27 + */
  28 +
  29 + #include "globals.h"
  30 + #include <lib3270/html.h>
  31 + #include <string.h>
  32 +
  33 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  34 +
  35 +static jbyteArray retString(JNIEnv *env, const char *txt)
  36 +{
  37 + size_t len = strlen(txt);
  38 + jbyteArray ret = env->NewByteArray(len);
  39 + env->SetByteArrayRegion(ret, 0, len, (jbyte*) txt);
  40 + return ret;
  41 +}
  42 +
  43 +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getHTML(JNIEnv *env, jobject obj)
  44 +{
  45 + jbyteArray ret;
  46 +
  47 + session_request(env,obj);
  48 +
  49 + trace("%s starts, session=%p",__FUNCTION__,session);
  50 +
  51 + if(session)
  52 + {
  53 + char *text = lib3270_get_as_html(session,(LIB3270_HTML_OPTION) (LIB3270_HTML_OPTION_ALL|LIB3270_HTML_OPTION_FORM));
  54 +
  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 + }
  64 + }
  65 + else
  66 + {
  67 + ret = retString(env, "<b>Invalid Session ID</b>");
  68 + }
  69 +
  70 + trace("%s ends",__FUNCTION__);
  71 +
  72 + session_release();
  73 +
  74 + return ret;
  75 +}
  76 +
  77 +
  78 +JNIEXPORT jbyteArray JNICALL Java_br_com_bb_pw3270_lib3270_getText(JNIEnv *env, jobject obj)
  79 +{
  80 + jbyteArray ret;
  81 +
  82 + session_request(env,obj);
  83 +
  84 + trace("%s starts, session=%p",__FUNCTION__,session);
  85 +
  86 + if(session)
  87 + {
  88 + char *text = lib3270_get_text(session,0,-1);
  89 +
  90 + trace("%s will return \"%s\"",__FUNCTION__,text ? text : "");
  91 +
  92 + if(text)
  93 + {
  94 + ret = retString(env,text);
  95 + lib3270_free(text);
  96 + }
  97 + else
  98 + {
  99 + ret = retString(env, "");
  100 + }
  101 + }
  102 + else
  103 + {
  104 + ret = retString(env, "<b>Invalid Session ID</b>");
  105 + }
  106 +
  107 + trace("%s ends",__FUNCTION__);
  108 +
  109 + session_release();
  110 +
  111 + return ret;
  112 +}
  113 +
  114 +JNIEXPORT void JNICALL Java_br_com_bb_pw3270_lib3270_setTextAt(JNIEnv *env, jobject obj, jint pos, jbyteArray inText, jint szText)
  115 +{
  116 + char str[szText+1];
  117 + int f;
  118 + jbyte * bt;
  119 +
  120 +
  121 + session_request(env,obj);
  122 +
  123 + if(!session)
  124 + return;
  125 +
  126 + bt = env->GetByteArrayElements(inText,0);
  127 +
  128 + for(int f=0;f<szText;f++)
  129 + str[f] = (char) bt[f];
  130 + str[szText] = 0;
  131 +
  132 + trace("Buffer(%d)=\"%s\"",(int) pos, str);
  133 +
  134 + env->ReleaseByteArrayElements(inText,bt,JNI_ABORT);
  135 + session_release();
  136 +}
... ...
android/lib3270NDK.cbp
... ... @@ -58,10 +58,10 @@
58 58 <Unit filename="jni/Android.mk" />
59 59 <Unit filename="jni/actions.cpp" />
60 60 <Unit filename="jni/globals.h" />
61   - <Unit filename="jni/html.cpp" />
62 61 <Unit filename="jni/lib3270jni.h" />
63 62 <Unit filename="jni/main.cpp" />
64 63 <Unit filename="jni/misc.cpp" />
  64 + <Unit filename="jni/text.cpp" />
65 65 <Unit filename="src/br/com/bb/pw3270/PW3270Activity.java" />
66 66 <Unit filename="src/br/com/bb/pw3270/lib3270.java" />
67 67 <Extensions>
... ...
android/res/raw/jsmain.js
... ... @@ -17,7 +17,17 @@ function pfkey(id)
17 17  
18 18 function xmit()
19 19 {
20   - pw3270.xmit();
  20 + var form = document.getElementById("form3270");
  21 +
  22 + for(var i=0;i < form.elements.length;i++)
  23 + {
  24 + if(form.elements[i].name.substr(0,1) == "F")
  25 + {
  26 + var offset = parseInt(form.elements[i].name.substr(1,4));
  27 + alert("offset="+offset+" \""+form.elements[i].value+"\"");
  28 + pw3270.setStringAt(offset,form.elements[i].value);
  29 + }
  30 + }
21 31 return false;
22 32 }
23 33  
... ... @@ -25,4 +35,3 @@ function eraseinput()
25 35 {
26 36 return false;
27 37 }
28   -
... ...
android/res/raw/theme.css
... ... @@ -60,8 +60,6 @@ input[type=&quot;password&quot;]:focus
60 60 #pfbar
61 61 {
62 62 z-index: -1;
63   - position: fixed;
64   - bottom: 1px;
65 63 width: 49em;
66 64 background: black;
67 65 color: white;
... ...
android/src/br/com/bb/pw3270/lib3270.java
... ... @@ -55,7 +55,7 @@ public class lib3270
55 55 id = timer_id;
56 56  
57 57 Log.d(TAG,"Timer " + id + " set to " + msec + " ms");
58   -
  58 +
59 59 this.start();
60 60 }
61 61  
... ... @@ -380,6 +380,15 @@ public class lib3270
380 380 return 0;
381 381 }
382 382  
  383 + public void setStringAt(int offset, String str)
  384 + {
  385 + try
  386 + {
  387 + setTextAt(offset,str.getBytes(getEncoding()),str.length());
  388 + } catch( Exception e ) { }
  389 + }
  390 +
  391 +
383 392 /*---[ Native calls ]----------------------------------------------------*/
384 393 static private native int init();
385 394  
... ... @@ -417,6 +426,7 @@ public class lib3270
417 426 // Get/Set screen contents
418 427 public native byte[] getHTML();
419 428 public native byte[] getText();
  429 + public native void setTextAt(int offset, byte[] str, int len);
420 430  
421 431  
422 432 }
... ...
pw3270.cbp
... ... @@ -53,6 +53,7 @@
53 53 <Unit filename="configure.ac" />
54 54 <Unit filename="pw3270.spec.in" />
55 55 <Unit filename="src/include/lib3270.h" />
  56 + <Unit filename="src/include/lib3270/3270ds.h" />
56 57 <Unit filename="src/include/lib3270/action_table.h" />
57 58 <Unit filename="src/include/lib3270/actions.h" />
58 59 <Unit filename="src/include/lib3270/config.h.in" />
... ...
src/lib3270/html.c
... ... @@ -274,6 +274,16 @@
274 274  
275 275 if(*ptr)
276 276 {
  277 + int f;
  278 + char * last = ptr;
  279 +
  280 + for(f=0;ptr[f];f++)
  281 + {
  282 + if(ptr[f] > ' ')
  283 + last = ptr+f+1;
  284 + }
  285 + *last = 0;
  286 +
277 287 append_string(&info," value=\"");
278 288 append_string(&info,ptr);
279 289 append_string(&info,"\"");
... ... @@ -397,7 +407,7 @@
397 407  
398 408 if(info.form)
399 409 {
400   - static const char * prefix = "<form name=\"" PACKAGE_NAME "\">";
  410 + static const char * prefix = "<form name=\"" PACKAGE_NAME "\" id=\"form3270\" >";
401 411 static const char * suffix = "</form>";
402 412 char *text = info.text;
403 413  
... ...