Commit ad49222c0ad6be2bb5c9fb7c0ef01cf5a58f854c
1 parent
c56038e1
Exists in
master
and in
1 other branch
Implementando remapeamento de caracteres por arquivo .xml
Showing
1 changed file
with
50 additions
and
11 deletions
Show diff stats
charset.c
@@ -45,10 +45,10 @@ | @@ -45,10 +45,10 @@ | ||
45 | size_t len; | 45 | size_t len; |
46 | 46 | ||
47 | struct { | 47 | struct { |
48 | - unsigned short ebc; | ||
49 | - unsigned short iso; | ||
50 | - unsigned char scope; | ||
51 | - unsigned char oneway; | 48 | + unsigned short ebc; |
49 | + unsigned short iso; | ||
50 | + lib3270_remap_scope scope; | ||
51 | + unsigned char oneway; | ||
52 | } map[256]; | 52 | } map[256]; |
53 | 53 | ||
54 | }; | 54 | }; |
@@ -303,6 +303,25 @@ | @@ -303,6 +303,25 @@ | ||
303 | return (unsigned short) *id; | 303 | return (unsigned short) *id; |
304 | } | 304 | } |
305 | 305 | ||
306 | + static lib3270_remap_scope getRemapScope(const gchar *str, GError **error) { | ||
307 | + | ||
308 | + static const char *text[] = { "CS_ONLY","FT_ONLY", "BOTH" }; | ||
309 | + int i; | ||
310 | + | ||
311 | + if(!error) | ||
312 | + { | ||
313 | + for(i=0;i < N_ELEMENTS(text);i++) | ||
314 | + { | ||
315 | + if(!g_ascii_strcasecmp(str,text[i])) | ||
316 | + return (lib3270_remap_scope) i; | ||
317 | + } | ||
318 | + | ||
319 | + *error = g_error_new(ERROR_DOMAIN,EINVAL,"%s",_( "Invalid remap scope" )); | ||
320 | + } | ||
321 | + | ||
322 | + return BOTH; | ||
323 | + } | ||
324 | + | ||
306 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parse *info, GError **error) | 325 | static void element_start(GMarkupParseContext *context, const gchar *element_name, const gchar **names,const gchar **values, struct parse *info, GError **error) |
307 | { | 326 | { |
308 | trace("%s(%s)",__FUNCTION__,element_name); | 327 | trace("%s(%s)",__FUNCTION__,element_name); |
@@ -385,8 +404,9 @@ | @@ -385,8 +404,9 @@ | ||
385 | oneway = "no"; | 404 | oneway = "no"; |
386 | } | 405 | } |
387 | 406 | ||
388 | - info->map[info->len].ebc = getChar(ebc,error); | ||
389 | - info->map[info->len].iso = getChar(iso,error); | 407 | + info->map[info->len].ebc = getChar(ebc,error); |
408 | + info->map[info->len].iso = getChar(iso,error); | ||
409 | + info->map[info->len].scope = getRemapScope(scope,error); | ||
390 | 410 | ||
391 | trace("%u: ebc=%04x iso=%04x %c",(unsigned int) info->len,info->map[info->len].ebc,info->map[info->len].iso,info->map[info->len].iso); | 411 | trace("%u: ebc=%04x iso=%04x %c",(unsigned int) info->len,info->map[info->len].ebc,info->map[info->len].iso,info->map[info->len].iso); |
392 | 412 | ||
@@ -424,7 +444,6 @@ | @@ -424,7 +444,6 @@ | ||
424 | GError * error = NULL; | 444 | GError * error = NULL; |
425 | gchar * text = NULL; | 445 | gchar * text = NULL; |
426 | struct parse cfg; | 446 | struct parse cfg; |
427 | - v3270 * terminal = GTK_V3270(widget); | ||
428 | 447 | ||
429 | memset(&cfg,0,sizeof(cfg)); | 448 | memset(&cfg,0,sizeof(cfg)); |
430 | 449 | ||
@@ -462,12 +481,32 @@ | @@ -462,12 +481,32 @@ | ||
462 | gtk_dialog_run(GTK_DIALOG (dialog)); | 481 | gtk_dialog_run(GTK_DIALOG (dialog)); |
463 | gtk_widget_destroy(dialog); | 482 | gtk_widget_destroy(dialog); |
464 | 483 | ||
484 | + } else { | ||
485 | + | ||
486 | + H3270 * hSession = v3270_get_session(widget); | ||
487 | + | ||
488 | + | ||
489 | + if(hSession) | ||
490 | + { | ||
491 | + unsigned int i; | ||
492 | + | ||
493 | + trace("cgcsgid = %lx",cfg.cgcsgid); | ||
494 | + trace("display = %s",cfg.display); | ||
495 | + trace("host = %s",cfg.host); | ||
496 | + trace("length = %u",(unsigned int) cfg.len); | ||
497 | + | ||
498 | + lib3270_reset_charset(hSession, cfg.host, cfg.display, cfg.cgcsgid); | ||
499 | + | ||
500 | + for(i=0;i < cfg.len; i++) | ||
501 | + { | ||
502 | + lib3270_remap_char(hSession,cfg.map[i].ebc,cfg.map[i].iso, BOTH, 0); | ||
503 | + } | ||
504 | + | ||
505 | + } | ||
506 | + | ||
507 | + | ||
465 | } | 508 | } |
466 | 509 | ||
467 | - trace("cgcsgid = %lx",cfg.cgcsgid); | ||
468 | - trace("display = %s",cfg.display); | ||
469 | - trace("host = %s",cfg.host); | ||
470 | - trace("length = %u",(unsigned int) cfg.len); | ||
471 | 510 | ||
472 | g_free(text); | 511 | g_free(text); |
473 | g_free(cfg.host); | 512 | g_free(cfg.host); |