Commit 3cba5f2a1480bca480fb47c253620852fab2d04a

Authored by Perry Werneck
1 parent 267a658c

Ajustes na HLLAPI.

src/include/pw3270/hllapi.h
... ... @@ -167,7 +167,8 @@ extern "C" {
167 167 HLLAPI_API_CALL hllapi_enter(void);
168 168 HLLAPI_API_CALL hllapi_set_text_at(WORD row, WORD col, LPSTR text);
169 169 HLLAPI_API_CALL hllapi_cmp_text_at(WORD row, WORD col, LPSTR text);
170   - HLLAPI_API_CALL hllapi_emulate_input(LPSTR buffer, WORD len, WORD pasting);
  170 + HLLAPI_API_CALL hllapi_emulate_input(const LPSTR buffer, WORD len, WORD pasting);
  171 + HLLAPI_API_CALL hllapi_input_string(LPSTR buffer, WORD len);
171 172 HLLAPI_API_CALL hllapi_wait_for_ready(WORD seconds);
172 173 HLLAPI_API_CALL hllapi_wait_for_change(WORD seconds);
173 174 HLLAPI_API_CALL hllapi_wait(WORD seconds);
... ... @@ -176,6 +177,8 @@ extern "C" {
176 177 HLLAPI_API_CALL hllapi_setcursor(WORD key);
177 178 HLLAPI_API_CALL hllapi_getcursor();
178 179  
  180 + HLLAPI_API_CALL hllapi_set_session_parameter(LPSTR param, WORD len, WORD value);
  181 +
179 182 HLLAPI_API_CALL hllapi_erase(void);
180 183 HLLAPI_API_CALL hllapi_erase_eof(void);
181 184 HLLAPI_API_CALL hllapi_erase_eol(void);
... ... @@ -201,7 +204,6 @@ extern "C" {
201 204 HLLAPI_API_CALL hllapi_enter(void);
202 205 HLLAPI_API_CALL hllapi_set_text_at(WORD row, WORD col, LPSTR text);
203 206 HLLAPI_API_CALL hllapi_cmp_text_at(WORD row, WORD col, LPSTR text);
204   - HLLAPI_API_CALL hllapi_emulate_input(LPSTR buffer, WORD len, WORD pasting);
205 207 HLLAPI_API_CALL hllapi_wait_for_ready(WORD seconds);
206 208 HLLAPI_API_CALL hllapi_wait(WORD seconds);
207 209 HLLAPI_API_CALL hllapi_pfkey(WORD key);
... ...
src/plugins/hllapi/calls.cc
... ... @@ -327,38 +327,81 @@
327 327 return rc;
328 328 }
329 329  
330   - HLLAPI_API_CALL hllapi_emulate_input(LPSTR buffer, WORD len, WORD pasting)
  330 + HLLAPI_API_CALL hllapi_emulate_input(const LPSTR buffer, WORD len, WORD pasting)
331 331 {
332   - session::get_default()->emulate_input(buffer);
  332 + try
  333 + {
  334 + session::get_default()->emulate_input(buffer);
  335 + }
  336 + catch(std::exception &e)
  337 + {
  338 + return HLLAPI_STATUS_SYSTEM_ERROR;
  339 + }
  340 +
333 341 return HLLAPI_STATUS_SUCCESS;
334 342 }
335 343  
336 344 HLLAPI_API_CALL hllapi_erase(void)
337 345 {
338   - session::get_default()->erase();
  346 + try
  347 + {
  348 + session::get_default()->erase();
  349 + }
  350 + catch(std::exception &e)
  351 + {
  352 + return HLLAPI_STATUS_SYSTEM_ERROR;
  353 + }
339 354 return HLLAPI_STATUS_SUCCESS;
340 355 }
341 356  
342 357 HLLAPI_API_CALL hllapi_erase_eof(void)
343 358 {
344   - session::get_default()->erase_eof();
  359 + try
  360 + {
  361 + session::get_default()->erase_eof();
  362 + }
  363 + catch(std::exception &e)
  364 + {
  365 + return HLLAPI_STATUS_SYSTEM_ERROR;
  366 + }
345 367 return HLLAPI_STATUS_SUCCESS;
346 368 }
347 369  
348 370 HLLAPI_API_CALL hllapi_erase_eol(void)
349 371 {
350   - session::get_default()->erase_eol();
  372 + try
  373 + {
  374 + session::get_default()->erase_eol();
  375 + }
  376 + catch(std::exception &e)
  377 + {
  378 + return HLLAPI_STATUS_SYSTEM_ERROR;
  379 + }
351 380 return HLLAPI_STATUS_SUCCESS;
352 381 }
353 382  
354 383 HLLAPI_API_CALL hllapi_erase_input(void)
355 384 {
356   - session::get_default()->erase_input();
  385 + try
  386 + {
  387 + session::get_default()->erase_input();
  388 + }
  389 + catch(std::exception &e)
  390 + {
  391 + return HLLAPI_STATUS_SYSTEM_ERROR;
  392 + }
357 393 return HLLAPI_STATUS_SUCCESS;
358 394 }
359 395  
360 396 HLLAPI_API_CALL hllapi_action(LPSTR buffer) {
361   - session::get_default()->action((const char *) buffer);
  397 + try
  398 + {
  399 + session::get_default()->action((const char *) buffer);
  400 + }
  401 + catch(std::exception &e)
  402 + {
  403 + return HLLAPI_STATUS_SYSTEM_ERROR;
  404 + }
362 405 return HLLAPI_STATUS_SUCCESS;
363 406 }
364 407  
... ... @@ -389,9 +432,301 @@
389 432  
390 433 HLLAPI_API_CALL hllapi_reset(void)
391 434 {
392   -
393   -
394 435 return HLLAPI_STATUS_SUCCESS;
395 436 }
396 437  
  438 + HLLAPI_API_CALL hllapi_input_string(LPSTR input, WORD length)
  439 + {
  440 + static const char control_char = '@';
  441 +
  442 + size_t szText;
  443 + char * text;
  444 + int rc = 0;
  445 +
  446 + if(!hllapi_is_connected()) {
  447 + return HLLAPI_STATUS_DISCONNECTED;
  448 + }
  449 +
  450 + if(!input)
  451 + {
  452 + return HLLAPI_STATUS_BAD_PARAMETER;
  453 + }
  454 +
  455 + if(length > 0 )
  456 + szText = length;
  457 + else
  458 + szText = strlen(input);
  459 +
  460 + text = (char *) malloc(szText+2);
  461 + memcpy(text,input,szText);
  462 + text[szText] = 0;
  463 +
  464 + trace("input[%s]",text);
  465 +
  466 + if(strchr(text,control_char))
  467 + {
  468 + // Convert control char
  469 + char * buffer = text;
  470 + char * ptr;
  471 +
  472 + for(ptr = strchr(text,control_char);ptr;ptr = strchr(buffer,control_char))
  473 + {
  474 + *(ptr++) = 0;
  475 +
  476 + trace("input[%s]",buffer);
  477 + hllapi_emulate_input(buffer,-1,0);
  478 +
  479 + switch(*(ptr++))
  480 + {
  481 + case 'P': // Print
  482 + rc = hllapi_print();
  483 + break;
  484 +
  485 + case 'E': // Enter
  486 + hllapi_enter();
  487 + break;
  488 +
  489 + case 'F': // Erase EOF
  490 + hllapi_erase_eof();
  491 + break;
  492 +
  493 + case '1': // PF1
  494 + hllapi_pfkey(1);
  495 + break;
  496 +
  497 + case '2': // PF2
  498 + hllapi_pfkey(2);
  499 + break;
  500 +
  501 + case '3': // PF3
  502 + hllapi_pfkey(3);
  503 + break;
  504 +
  505 + case '4': // PF4
  506 + hllapi_pfkey(4);
  507 + break;
  508 +
  509 + case '5': // PF5
  510 + hllapi_pfkey(5);
  511 + break;
  512 +
  513 + case '6': // PF6
  514 + hllapi_pfkey(6);
  515 + break;
  516 +
  517 + case '7': // PF7
  518 + hllapi_pfkey(7);
  519 + break;
  520 +
  521 + case '8': // PF8
  522 + hllapi_pfkey(8);
  523 + break;
  524 +
  525 + case '9': // PF9
  526 + hllapi_pfkey(9);
  527 + break;
  528 +
  529 + case 'a': // PF10
  530 + hllapi_pfkey(10);
  531 + break;
  532 +
  533 + case 'b': // PF11
  534 + hllapi_pfkey(11);
  535 + break;
  536 +
  537 + case 'c': // PF12
  538 + hllapi_pfkey(12);
  539 + break;
  540 +
  541 + case 'd': // PF13
  542 + hllapi_pfkey(13);
  543 + break;
  544 +
  545 + case 'e': // PF14
  546 + hllapi_pfkey(14);
  547 + break;
  548 +
  549 + case 'f': // PF15
  550 + hllapi_pfkey(15);
  551 + break;
  552 +
  553 + case 'g': // PF16
  554 + hllapi_pfkey(16);
  555 + break;
  556 +
  557 + case 'h': // PF17
  558 + hllapi_pfkey(17);
  559 + break;
  560 +
  561 + case 'i': // PF18
  562 + hllapi_pfkey(18);
  563 + break;
  564 +
  565 + case 'j': // PF19
  566 + hllapi_pfkey(19);
  567 + break;
  568 +
  569 + case 'k': // PF20
  570 + hllapi_pfkey(20);
  571 + break;
  572 +
  573 + case 'l': // PF21
  574 + hllapi_pfkey(21);
  575 + break;
  576 +
  577 + case 'm': // PF22
  578 + hllapi_pfkey(22);
  579 + break;
  580 +
  581 + case 'n': // PF23
  582 + hllapi_pfkey(23);
  583 + break;
  584 +
  585 + case 'o': // PF24
  586 + hllapi_pfkey(24);
  587 + break;
  588 +
  589 + case '@': // Send '@' character
  590 + hllapi_emulate_input("@",-1,0);
  591 + break;
  592 +
  593 + case 'x': // PA1
  594 + hllapi_pakey(1);
  595 + break;
  596 +
  597 + case 'y': // PA2
  598 + hllapi_pakey(2);
  599 + break;
  600 +
  601 + case 'z': // PA3
  602 + hllapi_pakey(3);
  603 + break;
  604 +
  605 + case 'B': // PC_LEFTTAB = "@B"
  606 + break;
  607 +
  608 + case 'T': // PC_RIGHTTAB = "@T"
  609 + break;
  610 +
  611 + case 'N': // PC_NEWLINE = "@N"
  612 + break;
  613 +
  614 + case 'C': // PC_CLEAR = "@C"
  615 + hllapi_erase_input();
  616 + break;
  617 +
  618 + case 'D': // PC_DELETE = "@D"
  619 + break;
  620 +
  621 + case 'H': // PC_HELP = "@H"
  622 + break;
  623 +
  624 + case 'I': // PC_INSERT = "@I"
  625 + break;
  626 +
  627 + case 'L': // PC_CURSORLEFT = "@L"
  628 + break;
  629 +
  630 + case 'R': // PC_RESET = "@R"
  631 + hllapi_reset();
  632 + break;
  633 +
  634 + case 'U': // PC_CURSORUP = "@U"
  635 + break;
  636 +
  637 + case 'V': // PC_CURSORDOWN = "@V"
  638 + break;
  639 +
  640 + case 'Z': // PC_CURSORRIGHT = "@Z"
  641 + break;
  642 +
  643 + case '0': // PC_HOME = "@0"
  644 + break;
  645 +
  646 + case 'p': // PC_PLUSKEY = "@p"
  647 + break;
  648 +
  649 + case 'q': // PC_END = "@q"
  650 + break;
  651 +
  652 + case 's': // PC_SCRLK = "@s"
  653 + break;
  654 +
  655 + case 't': // PC_NUMLOCK = "@t"
  656 + break;
  657 +
  658 + case 'u': // PC_PAGEUP = "@u"
  659 + break;
  660 +
  661 + case 'v': // PC_PAGEDOWN = "@v"
  662 + break;
  663 +
  664 + case '/': // PC_OVERRUNOFQUEUE = "@/" ' Queue overflow, used in Get Key only
  665 + break;
  666 +
  667 + case '$': // PC_ALTCURSOR = "@$" ' Presentation Manager only, unused in VB environment
  668 + break;
  669 +
  670 + case '<': // PC_BACKSPACE = "@<"
  671 + break;
  672 +
  673 +
  674 +/*
  675 +
  676 +Global Const PC_TEST = "@A@C"
  677 +Global Const PC_WORDDELETE = "@A@D"
  678 +Global Const PC_FIELDEXIT = "@A@E"
  679 +Global Const PC_ERASEINPUT = "@A@F"
  680 +Global Const PC_SYSTEMREQUEST = "@A@H"
  681 +Global Const PC_INSERTTOGGLE = "@A@I"
  682 +Global Const PC_CURSORSELECT = "@A@J"
  683 +Global Const PC_CURSLEFTFAST = "@A@L"
  684 +Global Const PC_GETCURSOR = "@A@N"
  685 +Global Const PC_LOCATECURSOR = "@A@O"
  686 +Global Const PC_ATTENTION = "@A@Q"
  687 +Global Const PC_DEVICECANCEL = "@A@R"
  688 +Global Const PC_PRINTPS = "@A@T"
  689 +Global Const PC_CURSUPFAST = "@A@U"
  690 +Global Const PC_CURSDOWNFAST = "@A@V"
  691 +Global Const PC_HEX = "@A@X"
  692 +Global Const PC_FUNCTIONKEY = "@A@Y"
  693 +Global Const PC_CURSRIGHTFAST = "@A@Z"
  694 +
  695 +Global Const PC_REVERSEVIDEO = "@A@9"
  696 +Global Const PC_UNDERSCORE = "@A@b"
  697 +Global Const PC_BLINK = "@A@c"
  698 +Global Const PC_RED = "@A@d"
  699 +Global Const PC_PINK = "@A@e"
  700 +Global Const PC_GREEN = "@A@f"
  701 +Global Const PC_YELLOW = "@A@g"
  702 +Global Const PC_BLUE = "@A@h"
  703 +Global Const PC_TURQOISE = "@A@i"
  704 +Global Const PC_WHITE = "@A@j"
  705 +Global Const PC_RSTHOSTCOLORS = "@A@l"
  706 +Global Const PC_PRINTPC = "@A@t"
  707 +
  708 +Global Const PC_FIELDMINUS = "@A@-"
  709 +Global Const PC_FIELDPLUS = "@A@+"
  710 +
  711 +*/
  712 +
  713 + }
  714 +
  715 + buffer = ptr;
  716 +
  717 + }
  718 +
  719 + if(*buffer)
  720 + hllapi_emulate_input(buffer,-1,0);
  721 +
  722 + }
  723 + else
  724 + {
  725 + hllapi_emulate_input(text,szText,0);
  726 + }
  727 +
  728 + free(text);
  729 +
  730 + return rc;
  731 + }
397 732  
... ...
src/plugins/hllapi/hllapi.c
... ... @@ -90,8 +90,6 @@
90 90 PAUSE_MODE_FPAUSE ///< @brief A full-duration pause lasts for however long you specified in the Pause (18) function.
91 91 } pause_mode = PAUSE_MODE_IPAUSE;
92 92  
93   - static const char control_char = '@';
94   -
95 93 /*--[ Implement ]------------------------------------------------------------------------------------*/
96 94  
97 95 HLLAPI_API_CALL hllapi(const LPWORD func, LPSTR buffer, LPWORD length, LPWORD rc)
... ... @@ -194,174 +192,9 @@ static int copy_ps_to_str(char *buffer, unsigned short *length, unsigned short *
194 192 return 0;
195 193 }
196 194  
197   -static int input_string(char *input, unsigned short *length, unsigned short *rc)
  195 +static int input_string(char *buffer, unsigned short *length, unsigned short *rc)
198 196 {
199   - size_t szText;
200   - char * text;
201   -
202   - if(!hllapi_is_connected()) {
203   - *rc = HLLAPI_STATUS_DISCONNECTED;
204   - return HLLAPI_STATUS_DISCONNECTED;
205   - }
206   -
207   - if(!input)
208   - {
209   - *rc = HLLAPI_STATUS_BAD_PARAMETER;
210   - return HLLAPI_STATUS_BAD_PARAMETER;
211   - }
212   -
213   - szText = strlen(input);
214   -
215   - if(*length > 0 && *length < szText)
216   - szText = *length;
217   -
218   - text = (char *) malloc(szText+2);
219   - memcpy(text,input,szText);
220   - text[szText] = 0;
221   -
222   - *rc = 0;
223   -
224   - trace("input[%s]",text);
225   -
226   - if(strchr(text,control_char))
227   - {
228   - // Convert control char
229   - char * buffer = text;
230   - char * ptr;
231   -
232   - for(ptr = strchr(text,control_char);ptr;ptr = strchr(buffer,control_char))
233   - {
234   - *(ptr++) = 0;
235   -
236   - trace("input[%s]",buffer);
237   - hllapi_emulate_input(buffer,-1,0);
238   -
239   - switch(*(ptr++))
240   - {
241   - case 'P': // Print
242   - *rc = hllapi_print();
243   - break;
244   -
245   - case 'E': // Enter
246   - hllapi_enter();
247   - break;
248   -
249   - case 'F': // Erase EOF
250   - hllapi_erase_eof();
251   - break;
252   -
253   - case '1': // PF1
254   - hllapi_pfkey(1);
255   - break;
256   -
257   - case '2': // PF2
258   - hllapi_pfkey(2);
259   - break;
260   -
261   - case '3': // PF3
262   - hllapi_pfkey(3);
263   - break;
264   -
265   - case '4': // PF4
266   - hllapi_pfkey(4);
267   - break;
268   -
269   - case '5': // PF5
270   - hllapi_pfkey(5);
271   - break;
272   -
273   - case '6': // PF6
274   - hllapi_pfkey(6);
275   - break;
276   -
277   - case '7': // PF7
278   - hllapi_pfkey(7);
279   - break;
280   -
281   - case '8': // PF8
282   - hllapi_pfkey(8);
283   - break;
284   -
285   - case '9': // PF9
286   - hllapi_pfkey(9);
287   - break;
288   -
289   - case 'a': // PF10
290   - hllapi_pfkey(10);
291   - break;
292   -
293   - case 'b': // PF11
294   - hllapi_pfkey(11);
295   - break;
296   -
297   - case 'c': // PF12
298   - hllapi_pfkey(12);
299   - break;
300   -
301   - case 'd': // PF13
302   - hllapi_pfkey(13);
303   - break;
304   -
305   - case 'e': // PF14
306   - hllapi_pfkey(14);
307   - break;
308   -
309   - case 'f': // PF15
310   - hllapi_pfkey(15);
311   - break;
312   -
313   - case 'g': // PF16
314   - hllapi_pfkey(16);
315   - break;
316   -
317   - case 'h': // PF17
318   - hllapi_pfkey(17);
319   - break;
320   -
321   - case 'i': // PF18
322   - hllapi_pfkey(18);
323   - break;
324   -
325   - case 'j': // PF19
326   - hllapi_pfkey(19);
327   - break;
328   -
329   - case 'k': // PF20
330   - hllapi_pfkey(20);
331   - break;
332   -
333   - case 'l': // PF21
334   - hllapi_pfkey(21);
335   - break;
336   -
337   - case 'm': // PF22
338   - hllapi_pfkey(22);
339   - break;
340   -
341   - case 'n': // PF23
342   - hllapi_pfkey(23);
343   - break;
344   -
345   - case 'o': // PF24
346   - hllapi_pfkey(24);
347   - break;
348   - }
349   -
350   - buffer = ptr;
351   -
352   - }
353   -
354   - if(*buffer)
355   - hllapi_emulate_input(buffer,-1,0);
356   -
357   - }
358   - else
359   - {
360   - hllapi_emulate_input(text,szText,0);
361   - }
362   -
363   - free(text);
364   -
  197 + *rc = hllapi_input_string(buffer,*length);
365 198 return 0;
366 199 }
367 200  
... ... @@ -592,20 +425,37 @@ static int set_session_parameters(char *buffer, unsigned short *length, unsigned
592 425 return HLLAPI_STATUS_BAD_PARAMETER;
593 426 }
594 427  
595   - if(!strncasecmp(buffer,"IPAUSE",*length))
  428 + *rc = hllapi_set_session_parameter(buffer, *length, *rc);
  429 +
  430 + return 0;
  431 +}
  432 +
  433 +HLLAPI_API_CALL hllapi_set_session_parameter(LPSTR param, WORD len, WORD value)
  434 +{
  435 + if(!param)
  436 + {
  437 + return HLLAPI_STATUS_BAD_PARAMETER;
  438 + }
  439 +
  440 + if(!len)
  441 + {
  442 + len = strlen(param);
  443 + }
  444 +
  445 + if(!strncasecmp(param,"IPAUSE",len))
596 446 {
597 447 // IPAUSE
598 448 pause_mode = PAUSE_MODE_IPAUSE;
599 449 }
600   - else if(!strncasecmp(buffer,"FPAUSE",*length))
  450 + else if(!strncasecmp(param,"FPAUSE",len))
601 451 {
602 452 // FPAUSE
603 453 pause_mode = PAUSE_MODE_FPAUSE;
604 454 }
605   - else if(!strncasecmp(buffer,"UNLOCKDELAY",*length))
  455 + else if(!strncasecmp(param,"UNLOCKDELAY",len))
606 456 {
607 457 // UNLOCKDELAY
608   - hllapi_set_unlock_delay((WORD) *rc);
  458 + hllapi_set_unlock_delay(value);
609 459 }
610 460 else
611 461 {
... ... @@ -613,5 +463,4 @@ static int set_session_parameters(char *buffer, unsigned short *length, unsigned
613 463 }
614 464  
615 465 return HLLAPI_STATUS_SUCCESS;
616   -
617 466 }
... ...