Commit 61045cafe255666648ed100c187a2a497bde1ae2

Authored by perry.werneck@gmail.com
1 parent 72623bf1

Iniciando implementação de novas funções para o plugin hllapi

src/include/pw3270/hllapi.h
@@ -38,16 +38,25 @@ @@ -38,16 +38,25 @@
38 extern "C" { 38 extern "C" {
39 #endif 39 #endif
40 40
41 - #define HLLAPI_REQUEST_ID 0x01 41 + #define HLLAPI_REQUEST_QUERY 0x01
  42 + #define HLLAPI_RESPONSE_VALUE 0x02
  43 + #define HLLAPI_RESPONSE_TEXT 0x03
  44 +
42 #define HLLAPI_MAXLENGTH 32768 45 #define HLLAPI_MAXLENGTH 32768
43 46
44 #define HLLAPI_CMD_CONNECTPS 1 /**< connect presentation space */ 47 #define HLLAPI_CMD_CONNECTPS 1 /**< connect presentation space */
45 #define HLLAPI_CMD_DISCONNECTPS 2 /**< disconnect presentation space */ 48 #define HLLAPI_CMD_DISCONNECTPS 2 /**< disconnect presentation space */
46 #define HLLAPI_CMD_INPUTSTRING 3 /**< send string */ 49 #define HLLAPI_CMD_INPUTSTRING 3 /**< send string */
47 #define HLLAPI_CMD_WAIT 4 /**< Wait if the session is waiting for a host response */ 50 #define HLLAPI_CMD_WAIT 4 /**< Wait if the session is waiting for a host response */
  51 + #define HLLAPI_CMD_COPYPS 5 /**< Copies the contents of the presentation space into a string buffer. */
  52 + #define HLLAPI_CMD_SEARCHPS 6 /**< Search the presentation space for a specified string. */
  53 + #define HLLAPI_CMD_QUERYCURSOR 7 /**< Determines the location of the cursor in the presentation space. */
  54 + #define HLLAPI_CMD_COPYPSTOSTR 8 /**< Copy presentation space to string */
  55 + #define HLLAPI_CMD_COPYSTRTOPS 15 /**< Copies an ASCII string directly to a specified position in the presentation space. */
  56 + #define HLLAPI_CMD_SETCURSOR 40 /**< Places the cursor at a specified position in presentation space.*/
  57 + #define HLLAPI_CMD_SENDFILE 90 /**< Send file to the host */
  58 + #define HLLAPI_CMD_RECEIVEFILE 91 /**< Receive a file from the host */
48 59
49 - #define HLLAPI_CMD_COPYPSTOSTR 8 /**< copy presentation space to string */  
50 - #define HLLAPI_CMD_SETCURSOR 40 /**< set cursor */  
51 #define HLLAPI_CMD_GETREVISION 2000 /**< Get lib3270 revision */ 60 #define HLLAPI_CMD_GETREVISION 2000 /**< Get lib3270 revision */
52 61
53 #pragma pack(1) 62 #pragma pack(1)
@@ -56,7 +65,7 @@ extern &quot;C&quot; { @@ -56,7 +65,7 @@ extern &quot;C&quot; {
56 unsigned char id; /**< Request id */ 65 unsigned char id; /**< Request id */
57 unsigned long func; /**< Function number */ 66 unsigned long func; /**< Function number */
58 unsigned short rc; /**< Short argument/return code */ 67 unsigned short rc; /**< Short argument/return code */
59 - unsigned short len; /**< Text length */ 68 + unsigned int value; /**< Requested value */
60 char string[1]; /**< String argument */ 69 char string[1]; /**< String argument */
61 } HLLAPI_DATA; 70 } HLLAPI_DATA;
62 #pragma pack() 71 #pragma pack()
src/plugins/remotectl/hllapi.c
@@ -98,10 +98,10 @@ @@ -98,10 +98,10 @@
98 98
99 memset(buffer,0,HLLAPI_MAXLENGTH); 99 memset(buffer,0,HLLAPI_MAXLENGTH);
100 100
101 - data->id = HLLAPI_REQUEST_ID; 101 + data->id = HLLAPI_REQUEST_QUERY;
102 data->func = func; 102 data->func = func;
103 data->rc = *rc; 103 data->rc = *rc;
104 - data->len = *length; 104 + data->value = *length;
105 105
106 if(arg && *length > 0) 106 if(arg && *length > 0)
107 memcpy(data->string,arg,*length); 107 memcpy(data->string,arg,*length);
@@ -116,15 +116,15 @@ @@ -116,15 +116,15 @@
116 else 116 else
117 { 117 {
118 *rc = buffer->rc; 118 *rc = buffer->rc;
119 - *length = buffer->len; 119 + *length = buffer->value;
120 120
121 - trace("buffer->len=%d rc=%d",buffer->len,buffer->rc); 121 + trace("buffer->id=%d buffer->value=%d rc=%d",buffer->id,buffer->value,buffer->rc);
122 122
123 - if(buffer->len > 0) 123 + if(buffer->value > 0 && buffer->id == HLLAPI_RESPONSE_TEXT)
124 { 124 {
125 - outBuffer = malloc(buffer->len+1);  
126 - memcpy(outBuffer,buffer->string,buffer->len);  
127 - outBuffer[buffer->len] = 0; 125 + outBuffer = malloc(buffer->value+1);
  126 + memcpy(outBuffer,buffer->string,buffer->value);
  127 + outBuffer[buffer->value] = 0;
128 128
129 trace("outBuffer=[%s]",outBuffer); 129 trace("outBuffer=[%s]",outBuffer);
130 } 130 }
src/plugins/remotectl/pipesource.c
@@ -143,12 +143,12 @@ static void wait_for_client(pipe_source *source) @@ -143,12 +143,12 @@ static void wait_for_client(pipe_source *source)
143 qry->hPipe = source->hPipe; 143 qry->hPipe = source->hPipe;
144 qry->text = (const gchar *) (qry+1); 144 qry->text = (const gchar *) (qry+1);
145 145
146 - if(data->id == 0x01) 146 + if(data->id == HLLAPI_REQUEST_QUERY)
147 { 147 {
148 // HLLAPI query 148 // HLLAPI query
149 qry->cmd = (int) data->func; 149 qry->cmd = (int) data->func;
150 qry->pos = (int) data->rc; 150 qry->pos = (int) data->rc;
151 - qry->length = data->len; 151 + qry->length = data->value;
152 memcpy((gchar *)(qry->text),data->string,qry->length); 152 memcpy((gchar *)(qry->text),data->string,qry->length);
153 } 153 }
154 else 154 else
@@ -175,26 +175,29 @@ static void wait_for_client(pipe_source *source) @@ -175,26 +175,29 @@ static void wait_for_client(pipe_source *source)
175 { 175 {
176 request_buffer(qry, rc, 0, NULL); 176 request_buffer(qry, rc, 0, NULL);
177 } 177 }
178 -/*  
179 - HLLAPI_DATA data; 178 + }
180 179
181 - memset(&data,0,sizeof(data)); 180 + void request_value(QUERY *qry, int rc, unsigned int value)
  181 + {
  182 + HLLAPI_DATA data;
182 183
183 - data.id = 0x01; 184 + memset(&data,0,sizeof(data));
  185 + data.id = HLLAPI_RESPONSE_VALUE;
184 data.func = qry->cmd; 186 data.func = qry->cmd;
185 data.rc = rc; 187 data.rc = rc;
186 -  
187 - trace("rc=%d",rc); 188 + data.value = value;
188 189
189 #ifdef WIN32 190 #ifdef WIN32
190 { 191 {
191 DWORD wrote = sizeof(data); 192 DWORD wrote = sizeof(data);
192 WriteFile(qry->hPipe,&data,wrote,&wrote,NULL); 193 WriteFile(qry->hPipe,&data,wrote,&wrote,NULL);
  194 + trace("Wrote=%d len=%d",(int) wrote, sizeof(data));
193 } 195 }
194 #endif // WIN32 196 #endif // WIN32
195 197
196 g_free(qry); 198 g_free(qry);
197 -*/ 199 +
  200 +
198 } 201 }
199 202
200 void request_buffer(QUERY *qry, int rc, size_t szBuffer, const gpointer buffer) 203 void request_buffer(QUERY *qry, int rc, size_t szBuffer, const gpointer buffer)
@@ -206,20 +209,21 @@ static void wait_for_client(pipe_source *source) @@ -206,20 +209,21 @@ static void wait_for_client(pipe_source *source)
206 { 209 {
207 sz = sizeof(HLLAPI_DATA)+szBuffer; 210 sz = sizeof(HLLAPI_DATA)+szBuffer;
208 data = g_malloc0(sz); 211 data = g_malloc0(sz);
209 - data->len = szBuffer; 212 + data->id = HLLAPI_RESPONSE_TEXT;
210 memcpy(data->string,buffer,szBuffer); 213 memcpy(data->string,buffer,szBuffer);
211 } 214 }
212 else 215 else
213 { 216 {
214 - sz = sizeof(HLLAPI_DATA);  
215 - data = g_malloc0(sz); 217 + sz = sizeof(HLLAPI_DATA);
  218 + data = g_malloc0(sz);
  219 + data->id = HLLAPI_RESPONSE_VALUE;
216 } 220 }
217 221
218 - data->id = 0x01;  
219 data->func = qry->cmd; 222 data->func = qry->cmd;
220 data->rc = rc; 223 data->rc = rc;
  224 + data->value = szBuffer;
221 225
222 - trace("rc=%d data->len=%d",rc,(int) data->len); 226 + trace("rc=%d data->len=%d",rc,(int) szBuffer);
223 227
224 #ifdef WIN32 228 #ifdef WIN32
225 { 229 {
src/plugins/remotectl/remotectl.c
@@ -405,6 +405,11 @@ @@ -405,6 +405,11 @@
405 g_free(buffer); 405 g_free(buffer);
406 } 406 }
407 407
  408 + static void cmd_querycursor(QUERY *qry)
  409 + {
  410 + request_value(qry,0,lib3270_get_cursor_address(qry->hSession));
  411 + }
  412 +
408 void enqueue_request(QUERY *qry) 413 void enqueue_request(QUERY *qry)
409 { 414 {
410 static const struct _cmd 415 static const struct _cmd
@@ -413,15 +418,29 @@ @@ -413,15 +418,29 @@
413 void (*exec)(QUERY *qry); 418 void (*exec)(QUERY *qry);
414 } cmd[] = 419 } cmd[] =
415 { 420 {
416 - { HLLAPI_CMD_CONNECTPS, cmd_connectps },  
417 - { HLLAPI_CMD_DISCONNECTPS, cmd_disconnectps },  
418 - { HLLAPI_CMD_INPUTSTRING, cmd_sendstring },  
419 - { HLLAPI_CMD_SETCURSOR, cmd_setcursor }, 421 + { HLLAPI_CMD_CONNECTPS, cmd_connectps }, // 1
  422 + { HLLAPI_CMD_DISCONNECTPS, cmd_disconnectps }, // 2
  423 + { HLLAPI_CMD_INPUTSTRING, cmd_sendstring }, // 3
  424 + { HLLAPI_CMD_WAIT, cmd_wait }, // 4
  425 +// { HLLAPI_CMD_COPYPS, }, // 5
  426 +// { HLLAPI_CMD_SEARCHPS, }, // 6
  427 + { HLLAPI_CMD_QUERYCURSOR, cmd_querycursor }, // 7
  428 +
  429 + { HLLAPI_CMD_COPYPSTOSTR, cmd_copypstostr }, // 8
  430 +
  431 +// { HLLAPI_CMD_COPYSTRTOPS }, // 15
  432 +
  433 + { HLLAPI_CMD_SETCURSOR, cmd_setcursor }, // 40
  434 +
  435 +// { HLLAPI_CMD_SENDFILE }, // 90
  436 +// { HLLAPI_CMD_RECEIVEFILE },
  437 +
  438 +
420 { HLLAPI_CMD_GETREVISION, cmd_getrevision }, 439 { HLLAPI_CMD_GETREVISION, cmd_getrevision },
421 - { HLLAPI_CMD_COPYPSTOSTR, cmd_copypstostr },  
422 - { HLLAPI_CMD_WAIT, cmd_wait },  
423 }; 440 };
424 441
  442 +
  443 +
425 int f; 444 int f;
426 445
427 trace("HLLAPI function %d",(int) qry->cmd); 446 trace("HLLAPI function %d",(int) qry->cmd);
@@ -441,23 +460,6 @@ @@ -441,23 +460,6 @@
441 request_status(qry,EINVAL); 460 request_status(qry,EINVAL);
442 } 461 }
443 462
444 -/*  
445 - int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc)  
446 - {  
447 -  
448 - trace("HLLAPI function %d",(int) function);  
449 -  
450 - for(f=0;f<G_N_ELEMENTS(cmd);f++)  
451 - {  
452 - if(cmd[f].function == function)  
453 - return cmd[f].exec(lib3270_get_default_session_handle(),rc,string,length);  
454 - }  
455 -  
456 - g_warning("Unexpected HLLAPI function %d",(int) function);  
457 - return EINVAL;  
458 - }  
459 -*/  
460 -  
461 G_GNUC_INTERNAL void set_active(gboolean on) 463 G_GNUC_INTERNAL void set_active(gboolean on)
462 { 464 {
463 v3270_set_script(pw3270_get_terminal_widget(NULL),'H',on); 465 v3270_set_script(pw3270_get_terminal_widget(NULL),'H',on);
src/plugins/remotectl/remotectl.h
@@ -61,7 +61,9 @@ @@ -61,7 +61,9 @@
61 G_GNUC_INTERNAL void set_active(gboolean on); 61 G_GNUC_INTERNAL void set_active(gboolean on);
62 G_GNUC_INTERNAL void enqueue_request(QUERY *qry); 62 G_GNUC_INTERNAL void enqueue_request(QUERY *qry);
63 G_GNUC_INTERNAL void request_complete(QUERY *qry, int rc, const gchar *text); 63 G_GNUC_INTERNAL void request_complete(QUERY *qry, int rc, const gchar *text);
  64 +
64 G_GNUC_INTERNAL void request_status(QUERY *qry, int rc); 65 G_GNUC_INTERNAL void request_status(QUERY *qry, int rc);
  66 + G_GNUC_INTERNAL void request_value(QUERY *qry, int rc, unsigned int value);
65 G_GNUC_INTERNAL void request_buffer(QUERY *qry, int rc, size_t sz, const gpointer buffer); 67 G_GNUC_INTERNAL void request_buffer(QUERY *qry, int rc, size_t sz, const gpointer buffer);
66 68
67 // int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc); 69 // int run_hllapi(unsigned long function, char *string, unsigned short length, unsigned short rc);
src/pw3270/filetransfer.c
@@ -177,7 +177,7 @@ static void check_entry(GtkEditable *editable, struct ftdialog *dlg) @@ -177,7 +177,7 @@ static void check_entry(GtkEditable *editable, struct ftdialog *dlg)
177 gtk_widget_set_sensitive(dlg->ready,is_dialog_ok(editable,dlg)); 177 gtk_widget_set_sensitive(dlg->ready,is_dialog_ok(editable,dlg));
178 } 178 }
179 179
180 -static GtkWidget * add_filename_entry(GObject *action, int ix, int row, struct ftdialog *dlg, GtkTable *table) 180 +static GtkEntry * add_filename_entry(GObject *action, int ix, int row, struct ftdialog *dlg, GtkTable *table)
181 { 181 {
182 static const gchar * label_text[] = { N_( "_Local file name:" ), N_( "_Host file name:" ) }; 182 static const gchar * label_text[] = { N_( "_Local file name:" ), N_( "_Host file name:" ) };
183 static const gchar * attr[] = { "local", "remote" }; 183 static const gchar * attr[] = { "local", "remote" };
@@ -201,14 +201,13 @@ static GtkWidget * add_filename_entry(GObject *action, int ix, int row, struct f @@ -201,14 +201,13 @@ static GtkWidget * add_filename_entry(GObject *action, int ix, int row, struct f
201 201
202 gtk_table_attach(GTK_TABLE(table),entry,1,3,row,row+1,GTK_EXPAND|GTK_SHRINK|GTK_FILL,GTK_EXPAND|GTK_SHRINK|GTK_FILL,2,2); 202 gtk_table_attach(GTK_TABLE(table),entry,1,3,row,row+1,GTK_EXPAND|GTK_SHRINK|GTK_FILL,GTK_EXPAND|GTK_SHRINK|GTK_FILL,2,2);
203 203
204 - return entry; 204 + return GTK_ENTRY(entry);
205 } 205 }
206 206
207 static void add_file_fields(GObject *action, struct ftdialog *dlg) 207 static void add_file_fields(GObject *action, struct ftdialog *dlg)
208 { 208 {
209 GtkTable * table = GTK_TABLE(gtk_table_new(2,3,FALSE)); 209 GtkTable * table = GTK_TABLE(gtk_table_new(2,3,FALSE));
210 GtkWidget * widget; 210 GtkWidget * widget;
211 - int f;  
212 211
213 gtk_container_set_border_width(GTK_CONTAINER(table),2); 212 gtk_container_set_border_width(GTK_CONTAINER(table),2);
214 213
@@ -232,34 +231,6 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg) @@ -232,34 +231,6 @@ static void add_file_fields(GObject *action, struct ftdialog *dlg)
232 231
233 dlg->file[1] = add_filename_entry(action,1,1,dlg,table); 232 dlg->file[1] = add_filename_entry(action,1,1,dlg,table);
234 } 233 }
235 -  
236 -  
237 -/*  
238 - for(f=0;f<2;f++)  
239 - {  
240 -  
241 - gchar *val;  
242 -  
243 - widget = gtk_label_new_with_mnemonic(gettext(label[f]));  
244 -  
245 - gtk_misc_set_alignment(GTK_MISC(widget),0,.5);  
246 - gtk_table_attach(GTK_TABLE(table),widget,0,1,f,f+1,GTK_FILL,GTK_FILL,2,2);  
247 -  
248 - dlg->file[f] = GTK_ENTRY(gtk_entry_new());  
249 -  
250 - gtk_widget_set_name(GTK_WIDGET(dlg->file[f]),attr[f]);  
251 -  
252 - val = get_attribute(action,dlg,attr[f]);  
253 - gtk_entry_set_text(dlg->file[f],val);  
254 - g_free(val);  
255 -  
256 - gtk_entry_set_width_chars(dlg->file[f],40);  
257 -  
258 - gtk_label_set_mnemonic_widget(GTK_LABEL(widget),GTK_WIDGET(dlg->file[f]));  
259 -  
260 - gtk_table_attach(GTK_TABLE(table),GTK_WIDGET(dlg->file[f]),1,3,f,f+1,GTK_EXPAND|GTK_SHRINK|GTK_FILL,GTK_EXPAND|GTK_SHRINK|GTK_FILL,2,2);  
261 - }  
262 -*/  
263 234
264 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg->dialog))),GTK_WIDGET(table),FALSE,FALSE,2); 235 gtk_box_pack_start(GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dlg->dialog))),GTK_WIDGET(table),FALSE,FALSE,2);
265 236