Commit e36c57a12113745392c584787df041b74b45b378
1 parent
c6cfe226
Exists in
master
and in
3 other branches
Implementando remapeamento de caracteres por arquivo .xml
Showing
2 changed files
with
35 additions
and
27 deletions
Show diff stats
charset.c
@@ -212,6 +212,15 @@ typedef struct _info | @@ -212,6 +212,15 @@ typedef struct _info | ||
212 | static const remap charset[] = | 212 | static const remap charset[] = |
213 | { | 213 | { |
214 | { | 214 | { |
215 | + "us", | ||
216 | + LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET, | ||
217 | + (const unsigned short const []) | ||
218 | + { | ||
219 | + 0x0000, 0x0000 | ||
220 | + } | ||
221 | + }, | ||
222 | + | ||
223 | + { | ||
215 | "bracket", | 224 | "bracket", |
216 | LIB3270_DEFAULT_CGEN|LIB3270_DEFAULT_CSET, | 225 | LIB3270_DEFAULT_CGEN|LIB3270_DEFAULT_CSET, |
217 | (const unsigned short const []) | 226 | (const unsigned short const []) |
@@ -255,31 +264,16 @@ static void copy_charset(const unsigned short *from, unsigned short *to) | @@ -255,31 +264,16 @@ static void copy_charset(const unsigned short *from, unsigned short *to) | ||
255 | to[f+UT_OFFSET] = from[f]; | 264 | to[f+UT_OFFSET] = from[f]; |
256 | } | 265 | } |
257 | 266 | ||
258 | -LIB3270_EXPORT void lib3270_remap(H3270 *hSession,const char *host, const char *display, unsigned long cgcsgid, const unsigned short *chr) | ||
259 | -{ | ||
260 | - int c; | ||
261 | - | ||
262 | - hSession->charset.host = host; | ||
263 | - hSession->charset.display = display; | ||
264 | - hSession->charset.cgcsgid = cgcsgid; | ||
265 | - | ||
266 | - for(c=0;chr[c];c+=2) | ||
267 | - { | ||
268 | - lib3270_remap_char(hSession,chr[c],chr[c+1], BOTH, 0); | ||
269 | - } | ||
270 | - | ||
271 | -} | ||
272 | - | ||
273 | -LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | 267 | +LIB3270_EXPORT void lib3270_reset_charset(H3270 *hSession, const char * host, const char * display, unsigned long cgcsgid) |
274 | { | 268 | { |
275 | int f; | 269 | int f; |
276 | 270 | ||
277 | - hSession->charset.host = "us"; | ||
278 | - hSession->charset.display = "ISO-8859-1"; | ||
279 | - hSession->charset.cgcsgid = LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET; // 0x02b90025 | 271 | + #define replace_pointer(x,v) if(x) { lib3270_free(x); }; x = strdup(v) |
280 | 272 | ||
281 | -// lib3270_write_log(hSession,"charset","host.charset=%s display.charset=%s", | ||
282 | -// hSession->charset.host,hSession->charset.display); | 273 | + replace_pointer(hSession->charset.host, host); |
274 | + replace_pointer(hSession->charset.display,display); | ||
275 | + | ||
276 | + hSession->charset.cgcsgid = cgcsgid; | ||
283 | 277 | ||
284 | memcpy(hSession->charset.ebc2asc, ebc2asc0, sizeof(hSession->charset.ebc2asc)); | 278 | memcpy(hSession->charset.ebc2asc, ebc2asc0, sizeof(hSession->charset.ebc2asc)); |
285 | memcpy(hSession->charset.asc2ebc, asc2ebc0, sizeof(hSession->charset.asc2ebc)); | 279 | memcpy(hSession->charset.asc2ebc, asc2ebc0, sizeof(hSession->charset.asc2ebc)); |
@@ -296,7 +290,19 @@ LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | @@ -296,7 +290,19 @@ LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | ||
296 | #endif | 290 | #endif |
297 | */ | 291 | */ |
298 | 292 | ||
299 | - if(!(name && strcasecmp(name,hSession->charset.host))) | 293 | +} |
294 | + | ||
295 | +LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | ||
296 | +{ | ||
297 | + int f; | ||
298 | + | ||
299 | + if(!name) | ||
300 | + { | ||
301 | + lib3270_reset_charset(hSession,"us","ISO-8859-1", LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET); | ||
302 | + return 0; | ||
303 | + } | ||
304 | + | ||
305 | + if(hSession->charset.host && !strcasecmp(name,hSession->charset.host)) | ||
300 | return 0; | 306 | return 0; |
301 | 307 | ||
302 | for(f=0;charset[f].name != NULL;f++) | 308 | for(f=0;charset[f].name != NULL;f++) |
@@ -304,16 +310,15 @@ LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | @@ -304,16 +310,15 @@ LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) | ||
304 | if(!strcasecmp(name,charset[f].name)) | 310 | if(!strcasecmp(name,charset[f].name)) |
305 | { | 311 | { |
306 | // Found required charset | 312 | // Found required charset |
307 | - lib3270_remap(hSession,charset[f].name,"ISO-8859-1",charset[f].cgcsgid,charset[f].chr); | ||
308 | - /* | ||
309 | int c; | 313 | int c; |
310 | 314 | ||
311 | - hSession->charset.host = charset[f].name; | ||
312 | - hSession->charset.cgcsgid = charset[f].cgcsgid; | 315 | + debug("%s: %s -> %s",__FUNCTION__,hSession->charset.host,charset[f].name); |
316 | + | ||
317 | + lib3270_reset_charset(hSession,charset[f].name,"ISO-8859-1", charset[f].cgcsgid); | ||
313 | 318 | ||
314 | for(c=0;charset[f].chr[c];c+=2) | 319 | for(c=0;charset[f].chr[c];c+=2) |
315 | lib3270_remap_char(hSession,charset[f].chr[c],charset[f].chr[c+1], BOTH, 0); | 320 | lib3270_remap_char(hSession,charset[f].chr[c],charset[f].chr[c+1], BOTH, 0); |
316 | - */ | 321 | + |
317 | return 0; | 322 | return 0; |
318 | } | 323 | } |
319 | } | 324 | } |
session.c
@@ -103,6 +103,9 @@ void lib3270_session_free(H3270 *h) | @@ -103,6 +103,9 @@ void lib3270_session_free(H3270 *h) | ||
103 | release_pointer(h->host.srvc); | 103 | release_pointer(h->host.srvc); |
104 | release_pointer(h->host.qualified); | 104 | release_pointer(h->host.qualified); |
105 | 105 | ||
106 | + release_pointer(h->charset.host); | ||
107 | + release_pointer(h->charset.display); | ||
108 | + | ||
106 | trace("Releasing session %p",h); | 109 | trace("Releasing session %p",h); |
107 | lib3270_free(h); | 110 | lib3270_free(h); |
108 | 111 |