Commit 8469c3a2f87a5779df61f6821ffb3458322733dc
1 parent
4d321221
Exists in
master
and in
3 other branches
Copia para clipboard funcionando; "text-only" por enquanto
Showing
8 changed files
with
86 additions
and
56 deletions
Show diff stats
charset.c
@@ -178,8 +178,7 @@ wide_resource_init(char *csname) | @@ -178,8 +178,7 @@ wide_resource_init(char *csname) | ||
178 | /* | 178 | /* |
179 | * Change character sets. | 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 | char *cs, *ftcs; | 183 | char *cs, *ftcs; |
185 | enum cs_result rc; | 184 | enum cs_result rc; |
@@ -207,17 +206,7 @@ charset_init(char *csname) | @@ -207,17 +206,7 @@ charset_init(char *csname) | ||
207 | charset_defaults(); | 206 | charset_defaults(); |
208 | set_cgcsgids(CN); | 207 | set_cgcsgids(CN); |
209 | set_charset_name(CN); | 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 | return CS_OKAY; | 211 | return CS_OKAY; |
223 | } | 212 | } |
@@ -373,8 +362,7 @@ set_charset_name(char *csname) | @@ -373,8 +362,7 @@ set_charset_name(char *csname) | ||
373 | } | 362 | } |
374 | 363 | ||
375 | /* Define a charset from resources. */ | 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 | enum cs_result rc; | 367 | enum cs_result rc; |
380 | int ne = 0; | 368 | int ne = 0; |
@@ -454,10 +442,12 @@ resource_charset(char *csname, char *cs, char *ftcs) | @@ -454,10 +442,12 @@ resource_charset(char *csname, char *cs, char *ftcs) | ||
454 | #if defined(_WIN32) /*[*/ | 442 | #if defined(_WIN32) /*[*/ |
455 | /* See about changing the console output code page. */ | 443 | /* See about changing the console output code page. */ |
456 | dcs = get_fresource("%s.%s", ResDisplayCharset, csname); | 444 | dcs = get_fresource("%s.%s", ResDisplayCharset, csname); |
457 | - if (dcs != NULL) { | 445 | + if (dcs != NULL) |
446 | + { | ||
458 | set_display_charset(dcs); | 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 | #endif /*]*/ | 452 | #endif /*]*/ |
463 | 453 | ||
@@ -744,10 +734,13 @@ check_charset(void) | @@ -744,10 +734,13 @@ check_charset(void) | ||
744 | } | 734 | } |
745 | #endif /*]*/ | 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,7 +35,8 @@ LIB3270_INTERNAL char *default_display_charset; | ||
35 | 35 | ||
36 | enum cs_result { CS_OKAY, CS_NOTFOUND, CS_BAD, CS_PREREQ, CS_ILLEGAL }; | 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,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 | static void update_char(H3270 *session, int addr, unsigned char chr, unsigned short attr, unsigned char cursor) | 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,10 +266,10 @@ H3270 * lib3270_session_new(const char *model) | ||
259 | return NULL; | 266 | return NULL; |
260 | 267 | ||
261 | Trace("Charset: %s",appres.charset); | 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 | kybd_init(); | 275 | kybd_init(); |
macros.c
printer.c
@@ -314,7 +314,7 @@ printer_start(const char *lu) | @@ -314,7 +314,7 @@ printer_start(const char *lu) | ||
314 | "for pr3287\n"); | 314 | "for pr3287\n"); |
315 | (void) fprintf(f, "# Created by %s\n", build); | 315 | (void) fprintf(f, "# Created by %s\n", build); |
316 | (void) fprintf(f, "# Chararter set is '%s'\n", | 316 | (void) fprintf(f, "# Chararter set is '%s'\n", |
317 | - get_charset_name()); | 317 | + lib3270_get_charset(&h3270)); |
318 | (void) fprintf(f, "cgcsgid=0x%08lx\n", cgcsgid); | 318 | (void) fprintf(f, "cgcsgid=0x%08lx\n", cgcsgid); |
319 | #if defined(X3270_DBCS) /*[*/ | 319 | #if defined(X3270_DBCS) /*[*/ |
320 | if (dbcs) { | 320 | if (dbcs) { |
screen.c
@@ -91,11 +91,6 @@ static void status_connect(H3270 *session, int ignored, void *dunno); | @@ -91,11 +91,6 @@ static void status_connect(H3270 *session, int ignored, void *dunno); | ||
91 | static void status_3270_mode(H3270 *session, int ignored, void *dunno); | 91 | static void status_3270_mode(H3270 *session, int ignored, void *dunno); |
92 | static void status_printer(H3270 *session, int on, void *dunno); | 92 | static void status_printer(H3270 *session, int on, void *dunno); |
93 | static unsigned short color_from_fa(unsigned char fa); | 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 | static void addch(H3270 *session, int baddr, unsigned char c, unsigned short attr) | 95 | static void addch(H3270 *session, int baddr, unsigned char c, unsigned short attr) |
101 | { | 96 | { |
selection.c
@@ -36,6 +36,20 @@ | @@ -36,6 +36,20 @@ | ||
36 | 36 | ||
37 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 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 | static void update_selected_rectangle(H3270 *session) | 53 | static void update_selected_rectangle(H3270 *session) |
40 | { | 54 | { |
41 | struct | 55 | struct |
@@ -44,16 +58,10 @@ static void update_selected_rectangle(H3270 *session) | @@ -44,16 +58,10 @@ static void update_selected_rectangle(H3270 *session) | ||
44 | int col; | 58 | int col; |
45 | } p[2]; | 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 | // Get start & end posision | 66 | // Get start & end posision |
59 | p[0].row = (begin/session->cols); | 67 | p[0].row = (begin/session->cols); |
@@ -95,17 +103,10 @@ static void update_selected_rectangle(H3270 *session) | @@ -95,17 +103,10 @@ static void update_selected_rectangle(H3270 *session) | ||
95 | 103 | ||
96 | static void update_selected_region(H3270 *session) | 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 | // First remove unselected areas | 111 | // First remove unselected areas |
111 | for(baddr = 0; baddr < begin; baddr++) | 112 | for(baddr = 0; baddr < begin; baddr++) |
@@ -310,3 +311,36 @@ LIB3270_ACTION( reselect ) | @@ -310,3 +311,36 @@ LIB3270_ACTION( reselect ) | ||
310 | return 0; | 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,7 +429,7 @@ create_tracefile_header(const char *mode) | ||
429 | if (appres.extended) | 429 | if (appres.extended) |
430 | wtrace(", extended data stream"); | 430 | wtrace(", extended data stream"); |
431 | wtrace(", %s emulation", appres.m3279 ? "color" : "monochrome"); | 431 | wtrace(", %s emulation", appres.m3279 ? "color" : "monochrome"); |
432 | - wtrace(", %s charset", get_charset_name()); | 432 | + wtrace(", %s charset", lib3270_get_charset(&h3270)); |
433 | if (appres.apl_mode) | 433 | if (appres.apl_mode) |
434 | wtrace(", APL mode"); | 434 | wtrace(", APL mode"); |
435 | wtrace("\n"); | 435 | wtrace("\n"); |