Commit 7f35c50fcf6661c2b39bd6ac5a63ceaf4885afc9

Authored by perry.werneck@gmail.com
1 parent 294d088e

Ajustes para que as macros tratem seleção

src/include/lib3270/selection.h
@@ -148,6 +148,6 @@ @@ -148,6 +148,6 @@
148 * @param end_offset : End offset. 148 * @param end_offset : End offset.
149 * 149 *
150 */ 150 */
151 - LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end); 151 + LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end);
152 152
153 #endif // LIB3270_SELECTION_H_INCLUDED 153 #endif // LIB3270_SELECTION_H_INCLUDED
src/lib3270/macros.c
@@ -35,6 +35,7 @@ @@ -35,6 +35,7 @@
35 #include <stdio.h> 35 #include <stdio.h>
36 #include <lib3270.h> 36 #include <lib3270.h>
37 #include <lib3270/macros.h> 37 #include <lib3270/macros.h>
  38 + #include <lib3270/selection.h>
38 #include <stdlib.h> 39 #include <stdlib.h>
39 #include <strings.h> 40 #include <strings.h>
40 #include "globals.h" 41 #include "globals.h"
@@ -278,6 +279,37 @@ @@ -278,6 +279,37 @@
278 return strdup("0"); 279 return strdup("0");
279 } 280 }
280 281
  282 + LIB3270_MACRO( unselect )
  283 + {
  284 + lib3270_unselect(hSession);
  285 + return strdup("0");
  286 + }
  287 +
  288 + LIB3270_MACRO( select )
  289 + {
  290 + int rc = -1;
  291 + char ret[10];
  292 +
  293 + switch(argc)
  294 + {
  295 + case 1: // 1 argument, select all
  296 + rc = lib3270_select_all(hSession);
  297 + break;
  298 +
  299 + case 3: // 2 arguments, first and last addr
  300 + rc = lib3270_select_region(hSession,atoi(argv[1]),atoi(argv[2]));
  301 + break;
  302 +
  303 +
  304 + default:
  305 + errno = EINVAL;
  306 + return NULL;
  307 + }
  308 +
  309 + snprintf(ret,9,"%d",rc);
  310 + return strdup(ret);
  311 +
  312 + }
281 313
282 /*--[ Macro entry point ]----------------------------------------------------------------------------*/ 314 /*--[ Macro entry point ]----------------------------------------------------------------------------*/
283 315
@@ -298,6 +330,8 @@ @@ -298,6 +330,8 @@
298 LIB3270_MACRO_ENTRY( pf ), 330 LIB3270_MACRO_ENTRY( pf ),
299 LIB3270_MACRO_ENTRY( set ), 331 LIB3270_MACRO_ENTRY( set ),
300 LIB3270_MACRO_ENTRY( status ), 332 LIB3270_MACRO_ENTRY( status ),
  333 + LIB3270_MACRO_ENTRY( select ),
  334 + LIB3270_MACRO_ENTRY( unselect ),
301 335
302 {NULL, NULL} 336 {NULL, NULL}
303 }; 337 };
src/lib3270/selection.c
@@ -220,24 +220,25 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr) @@ -220,24 +220,25 @@ LIB3270_EXPORT void lib3270_select_to(H3270 *session, int baddr)
220 220
221 } 221 }
222 222
223 -LIB3270_EXPORT void lib3270_select_region(H3270 *h, int start, int end) 223 +LIB3270_EXPORT int lib3270_select_region(H3270 *h, int start, int end)
224 { 224 {
225 int maxlen; 225 int maxlen;
226 226
227 CHECK_SESSION_HANDLE(h); 227 CHECK_SESSION_HANDLE(h);
228 228
229 if(!lib3270_connected(h)) 229 if(!lib3270_connected(h))
230 - return; 230 + return ENOTCONN;
231 231
232 maxlen = (h->rows * h->cols); 232 maxlen = (h->rows * h->cols);
233 233
234 // Check bounds 234 // Check bounds
235 if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end) 235 if(start < 0 || start > maxlen || end < 0 || end > maxlen || start > end)
236 - return; 236 + return EINVAL;
237 237
238 do_select(h,start,end,lib3270_get_toggle(h,LIB3270_TOGGLE_RECTANGLE_SELECT)); 238 do_select(h,start,end,lib3270_get_toggle(h,LIB3270_TOGGLE_RECTANGLE_SELECT));
239 cursor_move(h,h->select.end); 239 cursor_move(h,h->select.end);
240 240
  241 + return 0;
241 } 242 }
242 243
243 static void do_select(H3270 *h, int start, int end, int rect) 244 static void do_select(H3270 *h, int start, int end, int rect)
src/pw3270/v3270/macros.c
@@ -47,6 +47,12 @@ @@ -47,6 +47,12 @@
47 return 0; 47 return 0;
48 } 48 }
49 49
  50 + static int v3270_macro_clearsel(GtkWidget *widget, int argc, const char **argv)
  51 + {
  52 + v3270_clear_clipboard(widget);
  53 + return 0;
  54 + }
  55 +
50 static int run_macro(GtkWidget *widget, int argc, const char **argv) 56 static int run_macro(GtkWidget *widget, int argc, const char **argv)
51 { 57 {
52 #define V3270_MACRO( name ) { #name, v3270_macro_ ## name } 58 #define V3270_MACRO( name ) { #name, v3270_macro_ ## name }
@@ -59,6 +65,7 @@ @@ -59,6 +65,7 @@
59 { 65 {
60 V3270_MACRO( copy ), 66 V3270_MACRO( copy ),
61 V3270_MACRO( append ), 67 V3270_MACRO( append ),
  68 + V3270_MACRO( clearsel ),
62 }; 69 };
63 70
64 int f; 71 int f;