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); |