From e609d27751f842d428073251802a8b3fd144ad5e Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 7 Mar 2013 18:04:15 +0000 Subject: [PATCH] Trabalhando na interface HLLAPI --- src/include/lib3270.h | 10 ++++++++++ src/lib3270/util.c | 4 ++++ src/plugins/hllapi/calls.c | 55 +++++++++++++++++++++++++------------------------------ src/plugins/hllapi/client.h | 1 + src/plugins/hllapi/hllapi.c | 1 + src/plugins/hllapi/packets.h | 3 ++- src/plugins/hllapi/pluginmain.c | 4 ++++ src/plugins/hllapi/remote.c | 9 +++++++++ 8 files changed, 56 insertions(+), 31 deletions(-) diff --git a/src/include/lib3270.h b/src/include/lib3270.h index 1781560..2a015cf 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -533,6 +533,16 @@ LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h); /** + * Print page + * + * @param h Session Handle. + * + * @return 0 if ok, error code if not. + * + */ + LIB3270_EXPORT int lib3270_print(H3270 *h); + + /** * Get buffer contents. * * @param h Session handle. diff --git a/src/lib3270/util.c b/src/lib3270/util.c index 8d033ab..44612f7 100644 --- a/src/lib3270/util.c +++ b/src/lib3270/util.c @@ -1018,3 +1018,7 @@ int gettimeofday(struct timeval *tv, void *ignored) #endif + LIB3270_EXPORT int lib3270_print(H3270 *h) + { + return -1; + } diff --git a/src/plugins/hllapi/calls.c b/src/plugins/hllapi/calls.c index eeeeb0d..dc82928 100644 --- a/src/plugins/hllapi/calls.c +++ b/src/plugins/hllapi/calls.c @@ -44,6 +44,7 @@ HMODULE hModule = NULL; void * hSession = NULL; + static void * (*session_new)(const char *model) = NULL; static void (*session_free)(void *h) = NULL; @@ -67,6 +68,7 @@ static int (*setcursor)(void *hSession, int baddr) = NULL; static int (*emulate_input)(void *hSession, const char *s, int len, int pasting) = NULL; static int (*erase_eof)(void *hSession) = NULL; + static int (*do_print)(void *h) = NULL; static const struct _entry_point { @@ -95,7 +97,9 @@ { (void **) &getcursor, (void *) hllapi_pipe_getcursor, "lib3270_get_cursor_address" }, { (void **) &get_text_at_offset, (void *) hllapi_pipe_get_text, "lib3270_get_text" }, { (void **) &emulate_input, (void *) hllapi_pipe_emulate_input, "lib3270_emulate_input" }, - { (void **) &erase_eof, (void *) hllapi_pipe_erase_eof, "lib3270_eraseeof" }, + { (void **) &erase_eof, (void *) hllapi_pipe_erase_eof, "lib3270_eraseeof" }, + { (void **) &do_print, (void *) hllapi_pipe_print, "lib3270_print" }, + { NULL, NULL, NULL } }; @@ -409,33 +413,22 @@ return getcursor(hSession)+1; } - __declspec (dllexport) DWORD __stdcall hllapi_get_screen(WORD pos, LPSTR buffer, WORD len) - { - char *text; - - trace("%s(%d,%d)",__FUNCTION__,pos,len); - - if(len < 0) - len = strlen(buffer); - - if(!(get_text_at_offset && hSession)) - return EINVAL; - - if(len > strlen(buffer)) - len = strlen(buffer); - - trace("len=%d",len); - text = get_text_at_offset(hSession,pos-1,len); - - trace("text=\n%s\n",text); - - if(!text) - return -1; - - memcpy(buffer,text,len); - - release_memory(text); - + __declspec (dllexport) DWORD __stdcall hllapi_get_screen(WORD offset, LPSTR buffer, WORD len) + { + size_t szBuffer = strlen(buffer); + char * text; + + if(len < szBuffer && len > 0) + szBuffer = len; + + text = hllapi_get_string(offset, szBuffer); + if(!text) + return HLLAPI_STATUS_SYSTEM_ERROR; + + memcpy(buffer,text,len); + + hllapi_free(text); + return 0; } @@ -458,8 +451,10 @@ __declspec (dllexport) DWORD __stdcall hllapi_print(void) { - #warning Implementar - return -1; + if(!(do_print && hSession)) + return EINVAL; + + return do_print(hSession); } char * hllapi_get_string(int offset, size_t len) diff --git a/src/plugins/hllapi/client.h b/src/plugins/hllapi/client.h index 0aa5c9a..7645b85 100644 --- a/src/plugins/hllapi/client.h +++ b/src/plugins/hllapi/client.h @@ -59,6 +59,7 @@ int hllapi_pipe_getcursor(void *h); int hllapi_pipe_setcursor(void *h, int baddr); int hllapi_pipe_emulate_input(void *hSession, const char *s, int len, int pasting); + int hllapi_pipe_print(void *h); char * hllapi_get_string(int offset, size_t len); void hllapi_free(void *p); diff --git a/src/plugins/hllapi/hllapi.c b/src/plugins/hllapi/hllapi.c index d4dda35..dcec83d 100644 --- a/src/plugins/hllapi/hllapi.c +++ b/src/plugins/hllapi/hllapi.c @@ -35,6 +35,7 @@ #include #include #include + #include "client.h" #undef trace #define trace( fmt, ... ) { FILE *out = fopen("c:\\Users\\Perry\\hllapi.log","a"); if(out) { fprintf(out, "%s(%d) " fmt "\n", __FILE__, __LINE__, __VA_ARGS__ ); fclose(out); } } diff --git a/src/plugins/hllapi/packets.h b/src/plugins/hllapi/packets.h index 2d12ab6..c36c0de 100644 --- a/src/plugins/hllapi/packets.h +++ b/src/plugins/hllapi/packets.h @@ -46,7 +46,8 @@ HLLAPI_PACKET_SET_CURSOR, HLLAPI_PACKET_GET_CURSOR, HLLAPI_PACKET_EMULATE_INPUT, - HLLAPI_PACKET_ERASE_EOF, + HLLAPI_PACKET_ERASE_EOF, + HLLAPI_PACKET_PRINT, HLLAPI_PACKET_INVALID diff --git a/src/plugins/hllapi/pluginmain.c b/src/plugins/hllapi/pluginmain.c index 186c170..85758aa 100644 --- a/src/plugins/hllapi/pluginmain.c +++ b/src/plugins/hllapi/pluginmain.c @@ -195,6 +195,10 @@ send_result(source,lib3270_enter(lib3270_get_default_session_handle())); break; + case HLLAPI_PACKET_PRINT: + send_result(source,lib3270_print(lib3270_get_default_session_handle())); + break; + case HLLAPI_PACKET_ERASE_EOF: send_result(source,lib3270_eraseeof(lib3270_get_default_session_handle())); break; diff --git a/src/plugins/hllapi/remote.c b/src/plugins/hllapi/remote.c index 87b39fa..96d4f37 100644 --- a/src/plugins/hllapi/remote.c +++ b/src/plugins/hllapi/remote.c @@ -361,3 +361,12 @@ return response.rc; } + + int hllapi_pipe_print(void *h) + { + static const struct hllapi_packet_query query = { HLLAPI_PACKET_PRINT }; + struct hllapi_packet_result response; + DWORD cbSize = sizeof(query); + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); + return response.rc; + } -- libgit2 0.21.2