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