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 | 436 | { |
437 | 437 | |
438 | 438 | if(!(emulate_input && hSession)) |
439 | - return EINVAL; | |
439 | + return HLLAPI_STATUS_DISCONNECTED; | |
440 | 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 | 446 | __declspec (dllexport) DWORD __stdcall hllapi_erase_eof(void) | ... | ... |
src/plugins/hllapi/hllapi.c
... | ... | @@ -46,6 +46,7 @@ |
46 | 46 | static int disconnect_ps(char *buffer, unsigned short *length, unsigned short *rc); |
47 | 47 | static int get_library_revision(char *buffer, unsigned short *length, unsigned short *rc); |
48 | 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 | 50 | static int search_ps(char *buffer, unsigned short *length, unsigned short *rc); |
50 | 51 | static int copy_ps(char *buffer, unsigned short *length, unsigned short *rc); |
51 | 52 | static int wait_system(char *buffer, unsigned short *length, unsigned short *rc); |
... | ... | @@ -74,7 +75,7 @@ |
74 | 75 | { HLLAPI_CMD_WAIT, wait_system }, |
75 | 76 | { HLLAPI_CMD_COPYPS, copy_ps }, |
76 | 77 | { HLLAPI_CMD_SEARCHPS, search_ps }, |
77 | - { HLLAPI_CMD_COPYSTRTOPS, invalid_request }, | |
78 | + { HLLAPI_CMD_COPYSTRTOPS, copy_str_to_ps }, | |
78 | 79 | { HLLAPI_CMD_SENDFILE, invalid_request }, |
79 | 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 | 356 | * |
356 | 357 | * Length NA (the length of the host presentation space is implied). |
357 | 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 | 369 | size_t szBuffer = strlen(buffer); |
... | ... | @@ -417,3 +425,54 @@ static int wait_system(char *buffer, unsigned short *length, unsigned short *rc) |
417 | 425 | |
418 | 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 | +} | ... | ... |