Commit 714aa8af40346706e1815a4a58101757f4c3faa2

Authored by perry.werneck@gmail.com
1 parent 8c98b4ca

Padronizando action que move o cursor ao final do campo ativo, incluindo função …

…de biblioteca que obtem a posição do último caractere do campo
Showing 2 changed files with 34 additions and 12 deletions   Show diff stats
@@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n @@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n
2346 */ 2346 */
2347 LIB3270_ACTION( fieldend ) 2347 LIB3270_ACTION( fieldend )
2348 { 2348 {
2349 - int baddr, faddr;  
2350 - unsigned char fa, c;  
2351 - int last_nonblank = -1; 2349 + int baddr;
2352 2350
2353 if (hSession->kybdlock) 2351 if (hSession->kybdlock)
2354 { 2352 {
2355 ENQUEUE_ACTION( lib3270_fieldend ); 2353 ENQUEUE_ACTION( lib3270_fieldend );
2356 return 0; 2354 return 0;
2357 } 2355 }
  2356 +
  2357 + baddr = lib3270_get_field_end(hSession,hSession->cursor_addr);
  2358 + if(baddr >= 0)
  2359 + cursor_move(hSession,baddr);
  2360 +
  2361 + return 0;
  2362 +}
  2363 +
  2364 +int lib3270_get_field_end(H3270 *hSession, int baddr)
  2365 +{
  2366 + int faddr;
  2367 + unsigned char fa, c;
  2368 + int last_nonblank = -1;
  2369 +
2358 #if defined(X3270_ANSI) /*[*/ 2370 #if defined(X3270_ANSI) /*[*/
2359 if (IN_ANSI) 2371 if (IN_ANSI)
2360 - return 0; 2372 + return -1;
2361 #endif /*]*/ 2373 #endif /*]*/
  2374 +
2362 if (!hSession->formatted) 2375 if (!hSession->formatted)
2363 - return 0;  
2364 - baddr = hSession->cursor_addr; 2376 + return -1;
  2377 +
2365 faddr = find_field_attribute(hSession,baddr); 2378 faddr = find_field_attribute(hSession,baddr);
2366 fa = hSession->ea_buf[faddr].fa; 2379 fa = hSession->ea_buf[faddr].fa;
2367 if (faddr == baddr || FA_IS_PROTECTED(fa)) 2380 if (faddr == baddr || FA_IS_PROTECTED(fa))
2368 - return 0; 2381 + return -1;
2369 2382
2370 baddr = faddr; 2383 baddr = faddr;
2371 - while (True) { 2384 + while (True)
  2385 + {
2372 INC_BA(baddr); 2386 INC_BA(baddr);
2373 c = hSession->ea_buf[baddr].cc; 2387 c = hSession->ea_buf[baddr].cc;
2374 if (hSession->ea_buf[baddr].fa) 2388 if (hSession->ea_buf[baddr].fa)
@@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend ) @@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend )
2377 last_nonblank = baddr; 2391 last_nonblank = baddr;
2378 } 2392 }
2379 2393
2380 - if (last_nonblank == -1) { 2394 + if (last_nonblank == -1)
  2395 + {
2381 baddr = faddr; 2396 baddr = faddr;
2382 INC_BA(baddr); 2397 INC_BA(baddr);
2383 - } else { 2398 + }
  2399 + else
  2400 + {
2384 baddr = last_nonblank; 2401 baddr = last_nonblank;
2385 INC_BA(baddr); 2402 INC_BA(baddr);
2386 if (hSession->ea_buf[baddr].fa) 2403 if (hSession->ea_buf[baddr].fa)
2387 baddr = last_nonblank; 2404 baddr = last_nonblank;
2388 } 2405 }
2389 - cursor_move(hSession,baddr);  
2390 - return 0; 2406 + return baddr;
2391 } 2407 }
2392 2408
2393 /** 2409 /**
@@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u @@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
862 cursor_addr++; 862 cursor_addr++;
863 break; 863 break;
864 864
  865 + case LIB3270_DIR_END:
  866 + cursor_addr = lib3270_get_field_end(hSession,cursor_addr);
  867 + if(cursor_addr == -1)
  868 + return EINVAL;
  869 + break;
  870 +
865 default: 871 default:
866 return -1; 872 return -1;
867 } 873 }