Commit 3ca357c4d222eb620a361bcc65babef138714480
1 parent
e609d277
Exists in
master
and in
5 other branches
Trabalhando no HLLAPI
Showing
2 changed files
with
65 additions
and
4 deletions
Show diff stats
src/plugins/hllapi/calls.c
| @@ -436,9 +436,11 @@ | @@ -436,9 +436,11 @@ | ||
| 436 | { | 436 | { |
| 437 | 437 | ||
| 438 | if(!(emulate_input && hSession)) | 438 | if(!(emulate_input && hSession)) |
| 439 | - return EINVAL; | 439 | + return HLLAPI_STATUS_DISCONNECTED; |
| 440 | trace("%s",__FUNCTION__); | 440 | trace("%s",__FUNCTION__); |
| 441 | - return emulate_input(hSession, buffer, len, pasting); | 441 | + emulate_input(hSession, buffer, len, pasting); |
| 442 | + | ||
| 443 | + return HLLAPI_STATUS_SUCCESS; | ||
| 442 | } | 444 | } |
| 443 | 445 | ||
| 444 | __declspec (dllexport) DWORD __stdcall hllapi_erase_eof(void) | 446 | __declspec (dllexport) DWORD __stdcall hllapi_erase_eof(void) |
src/plugins/hllapi/hllapi.c
| @@ -46,6 +46,7 @@ | @@ -46,6 +46,7 @@ | ||
| 46 | static int disconnect_ps(char *buffer, unsigned short *length, unsigned short *rc); | 46 | static int disconnect_ps(char *buffer, unsigned short *length, unsigned short *rc); |
| 47 | static int get_library_revision(char *buffer, unsigned short *length, unsigned short *rc); | 47 | static int get_library_revision(char *buffer, unsigned short *length, unsigned short *rc); |
| 48 | static int copy_ps_to_str(char *buffer, unsigned short *length, unsigned short *rc); | 48 | static int copy_ps_to_str(char *buffer, unsigned short *length, unsigned short *rc); |
| 49 | + static int copy_str_to_ps(char *buffer, unsigned short *length, unsigned short *rc); | ||
| 49 | static int search_ps(char *buffer, unsigned short *length, unsigned short *rc); | 50 | static int search_ps(char *buffer, unsigned short *length, unsigned short *rc); |
| 50 | static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc); | 51 | static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc); |
| 51 | static int wait_system(char *buffer, unsigned short *length, unsigned short *rc); | 52 | static int wait_system(char *buffer, unsigned short *length, unsigned short *rc); |
| @@ -74,7 +75,7 @@ | @@ -74,7 +75,7 @@ | ||
| 74 | { HLLAPI_CMD_WAIT, wait_system }, | 75 | { HLLAPI_CMD_WAIT, wait_system }, |
| 75 | { HLLAPI_CMD_COPYPS, copy_ps }, | 76 | { HLLAPI_CMD_COPYPS, copy_ps }, |
| 76 | { HLLAPI_CMD_SEARCHPS, search_ps }, | 77 | { HLLAPI_CMD_SEARCHPS, search_ps }, |
| 77 | - { HLLAPI_CMD_COPYSTRTOPS, invalid_request }, | 78 | + { HLLAPI_CMD_COPYSTRTOPS, copy_str_to_ps }, |
| 78 | { HLLAPI_CMD_SENDFILE, invalid_request }, | 79 | { HLLAPI_CMD_SENDFILE, invalid_request }, |
| 79 | { HLLAPI_CMD_RECEIVEFILE, invalid_request }, | 80 | { HLLAPI_CMD_RECEIVEFILE, invalid_request }, |
| 80 | 81 | ||
| @@ -355,7 +356,14 @@ static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) | @@ -355,7 +356,14 @@ static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc) | ||
| 355 | * | 356 | * |
| 356 | * Length NA (the length of the host presentation space is implied). | 357 | * Length NA (the length of the host presentation space is implied). |
| 357 | * PS Position NA. | 358 | * PS Position NA. |
| 358 | - * | 359 | + * |
| 360 | + * Return values: | ||
| 361 | + * | ||
| 362 | + * 0 The host presentation space contents were copied to the application program. The target presentation space was active, and the keyboard was unlocked. | ||
| 363 | + * 1 Your program is not connected to a host session. | ||
| 364 | + * 4 The host presentation space contents were copied. The connected host presentation space was waiting for host response. | ||
| 365 | + * 5 The host presentation space was copied. The keyboard was locked. | ||
| 366 | + * 9 A system error was encountered. | ||
| 359 | * | 367 | * |
| 360 | */ | 368 | */ |
| 361 | size_t szBuffer = strlen(buffer); | 369 | size_t szBuffer = strlen(buffer); |
| @@ -417,3 +425,54 @@ static int wait_system(char *buffer, unsigned short *length, unsigned short *rc) | @@ -417,3 +425,54 @@ static int wait_system(char *buffer, unsigned short *length, unsigned short *rc) | ||
| 417 | 425 | ||
| 418 | return HLLAPI_STATUS_TIMEOUT; | 426 | return HLLAPI_STATUS_TIMEOUT; |
| 419 | } | 427 | } |
| 428 | + | ||
| 429 | +static int copy_str_to_ps(char *text, unsigned short *length, unsigned short *ps) | ||
| 430 | +{ | ||
| 431 | + /* | ||
| 432 | + * Call Parameters | ||
| 433 | + * | ||
| 434 | + * Data String String of ASCII data to be copied into the host presentation space. | ||
| 435 | + * Length Length, in number of bytes, of the source data string. Overridden if in EOT mode. | ||
| 436 | + * PS Position Position in the host presentation space to begin the copy, a value between 1 and the configured size of your host presentation space. | ||
| 437 | + * | ||
| 438 | + * Return Parameters | ||
| 439 | + * | ||
| 440 | + * 0 The Copy String to Presentation Space function was successful. | ||
| 441 | + * 1 Your program is not connected to a host session. | ||
| 442 | + * 2 Parameter error or zero length for copy. | ||
| 443 | + * 5 The target presentation space is protected or inhibited, or incorrect data was sent to the target presentation space (such as a field attribute byte). | ||
| 444 | + * 6 The copy was completed, but the data was truncated. | ||
| 445 | + * 7 The host presentation space position is not valid. | ||
| 446 | + * 9 A system error was encountered. | ||
| 447 | + * | ||
| 448 | + */ | ||
| 449 | + size_t szText = strlen(text); | ||
| 450 | + | ||
| 451 | + if(*length < szText) | ||
| 452 | + szText = *length; | ||
| 453 | + | ||
| 454 | + if(!szText) | ||
| 455 | + return 2; | ||
| 456 | + | ||
| 457 | + switch(hllapi_get_message_id()) | ||
| 458 | + { | ||
| 459 | + case LIB3270_MESSAGE_NONE: | ||
| 460 | + break; | ||
| 461 | + | ||
| 462 | + case LIB3270_MESSAGE_DISCONNECTED: | ||
| 463 | + return HLLAPI_STATUS_DISCONNECTED; | ||
| 464 | + | ||
| 465 | + case LIB3270_MESSAGE_MINUS: | ||
| 466 | + case LIB3270_MESSAGE_PROTECTED: | ||
| 467 | + case LIB3270_MESSAGE_NUMERIC: | ||
| 468 | + case LIB3270_MESSAGE_OVERFLOW: | ||
| 469 | + case LIB3270_MESSAGE_INHIBIT: | ||
| 470 | + case LIB3270_MESSAGE_KYBDLOCK: | ||
| 471 | + return HLLAPI_STATUS_KEYBOARD_LOCKED; | ||
| 472 | + | ||
| 473 | + default: | ||
| 474 | + return HLLAPI_STATUS_SYSTEM_ERROR; | ||
| 475 | + } | ||
| 476 | + | ||
| 477 | + return hllapi_emulate_input(text,szText,0); | ||
| 478 | +} |