Commit 7bcf57ee87deb783a250f6ada6328cc116cccbec
1 parent
6232053a
Exists in
master
and in
5 other branches
Implementando mais funções hllapi
Showing
7 changed files
with
96 additions
and
24 deletions
Show diff stats
src/include/pw3270/hllapi.h
... | ... | @@ -63,29 +63,6 @@ extern "C" { |
63 | 63 | #define HLLAPI_STATUS_UNAVAILABLE 11 /**< Resource unavailable at this time */ |
64 | 64 | |
65 | 65 | |
66 | - | |
67 | - typedef enum _hllapi_packet | |
68 | - { | |
69 | - HLLAPI_PACKET_CONNECT, | |
70 | - HLLAPI_PACKET_DISCONNECT, | |
71 | - HLLAPI_PACKET_GET_PROGRAM_MESSAGE, | |
72 | - HLLAPI_PACKET_GET_TEXT_AT, | |
73 | - HLLAPI_PACKET_SET_TEXT_AT, | |
74 | - HLLAPI_PACKET_CMP_TEXT_AT, | |
75 | - HLLAPI_PACKET_ENTER, | |
76 | - HLLAPI_PACKET_PFKEY, | |
77 | - HLLAPI_PACKET_PAKEY, | |
78 | - HLLAPI_PACKET_SET_CURSOR_POSITION, | |
79 | - HLLAPI_PACKET_GET_CURSOR_POSITION, | |
80 | - HLLAPI_PACKET_INPUT_STRING, | |
81 | - HLLAPI_PACKET_IS_CONNECTED, | |
82 | - | |
83 | - HLLAPI_PACKET_INVALID | |
84 | - | |
85 | - } HLLAPI_PACKET; | |
86 | - | |
87 | - | |
88 | - | |
89 | 66 | #ifdef _WIN32 |
90 | 67 | // http://www.mingw.org/wiki/Visual_Basic_DLL |
91 | 68 | __declspec (dllexport) int __stdcall hllapi(const LPWORD func, LPSTR str, LPWORD length, LPWORD rc); |
... | ... | @@ -108,6 +85,8 @@ extern "C" { |
108 | 85 | __declspec (dllexport) DWORD __stdcall hllapi_wait(WORD seconds); |
109 | 86 | __declspec (dllexport) DWORD __stdcall hllapi_pfkey(WORD key); |
110 | 87 | __declspec (dllexport) DWORD __stdcall hllapi_pakey(WORD key); |
88 | + __declspec (dllexport) DWORD __stdcall hllapi_setcursor(WORD key); | |
89 | + __declspec (dllexport) DWORD __stdcall hllapi_getcursor(); | |
111 | 90 | |
112 | 91 | #else |
113 | 92 | ... | ... |
src/plugins/remotectl/calls.c
... | ... | @@ -61,6 +61,8 @@ |
61 | 61 | static int (*cmp_text_at)(void *h, int row, int col, const char *text) = NULL; |
62 | 62 | static int (*pfkey)(void *hSession, int key) = NULL; |
63 | 63 | static int (*pakey)(void *hSession, int key) = NULL; |
64 | + static int (*getcursor)(void *hSession) = NULL; | |
65 | + static int (*setcursor)(void *hSession, int baddr) = NULL; | |
64 | 66 | |
65 | 67 | static const struct _entry_point |
66 | 68 | { |
... | ... | @@ -85,6 +87,8 @@ |
85 | 87 | { (void **) &cmp_text_at, (void *) hllapi_pipe_cmp_text_at, "lib3270_cmp_text_at" }, |
86 | 88 | { (void **) &pfkey, (void *) hllapi_pipe_pfkey, "lib3270_pfkey" }, |
87 | 89 | { (void **) &pakey, (void *) hllapi_pipe_pakey, "lib3270_pakey" }, |
90 | + { (void **) &setcursor, (void *) hllapi_pipe_setcursor, "lib3270_set_cursor_address" }, | |
91 | + { (void **) &getcursor, (void *) hllapi_pipe_getcursor, "lib3270_get_cursor_address" }, | |
88 | 92 | |
89 | 93 | { NULL, NULL } |
90 | 94 | }; |
... | ... | @@ -182,7 +186,6 @@ |
182 | 186 | hModule = LoadLibrary(dllname); |
183 | 187 | rc = GetLastError(); |
184 | 188 | } |
185 | -// hModule = LoadLibraryEx("lib3270.dll.5.0",NULL,LOAD_LIBRARY_SEARCH_DEFAULT_DIRS|LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR); | |
186 | 189 | |
187 | 190 | SetErrorMode(errorMode); |
188 | 191 | |
... | ... | @@ -385,3 +388,16 @@ |
385 | 388 | return *datadir; |
386 | 389 | } |
387 | 390 | |
391 | + __declspec (dllexport) DWORD __stdcall hllapi_setcursor(WORD pos) | |
392 | + { | |
393 | + if(!(setcursor && hSession)) | |
394 | + return EINVAL; | |
395 | + return setcursor(hSession,pos+1); | |
396 | + } | |
397 | + | |
398 | + __declspec (dllexport) DWORD __stdcall hllapi_getcursor() | |
399 | + { | |
400 | + if(!(getcursor && hSession)) | |
401 | + return -EINVAL; | |
402 | + return getcursor(hSession)-1; | |
403 | + } | ... | ... |
src/plugins/remotectl/client.h
src/plugins/remotectl/hllapi.c
... | ... | @@ -41,6 +41,9 @@ |
41 | 41 | static int disconnect_ps(char *buffer, unsigned short *length, unsigned short *rc); |
42 | 42 | static int get_library_revision(char *buffer, unsigned short *length, unsigned short *rc); |
43 | 43 | |
44 | + static int get_cursor_position(char *buffer, unsigned short *length, unsigned short *rc); | |
45 | + static int set_cursor_position(char *buffer, unsigned short *length, unsigned short *rc); | |
46 | + | |
44 | 47 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
45 | 48 | |
46 | 49 | static const struct _hllapi_call |
... | ... | @@ -52,6 +55,8 @@ |
52 | 55 | { HLLAPI_CMD_CONNECTPS, connect_ps }, |
53 | 56 | { HLLAPI_CMD_DISCONNECTPS, disconnect_ps }, |
54 | 57 | { HLLAPI_CMD_GETREVISION, get_library_revision }, |
58 | + { HLLAPI_CMD_QUERYCURSOR, get_cursor_position }, | |
59 | + { HLLAPI_CMD_SETCURSOR, set_cursor_position }, | |
55 | 60 | }; |
56 | 61 | |
57 | 62 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
... | ... | @@ -96,6 +101,18 @@ static int get_library_revision(char *buffer, unsigned short *length, unsigned s |
96 | 101 | return 0; |
97 | 102 | } |
98 | 103 | |
104 | +static int get_cursor_position(char *buffer, unsigned short *length, unsigned short *rc) | |
105 | +{ | |
106 | + *rc = hllapi_getcursor()-1; | |
107 | + return 0; | |
108 | +} | |
109 | + | |
110 | +static int set_cursor_position(char *buffer, unsigned short *length, unsigned short *rc) | |
111 | +{ | |
112 | + *rc = hllapi_setcursor(*rc+1); | |
113 | + return 0; | |
114 | +} | |
115 | + | |
99 | 116 | |
100 | 117 | /* |
101 | 118 | static int cmd_connect_ps(const char *name) | ... | ... |
src/plugins/remotectl/packets.h
... | ... | @@ -26,6 +26,28 @@ |
26 | 26 | * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) |
27 | 27 | * |
28 | 28 | */ |
29 | + | |
30 | + typedef enum _hllapi_packet | |
31 | + { | |
32 | + HLLAPI_PACKET_CONNECT, | |
33 | + HLLAPI_PACKET_DISCONNECT, | |
34 | + HLLAPI_PACKET_GET_PROGRAM_MESSAGE, | |
35 | + HLLAPI_PACKET_GET_TEXT_AT, | |
36 | + HLLAPI_PACKET_SET_TEXT_AT, | |
37 | + HLLAPI_PACKET_CMP_TEXT_AT, | |
38 | + HLLAPI_PACKET_ENTER, | |
39 | + HLLAPI_PACKET_PFKEY, | |
40 | + HLLAPI_PACKET_PAKEY, | |
41 | + HLLAPI_PACKET_SET_CURSOR_POSITION, | |
42 | + HLLAPI_PACKET_GET_CURSOR_POSITION, | |
43 | + HLLAPI_PACKET_INPUT_STRING, | |
44 | + HLLAPI_PACKET_IS_CONNECTED, | |
45 | + HLLAPI_PACKET_SET_CURSOR, | |
46 | + HLLAPI_PACKET_GET_CURSOR, | |
47 | + | |
48 | + HLLAPI_PACKET_INVALID | |
49 | + | |
50 | + } HLLAPI_PACKET; | |
29 | 51 | |
30 | 52 | #pragma pack(1) |
31 | 53 | |
... | ... | @@ -94,6 +116,12 @@ struct hllapi_packet_wait |
94 | 116 | int packet_id; |
95 | 117 | int timeout; |
96 | 118 | }; |
119 | + | |
120 | +struct hllapi_packet_addr | |
121 | +{ | |
122 | + int packet_id; | |
123 | + int addr; | |
124 | +}; | |
97 | 125 | |
98 | 126 | |
99 | 127 | #pragma pack() | ... | ... |
src/plugins/remotectl/pluginmain.c
... | ... | @@ -234,6 +234,16 @@ |
234 | 234 | send_result(source,lib3270_input_string(lib3270_get_default_session_handle(), |
235 | 235 | (unsigned char *) ((struct hllapi_packet_text *) source->buffer)->text)); |
236 | 236 | break; |
237 | + | |
238 | + case HLLAPI_PACKET_SET_CURSOR: | |
239 | + send_result(source,lib3270_set_cursor_address(lib3270_get_default_session_handle(), | |
240 | + ((struct hllapi_packet_addr *) source->buffer)->addr)); | |
241 | + break; | |
242 | + | |
243 | + case HLLAPI_PACKET_GET_CURSOR: | |
244 | + send_result(source,lib3270_get_cursor_address(lib3270_get_default_session_handle())); | |
245 | + break; | |
246 | + | |
237 | 247 | |
238 | 248 | default: |
239 | 249 | send_result(source, EINVAL); | ... | ... |
src/plugins/remotectl/remote.c
... | ... | @@ -281,3 +281,22 @@ |
281 | 281 | |
282 | 282 | return 0; |
283 | 283 | } |
284 | + | |
285 | + int hllapi_pipe_getcursor(void *h) | |
286 | + { | |
287 | + static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_CURSOR }; | |
288 | + struct hllapi_packet_result response; | |
289 | + DWORD cbSize = sizeof(query); | |
290 | + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
291 | + return (LIB3270_MESSAGE) response.rc; | |
292 | + | |
293 | + } | |
294 | + | |
295 | + int hllapi_pipe_setcursor(void *h, int baddr) | |
296 | + { | |
297 | + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, baddr }; | |
298 | + struct hllapi_packet_result response; | |
299 | + DWORD cbSize = sizeof(query); | |
300 | + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL); | |
301 | + return response.rc; | |
302 | + } | ... | ... |