From 597d8ae92b130bcf24d65e4807f3d2724d1b2ea7 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Fri, 3 Aug 2012 12:59:43 +0000 Subject: [PATCH] Incluindo handle de sessão nas funções de carga de recursos --- src/include/lib3270.h | 2 +- src/lib3270/ansi.c | 33 ++++++++++++++++----------------- src/lib3270/charset.c | 26 +++++++++++++------------- src/lib3270/ctlr.c | 28 ++++++++++++++-------------- src/lib3270/kybd.c | 51 ++++++++++++++++++++++++++++----------------------- src/lib3270/resources.c | 12 ++++++------ src/lib3270/util.c | 4 ++-- src/lib3270/utilc.h | 4 ++-- 8 files changed, 82 insertions(+), 78 deletions(-) diff --git a/src/include/lib3270.h b/src/include/lib3270.h index e7d932a..940e5f0 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -867,7 +867,7 @@ * @return Resource string (Release with lib3270_free()) * */ - LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...); + LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...); LIB3270_EXPORT const char * lib3270_get_version(void); LIB3270_EXPORT const char * lib3270_get_revision(void); diff --git a/src/lib3270/ansi.c b/src/lib3270/ansi.c index 5567ff6..5795c6a 100644 --- a/src/lib3270/ansi.c +++ b/src/lib3270/ansi.c @@ -482,7 +482,7 @@ static const char csnames[] = "0AB"; #if defined(X3270_DBCS) /*[*/ static unsigned char mb_pending = 0; static char mb_buffer[LIB3270_MB_MAX]; -static int dbcs_process(int ch, unsigned char ebc[]); +static int dbcs_process(H3270 *hSession, int ch, unsigned char ebc[]); #endif /*]*/ // static int pmi = 0; // static char pending_mbs[LIB3270_MB_MAX]; @@ -1107,7 +1107,7 @@ ansi_printing(H3270 *hSession, int ig1 unused, int ig2 unused) int len; unsigned char ebc[2]; - len = dbcs_process(ansi_ch, ebc); + len = dbcs_process(hSession, ansi_ch, ebc); switch (len) { default: case 0: @@ -1148,7 +1148,7 @@ ansi_printing(H3270 *hSession, int ig1 unused, int ig2 unused) break; } } else if (ansi_ch & 0x80) { - (void) dbcs_process(ansi_ch, NULL); + (void) dbcs_process(hSession, ansi_ch, NULL); ebc_ch = EBC_space; } } @@ -1722,13 +1722,13 @@ void ansi_in3270(H3270 *session, int in3270, void *dunno) } #if defined(X3270_DBCS) /*[*/ -static void trace_pending_mb(void) +static void trace_pending_mb(H3270 *hSession) { int i; for (i = 0; i < mb_pending; i++) { - trace_ds(&h3270," %02x", mb_buffer[i] & 0xff); + trace_ds(hSession," %02x", mb_buffer[i] & 0xff); } } #endif /*]*/ @@ -1758,7 +1758,7 @@ ansi_process(H3270 *hSession, unsigned int c) if (mb_pending && fn != &ansi_printing) { trace_ds(hSession,"Dropped incomplete multi-byte character"); - trace_pending_mb(); + trace_pending_mb(hSession); trace_ds(hSession,"\n"); mb_pending = 0; } @@ -1863,30 +1863,29 @@ void toggle_lineWrap(H3270 *hSession, struct lib3270_toggle *t unused, LIB3270_T #if defined(X3270_DBCS) /*[*/ /* Accumulate and process pending DBCS characters. */ -static int -dbcs_process(int ch, unsigned char ebc[]) +static int dbcs_process(H3270 *hSession, int ch, unsigned char ebc[]) { UChar Ubuf[2]; UErrorCode err = U_ZERO_ERROR; - /* See if we have too many. */ + // See if we have too many. if (mb_pending >= MB_MAX) { trace_ds(&h3270,"Multi-byte character "); - trace_pending_mb(); + trace_pending_mb(hSession); trace_ds(&h3270," too long, dropping\n"); mb_pending = 0; return 0; } - /* Store it and see if we're done. */ + // Store it and see if we're done. mb_buffer[mb_pending++] = ch & 0xff; - /* An interesting idea. */ + // An interesting idea. if (mb_pending == 1) return 0; if (mb_to_unicode(mb_buffer, mb_pending, Ubuf, 2, &err) > 0) { - /* It translated! */ + // It translated! if (dbcs_map8(Ubuf[0], ebc)) { mb_pending = 0; return 1; @@ -1895,7 +1894,7 @@ dbcs_process(int ch, unsigned char ebc[]) return 2; } else { trace_ds(&h3270,"Can't map multi-byte character"); - trace_pending_mb(); + trace_pending_mb(&h3270); trace_ds(&h3270," -> U+%04x to SBCS or DBCS, dropping\n", Ubuf[0] & 0xffff); mb_pending = 0; @@ -1903,7 +1902,7 @@ dbcs_process(int ch, unsigned char ebc[]) } } - /* It failed. See why. */ + // It failed. See why switch (err) { case U_TRUNCATED_CHAR_FOUND: /* 'Cause we're not finished. */ @@ -1911,12 +1910,12 @@ dbcs_process(int ch, unsigned char ebc[]) case U_INVALID_CHAR_FOUND: case U_ILLEGAL_CHAR_FOUND: trace_ds(&h3270,"Invalid multi-byte character"); - trace_pending_mb(); + trace_pending_mb(&h3270); trace_ds(&h3270,", dropping\n"); break; default: trace_ds(&h3270,"Unexpected ICU error %d translating multi-type character", (int)err); - trace_pending_mb(); + trace_pending_mb(&h3270); trace_ds(&h3270,", dropping\n"); break; } diff --git a/src/lib3270/charset.c b/src/lib3270/charset.c index 8bebfa2..dd9f46c 100644 --- a/src/lib3270/charset.c +++ b/src/lib3270/charset.c @@ -95,7 +95,7 @@ unsigned char xk_selector = 0; unsigned char auto_keymap = 0; /* Statics. */ -static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs); +static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs); typedef enum { CS_ONLY, FT_ONLY, BOTH } remap_scope; static enum cs_result remap_chars(const char *csname, char *spec, remap_scope scope, int *ne); static void remap_one(unsigned char ebc, KeySym iso, remap_scope scope,Boolean one_way); @@ -201,7 +201,7 @@ wide_resource_init(char *csname) /* * Change character sets. */ -enum cs_result charset_init(H3270 *session, const char *csname) +enum cs_result charset_init(H3270 *hSession, const char *csname) { // char *cs; // const char *ftcs; @@ -215,7 +215,7 @@ enum cs_result charset_init(H3270 *session, const char *csname) { charset_defaults(); set_cgcsgids(CN); - set_display_charset(session, "ISO-8859-1"); + set_display_charset(hSession, "ISO-8859-1"); return CS_OKAY; } @@ -223,7 +223,7 @@ enum cs_result charset_init(H3270 *session, const char *csname) #ifdef ANDROID ccs = strdup("0xad: [ \n 0xba: Yacute \n0xbd: ] \n 0xbb: diaeresis \n"); #else - ccs = lib3270_get_resource_string("charset", csname, NULL); + ccs = lib3270_get_resource_string(hSession,"charset", csname, NULL); #endif /* 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) return CS_NOTFOUND; /* Grab the File Transfer character set. */ - cftcs = lib3270_get_resource_string("ftCharset",csname,NULL); + cftcs = lib3270_get_resource_string(hSession,"ftCharset",csname,NULL); /* Save the current definitions, and start over with the defaults. */ save_charset(); charset_defaults(); /* Check for auto-keymap. */ - ak = lib3270_get_resource_string("autoKeymap", csname, NULL); + ak = lib3270_get_resource_string(hSession,"autoKeymap", csname, NULL); if (ak != NULL) auto_keymap = !strcasecmp(ak, "true"); else auto_keymap = 0; /* Interpret them. */ - rc = resource_charset(csname, ccs, cftcs); + rc = resource_charset(hSession,csname, ccs, cftcs); /* Free them. */ lib3270_free(ccs); @@ -376,7 +376,7 @@ set_charset_name(char *csname) */ /* Define a charset from resources. */ -static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs) +static enum cs_result resource_charset(H3270 *hSession, const char *csname, char *cs, char *ftcs) { enum cs_result rc; int ne = 0; @@ -395,7 +395,7 @@ static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs) } // rcs = get_fresource("%s.%s", "displayCharset", csname); - rcs = lib3270_get_resource_string("displayCharset", csname, NULL); + rcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL); /* Isolate the pieces. */ if (rcs != CN) @@ -448,18 +448,18 @@ static enum cs_result resource_charset(const char *csname, char *cs, char *ftcs) /* Set up the cgcsgid. */ // set_cgcsgids(get_fresource("%s.%s", "codepage", csname)); { - char *ptr = lib3270_get_resource_string("codepage", csname, NULL); + char *ptr = lib3270_get_resource_string(hSession,"codepage", csname, NULL); set_cgcsgids(ptr); lib3270_free(ptr); } // dcs = get_fresource("%s.%s", "displayCharset", csname); - dcs = lib3270_get_resource_string("displayCharset", csname, NULL); + dcs = lib3270_get_resource_string(hSession,"displayCharset", csname, NULL); if (dcs != NULL) - set_display_charset(&h3270,dcs); + set_display_charset(hSession,dcs); else - set_display_charset(&h3270,"ISO-8859-1"); + set_display_charset(hSession,"ISO-8859-1"); lib3270_free(dcs); diff --git a/src/lib3270/ctlr.c b/src/lib3270/ctlr.c index 3104bf9..98ea830 100644 --- a/src/lib3270/ctlr.c +++ b/src/lib3270/ctlr.c @@ -1233,29 +1233,29 @@ enum pds ctlr_write(H3270 *hSession, unsigned char buf[], int buflen, Boolean er else { if (ra_ge) - ctlr_add(hSession,h3270.buffer_addr, add_c1,CS_GE); - else if (h3270.default_cs) - ctlr_add(hSession,h3270.buffer_addr, add_c1,h3270.default_cs); + ctlr_add(hSession,hSession->buffer_addr, add_c1,CS_GE); + else if (hSession->default_cs) + ctlr_add(hSession,hSession->buffer_addr, add_c1,hSession->default_cs); else - ctlr_add(hSession,h3270.buffer_addr, add_c1,0); + ctlr_add(hSession,hSession->buffer_addr, add_c1,0); } - ctlr_add_fg(hSession,h3270.buffer_addr, h3270.default_fg); - ctlr_add_gr(hSession,h3270.buffer_addr, h3270.default_gr); - ctlr_add_ic(hSession,h3270.buffer_addr, h3270.default_ic); + ctlr_add_fg(hSession,hSession->buffer_addr, hSession->default_fg); + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr); + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic); INC_BA(hSession->buffer_addr); if (add_dbcs) { - ctlr_add(hSession,h3270.buffer_addr, add_c2,h3270.default_cs); - ctlr_add_fg(hSession,h3270.buffer_addr, h3270.default_fg); - ctlr_add_bg(hSession,h3270.buffer_addr, h3270.default_bg); - ctlr_add_gr(hSession,h3270.buffer_addr, h3270.default_gr); - ctlr_add_ic(hSession,h3270.buffer_addr, h3270.default_ic); + ctlr_add(hSession,hSession->buffer_addr, add_c2,hSession->default_cs); + ctlr_add_fg(hSession,hSession->buffer_addr, h3270.default_fg); + ctlr_add_bg(hSession,hSession->buffer_addr, hSession->default_bg); + ctlr_add_gr(hSession,hSession->buffer_addr, hSession->default_gr); + ctlr_add_ic(hSession,hSession->buffer_addr, hSession->default_ic); INC_BA(hSession->buffer_addr); } - } while (h3270.buffer_addr != baddr); + } while (hSession->buffer_addr != baddr); - current_fa = get_field_attribute(&h3270,h3270.buffer_addr); + current_fa = get_field_attribute(hSession,hSession->buffer_addr); last_cmd = True; last_zpt = False; break; diff --git a/src/lib3270/kybd.c b/src/lib3270/kybd.c index d167cf3..f1005eb 100644 --- a/src/lib3270/kybd.c +++ b/src/lib3270/kybd.c @@ -2062,19 +2062,19 @@ LIB3270_ACTION( eraseeof ) #endif /*]*/ baddr = hSession->cursor_addr; fa = get_field_attribute(hSession,baddr); - if (FA_IS_PROTECTED(fa) || h3270.ea_buf[baddr].fa) { - operator_error(&h3270,KL_OERR_PROTECTED); + if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) { + operator_error(hSession,KL_OERR_PROTECTED); return -1; } if (hSession->formatted) { /* erase to next field attribute */ do { - ctlr_add(&h3270,baddr, EBC_null, 0); + ctlr_add(hSession,baddr, EBC_null, 0); INC_BA(baddr); - } while (!h3270.ea_buf[baddr].fa); + } while (!hSession->ea_buf[baddr].fa); mdt_set(hSession,hSession->cursor_addr); } else { /* erase to end of screen */ do { - ctlr_add(&h3270,baddr, EBC_null, 0); + ctlr_add(hSession,baddr, EBC_null, 0); INC_BA(baddr); } while (baddr != 0); } @@ -2085,9 +2085,9 @@ LIB3270_ACTION( eraseeof ) if (d == DBCS_RIGHT) { baddr = hSession->cursor_addr; DEC_BA(baddr); - h3270.ea_buf[baddr].cc = EBC_si; + hSession->ea_buf[baddr].cc = EBC_si; } else - h3270.ea_buf[hSession->cursor_addr].cc = EBC_si; + hSession->ea_buf[hSession->cursor_addr].cc = EBC_si; } (void) ctlr_dbcs_postprocess(hSession); hSession->display(hSession); @@ -2183,7 +2183,7 @@ LIB3270_ACTION( deleteword ) /* Make sure we're on a modifiable field. */ if (FA_IS_PROTECTED(fa) || hSession->ea_buf[baddr].fa) { - operator_error(&h3270,KL_OERR_PROTECTED); + operator_error(hSession,KL_OERR_PROTECTED); return -1; } @@ -2377,28 +2377,33 @@ LIB3270_ACTION( fieldend ) return 0; } -/* PA key action for String actions */ -static void -do_pa(unsigned n) +/** + * PA key action for String actions + */ +static void do_pa(H3270 *hSession, unsigned n) { - if (n < 1 || n > PA_SZ) { - popup_an_error(NULL, _( "Unknown PA key %d" ), n); + if (n < 1 || n > PA_SZ) + { + popup_an_error(hSession, _( "Unknown PA key %d" ), n); return; } - lib3270_pakey(&h3270,n); + lib3270_pakey(hSession,n); } -/* PF key action for String actions */ -static void do_pf(unsigned n) +/** + * PF key action for String actions + */ +static void do_pf(H3270 *hSession, unsigned n) { - if (n < 1 || n > PF_SZ) { - popup_an_error(NULL, _( "Unknown PF key %d" ), n); + if (n < 1 || n > PF_SZ) + { + popup_an_error(hSession, _( "Unknown PF key %d" ), n); return; } - lib3270_pfkey(&h3270,n); + lib3270_pfkey(hSession,n); } /* @@ -2747,7 +2752,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int } else { - do_pf(literal); + do_pf(hSession,literal); skipped = False; if (IN_3270) return len-1; @@ -2769,7 +2774,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int } else { - do_pa(literal); + do_pa(hSession, literal); skipped = False; if (IN_3270) return len-1; @@ -2866,7 +2871,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int case BACKPF: if (nc > 0) { - do_pf(literal); + do_pf(hSession,literal); state = BASE; } break; @@ -2874,7 +2879,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *hSession, char *s, int len, int case BACKPA: if (nc > 0) { - do_pa(literal); + do_pa(hSession,literal); state = BASE; } break; diff --git a/src/lib3270/resources.c b/src/lib3270/resources.c index 9ce042e..afc8201 100644 --- a/src/lib3270/resources.c +++ b/src/lib3270/resources.c @@ -127,7 +127,7 @@ void add_resource(const char *name, const char *value) } -const char * get_resource(const char *name) +const char * get_resource(H3270 *hSession, const char *name) { struct dresource *d; int i; @@ -136,7 +136,7 @@ const char * get_resource(const char *name) { if (!strcmp(d->name, name)) { - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,d->value); + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,d->value); return d->value; } } @@ -146,7 +146,7 @@ const char * get_resource(const char *name) if (!strncmp(fallbacks[i], name, strlen(name)) && *(fallbacks[i] + strlen(name)) == ':') { const char *ret = fallbacks[i] + strlen(name) + 2; - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,ret); + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,ret); return ret; } } @@ -156,7 +156,7 @@ const char * get_resource(const char *name) { if (!strcmp(rdb[i].name, name)) { - lib3270_write_log(&h3270,"resource","%s=\"%s\"",name,rdb[i].value); + lib3270_write_log(hSession,"resource","%s=\"%s\"",name,rdb[i].value); return rdb[i].value; } } @@ -165,7 +165,7 @@ const char * get_resource(const char *name) } /* A version of get_resource that accepts sprintf arguments. */ -const char * get_fresource(const char *fmt, ...) +const char * get_fresource(H3270 *hSession, const char *fmt, ...) { va_list args; char *name; @@ -174,7 +174,7 @@ const char * get_fresource(const char *fmt, ...) va_start(args, fmt); name = lib3270_vsprintf(fmt, args); va_end(args); - r = get_resource(name); + r = get_resource(hSession,name); lib3270_free(name); return r; } diff --git a/src/lib3270/util.c b/src/lib3270/util.c index f992cac..8b26245 100644 --- a/src/lib3270/util.c +++ b/src/lib3270/util.c @@ -943,7 +943,7 @@ void * Calloc(size_t nelem, size_t elsize) } */ -LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ...) +LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...) { #ifdef ANDROID @@ -972,7 +972,7 @@ LIB3270_EXPORT char * lib3270_get_resource_string(const char *first_element, ... *ptr = 0; - res = get_resource(str); + res = get_resource(hSession,str); trace("%s(%s)=%s",__FUNCTION__,str,res ? res : "NULL"); diff --git a/src/lib3270/utilc.h b/src/lib3270/utilc.h index 80ebc52..ef0e1ad 100644 --- a/src/lib3270/utilc.h +++ b/src/lib3270/utilc.h @@ -23,8 +23,8 @@ LIB3270_INTERNAL char *ctl_see(int c); LIB3270_INTERNAL char *do_subst(const char *s, Boolean do_vars, Boolean do_tilde); LIB3270_INTERNAL void fcatv(FILE *f, char *s); LIB3270_INTERNAL const char *get_message(const char *key); -LIB3270_INTERNAL const char *get_fresource(const char *fmt, ...) printflike(1, 2); -LIB3270_INTERNAL const char *get_resource(const char *name); +LIB3270_INTERNAL const char *get_fresource(H3270 *hSession, const char *fmt, ...) printflike(2, 3); +LIB3270_INTERNAL const char *get_resource(H3270 *hSession, const char *name); LIB3270_INTERNAL char *scatv(const char *s, char *buf, size_t len); LIB3270_INTERNAL int split_dbcs_resource(const char *value, char sep, char **part1, char **part2); -- libgit2 0.21.2