Commit eb180443d335d18b97227156259573af04a9f29f
1 parent
b6d40b6e
Exists in
master
and in
5 other branches
Corrigindo segfaults aleatórios durante a montagem dos formulários html, inician…
…do implementação do arquivo de configuração em android
Showing
3 changed files
with
53 additions
and
61 deletions
Show diff stats
android/src/br/com/bb/pw3270/PW3270Activity.java
| @@ -7,6 +7,7 @@ import android.os.Bundle; | @@ -7,6 +7,7 @@ import android.os.Bundle; | ||
| 7 | // import android.widget.EditText; | 7 | // import android.widget.EditText; |
| 8 | import android.util.Log; | 8 | import android.util.Log; |
| 9 | // import android.view.View; | 9 | // import android.view.View; |
| 10 | +import android.content.SharedPreferences; | ||
| 10 | import android.content.res.*; | 11 | import android.content.res.*; |
| 11 | import android.app.AlertDialog; | 12 | import android.app.AlertDialog; |
| 12 | import android.webkit.WebView; | 13 | import android.webkit.WebView; |
| @@ -31,6 +32,15 @@ public class PW3270Activity extends Activity | @@ -31,6 +32,15 @@ public class PW3270Activity extends Activity | ||
| 31 | 32 | ||
| 32 | terminal() | 33 | terminal() |
| 33 | { | 34 | { |
| 35 | + SharedPreferences settings = getSharedPreferences(TAG, 0); | ||
| 36 | + hostname = settings.getString("hostname",hostname); | ||
| 37 | + port = settings.getInt("port",port); | ||
| 38 | + ssl = settings.getBoolean("ssl",ssl); | ||
| 39 | + | ||
| 40 | + setToggle("dstrace",settings.getBoolean("dstrace",true)); | ||
| 41 | + setToggle("screentrace",settings.getBoolean("screentrace",true)); | ||
| 42 | + setToggle("eventtrace",settings.getBoolean("eventtrace",true)); | ||
| 43 | + | ||
| 34 | } | 44 | } |
| 35 | 45 | ||
| 36 | protected void updateProgramMessage(int id) | 46 | protected void updateProgramMessage(int id) |
android/src/br/com/bb/pw3270/lib3270.java
| @@ -24,9 +24,9 @@ public class lib3270 | @@ -24,9 +24,9 @@ public class lib3270 | ||
| 24 | DataOutputStream outData = null; | 24 | DataOutputStream outData = null; |
| 25 | DataInputStream inData = null; | 25 | DataInputStream inData = null; |
| 26 | 26 | ||
| 27 | - private String hostname = "3270.df.bb"; | ||
| 28 | - private int port = 8023; | ||
| 29 | - private boolean ssl = false; | 27 | + protected String hostname = "3270.df.bb"; |
| 28 | + protected int port = 8023; | ||
| 29 | + protected boolean ssl = false; | ||
| 30 | 30 | ||
| 31 | static | 31 | static |
| 32 | { | 32 | { |
| @@ -36,9 +36,6 @@ public class lib3270 | @@ -36,9 +36,6 @@ public class lib3270 | ||
| 36 | 36 | ||
| 37 | lib3270() | 37 | lib3270() |
| 38 | { | 38 | { |
| 39 | - setToggle("dstrace",true); | ||
| 40 | - setToggle("screentrace",true); | ||
| 41 | - setToggle("eventtrace",true); | ||
| 42 | changed = false; | 39 | changed = false; |
| 43 | mainloop = null; | 40 | mainloop = null; |
| 44 | } | 41 | } |
| @@ -150,6 +147,10 @@ public class lib3270 | @@ -150,6 +147,10 @@ public class lib3270 | ||
| 150 | { | 147 | { |
| 151 | // Connecta no host | 148 | // Connecta no host |
| 152 | SocketFactory socketFactory; | 149 | SocketFactory socketFactory; |
| 150 | + | ||
| 151 | + if(hostname == "") | ||
| 152 | + return false; | ||
| 153 | + | ||
| 153 | if(ssl) | 154 | if(ssl) |
| 154 | { | 155 | { |
| 155 | // Host é SSL | 156 | // Host é SSL |
src/lib3270/html.c
| @@ -110,8 +110,7 @@ | @@ -110,8 +110,7 @@ | ||
| 110 | } mode; | 110 | } mode; |
| 111 | 111 | ||
| 112 | char * text; | 112 | char * text; |
| 113 | - char * input; | ||
| 114 | - char * block; | 113 | + int block; |
| 115 | int maxlength; | 114 | int maxlength; |
| 116 | unsigned short fg; | 115 | unsigned short fg; |
| 117 | unsigned short bg; | 116 | unsigned short bg; |
| @@ -189,11 +188,7 @@ | @@ -189,11 +188,7 @@ | ||
| 189 | 188 | ||
| 190 | snprintf(name,29,"F%04d",addr); | 189 | snprintf(name,29,"F%04d",addr); |
| 191 | 190 | ||
| 192 | - info->block = info->text+strlen(info->text); | ||
| 193 | - | ||
| 194 | -#ifdef DEBUG | ||
| 195 | - append_string(info,"\n"); | ||
| 196 | -#endif // DEBUG | 191 | + info->block = strlen(info->text); |
| 197 | 192 | ||
| 198 | append_string(info,"<input type=\""); | 193 | append_string(info,"<input type=\""); |
| 199 | append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); | 194 | append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); |
| @@ -202,44 +197,35 @@ | @@ -202,44 +197,35 @@ | ||
| 202 | append_string(info,"\" value=\""); | 197 | append_string(info,"\" value=\""); |
| 203 | info->mode = mode; | 198 | info->mode = mode; |
| 204 | info->maxlength = 0; | 199 | info->maxlength = 0; |
| 205 | - info->input = info->text+strlen(info->text); | ||
| 206 | 200 | ||
| 207 | } | 201 | } |
| 208 | 202 | ||
| 209 | static void close_input(struct html_info *info) | 203 | static void close_input(struct html_info *info) |
| 210 | { | 204 | { |
| 211 | - char buffer[80]; | ||
| 212 | - char *ptr; | ||
| 213 | - char *mark; | 205 | + char buffer[80]; |
| 206 | + int pos; | ||
| 214 | 207 | ||
| 215 | if(info->mode == HTML_MODE_TEXT) | 208 | if(info->mode == HTML_MODE_TEXT) |
| 216 | return; | 209 | return; |
| 217 | 210 | ||
| 211 | + trace("maxlength=%d",info->maxlength); | ||
| 212 | + | ||
| 218 | if(info->maxlength < 1) | 213 | if(info->maxlength < 1) |
| 219 | { | 214 | { |
| 220 | - *info->block = 0; | 215 | + info->text[info->block] = 0; |
| 221 | info->mode = HTML_MODE_TEXT; | 216 | info->mode = HTML_MODE_TEXT; |
| 222 | info->maxlength = 0; | 217 | info->maxlength = 0; |
| 223 | return; | 218 | return; |
| 224 | } | 219 | } |
| 225 | 220 | ||
| 226 | - for(ptr=mark=info->input;*ptr;ptr++) | ||
| 227 | - { | ||
| 228 | - if(*ptr != ' ') | ||
| 229 | - mark=ptr+1; | ||
| 230 | - } | ||
| 231 | - *mark = 0; | 221 | + for(pos = strlen(info->text)-1;pos > 0 && info->text[pos] == ' '; pos--) |
| 222 | + info->text[pos] = 0; | ||
| 232 | 223 | ||
| 233 | snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); | 224 | snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); |
| 234 | append_string(info,buffer); | 225 | append_string(info,buffer); |
| 235 | 226 | ||
| 236 | append_string(info,"></input>"); | 227 | append_string(info,"></input>"); |
| 237 | 228 | ||
| 238 | -#ifdef DEBUG | ||
| 239 | - append_string(info,"\n"); | ||
| 240 | -#endif // DEBUG | ||
| 241 | - | ||
| 242 | - | ||
| 243 | info->mode = HTML_MODE_TEXT; | 229 | info->mode = HTML_MODE_TEXT; |
| 244 | info->maxlength = 0; | 230 | info->maxlength = 0; |
| 245 | } | 231 | } |
| @@ -266,30 +252,12 @@ | @@ -266,30 +252,12 @@ | ||
| 266 | baddr = 0; | 252 | baddr = 0; |
| 267 | for(row=0;row < session->rows;row++) | 253 | for(row=0;row < session->rows;row++) |
| 268 | { | 254 | { |
| 269 | - int cr = 0; | ||
| 270 | - int len = 0; | ||
| 271 | int col; | 255 | int col; |
| 272 | 256 | ||
| 273 | -#ifdef DEBUG | ||
| 274 | - { | ||
| 275 | - char buffer[4096]; | ||
| 276 | - snprintf(buffer,4095,"\n<!-- R%02d/%02d --->\t",row,session->rows); | ||
| 277 | - append_string(&info,buffer); | ||
| 278 | - } | ||
| 279 | -#endif // DEBUG | ||
| 280 | - | ||
| 281 | for(col = 0; col < session->cols;col++) | 257 | for(col = 0; col < session->cols;col++) |
| 282 | { | 258 | { |
| 283 | - if( session->text[baddr+col].chr != ' ' || (session->text[baddr+col].attr & LIB3270_ATTR_CG)) | ||
| 284 | - len = col; | ||
| 285 | - } | ||
| 286 | - | ||
| 287 | - for(col = 0; col <= len || (col < session->cols && info.mode != HTML_MODE_TEXT);col++) | ||
| 288 | - { | ||
| 289 | if((option & LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED)) | 259 | if((option & LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED)) |
| 290 | { | 260 | { |
| 291 | - cr++; | ||
| 292 | - | ||
| 293 | if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER) && (option & LIB3270_HTML_OPTION_FORM) ) | 261 | if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER) && (option & LIB3270_HTML_OPTION_FORM) ) |
| 294 | { | 262 | { |
| 295 | int fa = (session->ea_buf[baddr+col].fa & FA_MASK); | 263 | int fa = (session->ea_buf[baddr+col].fa & FA_MASK); |
| @@ -303,12 +271,10 @@ | @@ -303,12 +271,10 @@ | ||
| 303 | { | 271 | { |
| 304 | // Input field | 272 | // Input field |
| 305 | unsigned char attr = get_field_attribute(session,baddr+col+1); | 273 | unsigned char attr = get_field_attribute(session,baddr+col+1); |
| 306 | - //char * text = lib3270_get_field_at(session,baddr+col+1); | ||
| 307 | - | ||
| 308 | open_input(&info,baddr+col+1,FA_IS_ZERO(attr) ? HTML_MODE_INPUT_PASSWORD : HTML_MODE_INPUT_TEXT); | 274 | open_input(&info,baddr+col+1,FA_IS_ZERO(attr) ? HTML_MODE_INPUT_PASSWORD : HTML_MODE_INPUT_TEXT); |
| 309 | 275 | ||
| 310 | } | 276 | } |
| 311 | - else if(col < len && session->text[baddr+col+1].chr == 'F') | 277 | + else if(session->text[baddr+col+1].chr == 'F') |
| 312 | { | 278 | { |
| 313 | char *text = lib3270_get_field_at(session,baddr+col+1); | 279 | char *text = lib3270_get_field_at(session,baddr+col+1); |
| 314 | 280 | ||
| @@ -336,8 +302,7 @@ | @@ -336,8 +302,7 @@ | ||
| 336 | append_string(&info,"\" />"); | 302 | append_string(&info,"\" />"); |
| 337 | info.mode = HTML_MODE_INPUT_BUTTON; | 303 | info.mode = HTML_MODE_INPUT_BUTTON; |
| 338 | info.maxlength = 0; | 304 | info.maxlength = 0; |
| 339 | - info.input = info.text+strlen(info.text); | ||
| 340 | - | 305 | + info.block = strlen(info.text); |
| 341 | } | 306 | } |
| 342 | } | 307 | } |
| 343 | lib3270_free(text); | 308 | lib3270_free(text); |
| @@ -414,17 +379,16 @@ | @@ -414,17 +379,16 @@ | ||
| 414 | enum HTML_MODE mode = info.mode; | 379 | enum HTML_MODE mode = info.mode; |
| 415 | 380 | ||
| 416 | close_input(&info); | 381 | close_input(&info); |
| 417 | - | ||
| 418 | - if(cr) | ||
| 419 | - append_element(&info,HTML_ELEMENT_LINE_BREAK); | ||
| 420 | - | 382 | + append_element(&info,HTML_ELEMENT_LINE_BREAK); |
| 421 | open_input(&info,baddr,mode); | 383 | open_input(&info,baddr,mode); |
| 422 | 384 | ||
| 423 | } | 385 | } |
| 424 | - else if(cr) | 386 | + else |
| 425 | { | 387 | { |
| 426 | append_element(&info,HTML_ELEMENT_LINE_BREAK); | 388 | append_element(&info,HTML_ELEMENT_LINE_BREAK); |
| 427 | - | 389 | +#if defined(DEBUG) || defined(ANDROID) |
| 390 | + append_string(&info,"\n"); | ||
| 391 | +#endif // DEBUG | ||
| 428 | } | 392 | } |
| 429 | 393 | ||
| 430 | } | 394 | } |
| @@ -441,8 +405,8 @@ | @@ -441,8 +405,8 @@ | ||
| 441 | 405 | ||
| 442 | if(info.form) | 406 | if(info.form) |
| 443 | { | 407 | { |
| 444 | - static const char * prefix = "<form name=\"" PACKAGE_NAME "\" id=\"form3270\" >"; | ||
| 445 | - static const char * suffix = "</form>"; | 408 | + static const char * prefix = "<form name=\"" PACKAGE_NAME "\" id=\"form3270\" >\n"; |
| 409 | + static const char * suffix = "</form>\n"; | ||
| 446 | char *text = info.text; | 410 | char *text = info.text; |
| 447 | 411 | ||
| 448 | info.text = lib3270_malloc(strlen(prefix)+strlen(suffix)+strlen(text)+4); | 412 | info.text = lib3270_malloc(strlen(prefix)+strlen(suffix)+strlen(text)+4); |
| @@ -454,7 +418,24 @@ | @@ -454,7 +418,24 @@ | ||
| 454 | lib3270_free(text); | 418 | lib3270_free(text); |
| 455 | } | 419 | } |
| 456 | 420 | ||
| 457 | - return lib3270_realloc(info.text,strlen(info.text)+2); | 421 | + info.text = lib3270_realloc(info.text,strlen(info.text)+2); |
| 422 | + | ||
| 423 | +#if defined(DEBUG) || defined(ANDROID) | ||
| 424 | + { | ||
| 425 | + char *text = strdup(info.text); | ||
| 426 | + char *save; | ||
| 427 | + char *ptr; | ||
| 428 | + | ||
| 429 | + for(ptr=strtok_r(text,"\n",&save);ptr;ptr = strtok_r(NULL,"\n",&save)) | ||
| 430 | + { | ||
| 431 | + trace("%s",ptr); | ||
| 432 | + } | ||
| 433 | + | ||
| 434 | + free(text); | ||
| 435 | + } | ||
| 436 | +#endif // DEBUG | ||
| 437 | + | ||
| 438 | + return info.text; | ||
| 458 | } | 439 | } |
| 459 | 440 | ||
| 460 | 441 |