Commit 8de44186c475cfc1aef31d4b68600048c68d4ce7
1 parent
e815434f
Exists in
master
and in
3 other branches
Updating return codes.
Showing
8 changed files
with
28 additions
and
969 deletions
Show diff stats
src/lib3270/actions.c
| ... | ... | @@ -68,6 +68,10 @@ |
| 68 | 68 | /** |
| 69 | 69 | * @brief Launch an action by name. |
| 70 | 70 | * |
| 71 | + * @param name Name of the action to launch. | |
| 72 | + * | |
| 73 | + * @return 0 if ok, error code if not (sets errno). | |
| 74 | + * | |
| 71 | 75 | */ |
| 72 | 76 | LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name) |
| 73 | 77 | { |
| ... | ... | @@ -87,7 +91,6 @@ LIB3270_EXPORT int lib3270_action(H3270 *hSession, const char *name) |
| 87 | 91 | } |
| 88 | 92 | |
| 89 | 93 | lib3270_trace_event(hSession,"Unknown action %s\n",name); |
| 90 | - errno = ENOENT; | |
| 91 | - return -1; | |
| 94 | + return errno = ENOENT; | |
| 92 | 95 | |
| 93 | 96 | } | ... | ... |
src/lib3270/bounds.c
| ... | ... | @@ -42,7 +42,7 @@ |
| 42 | 42 | * @param start return location for start of selection, as a character offset. |
| 43 | 43 | * @param end return location for end of selection, as a character offset. |
| 44 | 44 | * |
| 45 | - * @return -1 if invalid or not connected (sets errno). | |
| 45 | + * @return Non zero if invalid or not connected (sets errno). | |
| 46 | 46 | * |
| 47 | 47 | */ |
| 48 | 48 | LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *hSession, int baddr, int *start, int *end) |
| ... | ... | @@ -52,7 +52,7 @@ LIB3270_EXPORT int lib3270_get_field_bounds(H3270 *hSession, int baddr, int *sta |
| 52 | 52 | first = lib3270_field_addr(hSession,baddr); |
| 53 | 53 | |
| 54 | 54 | if(first < 0) |
| 55 | - return -1; | |
| 55 | + return errno = (errno == 0 ? EINVAL : errno); | |
| 56 | 56 | |
| 57 | 57 | first++; |
| 58 | 58 | ... | ... |
src/lib3270/charset.c
| ... | ... | @@ -132,48 +132,6 @@ static const unsigned short asc2ebc0[256] = |
| 132 | 132 | /*f8*/ 0x70, 0xdd, 0xde, 0xdb, 0xdc, 0x8d, 0x8e, 0xdf |
| 133 | 133 | }; |
| 134 | 134 | |
| 135 | -/* | |
| 136 | -static const unsigned short ft2asc[256] = | |
| 137 | -{ | |
| 138 | - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, | |
| 139 | - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, | |
| 140 | - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, | |
| 141 | - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, | |
| 142 | - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, | |
| 143 | - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xa2,0x5c,0x7c,0xac,0x5f, | |
| 144 | - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, | |
| 145 | - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0xa6,0x7d,0x7e,0x7f, | |
| 146 | - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, | |
| 147 | - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0xf7, | |
| 148 | - 0xa0,0xe2,0xe4,0xe0,0xe1,0xe3,0xe5,0xe7,0xf1,0xe9,0xea,0xeb,0xe8,0xed,0xee,0xef, | |
| 149 | - 0xec,0xdf,0xc2,0xc4,0xc0,0xc1,0xc3,0xc5,0xc7,0xd1,0xf8,0xc9,0xca,0xcb,0xc8,0xcd, | |
| 150 | - 0xce,0xcf,0xcc,0xd8,0xab,0xbb,0xf0,0xfd,0xfe,0xb1,0xb0,0xaa,0xba,0xe6,0xb8,0xc6, | |
| 151 | - 0xa4,0xb5,0xa1,0xbf,0xd0,0xdd,0xde,0xae,0x5e,0xa3,0xa5,0xb7,0xa9,0xa7,0xb6,0xbc, | |
| 152 | - 0xbd,0xbe,0x5b,0x5d,0xaf,0xa8,0xb4,0xd7,0xad,0xf4,0xf6,0xf2,0xf3,0xf5,0xb9,0xfb, | |
| 153 | - 0xfc,0xf9,0xfa,0xff,0xb2,0xd4,0xd6,0xd2,0xd3,0xd5,0xb3,0xdb,0xdc,0xd9,0xda,0xff | |
| 154 | -}; | |
| 155 | - | |
| 156 | -const unsigned short asc2ft[256] = | |
| 157 | -{ | |
| 158 | - 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f, | |
| 159 | - 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, | |
| 160 | - 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, | |
| 161 | - 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, | |
| 162 | - 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, | |
| 163 | - 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0xe2,0x5c,0xe3,0xd8,0x5f, | |
| 164 | - 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, | |
| 165 | - 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x5d,0x7d,0x7e,0x7f, | |
| 166 | - 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, | |
| 167 | - 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x00, | |
| 168 | - 0xa0,0xd2,0x5b,0xd9,0xd0,0xda,0x7c,0xdd,0xe5,0xdc,0xcb,0xc4,0x5e,0xe8,0xd7,0xe4, | |
| 169 | - 0xca,0xc9,0xf4,0xfa,0xe6,0xd1,0xde,0xdb,0xce,0xee,0xcc,0xc5,0xdf,0xe0,0xe1,0xd3, | |
| 170 | - 0xb4,0xb5,0xb2,0xb6,0xb3,0xb7,0xcf,0xb8,0xbe,0xbb,0xbc,0xbd,0xc2,0xbf,0xc0,0xc1, | |
| 171 | - 0xd4,0xb9,0xf7,0xf8,0xf5,0xf9,0xf6,0xe7,0xc3,0xfd,0xfe,0xfb,0xfc,0xd5,0xd6,0xb1, | |
| 172 | - 0xa3,0xa4,0xa1,0xa5,0xa2,0xa6,0xcd,0xa7,0xac,0xa9,0xaa,0xab,0xb0,0xad,0xae,0xaf, | |
| 173 | - 0xc6,0xa8,0xeb,0xec,0xe9,0xed,0xea,0x9f,0xba,0xf1,0xf2,0xef,0xf0,0xc7,0xc8,0xf3 | |
| 174 | -}; | |
| 175 | -*/ | |
| 176 | - | |
| 177 | 135 | static const unsigned short asc2uc[UT_SIZE] = |
| 178 | 136 | { |
| 179 | 137 | /*40*/ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, |
| ... | ... | @@ -283,13 +241,6 @@ LIB3270_EXPORT void lib3270_reset_charset(H3270 *hSession, const char * host, co |
| 283 | 241 | |
| 284 | 242 | copy_charset(asc2uc,hSession->charset.asc2uc); |
| 285 | 243 | |
| 286 | -/* | |
| 287 | -#if defined(X3270_FT) | |
| 288 | - memcpy(hSession->charset.ft2asc, ft2asc, sizeof(hSession->charset.ft2asc)); | |
| 289 | - memcpy(hSession->charset.asc2ft, asc2ft, sizeof(hSession->charset.asc2ft)); | |
| 290 | -#endif | |
| 291 | -*/ | |
| 292 | - | |
| 293 | 244 | } |
| 294 | 245 | |
| 295 | 246 | LIB3270_EXPORT int lib3270_set_host_charset(H3270 *hSession, const char *name) |
| ... | ... | @@ -479,434 +430,8 @@ LIB3270_EXPORT void lib3270_remap_char(H3270 *hSession, unsigned short ebc, unsi |
| 479 | 430 | |
| 480 | 431 | if (iso <= 0xff) |
| 481 | 432 | { |
| 482 | -//#if defined(X3270_FT) | |
| 483 | -// unsigned char aa; | |
| 484 | -//#endif | |
| 485 | - | |
| 486 | 433 | if (scope == BOTH || scope == CS_ONLY) |
| 487 | 434 | { |
| 488 | - /* | |
| 489 | - if (iso <= 0xff) | |
| 490 | - { | |
| 491 | - cg = hSession->charset.asc2cg[iso]; | |
| 492 | - | |
| 493 | - if (hSession->charset.cg2asc[cg] == iso || iso == 0) | |
| 494 | - { | |
| 495 | - // well-defined | |
| 496 | - hSession->charset.ebc2cg[ebc] = cg; | |
| 497 | - if (!one_way) | |
| 498 | - hSession->charset.cg2ebc[cg] = ebc; | |
| 499 | - } | |
| 500 | - else | |
| 501 | - { | |
| 502 | - // into a hole | |
| 503 | - hSession->charset.ebc2cg[ebc] = CG_boxsolid; | |
| 504 | - } | |
| 505 | - } | |
| 506 | - */ | |
| 507 | - | |
| 508 | - if (ebc > 0x40) | |
| 509 | - { | |
| 510 | - hSession->charset.ebc2asc[ebc] = iso; | |
| 511 | - if (!one_way) | |
| 512 | - hSession->charset.asc2ebc[iso] = ebc; | |
| 513 | - } | |
| 514 | - } | |
| 515 | - | |
| 516 | -/* | |
| 517 | -#if defined(X3270_FT) | |
| 518 | - if (iso <= 0xff && ebc > 0x40) | |
| 519 | - { | |
| 520 | - // Change the file transfer translation table. | |
| 521 | - if (scope == BOTH) | |
| 522 | - { | |
| 523 | - // | |
| 524 | - // We have an alternate mapping of an EBCDIC | |
| 525 | - // code to an ASCII code. Modify the existing | |
| 526 | - // ASCII(ft)-to-ASCII(desired) maps. | |
| 527 | - // | |
| 528 | - // This is done by figuring out which ASCII | |
| 529 | - // code the host usually translates the given | |
| 530 | - // EBCDIC code to (asc2ft0[ebc2asc0[ebc]]). | |
| 531 | - // Now we want to translate that code to the | |
| 532 | - // given ISO code, and vice-versa. | |
| 533 | - // | |
| 534 | - aa = asc2ft[ebc2asc0[ebc]]; | |
| 535 | - if (aa != ' ') | |
| 536 | - { | |
| 537 | - hSession->charset.ft2asc[aa] = iso; | |
| 538 | - hSession->charset.asc2ft[iso] = aa; | |
| 539 | - } | |
| 540 | - } | |
| 541 | - else if (scope == FT_ONLY) | |
| 542 | - { | |
| 543 | - // | |
| 544 | - // We have a map of how the host translates | |
| 545 | - // the given EBCDIC code to an ASCII code. | |
| 546 | - // Generate the translation between that code | |
| 547 | - // and the ISO code that we would normally | |
| 548 | - // use to display that EBCDIC code. | |
| 549 | - // | |
| 550 | - hSession->charset.ft2asc[iso] = hSession->charset.ebc2asc[ebc]; | |
| 551 | - hSession->charset.asc2ft[hSession->charset.ebc2asc[ebc]] = iso; | |
| 552 | - } | |
| 553 | - } | |
| 554 | -#endif | |
| 555 | -*/ | |
| 556 | - } | |
| 557 | -} | |
| 558 | - | |
| 559 | - | |
| 560 | -/*ISO-8859-1 | |
| 561 | - | |
| 562 | -#include "resources.h" | |
| 563 | -// #include "appres.h" | |
| 564 | -#include "cg.h" | |
| 565 | - | |
| 566 | -#include "charsetc.h" | |
| 567 | -#include "kybdc.h" | |
| 568 | -#include "popupsc.h" | |
| 569 | - | |
| 570 | -#ifndef ANDROID | |
| 571 | - #include <stdlib.h> | |
| 572 | -#endif // !ANDROID | |
| 573 | - | |
| 574 | -#include "tablesc.h" | |
| 575 | -#include "utf8c.h" | |
| 576 | -#include "utilc.h" | |
| 577 | -#include "widec.h" | |
| 578 | -#include "X11keysym.h" | |
| 579 | - | |
| 580 | -#include <errno.h> | |
| 581 | - | |
| 582 | -#define EURO_SUFFIX "-euro" | |
| 583 | -#define ES_SIZE (sizeof(EURO_SUFFIX) - 1) | |
| 584 | - | |
| 585 | -// Globals. | |
| 586 | -const char *default_display_charset = "3270cg-1a,3270cg-1,iso8859-1"; | |
| 587 | - | |
| 588 | -// Statics. | |
| 589 | -static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs); | |
| 590 | - | |
| 591 | -typedef enum { CS_ONLY, FT_ONLY, BOTH } remap_scope; | |
| 592 | - | |
| 593 | -static enum cs_result remap_chars(H3270 *hSession, const char *csname, char *spec, remap_scope scope, int *ne); | |
| 594 | -static void remap_one(H3270 *hSession, unsigned char ebc, KeySym iso, remap_scope scope,Boolean one_way); | |
| 595 | - | |
| 596 | -#if defined(DEBUG_CHARSET) | |
| 597 | -static enum cs_result check_charset(void); | |
| 598 | -static char *char_if_ascii7(unsigned long l); | |
| 599 | -#endif | |
| 600 | - | |
| 601 | -static void set_cgcsgids(H3270 *hSession, const char *spec); | |
| 602 | -static int set_cgcsgid(char *spec, unsigned long *idp); | |
| 603 | - | |
| 604 | -static KeySym StringToKeysym(char *s); | |
| 605 | - | |
| 606 | -struct charset_buffer | |
| 607 | -{ | |
| 608 | - unsigned char ebc2cg[256]; | |
| 609 | - unsigned char cg2ebc[256]; | |
| 610 | - unsigned char ebc2asc[256]; | |
| 611 | - unsigned char asc2ebc[256]; | |
| 612 | - | |
| 613 | - #if defined(X3270_FT) | |
| 614 | - unsigned char ft2asc[256]; | |
| 615 | - unsigned char asc2ft[256]; | |
| 616 | - #endif | |
| 617 | -}; | |
| 618 | - | |
| 619 | - | |
| 620 | -static void save_charset(H3270 *hSession, struct charset_buffer *save) | |
| 621 | -{ | |
| 622 | - (void) memcpy((char *)save->ebc2cg, (char *) hSession->charset.ebc2cg, 256); | |
| 623 | - (void) memcpy((char *)save->cg2ebc, (char *) hSession->charset.cg2ebc, 256); | |
| 624 | - (void) memcpy((char *)save->ebc2asc, (char *) hSession->charset.ebc2asc, 256); | |
| 625 | - (void) memcpy((char *)save->asc2ebc, (char *) hSession->charset.asc2ebc, 256); | |
| 626 | -#if defined(X3270_FT) | |
| 627 | - (void) memcpy((char *)save->ft2asc, (char *) hSession->charset.ft2asc, 256); | |
| 628 | - (void) memcpy((char *)save->asc2ft, (char *) hSession->charset.asc2ft, 256); | |
| 629 | -#endif | |
| 630 | -} | |
| 631 | - | |
| 632 | -static void restore_charset(H3270 *hSession, struct charset_buffer *save) | |
| 633 | -{ | |
| 634 | - (void) memcpy((char *)hSession->charset.ebc2cg, (char *)save->ebc2cg, 256); | |
| 635 | - (void) memcpy((char *)hSession->charset.cg2ebc, (char *)save->cg2ebc, 256); | |
| 636 | - (void) memcpy((char *)hSession->charset.ebc2asc, (char *)save->ebc2asc, 256); | |
| 637 | - (void) memcpy((char *)hSession->charset.asc2ebc, (char *)save->asc2ebc, 256); | |
| 638 | -#if defined(X3270_FT) | |
| 639 | - (void) memcpy((char *)hSession->charset.ft2asc, (char *)save->ft2asc, 256); | |
| 640 | - (void) memcpy((char *)hSession->charset.asc2ft, (char *)save->asc2ft, 256); | |
| 641 | -#endif | |
| 642 | -} | |
| 643 | - | |
| 644 | -// | |
| 645 | -// Change character sets. | |
| 646 | -// | |
| 647 | -enum cs_result charset_init(H3270 *hSession, const char *csname) | |
| 648 | -{ | |
| 649 | - enum cs_result rc; | |
| 650 | - char *ccs, *cftcs; | |
| 651 | - const char *ak; | |
| 652 | - struct charset_buffer save; | |
| 653 | - | |
| 654 | - // Do nothing, successfully. | |
| 655 | - if (csname == CN || !strcasecmp(csname, "us")) | |
| 656 | - { | |
| 657 | - charset_defaults(hSession); | |
| 658 | - set_cgcsgids(hSession,CN); | |
| 659 | - set_display_charset(hSession, "ISO-8859-1"); | |
| 660 | - return CS_OKAY; | |
| 661 | - } | |
| 662 | - | |
| 663 | - // Figure out if it's already in a resource or in a file. | |
| 664 | -#ifdef ANDROID | |
| 665 | - ccs = strdup("0xad: [ \n 0xba: Yacute \n0xbd: ] \n 0xbb: diaeresis \n"); | |
| 666 | -#else | |
| 667 | - ccs = lib3270_get_resource_string(hSession,"charset", csname, NULL); | |
| 668 | -#endif | |
| 669 | - if (!ccs) | |
| 670 | - return CS_NOTFOUND; | |
| 671 | - | |
| 672 | - // Grab the File Transfer character set. | |
| 673 | - cftcs = lib3270_get_resource_string(hSession,"ftCharset",csname,NULL); | |
| 674 | - | |
| 675 | - // Save the current definitions, and start over with the defaults. | |
| 676 | - save_charset(hSession,&save); | |
| 677 | - charset_defaults(hSession); | |
| 678 | - | |
| 679 | - // Check for auto-keymap. | |
| 680 | - ak = lib3270_get_resource_string(hSession,"autoKeymap", csname, NULL); | |
| 681 | - if (ak != NULL) | |
| 682 | - hSession->auto_keymap = strcasecmp(ak, "true") ? 0 : 1; | |
| 683 | - else | |
| 684 | - hSession->auto_keymap = 0; | |
| 685 | - | |
| 686 | - // Interpret them. | |
| 687 | - rc = resource_charset(hSession,csname, ccs, cftcs); | |
| 688 | - | |
| 689 | - // Free them. | |
| 690 | - lib3270_free(ccs); | |
| 691 | - lib3270_free(cftcs); | |
| 692 | - | |
| 693 | -#if defined(DEBUG_CHARSET) | |
| 694 | - if (rc == CS_OKAY) | |
| 695 | - rc = check_charset(); | |
| 696 | -#endif | |
| 697 | - | |
| 698 | - if (rc != CS_OKAY) | |
| 699 | - restore_charset(hSession,&save); | |
| 700 | - | |
| 701 | - return rc; | |
| 702 | -} | |
| 703 | - | |
| 704 | -// | |
| 705 | -// Set a CGCSGID. Return 0 for success, -1 for failure. | |
| 706 | -// | |
| 707 | -static int set_cgcsgid(char *spec, unsigned long *r) | |
| 708 | -{ | |
| 709 | - unsigned long cp; | |
| 710 | - char *ptr; | |
| 711 | - | |
| 712 | - if (spec != CN && | |
| 713 | - (cp = strtoul(spec, &ptr, 0)) && | |
| 714 | - ptr != spec && | |
| 715 | - *ptr == '\0') { | |
| 716 | - if (!(cp & ~0xffffL)) | |
| 717 | - *r = LIB3270_DEFAULT_CGEN | cp; | |
| 718 | - else | |
| 719 | - *r = cp; | |
| 720 | - return 0; | |
| 721 | - } else | |
| 722 | - return -1; | |
| 723 | -} | |
| 724 | - | |
| 725 | -// Set the CGCSGIDs. | |
| 726 | -static void set_cgcsgids(H3270 *hSession, const char *spec) | |
| 727 | -{ | |
| 728 | - int n_ids = 0; | |
| 729 | - char *spec_copy; | |
| 730 | - char *buf; | |
| 731 | - char *token; | |
| 732 | - | |
| 733 | - if (spec != CN) { | |
| 734 | - buf = spec_copy = NewString(spec); | |
| 735 | - while (n_ids >= 0 && (token = strtok(buf, "+")) != CN) { | |
| 736 | - unsigned long *idp = NULL; | |
| 737 | - | |
| 738 | - buf = CN; | |
| 739 | - switch (n_ids) { | |
| 740 | - case 0: | |
| 741 | - idp = &hSession->cgcsgid; | |
| 742 | - break; | |
| 743 | -#if defined(X3270_DBCS) | |
| 744 | - case 1: | |
| 745 | - idp = &hSession->cgcsgid_dbcs; | |
| 746 | - break; | |
| 747 | -#endif | |
| 748 | - default: | |
| 749 | - popup_an_error(hSession,_( "Extra CGCSGID(s), ignoring" )); | |
| 750 | - break; | |
| 751 | - } | |
| 752 | - if (idp == NULL) | |
| 753 | - break; | |
| 754 | - if (set_cgcsgid(token, idp) < 0) { | |
| 755 | - popup_an_error(hSession,_( "Invalid CGCSGID '%s', ignoring" ),token); | |
| 756 | - n_ids = -1; | |
| 757 | - break; | |
| 758 | - } | |
| 759 | - n_ids++; | |
| 760 | - } | |
| 761 | - lib3270_free(spec_copy); | |
| 762 | - if (n_ids > 0) | |
| 763 | - return; | |
| 764 | - } | |
| 765 | - | |
| 766 | - hSession->cgcsgid = LIB3270_DEFAULT_CGEN | LIB3270_DEFAULT_CSET; | |
| 767 | -#if defined(X3270_DBCS) | |
| 768 | - hSession->cgcsgid_dbcs = 0L; | |
| 769 | -#endif | |
| 770 | -} | |
| 771 | - | |
| 772 | -// Define a charset from resources. | |
| 773 | -static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs) | |
| 774 | -{ | |
| 775 | - enum cs_result rc; | |
| 776 | - int ne = 0; | |
| 777 | - char * rcs = CN; | |
| 778 | - int n_rcs = 0; | |
| 779 | - char * dcs; | |
| 780 | - | |
| 781 | - // Interpret the spec. | |
| 782 | - rc = remap_chars(hSession, csname, cs, (ftcs == NULL)? BOTH: CS_ONLY, &ne); | |
| 783 | - if (rc != CS_OKAY) | |
| 784 | - return rc; | |
| 785 | - if (ftcs != NULL) { | |
| 786 | - rc = remap_chars(hSession, csname, ftcs, FT_ONLY, &ne); | |
| 787 | - if (rc != CS_OKAY) | |
| 788 | - return rc; | |
| 789 | - } | |
| 790 | - | |
| 791 | - rcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL); | |
| 792 | - | |
| 793 | - // Isolate the pieces. | |
| 794 | - if (rcs != CN) | |
| 795 | - { | |
| 796 | - char *buf, *token; | |
| 797 | - | |
| 798 | - buf = rcs; | |
| 799 | - while ((token = strtok(buf, "+")) != CN) | |
| 800 | - { | |
| 801 | - buf = CN; | |
| 802 | - switch (n_rcs) | |
| 803 | - { | |
| 804 | - case 0: | |
| 805 | -#if defined(X3270_DBCS) | |
| 806 | - case 1: | |
| 807 | -#endif | |
| 808 | - break; | |
| 809 | - default: | |
| 810 | - popup_an_error(NULL,"Extra value(s) in displayCharset.%s, ignoring", csname); | |
| 811 | - break; | |
| 812 | - } | |
| 813 | - n_rcs++; | |
| 814 | - } | |
| 815 | - } | |
| 816 | - | |
| 817 | - lib3270_free(rcs); | |
| 818 | - | |
| 819 | - // Set up the cgcsgid. | |
| 820 | -// set_cgcsgids(get_fresource("%s.%s", "codepage", csname)); | |
| 821 | - { | |
| 822 | - char *ptr = lib3270_get_resource_string(hSession,"codepage", csname, NULL); | |
| 823 | - set_cgcsgids(hSession,ptr); | |
| 824 | - lib3270_free(ptr); | |
| 825 | - } | |
| 826 | - | |
| 827 | -// dcs = get_fresource("%s.%s", "displayCharset", csname); | |
| 828 | - dcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL); | |
| 829 | - | |
| 830 | - if (dcs != NULL) | |
| 831 | - set_display_charset(hSession,dcs); | |
| 832 | - else | |
| 833 | - set_display_charset(hSession,"ISO-8859-1"); | |
| 834 | - | |
| 835 | - lib3270_free(dcs); | |
| 836 | - | |
| 837 | - // Set up the character set name. | |
| 838 | -// set_charset_name(csname); | |
| 839 | - | |
| 840 | - return CS_OKAY; | |
| 841 | -} | |
| 842 | - | |
| 843 | -// | |
| 844 | -// Map a keysym name or literal string into a character. | |
| 845 | -//Returns NoSymbol if there is a problem. | |
| 846 | -// | |
| 847 | -static KeySym | |
| 848 | -parse_keysym(char *s, Boolean extended) | |
| 849 | -{ | |
| 850 | - KeySym k; | |
| 851 | - | |
| 852 | - k = StringToKeysym(s); | |
| 853 | - if (k == NoSymbol) { | |
| 854 | - if (strlen(s) == 1) | |
| 855 | - k = *s & 0xff; | |
| 856 | - else if (s[0] == '0' && s[1] == 'x') { | |
| 857 | - unsigned long l; | |
| 858 | - char *ptr; | |
| 859 | - | |
| 860 | - l = strtoul(s, &ptr, 16); | |
| 861 | - if (*ptr != '\0' || (l & ~0xffff)) | |
| 862 | - return NoSymbol; | |
| 863 | - return (KeySym)l; | |
| 864 | - } else | |
| 865 | - return NoSymbol; | |
| 866 | - } | |
| 867 | - if (k < ' ' || (!extended && k > 0xff)) | |
| 868 | - return NoSymbol; | |
| 869 | - else | |
| 870 | - return k; | |
| 871 | -} | |
| 872 | - | |
| 873 | -// Process a single character definition. | |
| 874 | -static void remap_one(H3270 *hSession, unsigned char ebc, KeySym iso, remap_scope scope, Boolean one_way) | |
| 875 | -{ | |
| 876 | - unsigned char cg; | |
| 877 | - | |
| 878 | - // Ignore mappings of EBCDIC control codes and the space character. | |
| 879 | - if (ebc <= 0x40) | |
| 880 | - return; | |
| 881 | - | |
| 882 | - // If they want to map to a NULL or a blank, make it a one-way blank. | |
| 883 | - if (iso == 0x0) | |
| 884 | - iso = 0x20; | |
| 885 | - if (iso == 0x20) | |
| 886 | - one_way = True; | |
| 887 | - | |
| 888 | - if (!hSession->auto_keymap || iso <= 0xff) { | |
| 889 | -#if defined(X3270_FT) | |
| 890 | - unsigned char aa; | |
| 891 | -#endif | |
| 892 | - | |
| 893 | - if (scope == BOTH || scope == CS_ONLY) { | |
| 894 | - if (iso <= 0xff) { | |
| 895 | - cg = hSession->charset.asc2cg[iso]; | |
| 896 | - | |
| 897 | - if (hSession->charset.cg2asc[cg] == iso || iso == 0) | |
| 898 | - { | |
| 899 | - // well-defined | |
| 900 | - hSession->charset.ebc2cg[ebc] = cg; | |
| 901 | - if (!one_way) | |
| 902 | - hSession->charset.cg2ebc[cg] = ebc; | |
| 903 | - } | |
| 904 | - else | |
| 905 | - { | |
| 906 | - // into a hole | |
| 907 | - hSession->charset.ebc2cg[ebc] = CG_boxsolid; | |
| 908 | - } | |
| 909 | - } | |
| 910 | 435 | if (ebc > 0x40) |
| 911 | 436 | { |
| 912 | 437 | hSession->charset.ebc2asc[ebc] = iso; |
| ... | ... | @@ -914,441 +439,9 @@ static void remap_one(H3270 *hSession, unsigned char ebc, KeySym iso, remap_scop |
| 914 | 439 | hSession->charset.asc2ebc[iso] = ebc; |
| 915 | 440 | } |
| 916 | 441 | } |
| 917 | -#if defined(X3270_FT) | |
| 918 | - if (iso <= 0xff && ebc > 0x40) { | |
| 919 | - // Change the file transfer translation table. | |
| 920 | - if (scope == BOTH) { | |
| 921 | - // | |
| 922 | - // We have an alternate mapping of an EBCDIC | |
| 923 | - // code to an ASCII code. Modify the existing | |
| 924 | - // ASCII(ft)-to-ASCII(desired) maps. | |
| 925 | - // | |
| 926 | - // This is done by figuring out which ASCII | |
| 927 | - // code the host usually translates the given | |
| 928 | - // EBCDIC code to (asc2ft0[ebc2asc0[ebc]]). | |
| 929 | - // Now we want to translate that code to the | |
| 930 | - // given ISO code, and vice-versa. | |
| 931 | - // | |
| 932 | - aa = asc2ft0[ebc2asc0[ebc]]; | |
| 933 | - if (aa != ' ') { | |
| 934 | - hSession->charset.ft2asc[aa] = iso; | |
| 935 | - hSession->charset.asc2ft[iso] = aa; | |
| 936 | - } | |
| 937 | - } else if (scope == FT_ONLY) { | |
| 938 | - // | |
| 939 | - // We have a map of how the host translates | |
| 940 | - // the given EBCDIC code to an ASCII code. | |
| 941 | - // Generate the translation between that code | |
| 942 | - // and the ISO code that we would normally | |
| 943 | - // use to display that EBCDIC code. | |
| 944 | - // | |
| 945 | - hSession->charset.ft2asc[iso] = hSession->charset.ebc2asc[ebc]; | |
| 946 | - hSession->charset.asc2ft[hSession->charset.ebc2asc[ebc]] = iso; | |
| 947 | - } | |
| 948 | - } | |
| 949 | -#endif | |
| 950 | - } else { | |
| 951 | - // Auto-keymap. | |
| 952 | - add_xk(iso, (KeySym)hSession->charset.ebc2asc[ebc]); | |
| 953 | - } | |
| 954 | -} | |
| 955 | - | |
| 956 | -// | |
| 957 | -// Parse an EBCDIC character set map, a series of pairs of numeric EBCDIC codes and keysyms. | |
| 958 | -// | |
| 959 | -// If the keysym is in the range 1..255, it is a remapping of the EBCDIC code | |
| 960 | -// for a standard Latin-1 graphic, and the CG-to-EBCDIC map will be modified | |
| 961 | -// to match. | |
| 962 | -// | |
| 963 | -// Otherwise (keysym > 255), it is a definition for the EBCDIC code to use for | |
| 964 | -// a multibyte keysym. This is intended for 8-bit fonts that with special | |
| 965 | -// characters that replace certain standard Latin-1 graphics. The keysym | |
| 966 | -// will be entered into the extended keysym translation table. | |
| 967 | -// | |
| 968 | -static enum cs_result remap_chars(H3270 *hSession, const char *csname, char *spec, remap_scope scope, int *ne) | |
| 969 | -{ | |
| 970 | - char *s; | |
| 971 | - char *ebcs, *isos; | |
| 972 | - unsigned char ebc; | |
| 973 | - KeySym iso; | |
| 974 | - int ns; | |
| 975 | - enum cs_result rc = CS_OKAY; | |
| 976 | - Boolean is_table = False; | |
| 977 | - Boolean one_way = False; | |
| 978 | - | |
| 979 | - // Pick apart a copy of the spec. | |
| 980 | - s = spec = NewString(spec); | |
| 981 | - while (isspace(*s)) { | |
| 982 | - s++; | |
| 983 | - } | |
| 984 | - if (!strncmp(s, "#table", 6)) { | |
| 985 | - is_table = True; | |
| 986 | - s += 6; | |
| 987 | - } | |
| 988 | - | |
| 989 | - if (is_table) { | |
| 990 | - int ebc = 0; | |
| 991 | - char *tok; | |
| 992 | - char *ptr; | |
| 993 | - | |
| 994 | - while ((tok = strtok(s, " \t\n")) != CN) { | |
| 995 | - if (ebc >= 256) { | |
| 996 | - popup_an_error(hSession,_( "Charset has more than 256 entries" )); | |
| 997 | - rc = CS_BAD; | |
| 998 | - break; | |
| 999 | - } | |
| 1000 | - if (tok[0] == '*') { | |
| 1001 | - one_way = True; | |
| 1002 | - tok++; | |
| 1003 | - } else | |
| 1004 | - one_way = False; | |
| 1005 | - iso = strtoul(tok, &ptr, 0); | |
| 1006 | - if (ptr == tok || *ptr != '\0' || iso > 256L) { | |
| 1007 | - if (strlen(tok) == 1) | |
| 1008 | - iso = tok[0] & 0xff; | |
| 1009 | - else { | |
| 1010 | - popup_an_error(hSession,_( "Invalid charset entry '%s' (#%d)" ),tok, ebc); | |
| 1011 | - rc = CS_BAD; | |
| 1012 | - break; | |
| 1013 | - } | |
| 1014 | - } | |
| 1015 | - remap_one(hSession, ebc, iso, scope, one_way); | |
| 1016 | - | |
| 1017 | - ebc++; | |
| 1018 | - s = CN; | |
| 1019 | - } | |
| 1020 | - if (ebc != 256) { | |
| 1021 | - popup_an_error(NULL,_( "Charset has %d entries, need 256" ), ebc); | |
| 1022 | - rc = CS_BAD; | |
| 1023 | - } else { | |
| 1024 | - // | |
| 1025 | - // The entire EBCDIC-to-ASCII mapping has been defined. | |
| 1026 | - // Make sure that any printable ASCII character that | |
| 1027 | - // doesn't now map back onto itself is mapped onto an | |
| 1028 | - // EBCDIC NUL. | |
| 1029 | - // | |
| 1030 | - int i; | |
| 1031 | - | |
| 1032 | - for (i = 0; i < 256; i++) { | |
| 1033 | - if ((i & 0x7f) > 0x20 && i != 0x7f && | |
| 1034 | - hSession->charset.asc2ebc[i] != 0 && | |
| 1035 | - hSession->charset.ebc2asc[hSession->charset.asc2ebc[i]] != i) { | |
| 1036 | - hSession->charset.asc2ebc[i] = 0; | |
| 1037 | - } | |
| 1038 | - } | |
| 1039 | - } | |
| 1040 | - } else { | |
| 1041 | - while ((ns = split_dresource(&s, &ebcs, &isos))) { | |
| 1042 | - char *ptr; | |
| 1043 | - | |
| 1044 | - (*ne)++; | |
| 1045 | - if (ebcs[0] == '*') { | |
| 1046 | - one_way = True; | |
| 1047 | - ebcs++; | |
| 1048 | - } else | |
| 1049 | - one_way = False; | |
| 1050 | - if (ns < 0 || | |
| 1051 | - ((ebc = strtoul(ebcs, &ptr, 0)), | |
| 1052 | - ptr == ebcs || *ptr != '\0') || | |
| 1053 | - (iso = parse_keysym(isos, True)) == NoSymbol) { | |
| 1054 | - popup_an_error(hSession,_( "Cannot parse %s \"%s\", entry %d" ), "charset", csname, *ne); | |
| 1055 | - rc = CS_BAD; | |
| 1056 | - break; | |
| 1057 | - } | |
| 1058 | - remap_one(hSession, ebc, iso, scope, one_way); | |
| 1059 | - } | |
| 1060 | - } | |
| 1061 | - lib3270_free(spec); | |
| 1062 | - return rc; | |
| 1063 | -} | |
| 1064 | - | |
| 1065 | -#if defined(DEBUG_CHARSET) | |
| 1066 | -static char * | |
| 1067 | -char_if_ascii7(unsigned long l) | |
| 1068 | -{ | |
| 1069 | - static char buf[6]; | |
| 1070 | 442 | |
| 1071 | - if (((l & 0x7f) > ' ' && (l & 0x7f) < 0x7f) || l == 0xff) { | |
| 1072 | - (void) sprintf(buf, " ('%c')", (char)l); | |
| 1073 | - return buf; | |
| 1074 | - } else | |
| 1075 | - return ""; | |
| 1076 | -} | |
| 1077 | -#endif | |
| 1078 | - | |
| 1079 | - | |
| 1080 | -#if defined(DEBUG_CHARSET) | |
| 1081 | -// | |
| 1082 | -// Verify that a character set is not ambiguous. | |
| 1083 | -// (All this checks is that multiple EBCDIC codes map onto the same ISO code. | |
| 1084 | -// Hmm. God, I find the CG stuff confusing.) | |
| 1085 | -// | |
| 1086 | -static enum cs_result | |
| 1087 | -check_charset(void) | |
| 1088 | -{ | |
| 1089 | - unsigned long iso; | |
| 1090 | - unsigned char ebc; | |
| 1091 | - enum cs_result rc = CS_OKAY; | |
| 1092 | - | |
| 1093 | - for (iso = 1; iso <= 255; iso++) { | |
| 1094 | - unsigned char multi[256]; | |
| 1095 | - int n_multi = 0; | |
| 1096 | - | |
| 1097 | - if (iso == ' ') | |
| 1098 | - continue; | |
| 1099 | - | |
| 1100 | - for (ebc = 0x41; ebc < 0xff; ebc++) { | |
| 1101 | - if (cg2asc[ebc2cg[ebc]] == iso) { | |
| 1102 | - multi[n_multi] = ebc; | |
| 1103 | - n_multi++; | |
| 1104 | - } | |
| 1105 | - } | |
| 1106 | - if (n_multi > 1) { | |
| 1107 | - xs_warning("Display character 0x%02x%s has multiple " | |
| 1108 | - "EBCDIC definitions: X'%02X', X'%02X'%s", | |
| 1109 | - iso, char_if_ascii7(iso), | |
| 1110 | - multi[0], multi[1], (n_multi > 2)? ", ...": ""); | |
| 1111 | - rc = CS_BAD; | |
| 1112 | - } | |
| 1113 | 443 | } |
| 1114 | - return rc; | |
| 1115 | 444 | } |
| 1116 | -#endif | |
| 1117 | 445 | |
| 1118 | -void set_display_charset(H3270 *session, const char *dcs) | |
| 1119 | -{ | |
| 1120 | - session->charset.display = strdup(dcs); | |
| 1121 | -} | |
| 1122 | - | |
| 1123 | -static KeySym StringToKeysym(char *s) | |
| 1124 | -{ | |
| 1125 | - static struct | |
| 1126 | - { | |
| 1127 | - const char *name; | |
| 1128 | - KeySym keysym; | |
| 1129 | - } latin1[] = | |
| 1130 | - { | |
| 1131 | - { "space", XK_space }, | |
| 1132 | - { "exclam", XK_exclam }, | |
| 1133 | - { "quotedbl", XK_quotedbl }, | |
| 1134 | - { "numbersign", XK_numbersign }, | |
| 1135 | - { "dollar", XK_dollar }, | |
| 1136 | - { "percent", XK_percent }, | |
| 1137 | - { "ampersand", XK_ampersand }, | |
| 1138 | - { "apostrophe", XK_apostrophe }, | |
| 1139 | - { "quoteright", XK_quoteright }, | |
| 1140 | - { "parenleft", XK_parenleft }, | |
| 1141 | - { "parenright", XK_parenright }, | |
| 1142 | - { "asterisk", XK_asterisk }, | |
| 1143 | - { "plus", XK_plus }, | |
| 1144 | - { "comma", XK_comma }, | |
| 1145 | - { "minus", XK_minus }, | |
| 1146 | - { "period", XK_period }, | |
| 1147 | - { "slash", XK_slash }, | |
| 1148 | - { "0", XK_0 }, | |
| 1149 | - { "1", XK_1 }, | |
| 1150 | - { "2", XK_2 }, | |
| 1151 | - { "3", XK_3 }, | |
| 1152 | - { "4", XK_4 }, | |
| 1153 | - { "5", XK_5 }, | |
| 1154 | - { "6", XK_6 }, | |
| 1155 | - { "7", XK_7 }, | |
| 1156 | - { "8", XK_8 }, | |
| 1157 | - { "9", XK_9 }, | |
| 1158 | - { "colon", XK_colon }, | |
| 1159 | - { "semicolon", XK_semicolon }, | |
| 1160 | - { "less", XK_less }, | |
| 1161 | - { "equal", XK_equal }, | |
| 1162 | - { "greater", XK_greater }, | |
| 1163 | - { "question", XK_question }, | |
| 1164 | - { "at", XK_at }, | |
| 1165 | - { "A", XK_A }, | |
| 1166 | - { "B", XK_B }, | |
| 1167 | - { "C", XK_C }, | |
| 1168 | - { "D", XK_D }, | |
| 1169 | - { "E", XK_E }, | |
| 1170 | - { "F", XK_F }, | |
| 1171 | - { "G", XK_G }, | |
| 1172 | - { "H", XK_H }, | |
| 1173 | - { "I", XK_I }, | |
| 1174 | - { "J", XK_J }, | |
| 1175 | - { "K", XK_K }, | |
| 1176 | - { "L", XK_L }, | |
| 1177 | - { "M", XK_M }, | |
| 1178 | - { "N", XK_N }, | |
| 1179 | - { "O", XK_O }, | |
| 1180 | - { "P", XK_P }, | |
| 1181 | - { "Q", XK_Q }, | |
| 1182 | - { "R", XK_R }, | |
| 1183 | - { "S", XK_S }, | |
| 1184 | - { "T", XK_T }, | |
| 1185 | - { "U", XK_U }, | |
| 1186 | - { "V", XK_V }, | |
| 1187 | - { "W", XK_W }, | |
| 1188 | - { "X", XK_X }, | |
| 1189 | - { "Y", XK_Y }, | |
| 1190 | - { "Z", XK_Z }, | |
| 1191 | - { "bracketleft", XK_bracketleft }, | |
| 1192 | - { "backslash", XK_backslash }, | |
| 1193 | - { "bracketright", XK_bracketright }, | |
| 1194 | - { "asciicircum", XK_asciicircum }, | |
| 1195 | - { "underscore", XK_underscore }, | |
| 1196 | - { "grave", XK_grave }, | |
| 1197 | - { "quoteleft", XK_quoteleft }, | |
| 1198 | - { "a", XK_a }, | |
| 1199 | - { "b", XK_b }, | |
| 1200 | - { "c", XK_c }, | |
| 1201 | - { "d", XK_d }, | |
| 1202 | - { "e", XK_e }, | |
| 1203 | - { "f", XK_f }, | |
| 1204 | - { "g", XK_g }, | |
| 1205 | - { "h", XK_h }, | |
| 1206 | - { "i", XK_i }, | |
| 1207 | - { "j", XK_j }, | |
| 1208 | - { "k", XK_k }, | |
| 1209 | - { "l", XK_l }, | |
| 1210 | - { "m", XK_m }, | |
| 1211 | - { "n", XK_n }, | |
| 1212 | - { "o", XK_o }, | |
| 1213 | - { "p", XK_p }, | |
| 1214 | - { "q", XK_q }, | |
| 1215 | - { "r", XK_r }, | |
| 1216 | - { "s", XK_s }, | |
| 1217 | - { "t", XK_t }, | |
| 1218 | - { "u", XK_u }, | |
| 1219 | - { "v", XK_v }, | |
| 1220 | - { "w", XK_w }, | |
| 1221 | - { "x", XK_x }, | |
| 1222 | - { "y", XK_y }, | |
| 1223 | - { "z", XK_z }, | |
| 1224 | - { "braceleft", XK_braceleft }, | |
| 1225 | - { "bar", XK_bar }, | |
| 1226 | - { "braceright", XK_braceright }, | |
| 1227 | - { "asciitilde", XK_asciitilde }, | |
| 1228 | - { "nobreakspace", XK_nobreakspace }, | |
| 1229 | - { "exclamdown", XK_exclamdown }, | |
| 1230 | - { "cent", XK_cent }, | |
| 1231 | - { "sterling", XK_sterling }, | |
| 1232 | - { "currency", XK_currency }, | |
| 1233 | - { "yen", XK_yen }, | |
| 1234 | - { "brokenbar", XK_brokenbar }, | |
| 1235 | - { "section", XK_section }, | |
| 1236 | - { "diaeresis", XK_diaeresis }, | |
| 1237 | - { "copyright", XK_copyright }, | |
| 1238 | - { "ordfeminine", XK_ordfeminine }, | |
| 1239 | - { "guillemotleft", XK_guillemotleft }, | |
| 1240 | - { "notsign", XK_notsign }, | |
| 1241 | - { "hyphen", XK_hyphen }, | |
| 1242 | - { "registered", XK_registered }, | |
| 1243 | - { "macron", XK_macron }, | |
| 1244 | - { "degree", XK_degree }, | |
| 1245 | - { "plusminus", XK_plusminus }, | |
| 1246 | - { "twosuperior", XK_twosuperior }, | |
| 1247 | - { "threesuperior", XK_threesuperior }, | |
| 1248 | - { "acute", XK_acute }, | |
| 1249 | - { "mu", XK_mu }, | |
| 1250 | - { "paragraph", XK_paragraph }, | |
| 1251 | - { "periodcentered", XK_periodcentered }, | |
| 1252 | - { "cedilla", XK_cedilla }, | |
| 1253 | - { "onesuperior", XK_onesuperior }, | |
| 1254 | - { "masculine", XK_masculine }, | |
| 1255 | - { "guillemotright", XK_guillemotright }, | |
| 1256 | - { "onequarter", XK_onequarter }, | |
| 1257 | - { "onehalf", XK_onehalf }, | |
| 1258 | - { "threequarters", XK_threequarters }, | |
| 1259 | - { "questiondown", XK_questiondown }, | |
| 1260 | - { "Agrave", XK_Agrave }, | |
| 1261 | - { "Aacute", XK_Aacute }, | |
| 1262 | - { "Acircumflex", XK_Acircumflex }, | |
| 1263 | - { "Atilde", XK_Atilde }, | |
| 1264 | - { "Adiaeresis", XK_Adiaeresis }, | |
| 1265 | - { "Aring", XK_Aring }, | |
| 1266 | - { "AE", XK_AE }, | |
| 1267 | - { "Ccedilla", XK_Ccedilla }, | |
| 1268 | - { "Egrave", XK_Egrave }, | |
| 1269 | - { "Eacute", XK_Eacute }, | |
| 1270 | - { "Ecircumflex", XK_Ecircumflex }, | |
| 1271 | - { "Ediaeresis", XK_Ediaeresis }, | |
| 1272 | - { "Igrave", XK_Igrave }, | |
| 1273 | - { "Iacute", XK_Iacute }, | |
| 1274 | - { "Icircumflex", XK_Icircumflex }, | |
| 1275 | - { "Idiaeresis", XK_Idiaeresis }, | |
| 1276 | - { "ETH", XK_ETH }, | |
| 1277 | - { "Eth", XK_Eth }, | |
| 1278 | - { "Ntilde", XK_Ntilde }, | |
| 1279 | - { "Ograve", XK_Ograve }, | |
| 1280 | - { "Oacute", XK_Oacute }, | |
| 1281 | - { "Ocircumflex", XK_Ocircumflex }, | |
| 1282 | - { "Otilde", XK_Otilde }, | |
| 1283 | - { "Odiaeresis", XK_Odiaeresis }, | |
| 1284 | - { "multiply", XK_multiply }, | |
| 1285 | - { "Ooblique", XK_Ooblique }, | |
| 1286 | - { "Ugrave", XK_Ugrave }, | |
| 1287 | - { "Uacute", XK_Uacute }, | |
| 1288 | - { "Ucircumflex", XK_Ucircumflex }, | |
| 1289 | - { "Udiaeresis", XK_Udiaeresis }, | |
| 1290 | - { "Yacute", XK_Yacute }, | |
| 1291 | - { "THORN", XK_THORN }, | |
| 1292 | - { "Thorn", XK_Thorn }, | |
| 1293 | - { "ssharp", XK_ssharp }, | |
| 1294 | - { "agrave", XK_agrave }, | |
| 1295 | - { "aacute", XK_aacute }, | |
| 1296 | - { "acircumflex", XK_acircumflex }, | |
| 1297 | - { "atilde", XK_atilde }, | |
| 1298 | - { "adiaeresis", XK_adiaeresis }, | |
| 1299 | - { "aring", XK_aring }, | |
| 1300 | - { "ae", XK_ae }, | |
| 1301 | - { "ccedilla", XK_ccedilla }, | |
| 1302 | - { "egrave", XK_egrave }, | |
| 1303 | - { "eacute", XK_eacute }, | |
| 1304 | - { "ecircumflex", XK_ecircumflex }, | |
| 1305 | - { "ediaeresis", XK_ediaeresis }, | |
| 1306 | - { "igrave", XK_igrave }, | |
| 1307 | - { "iacute", XK_iacute }, | |
| 1308 | - { "icircumflex", XK_icircumflex }, | |
| 1309 | - { "idiaeresis", XK_idiaeresis }, | |
| 1310 | - { "eth", XK_eth }, | |
| 1311 | - { "ntilde", XK_ntilde }, | |
| 1312 | - { "ograve", XK_ograve }, | |
| 1313 | - { "oacute", XK_oacute }, | |
| 1314 | - { "ocircumflex", XK_ocircumflex }, | |
| 1315 | - { "otilde", XK_otilde }, | |
| 1316 | - { "odiaeresis", XK_odiaeresis }, | |
| 1317 | - { "division", XK_division }, | |
| 1318 | - { "oslash", XK_oslash }, | |
| 1319 | - { "ugrave", XK_ugrave }, | |
| 1320 | - { "uacute", XK_uacute }, | |
| 1321 | - { "ucircumflex", XK_ucircumflex }, | |
| 1322 | - { "udiaeresis", XK_udiaeresis }, | |
| 1323 | - { "yacute", XK_yacute }, | |
| 1324 | - { "thorn", XK_thorn }, | |
| 1325 | - { "ydiaeresis", XK_ydiaeresis }, | |
| 1326 | - | |
| 1327 | - // The following are, umm, hacks to allow symbolic names for | |
| 1328 | - // control codes. | |
| 1329 | - #if !defined(_WIN32) | |
| 1330 | - { "BackSpace", 0x08 }, | |
| 1331 | - { "Tab", 0x09 }, | |
| 1332 | - { "Linefeed", 0x0a }, | |
| 1333 | - { "Return", 0x0d }, | |
| 1334 | - { "Escape", 0x1b }, | |
| 1335 | - { "Delete", 0x7f }, | |
| 1336 | - #endif | |
| 1337 | - | |
| 1338 | - { (char *)NULL, NoSymbol } | |
| 1339 | - }; | |
| 1340 | - | |
| 1341 | - int i; | |
| 1342 | - | |
| 1343 | - if (strlen(s) == 1 && (*(unsigned char *)s & 0x7f) > ' ') | |
| 1344 | - return (KeySym)*(unsigned char *)s; | |
| 1345 | - for (i = 0; latin1[i].name != (char *)NULL; i++) { | |
| 1346 | - if (!strcmp(s, latin1[i].name)) | |
| 1347 | - return latin1[i].keysym; | |
| 1348 | - } | |
| 1349 | - return NoSymbol; | |
| 1350 | -} | |
| 1351 | - | |
| 1352 | -*/ | |
| 1353 | 446 | |
| 1354 | 447 | ... | ... |
src/lib3270/ctlr.c
| ... | ... | @@ -433,7 +433,7 @@ LIB3270_EXPORT int lib3270_get_field_start(H3270 *hSession, int baddr) |
| 433 | 433 | CHECK_SESSION_HANDLE(hSession); |
| 434 | 434 | |
| 435 | 435 | if (!hSession->formatted) |
| 436 | - return -1; | |
| 436 | + return errno = ENOTCONN; | |
| 437 | 437 | |
| 438 | 438 | if(baddr < 0) |
| 439 | 439 | baddr = hSession->cursor_addr; |
| ... | ... | @@ -459,7 +459,7 @@ LIB3270_EXPORT int lib3270_get_field_len(H3270 *hSession, int baddr) |
| 459 | 459 | CHECK_SESSION_HANDLE(hSession); |
| 460 | 460 | |
| 461 | 461 | if (!hSession->formatted) |
| 462 | - return -1; | |
| 462 | + return errno = ENOTCONN; | |
| 463 | 463 | |
| 464 | 464 | if(baddr < 0) |
| 465 | 465 | baddr = hSession->cursor_addr; |
| ... | ... | @@ -498,10 +498,7 @@ LIB3270_EXPORT int lib3270_field_addr(H3270 *hSession, int baddr) |
| 498 | 498 | FAIL_IF_NOT_ONLINE(hSession); |
| 499 | 499 | |
| 500 | 500 | if(!hSession->formatted) |
| 501 | - { | |
| 502 | - errno = ENOTCONN; | |
| 503 | - return -1; | |
| 504 | - } | |
| 501 | + return errno = ENOTCONN; | |
| 505 | 502 | |
| 506 | 503 | sbaddr = baddr; |
| 507 | 504 | do |
| ... | ... | @@ -522,10 +519,7 @@ LIB3270_EXPORT int lib3270_field_attribute(H3270 *hSession, int baddr) |
| 522 | 519 | FAIL_IF_NOT_ONLINE(hSession); |
| 523 | 520 | |
| 524 | 521 | if(!hSession->formatted) |
| 525 | - { | |
| 526 | - errno = ENOTCONN; | |
| 527 | - return -1; | |
| 528 | - } | |
| 522 | + return errno = ENOTCONN; | |
| 529 | 523 | |
| 530 | 524 | sbaddr = baddr; |
| 531 | 525 | do |
| ... | ... | @@ -571,8 +565,7 @@ int lib3270_field_length(H3270 *hSession, int baddr) |
| 571 | 565 | width++; |
| 572 | 566 | } while (addr != saddr); |
| 573 | 567 | |
| 574 | - errno = EINVAL; | |
| 575 | - return -1; | |
| 568 | + return errno = EINVAL; | |
| 576 | 569 | |
| 577 | 570 | } |
| 578 | 571 | |
| ... | ... | @@ -601,10 +594,7 @@ LIB3270_EXPORT int lib3270_get_next_unprotected(H3270 *hSession, int baddr0) |
| 601 | 594 | FAIL_IF_NOT_ONLINE(hSession); |
| 602 | 595 | |
| 603 | 596 | if(!hSession->formatted) |
| 604 | - { | |
| 605 | - errno = ENOTCONN; | |
| 606 | - return -1; | |
| 607 | - } | |
| 597 | + return errno = ENOTCONN; | |
| 608 | 598 | |
| 609 | 599 | if(baddr0 < 0) |
| 610 | 600 | baddr0 = hSession->cursor_addr; | ... | ... |
src/lib3270/kybd.c
| ... | ... | @@ -1751,8 +1751,7 @@ LIB3270_EXPORT int lib3270_enter(H3270 *hSession) |
| 1751 | 1751 | |
| 1752 | 1752 | if (hSession->kybdlock & KL_OIA_MINUS) |
| 1753 | 1753 | { |
| 1754 | - errno = EPERM; | |
| 1755 | - return -1; | |
| 1754 | + return errno = EPERM; | |
| 1756 | 1755 | } |
| 1757 | 1756 | else if (hSession->kybdlock) |
| 1758 | 1757 | { |
| ... | ... | @@ -1772,7 +1771,6 @@ LIB3270_EXPORT int lib3270_sysreq(H3270 *hSession) |
| 1772 | 1771 | |
| 1773 | 1772 | if (IN_ANSI) |
| 1774 | 1773 | { |
| 1775 | - errno = ENOTCONN; | |
| 1776 | 1774 | return 0; |
| 1777 | 1775 | } |
| 1778 | 1776 | |
| ... | ... | @@ -1848,7 +1846,7 @@ LIB3270_EXPORT int lib3270_eraseeol(H3270 *hSession) |
| 1848 | 1846 | if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) |
| 1849 | 1847 | { |
| 1850 | 1848 | operator_error(hSession,KL_OERR_PROTECTED); |
| 1851 | - return -1; | |
| 1849 | + return errno = EPERM; | |
| 1852 | 1850 | } |
| 1853 | 1851 | |
| 1854 | 1852 | if (hSession->formatted) |
| ... | ... | @@ -1914,7 +1912,7 @@ LIB3270_EXPORT int lib3270_eraseeof(H3270 *hSession) |
| 1914 | 1912 | fa = get_field_attribute(hSession,baddr); |
| 1915 | 1913 | if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) { |
| 1916 | 1914 | operator_error(hSession,KL_OERR_PROTECTED); |
| 1917 | - return -1; | |
| 1915 | + return errno = EPERM; | |
| 1918 | 1916 | } |
| 1919 | 1917 | if (hSession->formatted) |
| 1920 | 1918 | { /* erase to next field attribute */ |
| ... | ... | @@ -2039,7 +2037,7 @@ LIB3270_EXPORT int lib3270_deleteword(H3270 *hSession) |
| 2039 | 2037 | /* Make sure we're on a modifiable field. */ |
| 2040 | 2038 | if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) { |
| 2041 | 2039 | operator_error(hSession,KL_OERR_PROTECTED); |
| 2042 | - return -1; | |
| 2040 | + return errno = EPERM; | |
| 2043 | 2041 | } |
| 2044 | 2042 | |
| 2045 | 2043 | /* Backspace over any spaces to the left of the cursor. */ |
| ... | ... | @@ -2105,7 +2103,7 @@ LIB3270_EXPORT int lib3270_deletefield(H3270 *hSession) |
| 2105 | 2103 | fa = get_field_attribute(hSession,baddr); |
| 2106 | 2104 | if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) { |
| 2107 | 2105 | operator_error(hSession,KL_OERR_PROTECTED); |
| 2108 | - return -1; | |
| 2106 | + return errno = EPERM; | |
| 2109 | 2107 | } |
| 2110 | 2108 | while (!hSession->ea_buf[baddr].fa) |
| 2111 | 2109 | DEC_BA(baddr); |
| ... | ... | @@ -2153,16 +2151,18 @@ int lib3270_get_field_end(H3270 *hSession, int baddr) |
| 2153 | 2151 | |
| 2154 | 2152 | #if defined(X3270_ANSI) /*[*/ |
| 2155 | 2153 | if (IN_ANSI) |
| 2156 | - return -1; | |
| 2154 | + { | |
| 2155 | + return errno = EINVAL; | |
| 2156 | + } | |
| 2157 | 2157 | #endif /*]*/ |
| 2158 | 2158 | |
| 2159 | 2159 | if (!hSession->formatted) |
| 2160 | - return -1; | |
| 2160 | + return errno = EINVAL; | |
| 2161 | 2161 | |
| 2162 | 2162 | faddr = find_field_attribute(hSession,baddr); |
| 2163 | 2163 | fa = hSession->ea_buf[faddr].fa; |
| 2164 | 2164 | if (faddr == baddr || FA_IS_PROTECTED(fa)) |
| 2165 | - return -1; | |
| 2165 | + return errno = EPERM; | |
| 2166 | 2166 | |
| 2167 | 2167 | baddr = faddr; |
| 2168 | 2168 | while (True) |
| ... | ... | @@ -2317,7 +2317,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, const char *s, int len |
| 2317 | 2317 | if (hSession->kybdlock) |
| 2318 | 2318 | { |
| 2319 | 2319 | lib3270_trace_event(hSession," keyboard locked, string dropped\n"); |
| 2320 | - return -1; | |
| 2320 | + return errno = EPERM; | |
| 2321 | 2321 | } |
| 2322 | 2322 | |
| 2323 | 2323 | if (pasting && IN_3270) | ... | ... |
src/lib3270/linux/connect.c
| ... | ... | @@ -290,8 +290,7 @@ static void net_connected(H3270 *hSession, int fd unused, LIB3270_IO_FLAG flag u |
| 290 | 290 | |
| 291 | 291 | default: |
| 292 | 292 | lib3270_write_log(hSession,"connect", "%s: State changed to unexpected state %d",__FUNCTION__,hSession->cstate); |
| 293 | - errno = EINVAL; | |
| 294 | - return -1; | |
| 293 | + return errno = EINVAL; | |
| 295 | 294 | } |
| 296 | 295 | |
| 297 | 296 | } | ... | ... |
src/lib3270/paste.c
| ... | ... | @@ -240,10 +240,7 @@ LIB3270_EXPORT int lib3270_set_string_at(H3270 *hSession, int row, int col, cons |
| 240 | 240 | |
| 241 | 241 | // Is Keyboard locked ? |
| 242 | 242 | if(hSession->kybdlock) |
| 243 | - { | |
| 244 | - errno = EPERM; | |
| 245 | - return -1; | |
| 246 | - } | |
| 243 | + return errno = EPERM; | |
| 247 | 244 | |
| 248 | 245 | if(hSession->selected && !lib3270_get_toggle(hSession,LIB3270_TOGGLE_KEEP_SELECTED)) |
| 249 | 246 | lib3270_unselect(hSession); |
| ... | ... | @@ -273,10 +270,7 @@ LIB3270_EXPORT int lib3270_set_string_at_address(H3270 *hSession, int baddr, con |
| 273 | 270 | FAIL_IF_NOT_ONLINE(hSession); |
| 274 | 271 | |
| 275 | 272 | if(hSession->kybdlock) |
| 276 | - { | |
| 277 | - errno = EPERM; | |
| 278 | - return -1; | |
| 279 | - } | |
| 273 | + return errno = EPERM; | |
| 280 | 274 | |
| 281 | 275 | if(lib3270_set_cursor_address(hSession,baddr) < 0) |
| 282 | 276 | return -1; |
| ... | ... | @@ -307,10 +301,7 @@ LIB3270_EXPORT int lib3270_set_string(H3270 *hSession, const unsigned char *str) |
| 307 | 301 | FAIL_IF_NOT_ONLINE(hSession); |
| 308 | 302 | |
| 309 | 303 | if(hSession->kybdlock) |
| 310 | - { | |
| 311 | - errno = EPERM; | |
| 312 | - return -1; | |
| 313 | - } | |
| 304 | + return errno = EPERM; | |
| 314 | 305 | |
| 315 | 306 | hSession->cbk.suspend(hSession); |
| 316 | 307 | rc = set_string(hSession, str); | ... | ... |
src/lib3270/properties.c
| ... | ... | @@ -463,23 +463,6 @@ |
| 463 | 463 | |
| 464 | 464 | } |
| 465 | 465 | |
| 466 | - /* | |
| 467 | - int lib3270_set_connected(H3270 *hSession, int state) { | |
| 468 | - | |
| 469 | - if(state) { | |
| 470 | - | |
| 471 | - if(lib3270_reconnect(hSession,120)) | |
| 472 | - return -1; | |
| 473 | - | |
| 474 | - } else { | |
| 475 | - | |
| 476 | - return lib3270_disconnect(hSession); | |
| 477 | - } | |
| 478 | - | |
| 479 | - return 0; | |
| 480 | - } | |
| 481 | - */ | |
| 482 | - | |
| 483 | 466 | int lib3270_get_int_property(H3270 *hSession, const char *name, int seconds) |
| 484 | 467 | { |
| 485 | 468 | size_t ix; | ... | ... |