Commit 597d8ae92b130bcf24d65e4807f3d2724d1b2ea7

Authored by perry.werneck@gmail.com
1 parent 2347f103

Incluindo handle de sessão nas funções de carga de recursos

src/include/lib3270.h
... ... @@ -867,7 +867,7 @@
867 867 * @return Resource string (Release with lib3270_free())
868 868 *
869 869 */
870   - LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...);
  870 + LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...);
871 871  
872 872 LIB3270_EXPORT const char * lib3270_get_version(void);
873 873 LIB3270_EXPORT const char * lib3270_get_revision(void);
... ...
src/lib3270/ansi.c
... ... @@ -482,7 +482,7 @@ static const char csnames[] = "0AB";
482 482 #if defined(X3270_DBCS) /*[*/
483 483 static unsigned char mb_pending = 0;
484 484 static char mb_buffer[LIB3270_MB_MAX];
485   -static int dbcs_process(int ch, unsigned char ebc[]);
  485 +static int dbcs_process(H3270 *hSession, int ch, unsigned char ebc[]);
486 486 #endif /*]*/
487 487 // static int pmi = 0;
488 488 // static char pending_mbs[LIB3270_MB_MAX];
... ... @@ -1107,7 +1107,7 @@ ansi_printing(H3270 *hSession, int ig1 unused, int ig2 unused)
1107 1107 int len;
1108 1108 unsigned char ebc[2];
1109 1109  
1110   - len = dbcs_process(ansi_ch, ebc);
  1110 + len = dbcs_process(hSession, ansi_ch, ebc);
1111 1111 switch (len) {
1112 1112 default:
1113 1113 case 0:
... ... @@ -1148,7 +1148,7 @@ ansi_printing(H3270 *hSession, int ig1 unused, int ig2 unused)
1148 1148 break;
1149 1149 }
1150 1150 } else if (ansi_ch & 0x80) {
1151   - (void) dbcs_process(ansi_ch, NULL);
  1151 + (void) dbcs_process(hSession, ansi_ch, NULL);
1152 1152 ebc_ch = EBC_space;
1153 1153 }
1154 1154 }
... ... @@ -1722,13 +1722,13 @@ void ansi_in3270(H3270 *session, int in3270, void *dunno)
1722 1722 }
1723 1723  
1724 1724 #if defined(X3270_DBCS) /*[*/
1725   -static void trace_pending_mb(void)
  1725 +static void trace_pending_mb(H3270 *hSession)
1726 1726 {
1727 1727 int i;
1728 1728  
1729 1729 for (i = 0; i < mb_pending; i++)
1730 1730 {
1731   - trace_ds(&h3270," %02x", mb_buffer[i] & 0xff);
  1731 + trace_ds(hSession," %02x", mb_buffer[i] & 0xff);
1732 1732 }
1733 1733 }
1734 1734 #endif /*]*/
... ... @@ -1758,7 +1758,7 @@ ansi_process(H3270 *hSession, unsigned int c)
1758 1758 if (mb_pending && fn != &ansi_printing)
1759 1759 {
1760 1760 trace_ds(hSession,"Dropped incomplete multi-byte character");
1761   - trace_pending_mb();
  1761 + trace_pending_mb(hSession);
1762 1762 trace_ds(hSession,"\n");
1763 1763 mb_pending = 0;
1764 1764 }
... ... @@ -1863,30 +1863,29 @@ void toggle_lineWrap(H3270 *hSession, struct lib3270_toggle *t unused, LIB3270_T
1863 1863  
1864 1864 #if defined(X3270_DBCS) /*[*/
1865 1865 /* Accumulate and process pending DBCS characters. */
1866   -static int
1867   -dbcs_process(int ch, unsigned char ebc[])
  1866 +static int dbcs_process(H3270 *hSession, int ch, unsigned char ebc[])
1868 1867 {
1869 1868 UChar Ubuf[2];
1870 1869 UErrorCode err = U_ZERO_ERROR;
1871 1870  
1872   - /* See if we have too many. */
  1871 + // See if we have too many.
1873 1872 if (mb_pending >= MB_MAX) {
1874 1873 trace_ds(&h3270,"Multi-byte character ");
1875   - trace_pending_mb();
  1874 + trace_pending_mb(hSession);
1876 1875 trace_ds(&h3270," too long, dropping\n");
1877 1876 mb_pending = 0;
1878 1877 return 0;
1879 1878 }
1880 1879  
1881 1880  
1882   - /* Store it and see if we're done. */
  1881 + // Store it and see if we're done.
1883 1882 mb_buffer[mb_pending++] = ch & 0xff;
1884   - /* An interesting idea. */
  1883 + // An interesting idea.
1885 1884 if (mb_pending == 1)
1886 1885 return 0;
1887 1886  
1888 1887 if (mb_to_unicode(mb_buffer, mb_pending, Ubuf, 2, &err) > 0) {
1889   - /* It translated! */
  1888 + // It translated!
1890 1889 if (dbcs_map8(Ubuf[0], ebc)) {
1891 1890 mb_pending = 0;
1892 1891 return 1;
... ... @@ -1895,7 +1894,7 @@ dbcs_process(int ch, unsigned char ebc[])
1895 1894 return 2;
1896 1895 } else {
1897 1896 trace_ds(&h3270,"Can't map multi-byte character");
1898   - trace_pending_mb();
  1897 + trace_pending_mb(&h3270);
1899 1898 trace_ds(&h3270," -> U+%04x to SBCS or DBCS, dropping\n",
1900 1899 Ubuf[0] & 0xffff);
1901 1900 mb_pending = 0;
... ... @@ -1903,7 +1902,7 @@ dbcs_process(int ch, unsigned char ebc[])
1903 1902 }
1904 1903 }
1905 1904  
1906   - /* It failed. See why. */
  1905 + // It failed. See why
1907 1906 switch (err) {
1908 1907 case U_TRUNCATED_CHAR_FOUND:
1909 1908 /* 'Cause we're not finished. */
... ... @@ -1911,12 +1910,12 @@ dbcs_process(int ch, unsigned char ebc[])
1911 1910 case U_INVALID_CHAR_FOUND:
1912 1911 case U_ILLEGAL_CHAR_FOUND:
1913 1912 trace_ds(&h3270,"Invalid multi-byte character");
1914   - trace_pending_mb();
  1913 + trace_pending_mb(&h3270);
1915 1914 trace_ds(&h3270,", dropping\n");
1916 1915 break;
1917 1916 default:
1918 1917 trace_ds(&h3270,"Unexpected ICU error %d translating multi-type character", (int)err);
1919   - trace_pending_mb();
  1918 + trace_pending_mb(&h3270);
1920 1919 trace_ds(&h3270,", dropping\n");
1921 1920 break;
1922 1921 }
... ...
src/lib3270/charset.c
... ... @@ -95,7 +95,7 @@ unsigned char xk_selector = 0;
95 95 unsigned char auto_keymap = 0;
96 96  
97 97 /* Statics. */
98   -static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs);
  98 +static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs);
99 99 typedef enum { CS_ONLY, FT_ONLY, BOTH } remap_scope;
100 100 static enum cs_result remap_chars(const char *csname, char *spec, remap_scope scope, int *ne);
101 101 static void remap_one(unsigned char ebc, KeySym iso, remap_scope scope,Boolean one_way);
... ... @@ -201,7 +201,7 @@ wide_resource_init(char *csname)
201 201 /*
202 202 * Change character sets.
203 203 */
204   -enum cs_result charset_init(H3270 *session, const char *csname)
  204 +enum cs_result charset_init(H3270 *hSession, const char *csname)
205 205 {
206 206 // char *cs;
207 207 // const char *ftcs;
... ... @@ -215,7 +215,7 @@ enum cs_result charset_init(H3270 *session, const char *csname)
215 215 {
216 216 charset_defaults();
217 217 set_cgcsgids(CN);
218   - set_display_charset(session, "ISO-8859-1");
  218 + set_display_charset(hSession, "ISO-8859-1");
219 219 return CS_OKAY;
220 220 }
221 221  
... ... @@ -223,7 +223,7 @@ enum cs_result charset_init(H3270 *session, const char *csname)
223 223 #ifdef ANDROID
224 224 ccs = strdup("0xad: [ \n 0xba: Yacute \n0xbd: ] \n 0xbb: diaeresis \n");
225 225 #else
226   - ccs = lib3270_get_resource_string("charset", csname, NULL);
  226 + ccs = lib3270_get_resource_string(hSession,"charset", csname, NULL);
227 227 #endif
228 228 /*
229 229 if (cs == CN && strlen(csname) > ES_SIZE && !strcasecmp(csname + strlen(csname) - ES_SIZE, EURO_SUFFIX))
... ... @@ -241,21 +241,21 @@ enum cs_result charset_init(H3270 *session, const char *csname)
241 241 return CS_NOTFOUND;
242 242  
243 243 /* Grab the File Transfer character set. */
244   - cftcs = lib3270_get_resource_string("ftCharset",csname,NULL);
  244 + cftcs = lib3270_get_resource_string(hSession,"ftCharset",csname,NULL);
245 245  
246 246 /* Save the current definitions, and start over with the defaults. */
247 247 save_charset();
248 248 charset_defaults();
249 249  
250 250 /* Check for auto-keymap. */
251   - ak = lib3270_get_resource_string("autoKeymap", csname, NULL);
  251 + ak = lib3270_get_resource_string(hSession,"autoKeymap", csname, NULL);
252 252 if (ak != NULL)
253 253 auto_keymap = !strcasecmp(ak, "true");
254 254 else
255 255 auto_keymap = 0;
256 256  
257 257 /* Interpret them. */
258   - rc = resource_charset(csname, ccs, cftcs);
  258 + rc = resource_charset(hSession,csname, ccs, cftcs);
259 259  
260 260 /* Free them. */
261 261 lib3270_free(ccs);
... ... @@ -376,7 +376,7 @@ set_charset_name(char *csname)
376 376 */
377 377  
378 378 /* Define a charset from resources. */
379   -static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs)
  379 +static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs)
380 380 {
381 381 enum cs_result rc;
382 382 int ne = 0;
... ... @@ -395,7 +395,7 @@ static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs)
395 395 }
396 396  
397 397 // rcs = get_fresource("%s.%s", "displayCharset", csname);
398   - rcs = lib3270_get_resource_string("displayCharset", csname, NULL);
  398 + rcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL);
399 399  
400 400 /* Isolate the pieces. */
401 401 if (rcs != CN)
... ... @@ -448,18 +448,18 @@ static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs)
448 448 /* Set up the cgcsgid. */
449 449 // set_cgcsgids(get_fresource("%s.%s", "codepage", csname));
450 450 {
451   - char *ptr = lib3270_get_resource_string("codepage", csname, NULL);
  451 + char *ptr = lib3270_get_resource_string(hSession,"codepage", csname, NULL);
452 452 set_cgcsgids(ptr);
453 453 lib3270_free(ptr);
454 454 }
455 455  
456 456 // dcs = get_fresource("%s.%s", "displayCharset", csname);
457   - dcs = lib3270_get_resource_string("displayCharset", csname, NULL);
  457 + dcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL);
458 458  
459 459 if (dcs != NULL)
460   - set_display_charset(&h3270,dcs);
  460 + set_display_charset(hSession,dcs);
461 461 else
462   - set_display_charset(&h3270,"ISO-8859-1");
  462 + set_display_charset(hSession,"ISO-8859-1");
463 463  
464 464 lib3270_free(dcs);
465 465  
... ...
src/lib3270/ctlr.c
... ... @@ -1233,29 +1233,29 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er
1233 1233 else
1234 1234 {
1235 1235 if (ra_ge)
1236   - ctlr_add(hSession,h3270.buffer_addr, add_c1,CS_GE);
1237   - else if (h3270.default_cs)
1238   - ctlr_add(hSession,h3270.buffer_addr, add_c1,h3270.default_cs);
  1236 + ctlr_add(hSession,hSession->buffer_addr, add_c1,CS_GE);
  1237 + else if (hSession->default_cs)
  1238 + ctlr_add(hSession,hSession->buffer_addr, add_c1,hSession->default_cs);
1239 1239 else
1240   - ctlr_add(hSession,h3270.buffer_addr, add_c1,0);
  1240 + ctlr_add(hSession,hSession->buffer_addr, add_c1,0);
1241 1241 }
1242   - ctlr_add_fg(hSession,h3270.buffer_addr, h3270.default_fg);
1243   - ctlr_add_gr(hSession,h3270.buffer_addr, h3270.default_gr);
1244   - ctlr_add_ic(hSession,h3270.buffer_addr, h3270.default_ic);
  1242 + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg);
  1243 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1244 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
1245 1245  
1246 1246 INC_BA(hSession->buffer_addr);
1247 1247 if (add_dbcs)
1248 1248 {
1249   - ctlr_add(hSession,h3270.buffer_addr, add_c2,h3270.default_cs);
1250   - ctlr_add_fg(hSession,h3270.buffer_addr, h3270.default_fg);
1251   - ctlr_add_bg(hSession,h3270.buffer_addr, h3270.default_bg);
1252   - ctlr_add_gr(hSession,h3270.buffer_addr, h3270.default_gr);
1253   - ctlr_add_ic(hSession,h3270.buffer_addr, h3270.default_ic);
  1249 + ctlr_add(hSession,hSession->buffer_addr, add_c2,hSession->default_cs);
  1250 + ctlr_add_fg(hSession,hSession->buffer_addr, h3270.default_fg);
  1251 + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg);
  1252 + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr);
  1253 + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic);
1254 1254 INC_BA(hSession->buffer_addr);
1255 1255 }
1256   - } while (h3270.buffer_addr != baddr);
  1256 + } while (hSession->buffer_addr != baddr);
1257 1257  
1258   - current_fa = get_field_attribute(&h3270,h3270.buffer_addr);
  1258 + current_fa = get_field_attribute(hSession,hSession->buffer_addr);
1259 1259 last_cmd = True;
1260 1260 last_zpt = False;
1261 1261 break;
... ...
src/lib3270/kybd.c
... ... @@ -2062,19 +2062,19 @@ LIB3270_ACTION( eraseeof )
2062 2062 #endif /*]*/
2063 2063 baddr = hSession->cursor_addr;
2064 2064 fa = get_field_attribute(hSession,baddr);
2065   - if (FA_IS_PROTECTED(fa) || h3270.ea_buf[baddr].fa) {
2066   - operator_error(&h3270,KL_OERR_PROTECTED);
  2065 + if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) {
  2066 + operator_error(hSession,KL_OERR_PROTECTED);
2067 2067 return -1;
2068 2068 }
2069 2069 if (hSession->formatted) { /* erase to next field attribute */
2070 2070 do {
2071   - ctlr_add(&h3270,baddr, EBC_null, 0);
  2071 + ctlr_add(hSession,baddr, EBC_null, 0);
2072 2072 INC_BA(baddr);
2073   - } while (!h3270.ea_buf[baddr].fa);
  2073 + } while (!hSession->ea_buf[baddr].fa);
2074 2074 mdt_set(hSession,hSession->cursor_addr);
2075 2075 } else { /* erase to end of screen */
2076 2076 do {
2077   - ctlr_add(&h3270,baddr, EBC_null, 0);
  2077 + ctlr_add(hSession,baddr, EBC_null, 0);
2078 2078 INC_BA(baddr);
2079 2079 } while (baddr != 0);
2080 2080 }
... ... @@ -2085,9 +2085,9 @@ LIB3270_ACTION( eraseeof )
2085 2085 if (d == DBCS_RIGHT) {
2086 2086 baddr = hSession->cursor_addr;
2087 2087 DEC_BA(baddr);
2088   - h3270.ea_buf[baddr].cc = EBC_si;
  2088 + hSession->ea_buf[baddr].cc = EBC_si;
2089 2089 } else
2090   - h3270.ea_buf[hSession->cursor_addr].cc = EBC_si;
  2090 + hSession->ea_buf[hSession->cursor_addr].cc = EBC_si;
2091 2091 }
2092 2092 (void) ctlr_dbcs_postprocess(hSession);
2093 2093 hSession->display(hSession);
... ... @@ -2183,7 +2183,7 @@ LIB3270_ACTION( deleteword )
2183 2183  
2184 2184 /* Make sure we're on a modifiable field. */
2185 2185 if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) {
2186   - operator_error(&h3270,KL_OERR_PROTECTED);
  2186 + operator_error(hSession,KL_OERR_PROTECTED);
2187 2187 return -1;
2188 2188 }
2189 2189  
... ... @@ -2377,28 +2377,33 @@ LIB3270_ACTION( fieldend )
2377 2377 return 0;
2378 2378 }
2379 2379  
2380   -/* PA key action for String actions */
2381   -static void
2382   -do_pa(unsigned n)
  2380 +/**
  2381 + * PA key action for String actions
  2382 + */
  2383 +static void do_pa(H3270 *hSession, unsigned n)
2383 2384 {
2384   - if (n < 1 || n > PA_SZ) {
2385   - popup_an_error(NULL, _( "Unknown PA key %d" ), n);
  2385 + if (n < 1 || n > PA_SZ)
  2386 + {
  2387 + popup_an_error(hSession, _( "Unknown PA key %d" ), n);
2386 2388 return;
2387 2389 }
2388 2390  
2389   - lib3270_pakey(&h3270,n);
  2391 + lib3270_pakey(hSession,n);
2390 2392  
2391 2393 }
2392 2394  
2393   -/* PF key action for String actions */
2394   -static void do_pf(unsigned n)
  2395 +/**
  2396 + * PF key action for String actions
  2397 + */
  2398 +static void do_pf(H3270 *hSession, unsigned n)
2395 2399 {
2396   - if (n < 1 || n > PF_SZ) {
2397   - popup_an_error(NULL, _( "Unknown PF key %d" ), n);
  2400 + if (n < 1 || n > PF_SZ)
  2401 + {
  2402 + popup_an_error(hSession, _( "Unknown PF key %d" ), n);
2398 2403 return;
2399 2404 }
2400 2405  
2401   - lib3270_pfkey(&h3270,n);
  2406 + lib3270_pfkey(hSession,n);
2402 2407 }
2403 2408  
2404 2409 /*
... ... @@ -2747,7 +2752,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int
2747 2752 }
2748 2753 else
2749 2754 {
2750   - do_pf(literal);
  2755 + do_pf(hSession,literal);
2751 2756 skipped = False;
2752 2757 if (IN_3270)
2753 2758 return len-1;
... ... @@ -2769,7 +2774,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int
2769 2774 }
2770 2775 else
2771 2776 {
2772   - do_pa(literal);
  2777 + do_pa(hSession, literal);
2773 2778 skipped = False;
2774 2779 if (IN_3270)
2775 2780 return len-1;
... ... @@ -2866,7 +2871,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int
2866 2871 case BACKPF:
2867 2872 if (nc > 0)
2868 2873 {
2869   - do_pf(literal);
  2874 + do_pf(hSession,literal);
2870 2875 state = BASE;
2871 2876 }
2872 2877 break;
... ... @@ -2874,7 +2879,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int
2874 2879 case BACKPA:
2875 2880 if (nc > 0)
2876 2881 {
2877   - do_pa(literal);
  2882 + do_pa(hSession,literal);
2878 2883 state = BASE;
2879 2884 }
2880 2885 break;
... ...
src/lib3270/resources.c
... ... @@ -127,7 +127,7 @@ void add_resource(const char *name, const char *value)
127 127 }
128 128  
129 129  
130   -const char * get_resource(const char *name)
  130 +const char * get_resource(H3270 *hSession, const char *name)
131 131 {
132 132 struct dresource *d;
133 133 int i;
... ... @@ -136,7 +136,7 @@ const char * get_resource(const char *name)
136 136 {
137 137 if (!strcmp(d->name, name))
138 138 {
139   - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,d->value);
  139 + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,d->value);
140 140 return d->value;
141 141 }
142 142 }
... ... @@ -146,7 +146,7 @@ const char * get_resource(const char *name)
146 146 if (!strncmp(fallbacks[i], name, strlen(name)) && *(fallbacks[i] + strlen(name)) == ':')
147 147 {
148 148 const char *ret = fallbacks[i] + strlen(name) + 2;
149   - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,ret);
  149 + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,ret);
150 150 return ret;
151 151 }
152 152 }
... ... @@ -156,7 +156,7 @@ const char * get_resource(const char *name)
156 156 {
157 157 if (!strcmp(rdb[i].name, name))
158 158 {
159   - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,rdb[i].value);
  159 + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,rdb[i].value);
160 160 return rdb[i].value;
161 161 }
162 162 }
... ... @@ -165,7 +165,7 @@ const char * get_resource(const char *name)
165 165 }
166 166  
167 167 /* A version of get_resource that accepts sprintf arguments. */
168   -const char * get_fresource(const char *fmt, ...)
  168 +const char * get_fresource(H3270 *hSession, const char *fmt, ...)
169 169 {
170 170 va_list args;
171 171 char *name;
... ... @@ -174,7 +174,7 @@ const char * get_fresource(const char *fmt, ...)
174 174 va_start(args, fmt);
175 175 name = lib3270_vsprintf(fmt, args);
176 176 va_end(args);
177   - r = get_resource(name);
  177 + r = get_resource(hSession,name);
178 178 lib3270_free(name);
179 179 return r;
180 180 }
... ...
src/lib3270/util.c
... ... @@ -943,7 +943,7 @@ void * Calloc(size_t nelem, size_t elsize)
943 943 }
944 944 */
945 945  
946   -LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...)
  946 +LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...)
947 947 {
948 948 #ifdef ANDROID
949 949  
... ... @@ -972,7 +972,7 @@ LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...
972 972  
973 973 *ptr = 0;
974 974  
975   - res = get_resource(str);
  975 + res = get_resource(hSession,str);
976 976  
977 977 trace("%s(%s)=%s",__FUNCTION__,str,res ? res : "NULL");
978 978  
... ...
src/lib3270/utilc.h
... ... @@ -23,8 +23,8 @@ LIB3270_INTERNAL char *ctl_see(int c);
23 23 LIB3270_INTERNAL char *do_subst(const char *s, Boolean do_vars, Boolean do_tilde);
24 24 LIB3270_INTERNAL void fcatv(FILE *f, char *s);
25 25 LIB3270_INTERNAL const char *get_message(const char *key);
26   -LIB3270_INTERNAL const char *get_fresource(const char *fmt, ...) printflike(1, 2);
27   -LIB3270_INTERNAL const char *get_resource(const char *name);
  26 +LIB3270_INTERNAL const char *get_fresource(H3270 *hSession, const char *fmt, ...) printflike(2, 3);
  27 +LIB3270_INTERNAL const char *get_resource(H3270 *hSession, const char *name);
28 28 LIB3270_INTERNAL char *scatv(const char *s, char *buf, size_t len);
29 29 LIB3270_INTERNAL int split_dbcs_resource(const char *value, char sep, char **part1,
30 30 char **part2);
... ...