Commit 8469c3a2f87a5779df61f6821ffb3458322733dc

Authored by perry.werneck@gmail.com
1 parent 4d321221

Copia para clipboard funcionando; "text-only" por enquanto

charset.c
... ... @@ -178,8 +178,7 @@ wide_resource_init(char *csname)
178 178 /*
179 179 * Change character sets.
180 180 */
181   -enum cs_result
182   -charset_init(char *csname)
  181 +enum cs_result charset_init(H3270 *session, char *csname)
183 182 {
184 183 char *cs, *ftcs;
185 184 enum cs_result rc;
... ... @@ -207,17 +206,7 @@ charset_init(char *csname)
207 206 charset_defaults();
208 207 set_cgcsgids(CN);
209 208 set_charset_name(CN);
210   - set_display_charset("iso8859-1");
211   -
212   -/*
213   -#if defined(_WIN32) || defined(LIB3270)
214   - set_display_charset("iso8859-1");
215   -#elif defined(X3270_DISPLAY) || (defined(C3270) && !defined(_WIN32))
216   - (void) screen_new_display_charsets(default_display_charset,"us");
217   -#else
218   - utf8_set_display_charsets(default_display_charset, "us");
219   -#endif
220   -*/
  209 + set_display_charset(session, "ISO-8859-1");
221 210  
222 211 return CS_OKAY;
223 212 }
... ... @@ -373,8 +362,7 @@ set_charset_name(char *csname)
373 362 }
374 363  
375 364 /* Define a charset from resources. */
376   -static enum cs_result
377   -resource_charset(char *csname, char *cs, char *ftcs)
  365 +static enum cs_result resource_charset(char *csname, char *cs, char *ftcs)
378 366 {
379 367 enum cs_result rc;
380 368 int ne = 0;
... ... @@ -454,10 +442,12 @@ resource_charset(char *csname, char *cs, char *ftcs)
454 442 #if defined(_WIN32) /*[*/
455 443 /* See about changing the console output code page. */
456 444 dcs = get_fresource("%s.%s", ResDisplayCharset, csname);
457   - if (dcs != NULL) {
  445 + if (dcs != NULL)
  446 + {
458 447 set_display_charset(dcs);
459   - } else {
460   - set_display_charset("iso8859-1");
  448 + } else
  449 + {
  450 + set_display_charset("ISO-8859-1");
461 451 }
462 452 #endif /*]*/
463 453  
... ... @@ -744,10 +734,13 @@ check_charset(void)
744 734 }
745 735 #endif /*]*/
746 736  
747   -/* Return the current character set name. */
748   -char *
749   -get_charset_name(void)
  737 +void set_display_charset(H3270 *session, char *dcs)
  738 +{
  739 + session->charset = strdup(dcs);
  740 +}
  741 +
  742 +LIB3270_EXPORT const char * lib3270_get_charset(H3270 *session)
750 743 {
751   - return (charset_name != CN)? charset_name:
752   - ((appres.charset != CN)? appres.charset: "us");
  744 + CHECK_SESSION_HANDLE(session);
  745 + return session->charset ? session->charset : "ISO-8859-1";
753 746 }
... ...
charsetc.h
... ... @@ -35,7 +35,8 @@ LIB3270_INTERNAL char *default_display_charset;
35 35  
36 36 enum cs_result { CS_OKAY, CS_NOTFOUND, CS_BAD, CS_PREREQ, CS_ILLEGAL };
37 37  
38   -LIB3270_INTERNAL enum cs_result charset_init(char *csname);
39   -LIB3270_INTERNAL char *get_charset_name(void);
40   -LIB3270_INTERNAL void set_display_charset(char *dcs);
  38 +LIB3270_INTERNAL enum cs_result charset_init(H3270 *session, char *csname);
  39 +// LIB3270_INTERNAL char *get_charset_name(void);
  40 +
  41 +LIB3270_INTERNAL void set_display_charset(H3270 *session, char *dcs);
41 42  
... ...
glue.c
... ... @@ -138,6 +138,13 @@ void lib3270_session_free(H3270 *h)
138 138 }
139 139 }
140 140  
  141 + // Release memory
  142 + if(h->charset)
  143 + {
  144 + free(h->charset);
  145 + h->charset = NULL;
  146 + }
  147 +
141 148 }
142 149  
143 150 static void update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor)
... ... @@ -259,10 +266,10 @@ H3270 * lib3270_session_new(const char *model)
259 266 return NULL;
260 267  
261 268 Trace("Charset: %s",appres.charset);
262   - if (charset_init(appres.charset) != CS_OKAY)
  269 + if (charset_init(hSession,appres.charset) != CS_OKAY)
263 270 {
264   - Warning(NULL, _( "Cannot find charset \"%s\", using defaults" ), appres.charset);
265   - (void) charset_init(CN);
  271 + Warning(hSession, _( "Cannot find charset \"%s\", using defaults" ), appres.charset);
  272 + (void) charset_init(hSession,CN);
266 273 }
267 274  
268 275 kybd_init();
... ...
macros.c
... ... @@ -99,7 +99,7 @@
99 99  
100 100 LIB3270_MACRO( encoding )
101 101 {
102   - return strdup("ISO-8859-1");
  102 + return strdup(lib3270_get_charset(hSession));
103 103 }
104 104  
105 105 LIB3270_MACRO( get )
... ...
printer.c
... ... @@ -314,7 +314,7 @@ printer_start(const char *lu)
314 314 "for pr3287\n");
315 315 (void) fprintf(f, "# Created by %s\n", build);
316 316 (void) fprintf(f, "# Chararter set is '%s'\n",
317   - get_charset_name());
  317 + lib3270_get_charset(&h3270));
318 318 (void) fprintf(f, "cgcsgid=0x%08lx\n", cgcsgid);
319 319 #if defined(X3270_DBCS) /*[*/
320 320 if (dbcs) {
... ...
screen.c
... ... @@ -91,11 +91,6 @@ static void status_connect(H3270 *session, int ignored, void *dunno);
91 91 static void status_3270_mode(H3270 *session, int ignored, void *dunno);
92 92 static void status_printer(H3270 *session, int on, void *dunno);
93 93 static unsigned short color_from_fa(unsigned char fa);
94   -// static void relabel(H3270 *session, int ignored, void *dunno);
95   -
96   -void set_display_charset(char *dcs)
97   -{
98   -}
99 94  
100 95 static void addch(H3270 *session, int baddr, unsigned char c, unsigned short attr)
101 96 {
... ...
selection.c
... ... @@ -36,6 +36,20 @@
36 36  
37 37 /*--[ Implement ]------------------------------------------------------------------------------------*/
38 38  
  39 +static void get_selected_addr(H3270 *session, int *begin, int *end)
  40 +{
  41 + if(session->select.begin > session->select.end)
  42 + {
  43 + *end = session->select.begin;
  44 + *begin = session->select.end;
  45 + }
  46 + else
  47 + {
  48 + *begin = session->select.begin;
  49 + *end = session->select.end;
  50 + }
  51 +}
  52 +
39 53 static void update_selected_rectangle(H3270 *session)
40 54 {
41 55 struct
... ... @@ -44,16 +58,10 @@ static void update_selected_rectangle(H3270 *session)
44 58 int col;
45 59 } p[2];
46 60  
47   - int begin = session->select.begin;
48   - int end = session->select.end;
49   - int row, col, baddr;
50 61  
51   - if(begin > end)
52   - {
53   - baddr = end;
54   - end = begin;
55   - begin = baddr;
56   - }
  62 + int begin, end, row, col, baddr;
  63 +
  64 + get_selected_addr(session,&begin,&end);
57 65  
58 66 // Get start & end posision
59 67 p[0].row = (begin/session->cols);
... ... @@ -95,17 +103,10 @@ static void update_selected_rectangle(H3270 *session)
95 103  
96 104 static void update_selected_region(H3270 *session)
97 105 {
98   - int baddr;
99   - int begin = session->select.begin;
100   - int end = session->select.end;
101   - int len = session->rows*session->cols;
  106 + int baddr,begin,end;
  107 + int len = session->rows*session->cols;
102 108  
103   - if(begin > end)
104   - {
105   - baddr = end;
106   - end = begin;
107   - begin = baddr;
108   - }
  109 + get_selected_addr(session,&begin,&end);
109 110  
110 111 // First remove unselected areas
111 112 for(baddr = 0; baddr < begin; baddr++)
... ... @@ -310,3 +311,36 @@ LIB3270_ACTION( reselect )
310 311 return 0;
311 312 }
312 313  
  314 +LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession)
  315 +{
  316 + int row, col, baddr;
  317 + char *ret;
  318 + size_t sz = 0;
  319 +
  320 + if(!hSession->selected || hSession->select.begin == hSession->select.end)
  321 + return NULL;
  322 +
  323 + ret = malloc(hSession->rows * (hSession->cols+1));
  324 +
  325 + baddr = 0;
  326 + for(row=0;row < hSession->rows;row++)
  327 + {
  328 + int cr = 0;
  329 +
  330 + for(col = 0; col < hSession->cols;col++)
  331 + {
  332 + if(hSession->ea_buf[baddr].attr & LIB3270_ATTR_SELECTED)
  333 + {
  334 + cr++;
  335 + ret[sz++] = hSession->ea_buf[baddr].chr;
  336 + }
  337 + baddr++;
  338 + }
  339 +
  340 + if(cr)
  341 + ret[sz++] = '\n';
  342 + }
  343 + ret[sz] = 0;
  344 +
  345 + return realloc(ret,sz+1);
  346 +}
... ...
trace_ds.c
... ... @@ -429,7 +429,7 @@ create_tracefile_header(const char *mode)
429 429 if (appres.extended)
430 430 wtrace(", extended data stream");
431 431 wtrace(", %s emulation", appres.m3279 ? "color" : "monochrome");
432   - wtrace(", %s charset", get_charset_name());
  432 + wtrace(", %s charset", lib3270_get_charset(&h3270));
433 433 if (appres.apl_mode)
434 434 wtrace(", APL mode");
435 435 wtrace("\n");
... ...