Commit e36c57a12113745392c584787df041b74b45b378

Authored by Perry Werneck
1 parent c6cfe226

Implementando remapeamento de caracteres por arquivo .xml

Showing 2 changed files with 35 additions and 27 deletions   Show diff stats
@@ -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 }
@@ -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