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
kybd.c
... ... @@ -2346,29 +2346,43 @@ ToggleReverse_action(Widget w unused, XEvent *event, String *params, Cardinal *n
2346 2346 */
2347 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 2351 if (hSession->kybdlock)
2354 2352 {
2355 2353 ENQUEUE_ACTION( lib3270_fieldend );
2356 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 2370 #if defined(X3270_ANSI) /*[*/
2359 2371 if (IN_ANSI)
2360   - return 0;
  2372 + return -1;
2361 2373 #endif /*]*/
  2374 +
2362 2375 if (!hSession->formatted)
2363   - return 0;
2364   - baddr = hSession->cursor_addr;
  2376 + return -1;
  2377 +
2365 2378 faddr = find_field_attribute(hSession,baddr);
2366 2379 fa = hSession->ea_buf[faddr].fa;
2367 2380 if (faddr == baddr || FA_IS_PROTECTED(fa))
2368   - return 0;
  2381 + return -1;
2369 2382  
2370 2383 baddr = faddr;
2371   - while (True) {
  2384 + while (True)
  2385 + {
2372 2386 INC_BA(baddr);
2373 2387 c = hSession->ea_buf[baddr].cc;
2374 2388 if (hSession->ea_buf[baddr].fa)
... ... @@ -2377,17 +2391,19 @@ LIB3270_ACTION( fieldend )
2377 2391 last_nonblank = baddr;
2378 2392 }
2379 2393  
2380   - if (last_nonblank == -1) {
  2394 + if (last_nonblank == -1)
  2395 + {
2381 2396 baddr = faddr;
2382 2397 INC_BA(baddr);
2383   - } else {
  2398 + }
  2399 + else
  2400 + {
2384 2401 baddr = last_nonblank;
2385 2402 INC_BA(baddr);
2386 2403 if (hSession->ea_buf[baddr].fa)
2387 2404 baddr = last_nonblank;
2388 2405 }
2389   - cursor_move(hSession,baddr);
2390   - return 0;
  2406 + return baddr;
2391 2407 }
2392 2408  
2393 2409 /**
... ...
selection.c
... ... @@ -862,6 +862,12 @@ LIB3270_EXPORT int lib3270_move_cursor(H3270 *hSession, LIB3270_DIRECTION dir, u
862 862 cursor_addr++;
863 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 871 default:
866 872 return -1;
867 873 }
... ...