Commit 356c57ec17bf340db7a905f563b6460357b82961

Authored by perry.werneck@gmail.com
1 parent 0459733b

Implementando IPC na extensao rexx para windows

pw3270.cbp
... ... @@ -73,6 +73,7 @@
73 73 <Unit filename="src/include/plugin.mak.in" />
74 74 <Unit filename="src/include/pw3270.h" />
75 75 <Unit filename="src/include/pw3270/hllapi.h" />
  76 + <Unit filename="src/include/pw3270/ipcpackets.h" />
76 77 <Unit filename="src/include/pw3270/plugin.h" />
77 78 <Unit filename="src/include/pw3270/v3270.h" />
78 79 <Unit filename="src/include/rules.mak.in" />
... ... @@ -264,7 +265,6 @@
264 265 <Unit filename="src/plugins/hllapi/hllapi.c">
265 266 <Option compilerVar="CC" />
266 267 </Unit>
267   - <Unit filename="src/plugins/hllapi/packets.h" />
268 268 <Unit filename="src/plugins/hllapi/pipesource.c">
269 269 <Option compilerVar="CC" />
270 270 </Unit>
... ...
src/include/lib3270/log.h
... ... @@ -49,6 +49,10 @@
49 49 #define trace(x, ...) // __VA_ARGS__
50 50  
51 51 #else
  52 +
  53 + #ifdef __cplusplus
  54 + extern "C" {
  55 + #endif
52 56  
53 57 LIB3270_EXPORT void lib3270_set_log_handler(void (*loghandler)(H3270 *, const char *, int, const char *, va_list));
54 58 LIB3270_EXPORT int lib3270_write_log(H3270 *session, const char *module, const char *fmt, ...) LIB3270_GNUC_FORMAT(3,4);
... ... @@ -61,6 +65,10 @@
61 65 #else
62 66 #define trace(x, ...) // __VA_ARGS__
63 67 #endif
  68 +
  69 + #ifdef __cplusplus
  70 + }
  71 + #endif
64 72  
65 73 #endif // ANDROID
66 74  
... ...
src/include/pw3270/ipcpackets.h 0 → 100644
... ... @@ -0,0 +1,153 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 + * Place, Suite 330, Boston, MA, 02111-1307, USA
  20 + *
  21 + * Este programa está nomeado como ipcpackets.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  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_OFFSET,
  36 + HLLAPI_PACKET_GET_TEXT_AT,
  37 + HLLAPI_PACKET_SET_TEXT_AT,
  38 + HLLAPI_PACKET_CMP_TEXT_AT,
  39 + HLLAPI_PACKET_ENTER,
  40 + HLLAPI_PACKET_PFKEY,
  41 + HLLAPI_PACKET_PAKEY,
  42 + HLLAPI_PACKET_SET_CURSOR_POSITION,
  43 + HLLAPI_PACKET_GET_CURSOR_POSITION,
  44 + HLLAPI_PACKET_INPUT_STRING,
  45 + HLLAPI_PACKET_IS_CONNECTED,
  46 + HLLAPI_PACKET_SET_CURSOR,
  47 + HLLAPI_PACKET_GET_CURSOR,
  48 + HLLAPI_PACKET_EMULATE_INPUT,
  49 + HLLAPI_PACKET_ERASE_EOF,
  50 + HLLAPI_PACKET_PRINT,
  51 +
  52 + HLLAPI_PACKET_INVALID
  53 +
  54 + } HLLAPI_PACKET;
  55 +
  56 +#pragma pack(1)
  57 +
  58 +struct hllapi_packet_result
  59 +{
  60 + int rc;
  61 +};
  62 +
  63 +struct hllapi_packet_text_result
  64 +{
  65 + int rc;
  66 + char text[1];
  67 +};
  68 +
  69 +struct hllapi_packet_query
  70 +{
  71 + unsigned char packet_id;
  72 +};
  73 +
  74 +struct hllapi_packet_connect
  75 +{
  76 + unsigned char packet_id;
  77 + unsigned char wait;
  78 + char hostname[1];
  79 +};
  80 +
  81 +struct hllapi_packet_keycode
  82 +{
  83 + unsigned char packet_id;
  84 + unsigned short keycode;
  85 +};
  86 +
  87 +struct hllapi_packet_cursor
  88 +{
  89 + unsigned char packet_id;
  90 + unsigned short row;
  91 + unsigned short col;
  92 +};
  93 +
  94 +struct hllapi_packet_text
  95 +{
  96 + unsigned char packet_id;
  97 + char text[1];
  98 +};
  99 +
  100 +struct hllapi_packet_at
  101 +{
  102 + unsigned char packet_id;
  103 + unsigned short row;
  104 + unsigned short col;
  105 + unsigned short len;
  106 +};
  107 +
  108 +struct hllapi_packet_text_at
  109 +{
  110 + unsigned char packet_id;
  111 + unsigned short row;
  112 + unsigned short col;
  113 + char text[1];
  114 +};
  115 +
  116 +struct hllapi_packet_query_at
  117 +{
  118 + unsigned char packet_id;
  119 + unsigned short row;
  120 + unsigned short col;
  121 + unsigned short len;
  122 +};
  123 +
  124 +struct hllapi_packet_wait
  125 +{
  126 + unsigned char packet_id;
  127 + int timeout;
  128 +};
  129 +
  130 +struct hllapi_packet_addr
  131 +{
  132 + unsigned char packet_id;
  133 + unsigned short addr;
  134 +};
  135 +
  136 +struct hllapi_packet_query_offset
  137 +{
  138 + unsigned char packet_id;
  139 + unsigned short addr;
  140 + unsigned short len;
  141 +};
  142 +
  143 +struct hllapi_packet_emulate_input
  144 +{
  145 + unsigned char packet_id;
  146 + unsigned short len;
  147 + unsigned char pasting;
  148 + char text[1];
  149 +};
  150 +
  151 +
  152 +#pragma pack()
  153 +
... ...
src/plugins/hllapi/packets.h
... ... @@ -1,153 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
19   - * Place, Suite 330, Boston, MA, 02111-1307, USA
20   - *
21   - * Este programa está nomeado como packets.h e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - *
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_OFFSET,
36   - HLLAPI_PACKET_GET_TEXT_AT,
37   - HLLAPI_PACKET_SET_TEXT_AT,
38   - HLLAPI_PACKET_CMP_TEXT_AT,
39   - HLLAPI_PACKET_ENTER,
40   - HLLAPI_PACKET_PFKEY,
41   - HLLAPI_PACKET_PAKEY,
42   - HLLAPI_PACKET_SET_CURSOR_POSITION,
43   - HLLAPI_PACKET_GET_CURSOR_POSITION,
44   - HLLAPI_PACKET_INPUT_STRING,
45   - HLLAPI_PACKET_IS_CONNECTED,
46   - HLLAPI_PACKET_SET_CURSOR,
47   - HLLAPI_PACKET_GET_CURSOR,
48   - HLLAPI_PACKET_EMULATE_INPUT,
49   - HLLAPI_PACKET_ERASE_EOF,
50   - HLLAPI_PACKET_PRINT,
51   -
52   - HLLAPI_PACKET_INVALID
53   -
54   - } HLLAPI_PACKET;
55   -
56   -#pragma pack(1)
57   -
58   -struct hllapi_packet_result
59   -{
60   - int rc;
61   -};
62   -
63   -struct hllapi_packet_text_result
64   -{
65   - int rc;
66   - char text[1];
67   -};
68   -
69   -struct hllapi_packet_query
70   -{
71   - unsigned char packet_id;
72   -};
73   -
74   -struct hllapi_packet_connect
75   -{
76   - unsigned char packet_id;
77   - unsigned char wait;
78   - char hostname[1];
79   -};
80   -
81   -struct hllapi_packet_keycode
82   -{
83   - unsigned char packet_id;
84   - unsigned short keycode;
85   -};
86   -
87   -struct hllapi_packet_cursor
88   -{
89   - unsigned char packet_id;
90   - unsigned short row;
91   - unsigned short col;
92   -};
93   -
94   -struct hllapi_packet_text
95   -{
96   - unsigned char packet_id;
97   - char text[1];
98   -};
99   -
100   -struct hllapi_packet_at
101   -{
102   - unsigned char packet_id;
103   - unsigned short row;
104   - unsigned short col;
105   - unsigned short len;
106   -};
107   -
108   -struct hllapi_packet_text_at
109   -{
110   - unsigned char packet_id;
111   - unsigned short row;
112   - unsigned short col;
113   - char text[1];
114   -};
115   -
116   -struct hllapi_packet_query_at
117   -{
118   - unsigned char packet_id;
119   - unsigned short row;
120   - unsigned short col;
121   - unsigned short len;
122   -};
123   -
124   -struct hllapi_packet_wait
125   -{
126   - unsigned char packet_id;
127   - int timeout;
128   -};
129   -
130   -struct hllapi_packet_addr
131   -{
132   - unsigned char packet_id;
133   - unsigned short addr;
134   -};
135   -
136   -struct hllapi_packet_query_offset
137   -{
138   - unsigned char packet_id;
139   - unsigned short addr;
140   - unsigned short len;
141   -};
142   -
143   -struct hllapi_packet_emulate_input
144   -{
145   - unsigned char packet_id;
146   - unsigned short len;
147   - unsigned char pasting;
148   - char text[1];
149   -};
150   -
151   -
152   -#pragma pack()
153   -
src/plugins/hllapi/pluginmain.c
... ... @@ -32,7 +32,7 @@
32 32 */
33 33  
34 34 #include "server.h"
35   - #include "packets.h"
  35 + #include <pw3270/ipcpackets.h>
36 36 #include <lib3270/actions.h>
37 37  
38 38 /*--[ Defines ]--------------------------------------------------------------------------------------*/
... ...
src/plugins/hllapi/remote.c
... ... @@ -26,347 +26,347 @@
26 26 * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27 27 *
28 28 */
29   -
  29 +
30 30 #include <lib3270.h>
31 31 #include <malloc.h>
32 32 #include <string.h>
33 33 #include <errno.h>
34   - #include <stdio.h>
  34 + #include <stdio.h>
35 35 #include <time.h>
36   - #include <lib3270/log.h>
37   -
38   - #include "client.h"
39   - #include "packets.h"
40   -
  36 + #include <lib3270/log.h>
  37 + #include <pw3270/ipcpackets.h>
  38 +
  39 + #include "client.h"
  40 +
41 41 /*--[ Globals ]--------------------------------------------------------------------------------------*/
42   -
  42 +
43 43 /*--[ Implement ]------------------------------------------------------------------------------------*/
44   -
45   - void * hllapi_pipe_init(const char *id)
46   - {
  44 +
  45 + void * hllapi_pipe_init(const char *id)
  46 + {
47 47 HANDLE hPipe = INVALID_HANDLE_VALUE;
48 48 static DWORD dwMode = PIPE_READMODE_MESSAGE;
49   - char buffer[4096];
50   - char * name = strdup(id);
51   - char * ptr;
52   -
53   - trace("%s(%s)",__FUNCTION__,id);
54   -
55   - for(ptr=name;*ptr;ptr++)
56   - {
57   - if(*ptr == ':')
58   - *ptr = '_';
59   - }
60   -
61   - snprintf(buffer,4095,"\\\\.\\pipe\\%s",name);
62   -
63   - free(name);
64   -
65   - trace("Opening \"%s\"",buffer);
66   -
67   - if(!WaitNamedPipe(buffer,NMPWAIT_USE_DEFAULT_WAIT))
68   - {
69   - trace("%s: Pipe not found",__FUNCTION__);
70   - errno = ENOENT;
  49 + char buffer[4096];
  50 + char * name = strdup(id);
  51 + char * ptr;
  52 +
  53 + trace("%s(%s)",__FUNCTION__,id);
  54 +
  55 + for(ptr=name;*ptr;ptr++)
  56 + {
  57 + if(*ptr == ':')
  58 + *ptr = '_';
  59 + }
  60 +
  61 + snprintf(buffer,4095,"\\\\.\\pipe\\%s",name);
  62 +
  63 + free(name);
  64 +
  65 + trace("Opening \"%s\"",buffer);
  66 +
  67 + if(!WaitNamedPipe(buffer,NMPWAIT_USE_DEFAULT_WAIT))
  68 + {
  69 + trace("%s: Pipe not found",__FUNCTION__);
  70 + errno = ENOENT;
71 71 return NULL;
72 72 }
73 73  
74 74 hPipe = CreateFile(buffer,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
75 75  
76   - if(hPipe == INVALID_HANDLE_VALUE)
77   - {
78   - errno = GetLastError();
  76 + if(hPipe == INVALID_HANDLE_VALUE)
  77 + {
  78 + errno = GetLastError();
79 79 return NULL;
80 80 }
81 81  
82 82 if(!SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL))
83   - {
84   - errno = GetLastError();
  83 + {
  84 + errno = GetLastError();
85 85 return NULL;
86   - }
87   -
88   - trace("hPipe=%p",(void *) hPipe);
89   - return hPipe;
90   - }
91   -
92   - void hllapi_pipe_deinit(void *h)
93   - {
94   - trace("%s(%p)",__FUNCTION__,h);
95   -
96   - if(!h)
97   - return;
98   -
  86 + }
  87 +
  88 + trace("hPipe=%p",(void *) hPipe);
  89 + return hPipe;
  90 + }
  91 +
  92 + void hllapi_pipe_deinit(void *h)
  93 + {
  94 + trace("%s(%p)",__FUNCTION__,h);
  95 +
  96 + if(!h)
  97 + return;
  98 +
99 99 CloseHandle((HANDLE) h);
100   - }
101   -
102   - const char * hllapi_pipe_get_revision(void)
103   - {
104   - return PACKAGE_REVISION;
105   - }
106   -
107   - int hllapi_pipe_connect(void *h, const char *n, int wait)
108   - {
109   - struct hllapi_packet_connect * pkt;
110   - struct hllapi_packet_result response;
111   - DWORD cbSize;
112   -
113   - if(!n)
114   - n = "";
115   -
116   - cbSize = sizeof(struct hllapi_packet_connect)+strlen(n);
117   - pkt = malloc(cbSize);
118   -
119   - pkt->packet_id = HLLAPI_PACKET_CONNECT;
120   - pkt->wait = (unsigned char) wait;
121   - strcpy(pkt->hostname,n);
122   -
123   - trace("Sending %s",pkt->hostname);
124   -
125   - if(!TransactNamedPipe((HANDLE) h,(LPVOID) pkt, cbSize, &response, sizeof(response), &cbSize,NULL))
126   - {
127   - errno = GetLastError();
128   - response.rc = -1;
  100 + }
  101 +
  102 + const char * hllapi_pipe_get_revision(void)
  103 + {
  104 + return PACKAGE_REVISION;
  105 + }
  106 +
  107 + int hllapi_pipe_connect(void *h, const char *n, int wait)
  108 + {
  109 + struct hllapi_packet_connect * pkt;
  110 + struct hllapi_packet_result response;
  111 + DWORD cbSize;
  112 +
  113 + if(!n)
  114 + n = "";
  115 +
  116 + cbSize = sizeof(struct hllapi_packet_connect)+strlen(n);
  117 + pkt = malloc(cbSize);
  118 +
  119 + pkt->packet_id = HLLAPI_PACKET_CONNECT;
  120 + pkt->wait = (unsigned char) wait;
  121 + strcpy(pkt->hostname,n);
  122 +
  123 + trace("Sending %s",pkt->hostname);
  124 +
  125 + if(!TransactNamedPipe((HANDLE) h,(LPVOID) pkt, cbSize, &response, sizeof(response), &cbSize,NULL))
  126 + {
  127 + errno = GetLastError();
  128 + response.rc = -1;
  129 + }
  130 +
  131 + free(pkt);
  132 +
  133 + return response.rc;
  134 + }
  135 +
  136 + void hllapi_pipe_disconnect(void *h)
  137 + {
  138 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_DISCONNECT };
  139 + struct hllapi_packet_result response;
  140 + DWORD cbSize = sizeof(query);
  141 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  142 + }
  143 +
  144 + LIB3270_MESSAGE hllapi_pipe_get_message(void *h)
  145 + {
  146 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_PROGRAM_MESSAGE };
  147 + struct hllapi_packet_result response;
  148 + DWORD cbSize = sizeof(query);
  149 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  150 + return (LIB3270_MESSAGE) response.rc;
  151 + }
  152 +
  153 + char * hllapi_pipe_get_text_at(void *h, int row, int col, int len)
  154 + {
  155 + struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, row, col, len };
  156 + struct hllapi_packet_text * response;
  157 + DWORD cbSize = sizeof(struct hllapi_packet_text)+len;
  158 + char * text = NULL;
  159 +
  160 + response = malloc(cbSize+2);
  161 + memset(response,0,cbSize+2);
  162 +
  163 + if(!TransactNamedPipe((HANDLE) h,(LPVOID) &query, sizeof(struct hllapi_packet_query_at), &response, cbSize, &cbSize,NULL))
  164 + return NULL;
  165 +
  166 + if(response->packet_id)
  167 + errno = response->packet_id;
  168 + else
  169 + text = strdup(response->text);
  170 +
  171 + free(response);
  172 + return text;
  173 + }
  174 +
  175 + int hllapi_pipe_enter(void *h)
  176 + {
  177 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_ENTER };
  178 + struct hllapi_packet_result response;
  179 + DWORD cbSize = sizeof(query);
  180 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  181 + return response.rc;
  182 + }
  183 +
  184 + int hllapi_pipe_erase_eof(void *h)
  185 + {
  186 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_ERASE_EOF };
  187 + struct hllapi_packet_result response;
  188 + DWORD cbSize = sizeof(query);
  189 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  190 + return response.rc;
  191 + }
  192 +
  193 +
  194 + int hllapi_pipe_set_text_at(void *h, int row, int col, const unsigned char *str)
  195 + {
  196 + struct hllapi_packet_text_at * query;
  197 + struct hllapi_packet_result response;
  198 + DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen((const char *) str);
  199 +
  200 + query = malloc(cbSize);
  201 + query->packet_id = HLLAPI_PACKET_SET_TEXT_AT;
  202 + query->row = row;
  203 + query->col = col;
  204 + strcpy(query->text,(const char *) str);
  205 +
  206 + TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
  207 +
  208 + free(query);
  209 +
  210 + return response.rc;
  211 + }
  212 +
  213 + int hllapi_pipe_cmp_text_at(void *h, int row, int col, const char *text)
  214 + {
  215 + struct hllapi_packet_text_at * query;
  216 + struct hllapi_packet_result response;
  217 + DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen(text);
  218 +
  219 + query = malloc(cbSize);
  220 + query->packet_id = HLLAPI_PACKET_CMP_TEXT_AT;
  221 + query->row = row;
  222 + query->col = col;
  223 + strcpy(query->text,text);
  224 +
  225 + TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
  226 +
  227 + free(query);
  228 +
  229 + return response.rc;
  230 + }
  231 +
  232 + int hllapi_pipe_pfkey(void *h, int key)
  233 + {
  234 + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PFKEY, key };
  235 + struct hllapi_packet_result response;
  236 + DWORD cbSize = sizeof(query);
  237 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  238 + return response.rc;
  239 + }
  240 +
  241 + int hllapi_pipe_pakey(void *h, int key)
  242 + {
  243 + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PAKEY, key };
  244 + struct hllapi_packet_result response;
  245 + DWORD cbSize = sizeof(query);
  246 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  247 + return response.rc;
  248 + }
  249 +
  250 + void hllapi_pipe_release_memory(void *p)
  251 + {
  252 + free(p);
  253 + }
  254 +
  255 + int hllapi_pipe_wait_for_ready(void *h, int seconds)
  256 + {
  257 + time_t end = time(0)+seconds;
  258 +
  259 + while(time(0) < end)
  260 + {
  261 + if(!hllapi_pipe_is_connected(h))
  262 + return ENOTCONN;
  263 +
  264 + if(hllapi_pipe_get_message(h) == 0)
  265 + return 0;
  266 + Sleep(250);
129 267 }
130   -
131   - free(pkt);
132   -
133   - return response.rc;
  268 +
  269 + return ETIMEDOUT;
  270 + }
  271 +
  272 + int hllapi_pipe_is_connected(void *h)
  273 + {
  274 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_CONNECTED };
  275 + struct hllapi_packet_result response;
  276 + DWORD cbSize = sizeof(query);
  277 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  278 + return (LIB3270_MESSAGE) response.rc;
  279 + }
  280 +
  281 + int hllapi_pipe_sleep(void *h, int seconds)
  282 + {
  283 + time_t end = time(0)+seconds;
  284 +
  285 + while(time(0) < end)
  286 + {
  287 + if(!hllapi_pipe_is_connected(h))
  288 + return ENOTCONN;
  289 + Sleep(500);
  290 + }
  291 +
  292 + return 0;
134 293 }
135   -
136   - void hllapi_pipe_disconnect(void *h)
137   - {
138   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_DISCONNECT };
139   - struct hllapi_packet_result response;
140   - DWORD cbSize = sizeof(query);
141   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
142   - }
143   -
144   - LIB3270_MESSAGE hllapi_pipe_get_message(void *h)
145   - {
146   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_PROGRAM_MESSAGE };
147   - struct hllapi_packet_result response;
148   - DWORD cbSize = sizeof(query);
149   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
150   - return (LIB3270_MESSAGE) response.rc;
151   - }
152   -
153   - char * hllapi_pipe_get_text_at(void *h, int row, int col, int len)
154   - {
155   - struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, };
156   - struct hllapi_packet_text * response;
157   - DWORD cbSize = sizeof(struct hllapi_packet_text)+len;
158   - char * text = NULL;
159   -
160   - response = malloc(cbSize+2);
161   - memset(response,0,cbSize+2);
162   -
163   - if(!TransactNamedPipe((HANDLE) h,(LPVOID) &query, sizeof(struct hllapi_packet_query_at), &response, cbSize, &cbSize,NULL))
164   - return NULL;
165   -
166   - if(response->packet_id)
167   - errno = response->packet_id;
168   - else
169   - text = strdup(response->text);
170   -
171   - free(response);
172   - return text;
173   - }
174   -
175   - int hllapi_pipe_enter(void *h)
176   - {
177   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_ENTER };
178   - struct hllapi_packet_result response;
179   - DWORD cbSize = sizeof(query);
180   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
181   - return response.rc;
182   - }
183   -
184   - int hllapi_pipe_erase_eof(void *h)
185   - {
186   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_ERASE_EOF };
187   - struct hllapi_packet_result response;
188   - DWORD cbSize = sizeof(query);
189   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
190   - return response.rc;
191   - }
192   -
193   -
194   - int hllapi_pipe_set_text_at(void *h, int row, int col, const unsigned char *str)
195   - {
196   - struct hllapi_packet_text_at * query;
197   - struct hllapi_packet_result response;
198   - DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen((const char *) str);
199   -
200   - query = malloc(cbSize);
201   - query->packet_id = HLLAPI_PACKET_SET_TEXT_AT;
202   - query->row = row;
203   - query->col = col;
204   - strcpy(query->text,(const char *) str);
205   -
206   - TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
207   -
208   - free(query);
209   -
210   - return response.rc;
211   - }
212   -
213   - int hllapi_pipe_cmp_text_at(void *h, int row, int col, const char *text)
214   - {
215   - struct hllapi_packet_text_at * query;
216   - struct hllapi_packet_result response;
217   - DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen(text);
218   -
219   - query = malloc(cbSize);
220   - query->packet_id = HLLAPI_PACKET_CMP_TEXT_AT;
221   - query->row = row;
222   - query->col = col;
223   - strcpy(query->text,text);
224   -
225   - TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
226   -
227   - free(query);
228   -
229   - return response.rc;
230   - }
231   -
232   - int hllapi_pipe_pfkey(void *h, int key)
233   - {
234   - struct hllapi_packet_keycode query = { HLLAPI_PACKET_PFKEY, key };
235   - struct hllapi_packet_result response;
236   - DWORD cbSize = sizeof(query);
237   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
238   - return response.rc;
239   - }
240   -
241   - int hllapi_pipe_pakey(void *h, int key)
242   - {
243   - struct hllapi_packet_keycode query = { HLLAPI_PACKET_PAKEY, key };
244   - struct hllapi_packet_result response;
245   - DWORD cbSize = sizeof(query);
246   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
247   - return response.rc;
248   - }
249   -
250   - void hllapi_pipe_release_memory(void *p)
251   - {
252   - free(p);
253   - }
254   -
255   - int hllapi_pipe_wait_for_ready(void *h, int seconds)
256   - {
257   - time_t end = time(0)+seconds;
258   -
259   - while(time(0) < end)
260   - {
261   - if(!hllapi_pipe_is_connected(h))
262   - return ENOTCONN;
263   -
264   - if(hllapi_pipe_get_message(h) == 0)
265   - return 0;
266   - Sleep(250);
267   - }
268   -
269   - return ETIMEDOUT;
270   - }
271   -
272   - int hllapi_pipe_is_connected(void *h)
273   - {
274   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_CONNECTED };
275   - struct hllapi_packet_result response;
276   - DWORD cbSize = sizeof(query);
277   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
278   - return (LIB3270_MESSAGE) response.rc;
279   - }
280   -
281   - int hllapi_pipe_sleep(void *h, int seconds)
282   - {
283   - time_t end = time(0)+seconds;
284   -
285   - while(time(0) < end)
286   - {
287   - if(!hllapi_pipe_is_connected(h))
288   - return ENOTCONN;
289   - Sleep(500);
290   - }
291   -
292   - return 0;
293   - }
294 294  
295 295 int hllapi_pipe_getcursor(void *h)
296 296 {
297   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_CURSOR };
298   - struct hllapi_packet_result response;
299   - DWORD cbSize = sizeof(query);
300   -
301   - trace("%s",__FUNCTION__);
302   -
303   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
304   - return (LIB3270_MESSAGE) response.rc;
  297 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_GET_CURSOR };
  298 + struct hllapi_packet_result response;
  299 + DWORD cbSize = sizeof(query);
  300 +
  301 + trace("%s",__FUNCTION__);
  302 +
  303 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  304 + return (LIB3270_MESSAGE) response.rc;
305 305  
306 306 }
307 307  
308 308 int hllapi_pipe_setcursor(void *h, int baddr)
309 309 {
310   - struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, baddr };
311   - struct hllapi_packet_result response;
312   - DWORD cbSize = sizeof(query);
313   -
314   - trace("%s(%d)",__FUNCTION__,query.addr);
315   -
316   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
317   - return response.rc;
  310 + struct hllapi_packet_addr query = { HLLAPI_PACKET_SET_CURSOR, baddr };
  311 + struct hllapi_packet_result response;
  312 + DWORD cbSize = sizeof(query);
  313 +
  314 + trace("%s(%d)",__FUNCTION__,query.addr);
  315 +
  316 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  317 + return response.rc;
318 318 }
319   -
320   - char * hllapi_pipe_get_text(void *h, int offset, int len)
321   - {
322   - struct hllapi_packet_query_offset query = { HLLAPI_PACKET_GET_TEXT_AT_OFFSET, offset, len };
323   - struct hllapi_packet_text * response;
324   - DWORD cbSize = sizeof(struct hllapi_packet_text)+len;
325   - char * text = NULL;
326   -
327   - trace("cbSize=%d",(int) cbSize);
328   -
329   - response = malloc(cbSize+2);
330   - memset(response,0,cbSize+2);
331   -
332   - if(!TransactNamedPipe((HANDLE) h,(LPVOID) &query, sizeof(query), response, cbSize, &cbSize,NULL))
333   - return NULL;
334   -
335   - trace("rc=%d",response->packet_id);
336   -
337   - if(response->packet_id)
338   - errno = response->packet_id;
339   - else
340   - text = strdup(response->text);
341   -
342   - free(response);
343   - return text;
  319 +
  320 + char * hllapi_pipe_get_text(void *h, int offset, int len)
  321 + {
  322 + struct hllapi_packet_query_offset query = { HLLAPI_PACKET_GET_TEXT_AT_OFFSET, offset, len };
  323 + struct hllapi_packet_text * response;
  324 + DWORD cbSize = sizeof(struct hllapi_packet_text)+len;
  325 + char * text = NULL;
  326 +
  327 + trace("cbSize=%d",(int) cbSize);
  328 +
  329 + response = malloc(cbSize+2);
  330 + memset(response,0,cbSize+2);
  331 +
  332 + if(!TransactNamedPipe((HANDLE) h,(LPVOID) &query, sizeof(query), response, cbSize, &cbSize,NULL))
  333 + return NULL;
  334 +
  335 + trace("rc=%d",response->packet_id);
  336 +
  337 + if(response->packet_id)
  338 + errno = response->packet_id;
  339 + else
  340 + text = strdup(response->text);
  341 +
  342 + free(response);
  343 + return text;
344 344 }
345 345  
346 346 int hllapi_pipe_emulate_input(void *h, const char *text, int len, int pasting)
347 347 {
348   - struct hllapi_packet_emulate_input * query;
349   - struct hllapi_packet_result response;
350   - DWORD cbSize = sizeof(struct hllapi_packet_emulate_input)+strlen(text);
351   -
352   - query = malloc(cbSize);
353   - query->packet_id = HLLAPI_PACKET_EMULATE_INPUT;
354   - query->len = len;
355   - query->pasting = pasting;
356   - strcpy(query->text,text);
357   -
358   - TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
359   -
360   - free(query);
361   -
362   - return response.rc;
  348 + struct hllapi_packet_emulate_input * query;
  349 + struct hllapi_packet_result response;
  350 + DWORD cbSize = sizeof(struct hllapi_packet_emulate_input)+strlen(text);
  351 +
  352 + query = malloc(cbSize);
  353 + query->packet_id = HLLAPI_PACKET_EMULATE_INPUT;
  354 + query->len = len;
  355 + query->pasting = pasting;
  356 + strcpy(query->text,text);
  357 +
  358 + TransactNamedPipe((HANDLE) h,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
  359 +
  360 + free(query);
  361 +
  362 + return response.rc;
363 363 }
364 364  
365 365 int hllapi_pipe_print(void *h)
366 366 {
367   - static const struct hllapi_packet_query query = { HLLAPI_PACKET_PRINT };
368   - struct hllapi_packet_result response;
369   - DWORD cbSize = sizeof(query);
370   - TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
371   - return response.rc;
  367 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_PRINT };
  368 + struct hllapi_packet_result response;
  369 + DWORD cbSize = sizeof(query);
  370 + TransactNamedPipe((HANDLE) h,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  371 + return response.rc;
372 372 }
... ...
src/plugins/rx3270/remote.cc
... ... @@ -34,6 +34,11 @@
34 34 #include <dbus/dbus.h>
35 35 #endif // HAVE_DBUS
36 36  
  37 +#if defined(WIN32)
  38 + #include <pw3270/ipcpackets.h>
  39 +#endif // WIN32
  40 +
  41 + #include <time.h>
37 42 #include <string.h>
38 43  
39 44 /*--[ Class definition ]-----------------------------------------------------------------------------*/
... ... @@ -70,7 +75,10 @@
70 75 private:
71 76 #if defined(WIN32)
72 77  
  78 + HANDLE hPipe;
  79 +
73 80 #elif defined(HAVE_DBUS)
  81 +
74 82 DBusConnection * conn;
75 83 char * dest;
76 84 char * path;
... ... @@ -79,6 +87,7 @@
79 87 DBusMessage * call(DBusMessage *msg);
80 88 char * query_string(const char *method);
81 89 int query_intval(const char *method);
  90 +
82 91 #endif
83 92  
84 93  
... ... @@ -89,8 +98,6 @@
89 98 #if defined(HAVE_DBUS)
90 99 static const char * prefix_dest = "br.com.bb.";
91 100 static const char * prefix_path = "/br/com/bb/";
92   -#else
93   - #error AQUI
94 101 #endif // HAVE_DBUS
95 102  
96 103 /*--[ Implement ]------------------------------------------------------------------------------------*/
... ... @@ -120,6 +127,46 @@ rx3270 * rx3270::create_remote(const char *name)
120 127 remote::remote(const char *name)
121 128 {
122 129 #if defined(WIN32)
  130 + static DWORD dwMode = PIPE_READMODE_MESSAGE;
  131 + char buffer[4096];
  132 + char * str = strdup(name);
  133 + char * ptr;
  134 +
  135 + hPipe = INVALID_HANDLE_VALUE;
  136 +
  137 + for(ptr=str;*ptr;ptr++)
  138 + {
  139 + if(*ptr == ':')
  140 + *ptr = '_';
  141 + }
  142 +
  143 + snprintf(buffer,4095,"\\\\.\\pipe\\%s",str);
  144 +
  145 + free(str);
  146 +
  147 + if(!WaitNamedPipe(buffer,NMPWAIT_USE_DEFAULT_WAIT))
  148 + {
  149 + log("%s","Invalid service instance");
  150 + return;
  151 + }
  152 +
  153 + hPipe = CreateFile(buffer,GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,0,NULL);
  154 +
  155 + if(hPipe == INVALID_HANDLE_VALUE)
  156 + {
  157 + log("%s","Can´t create service pipe");
  158 + return;
  159 + }
  160 +
  161 + if(!SetNamedPipeHandleState(hPipe,&dwMode,NULL,NULL))
  162 + {
  163 + log("%s","Can´t set pipe state");
  164 + CloseHandle(hPipe);
  165 + hPipe = INVALID_HANDLE_VALUE;
  166 + return;
  167 + }
  168 +
  169 + // Connected
123 170  
124 171 #elif defined(HAVE_DBUS)
125 172 DBusError err;
... ... @@ -209,6 +256,9 @@ remote::~remote()
209 256 {
210 257 #if defined(WIN32)
211 258  
  259 + if(hPipe != INVALID_HANDLE_VALUE)
  260 + CloseHandle(hPipe);
  261 +
212 262 #elif defined(HAVE_DBUS)
213 263  
214 264 free(dest);
... ... @@ -303,8 +353,7 @@ char * remote::get_revision(void)
303 353 {
304 354 #if defined(WIN32)
305 355  
306   - return NULL;
307   -
  356 + return strdup(PACKAGE_REVISION);
308 357  
309 358 #elif defined(HAVE_DBUS)
310 359  
... ... @@ -323,6 +372,11 @@ LIB3270_CSTATE remote::get_cstate(void)
323 372 {
324 373 #if defined(WIN32)
325 374  
  375 + if(hPipe != INVALID_HANDLE_VALUE)
  376 + {
  377 +
  378 + }
  379 +
326 380 return (LIB3270_CSTATE) -1;
327 381  
328 382 #elif defined(HAVE_DBUS)
... ... @@ -341,6 +395,16 @@ int remote::disconnect(void)
341 395 {
342 396 #if defined(WIN32)
343 397  
  398 + if(hPipe != INVALID_HANDLE_VALUE)
  399 + {
  400 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_DISCONNECT };
  401 + struct hllapi_packet_result response;
  402 + DWORD cbSize = sizeof(query);
  403 + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  404 + return 0;
  405 + }
  406 + return -1;
  407 +
344 408 #elif defined(HAVE_DBUS)
345 409  
346 410 return query_intval("disconnect");
... ... @@ -356,6 +420,32 @@ int remote::disconnect(void)
356 420 int remote::connect(const char *uri, bool wait)
357 421 {
358 422 #if defined(WIN32)
  423 + if(hPipe != INVALID_HANDLE_VALUE)
  424 + {
  425 + struct hllapi_packet_connect * pkt;
  426 + struct hllapi_packet_result response;
  427 + DWORD cbSize;
  428 +
  429 + cbSize = sizeof(struct hllapi_packet_connect)+strlen(uri);
  430 + pkt = (struct hllapi_packet_connect *) malloc(cbSize);
  431 +
  432 + pkt->packet_id = HLLAPI_PACKET_CONNECT;
  433 + pkt->wait = (unsigned char) wait;
  434 + strcpy(pkt->hostname,uri);
  435 +
  436 + trace("Sending %s",pkt->hostname);
  437 +
  438 + if(!TransactNamedPipe(hPipe,(LPVOID) pkt, cbSize, &response, sizeof(response), &cbSize,NULL))
  439 + {
  440 + errno = GetLastError();
  441 + response.rc = -1;
  442 + }
  443 +
  444 + free(pkt);
  445 +
  446 + return response.rc;
  447 +
  448 + }
359 449  
360 450 #elif defined(HAVE_DBUS)
361 451  
... ... @@ -368,6 +458,15 @@ bool remote::is_connected(void)
368 458 {
369 459 #if defined(WIN32)
370 460  
  461 + if(hPipe != INVALID_HANDLE_VALUE)
  462 + {
  463 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_IS_CONNECTED };
  464 + struct hllapi_packet_result response;
  465 + DWORD cbSize = sizeof(query);
  466 + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  467 + return response.rc != 0;
  468 + }
  469 +
371 470 #elif defined(HAVE_DBUS)
372 471  
373 472 #endif
... ... @@ -379,6 +478,11 @@ bool remote::is_ready(void)
379 478 {
380 479 #if defined(WIN32)
381 480  
  481 + if(hPipe != INVALID_HANDLE_VALUE)
  482 + {
  483 +
  484 + }
  485 +
382 486 #elif defined(HAVE_DBUS)
383 487  
384 488 #endif
... ... @@ -390,6 +494,8 @@ int remote::iterate(bool wait)
390 494 {
391 495 #if defined(WIN32)
392 496  
  497 + return 0;
  498 +
393 499 #elif defined(HAVE_DBUS)
394 500  
395 501 return 0;
... ... @@ -403,9 +509,28 @@ int remote::wait(int seconds)
403 509 {
404 510 #if defined(WIN32)
405 511  
  512 + time_t end = time(0)+seconds;
  513 +
  514 + while(time(0) < end)
  515 + {
  516 + if(!is_connected())
  517 + return ENOTCONN;
  518 + Sleep(500);
  519 + }
  520 +
  521 + return 0;
  522 +
406 523 #elif defined(HAVE_DBUS)
407 524  
408   - sleep(seconds);
  525 + time_t end = time(0)+seconds;
  526 +
  527 + while(time(0) < end)
  528 + {
  529 + if(!is_connected())
  530 + return ENOTCONN;
  531 + usleep(500);
  532 + }
  533 +
409 534 return 0;
410 535  
411 536 #endif
... ... @@ -417,6 +542,26 @@ int remote::wait_for_ready(int seconds)
417 542 {
418 543 #if defined(WIN32)
419 544  
  545 + if(hPipe != INVALID_HANDLE_VALUE)
  546 + {
  547 + time_t end = time(0)+seconds;
  548 +
  549 + while(time(0) < end)
  550 + {
  551 + if(!is_connected())
  552 + return ENOTCONN;
  553 +
  554 + if(is_ready())
  555 + return 0;
  556 +
  557 + Sleep(250);
  558 + }
  559 +
  560 + return ETIMEDOUT;
  561 +
  562 + }
  563 +
  564 +
420 565 #elif defined(HAVE_DBUS)
421 566  
422 567 #endif
... ... @@ -428,6 +573,29 @@ char * remote::get_text_at(int row, int col, size_t sz)
428 573 {
429 574 #if defined(WIN32)
430 575  
  576 + if(hPipe != INVALID_HANDLE_VALUE)
  577 + {
  578 + struct hllapi_packet_query_at query = { HLLAPI_PACKET_GET_TEXT_AT, (unsigned short) row, (unsigned short) col, (unsigned short) sz };
  579 + struct hllapi_packet_text * response;
  580 + DWORD cbSize = sizeof(struct hllapi_packet_text)+sz;
  581 + char * text = NULL;
  582 +
  583 + response = (struct hllapi_packet_text *) malloc(cbSize+2);
  584 + memset(response,0,cbSize+2);
  585 +
  586 + if(!TransactNamedPipe(hPipe,(LPVOID) &query, sizeof(struct hllapi_packet_query_at), &response, cbSize, &cbSize,NULL))
  587 + return NULL;
  588 +
  589 + if(response->packet_id)
  590 + errno = response->packet_id;
  591 + else
  592 + text = strdup(response->text);
  593 +
  594 + free(response);
  595 + return text;
  596 +
  597 + }
  598 +
431 599 #elif defined(HAVE_DBUS)
432 600  
433 601 #endif
... ... @@ -439,6 +607,26 @@ int remote::cmp_text_at(int row, int col, const char *text)
439 607 {
440 608 #if defined(WIN32)
441 609  
  610 + if(hPipe != INVALID_HANDLE_VALUE)
  611 + {
  612 + struct hllapi_packet_text_at * query;
  613 + struct hllapi_packet_result response;
  614 + DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen(text);
  615 +
  616 + query = (struct hllapi_packet_text_at *) malloc(cbSize);
  617 + query->packet_id = HLLAPI_PACKET_CMP_TEXT_AT;
  618 + query->row = row;
  619 + query->col = col;
  620 + strcpy(query->text,text);
  621 +
  622 + TransactNamedPipe(hPipe,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
  623 +
  624 + free(query);
  625 +
  626 + return response.rc;
  627 + }
  628 +
  629 +
442 630 #elif defined(HAVE_DBUS)
443 631  
444 632 #endif
... ... @@ -450,6 +638,25 @@ int remote::set_text_at(int row, int col, const char *str)
450 638 {
451 639 #if defined(WIN32)
452 640  
  641 + if(hPipe != INVALID_HANDLE_VALUE)
  642 + {
  643 + struct hllapi_packet_text_at * query;
  644 + struct hllapi_packet_result response;
  645 + DWORD cbSize = sizeof(struct hllapi_packet_text_at)+strlen((const char *) str);
  646 +
  647 + query = (struct hllapi_packet_text_at *) malloc(cbSize);
  648 + query->packet_id = HLLAPI_PACKET_SET_TEXT_AT;
  649 + query->row = row;
  650 + query->col = col;
  651 + strcpy(query->text,(const char *) str);
  652 +
  653 + TransactNamedPipe(hPipe,(LPVOID) query, cbSize, &response, sizeof(response), &cbSize,NULL);
  654 +
  655 + free(query);
  656 +
  657 + return response.rc;
  658 + }
  659 +
453 660 #elif defined(HAVE_DBUS)
454 661  
455 662 #endif
... ... @@ -461,6 +668,11 @@ int remote::set_cursor_position(int row, int col)
461 668 {
462 669 #if defined(WIN32)
463 670  
  671 + if(hPipe != INVALID_HANDLE_VALUE)
  672 + {
  673 +
  674 + }
  675 +
464 676 #elif defined(HAVE_DBUS)
465 677  
466 678 #endif
... ... @@ -472,6 +684,15 @@ int remote::enter(void)
472 684 {
473 685 #if defined(WIN32)
474 686  
  687 + if(hPipe != INVALID_HANDLE_VALUE)
  688 + {
  689 + static const struct hllapi_packet_query query = { HLLAPI_PACKET_ENTER };
  690 + struct hllapi_packet_result response;
  691 + DWORD cbSize = sizeof(query);
  692 + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  693 + return response.rc;
  694 + }
  695 +
475 696 return -1;
476 697  
477 698 #elif defined(HAVE_DBUS)
... ... @@ -490,6 +711,15 @@ int remote::pfkey(int key)
490 711 {
491 712 #if defined(WIN32)
492 713  
  714 + if(hPipe != INVALID_HANDLE_VALUE)
  715 + {
  716 + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PFKEY, (unsigned short) key };
  717 + struct hllapi_packet_result response;
  718 + DWORD cbSize = sizeof(query);
  719 + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  720 + return response.rc;
  721 + }
  722 +
493 723 #elif defined(HAVE_DBUS)
494 724  
495 725 #endif
... ... @@ -501,6 +731,15 @@ int remote::pakey(int key)
501 731 {
502 732 #if defined(WIN32)
503 733  
  734 + if(hPipe != INVALID_HANDLE_VALUE)
  735 + {
  736 + struct hllapi_packet_keycode query = { HLLAPI_PACKET_PAKEY, (unsigned short) key };
  737 + struct hllapi_packet_result response;
  738 + DWORD cbSize = sizeof(query);
  739 + TransactNamedPipe(hPipe,(LPVOID) &query, cbSize, &response, sizeof(response), &cbSize,NULL);
  740 + return response.rc;
  741 + }
  742 +
504 743 #elif defined(HAVE_DBUS)
505 744  
506 745 #endif
... ... @@ -512,7 +751,14 @@ void remote::set_toggle(LIB3270_TOGGLE ix, bool value)
512 751 {
513 752 #if defined(WIN32)
514 753  
  754 + if(hPipe != INVALID_HANDLE_VALUE)
  755 + {
  756 +
  757 + }
  758 +
515 759 #elif defined(HAVE_DBUS)
516 760  
517 761 #endif
  762 +
518 763 }
  764 +
... ...