From 7c9366e02cde91e44863bfb0f5c6894a13464012 Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Thu, 16 Feb 2012 09:59:28 +0000 Subject: [PATCH] Mais chamadas de toggle receberam a estrutura de sessão como argumento --- latest/src/gtk2/screen.c | 6 +++--- latest/src/include/lib3270.h | 14 +++++++++++++- latest/src/include/lib3270/api.h | 3 ++- latest/src/include/lib3270/toggle.h | 6 +++--- latest/src/lib/appres.h | 9 +++------ latest/src/lib/ctlr.c | 7 ++++--- latest/src/lib/ctlrc.h | 2 +- latest/src/lib/glue.c | 18 ++++++++++++++++++ latest/src/lib/screen.c | 8 +++----- latest/src/lib/screenc.h | 2 +- latest/src/lib/toggles.c | 38 ++++++++++++++------------------------ latest/src/lib/trace_ds.c | 25 ++++++++++++------------- latest/src/lib/trace_dsc.h | 6 +++--- 13 files changed, 80 insertions(+), 64 deletions(-) diff --git a/latest/src/gtk2/screen.c b/latest/src/gtk2/screen.c index 6ac20ec..44450ec 100644 --- a/latest/src/gtk2/screen.c +++ b/latest/src/gtk2/screen.c @@ -78,7 +78,7 @@ static void warning(const char *fmt, va_list arg); static void syserror(const char *title, const char *message, const char *system); static int init(void); - static void update_toggle(int ix, int value, int reason, const char *name); + static void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name); static void redraw(void); static gchar * convert_monocase(int c, gsize *sz); static gchar * convert_regular(int c, gsize *sz); @@ -126,7 +126,7 @@ NULL, // void (*set_viewsize)(unsigned short rows, unsigned short cols); #endif - update_toggle, // void (*toggle_changed)(int ix, int value, int reason, const char *name); + update_toggle, // void (*toggle_changed)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name); oia_set_timer, // void (*show_timer)(long seconds); gui_console_window_new, // HCONSOLE (*console_new)(const char *title, const char *label); @@ -734,7 +734,7 @@ return 0; } - void update_toggle(int ix, int value, int reason, const char *name) + void update_toggle(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name) { update_3270_toggle_action(ix, value); } diff --git a/latest/src/include/lib3270.h b/latest/src/include/lib3270.h index a894baa..d28864b 100644 --- a/latest/src/include/lib3270.h +++ b/latest/src/include/lib3270.h @@ -148,7 +148,7 @@ LIB3270_MESSAGE_DISCONNECTED, /**< Disconnected from host */ LIB3270_MESSAGE_AWAITING_FIRST, LIB3270_MESSAGE_MINUS, - LIB3270_MESSAGE_PROTECTED c + LIB3270_MESSAGE_PROTECTED, LIB3270_MESSAGE_NUMERIC, LIB3270_MESSAGE_OVERFLOW, LIB3270_MESSAGE_INHIBIT, @@ -381,6 +381,18 @@ LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *h, LIB3270_TOGGLE ix); /** + * Set toggle state. + * + * @param h Session handle. + * @param ix Toggle id. + * @param value New toggle state (non zero for true). + * + * @return 0 if the toggle wasn't changed, non zero if it was changed. + * + */ + LIB3270_EXPORT int lib3270_set_toggle(H3270 *h, LIB3270_TOGGLE ix, int value); + + /** * Check if the active connection is secure. * * @param h Session handle. diff --git a/latest/src/include/lib3270/api.h b/latest/src/include/lib3270/api.h index c94f693..23f5854 100644 --- a/latest/src/include/lib3270/api.h +++ b/latest/src/include/lib3270/api.h @@ -269,6 +269,7 @@ void (*changed)(H3270 *session, int bstart, int bend); void (*update_cursor)(H3270 *session, unsigned short row, unsigned short col); void (*update_oia)(H3270 *session, OIA_FLAG id, unsigned char on); + void (*set_timer)(H3270 *session, unsigned char on); void (*update_luname)(H3270 *session, const char *name); void (*update_status)(H3270 *session, LIB3270_STATUS id); @@ -511,7 +512,7 @@ void (*set_viewsize)(H3270 *session, unsigned short rows, unsigned short cols); - void (*toggle_changed)(int ix, int value, int reason, const char *name); + void (*toggle_changed)(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason, const char *name); void (*show_timer)(long seconds); // Console/Trace window diff --git a/latest/src/include/lib3270/toggle.h b/latest/src/include/lib3270/toggle.h index a8c55cc..8b73581 100644 --- a/latest/src/include/lib3270/toggle.h +++ b/latest/src/include/lib3270/toggle.h @@ -69,9 +69,9 @@ #define register_3270_toggle_monitor(ix,callback) lib3270_register_tchange(NULL,ix,callback) - // LIB3270_EXPORT void register_3270_toggle_monitor(LIB3270_TOGGLE_ID ix, void (*callback)(int value, LIB3270_TOGGLE_TYPE reason)); - LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE_ID ix); + // LIB3270_EXPORT void register_3270_toggle_monitor(LIB3270_TOGGLE_ID ix, void (*callback)(int value, LIB3270_TOGGLE_TYPE reason)); +// LIB3270_EXPORT int lib3270_toggle(H3270 *session, LIB3270_TOGGLE_ID ix); LIB3270_EXPORT int set_3270_toggle(LIB3270_TOGGLE_ID ix, int value); @@ -85,7 +85,7 @@ #define do_toggle(ix) lib3270_toggle(NULL,ix) #define get_toggle_name(ix) get_3270_toggle_name(ix) - #define set_toggle(ix,value) set_3270_toggle(ix,value) + #define set_toggle(ix,value) lib3270_set_toggle(NULL,ix,value) #define get_toggle_by_name(name) get_3270_toggle_by_name(name) #endif /* TOGGLE3270_H_INCLUDED */ diff --git a/latest/src/lib/appres.h b/latest/src/lib/appres.h index 7b71fdd..71e26e2 100644 --- a/latest/src/lib/appres.h +++ b/latest/src/lib/appres.h @@ -26,20 +26,17 @@ struct toggle { char value; /* toggle value */ - char changed; /* has the value changed since init */ +// char changed; /* has the value changed since init */ // Widget w[2]; /* the menu item widgets */ // const char *label[2]; /* labels */ - void (*upcall)(struct toggle *, LIB3270_TOGGLE_TYPE); /* change value */ - -#if defined(LIB3270) + void (*upcall)(H3270 *, struct toggle *, LIB3270_TOGGLE_TYPE); /* change value */ void (*callback)(H3270 *, int, LIB3270_TOGGLE_TYPE); -#endif }; #define toggled(ix) (appres.toggle[ix].value) #define toggle_toggle(t) \ - { (t)->value = !(t)->value; (t)->changed = True; } + { (t)->value = !(t)->value; } /* Application resources */ diff --git a/latest/src/lib/ctlr.c b/latest/src/lib/ctlr.c index 846f15f..78b224d 100644 --- a/latest/src/lib/ctlr.c +++ b/latest/src/lib/ctlr.c @@ -2820,19 +2820,20 @@ static void ticking_stop(H3270 *session) } } -void -toggle_showTiming(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) +/* +void toggle_showTiming(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) { if (!toggled(SHOW_TIMING)) status_untiming(&h3270); } +*/ /* * No-op toggle. */ void -toggle_nop(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) +toggle_nop(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt unused) { } diff --git a/latest/src/lib/ctlrc.h b/latest/src/lib/ctlrc.h index 592910a..c869462 100644 --- a/latest/src/lib/ctlrc.h +++ b/latest/src/lib/ctlrc.h @@ -62,7 +62,7 @@ LIB3270_INTERNAL void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ov LIB3270_INTERNAL void ctlr_erase(H3270 *session, int alt); LIB3270_INTERNAL void ticking_start(H3270 *session, Boolean anyway); -LIB3270_INTERNAL void toggle_nop(struct toggle *t, LIB3270_TOGGLE_TYPE tt); +LIB3270_INTERNAL void toggle_nop(H3270 *session, struct toggle *t, LIB3270_TOGGLE_TYPE tt); LIB3270_INTERNAL void toggle_showTiming(struct toggle *t, LIB3270_TOGGLE_TYPE tt); enum dbcs_state { diff --git a/latest/src/lib/glue.c b/latest/src/lib/glue.c index 90983c6..a7115db 100644 --- a/latest/src/lib/glue.c +++ b/latest/src/lib/glue.c @@ -145,7 +145,25 @@ const char *toggle_names[N_TOGGLES] = void lib3270_session_free(H3270 *h) { + int f; + + // Terminate session + if(lib3270_connected(h)) + lib3270_disconnect(h); + shutdown_toggles(h,appres.toggle); + + // Release state change callbacks + for(f=0;fst_callbacks[f]) + { + struct lib3270_state_callback *next = h->st_callbacks[f]->next; + Free(h->st_callbacks[f]); + h->st_callbacks[f] = next; + } + } + } void lib3270_session_init(H3270 *hSession, const char *model) diff --git a/latest/src/lib/screen.c b/latest/src/lib/screen.c index abfd2df..4a9729c 100644 --- a/latest/src/lib/screen.c +++ b/latest/src/lib/screen.c @@ -793,11 +793,10 @@ void Error(const char *fmt, ...) } -#if defined(LIB3270) -void notify_toggle_changed(int ix, int value, int reason) +void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason) { if(callbacks && callbacks->toggle_changed) - callbacks->toggle_changed(ix,value,reason,toggle_names[ix]); + callbacks->toggle_changed(session,ix,value,reason,toggle_names[ix]); } LIB3270_EXPORT void update_toggle_actions(void) @@ -807,10 +806,9 @@ LIB3270_EXPORT void update_toggle_actions(void) if(callbacks && callbacks->toggle_changed) { for(f=0;f< N_TOGGLES;f++) - callbacks->toggle_changed(f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]); + callbacks->toggle_changed(&h3270,f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]); } } -#endif void Warning(const char *fmt, ...) { diff --git a/latest/src/lib/screenc.h b/latest/src/lib/screenc.h index bef0389..c8c5e97 100644 --- a/latest/src/lib/screenc.h +++ b/latest/src/lib/screenc.h @@ -43,7 +43,7 @@ LIB3270_INTERNAL void mcursor_set(H3270 *session,LIB3270_CURSOR m); //LIB3270_INTERNAL void mcursor_normal(H3270 *session); //LIB3270_INTERNAL void mcursor_waiting(H3270 *session); -LIB3270_INTERNAL void notify_toggle_changed(int ix, int value, int reason); +LIB3270_INTERNAL void notify_toggle_changed(H3270 *session, LIB3270_TOGGLE ix, unsigned char value, LIB3270_TOGGLE_TYPE reason); LIB3270_INTERNAL void set_viewsize(H3270 *session, int rows, int cols); LIB3270_INTERNAL Boolean escaped; diff --git a/latest/src/lib/toggles.c b/latest/src/lib/toggles.c index ee2cb8f..cdf41e3 100644 --- a/latest/src/lib/toggles.c +++ b/latest/src/lib/toggles.c @@ -96,7 +96,7 @@ LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE i /* * Generic toggle stuff */ -static void do_toggle_reason(H3270 *session, LIB3270_TOGGLE_ID ix, LIB3270_TOGGLE_TYPE reason) +static void do_toggle_reason(H3270 *session, LIB3270_TOGGLE ix, LIB3270_TOGGLE_TYPE reason) { struct toggle *t = &appres.toggle[ix]; @@ -105,32 +105,22 @@ static void do_toggle_reason(H3270 *session, LIB3270_TOGGLE_ID ix, LIB3270_TOGGL * menu label(s). */ toggle_toggle(t); - t->upcall(t, reason); - -//#if defined(X3270_MENUS) /*[*/ -// menubar_retoggle(t); -//#endif /*]*/ + t->upcall(session, t, reason); t->callback(session,t->value, (int) reason); - notify_toggle_changed(ix, t->value, reason); + + notify_toggle_changed(session, ix, t->value, reason); } -/** - * Set 3270 toggle state. - * - * @param ix Toggle to set. - * @param value New toggle state (non zero for true). - * - * @return 0 if the toggle wasn't changed, non zero if it was changed. - * - */ -LIB3270_EXPORT int set_toggle(LIB3270_TOGGLE_ID ix, int value) +LIB3270_EXPORT int lib3270_set_toggle(H3270 *session, LIB3270_TOGGLE ix, int value) { Boolean v = ((Boolean) (value != 0)); // Convert int in Boolean struct toggle *t; + CHECK_SESSION_HANDLE(session); + if(ix < 0 || ix >= LIB3270_TOGGLE_COUNT) return 0; @@ -139,7 +129,7 @@ LIB3270_EXPORT int set_toggle(LIB3270_TOGGLE_ID ix, int value) if(t->value == v) return 0; - do_toggle_reason(&h3270, ix, TT_INTERACTIVE); + do_toggle_reason(session, ix, TT_INTERACTIVE); return -1; } @@ -181,13 +171,13 @@ void initialize_toggles(H3270 *session, struct toggle *toggle) #if defined(X3270_TRACE) if(toggle[DS_TRACE].value) - toggle[DS_TRACE].upcall(&toggle[DS_TRACE],TT_INITIAL); + toggle[DS_TRACE].upcall(session, &toggle[DS_TRACE],TT_INITIAL); if(toggle[EVENT_TRACE].value) - toggle[EVENT_TRACE].upcall(&toggle[EVENT_TRACE],TT_INITIAL); + toggle[EVENT_TRACE].upcall(session, &toggle[EVENT_TRACE],TT_INITIAL); if(toggle[SCREEN_TRACE].value) - toggle[SCREEN_TRACE].upcall(&toggle[SCREEN_TRACE],TT_INITIAL); + toggle[SCREEN_TRACE].upcall(session, &toggle[SCREEN_TRACE],TT_INITIAL); #endif #if defined(DEFAULT_TOGGLE_CURSOR_POS) @@ -210,20 +200,20 @@ void shutdown_toggles(H3270 *session, struct toggle *toggle) if(toggle[DS_TRACE].value) { toggle[DS_TRACE].value = False; - toggle_dsTrace(&toggle[DS_TRACE], TT_FINAL); + toggle_dsTrace(session, &toggle[DS_TRACE], TT_FINAL); } if(toggle[EVENT_TRACE].value) { toggle[EVENT_TRACE].value = False; - toggle_dsTrace(&toggle[EVENT_TRACE], TT_FINAL); + toggle_dsTrace(session, &toggle[EVENT_TRACE], TT_FINAL); } // Clean up the screen trace file. if (toggle[SCREEN_TRACE].value) { toggle[SCREEN_TRACE].value = False; - toggle_screenTrace(&toggle[SCREEN_TRACE], TT_FINAL); + toggle_screenTrace(session, &toggle[SCREEN_TRACE], TT_FINAL); } #endif } diff --git a/latest/src/lib/trace_ds.c b/latest/src/lib/trace_ds.c index e31a5ed..3334485 100644 --- a/latest/src/lib/trace_ds.c +++ b/latest/src/lib/trace_ds.c @@ -622,7 +622,7 @@ static void tracefile_callback(Widget w, XtPointer client_data, XtPointer call_d /* We're really tracing, turn the flag on. */ appres.toggle[trace_reason].value = True; - appres.toggle[trace_reason].changed = True; +// appres.toggle[trace_reason].changed = True; menubar_retoggle(&appres.toggle[trace_reason]); /* Display current status. */ @@ -745,7 +745,7 @@ static void tracefile_off(void) stop_tracing(); } -void toggle_dsTrace(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) +void toggle_dsTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) { /* If turning on trace and no trace file, open one. */ @@ -761,8 +761,7 @@ void toggle_dsTrace(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) (void) gettimeofday(&ds_ts, (struct timezone *)NULL); } -void -toggle_eventTrace(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) +void toggle_eventTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) { /* If turning on event debug, and no trace file, open one. */ @@ -857,13 +856,14 @@ screentrace_cb(char *tfn) /* We're really tracing, turn the flag on. */ appres.toggle[SCREEN_TRACE].value = True; - appres.toggle[SCREEN_TRACE].changed = True; +// appres.toggle[SCREEN_TRACE].changed = True; menubar_retoggle(&appres.toggle[SCREEN_TRACE]); return True; } -#if defined(X3270_DISPLAY) /*[*/ -/* Callback for "OK" button on screentrace popup */ +/* +#if defined(X3270_DISPLAY) +// Callback for "OK" button on screentrace popup static void screentrace_callback(Widget w unused, XtPointer client_data, XtPointer call_data unused) @@ -872,7 +872,7 @@ screentrace_callback(Widget w unused, XtPointer client_data, XtPopdown(screentrace_shell); } -/* Callback for second "OK" button on screentrace popup */ +// Callback for second "OK" button on screentrace popup static void onescreen_callback(Widget w, XtPointer client_data, XtPointer call_data unused) { @@ -892,20 +892,19 @@ onescreen_callback(Widget w, XtPointer client_data, XtPointer call_data unused) (void) fcntl(fileno(screentracef), F_SETFD, 1); XtFree(tfn); - /* Save the current image, once. */ + // Save the current image, once. do_screentrace(); - /* Close the file, we're done. */ + // Close the file, we're done. (void) fclose(screentracef); screentracef = (FILE *)NULL; if (w) XtPopdown(screentrace_shell); } -#endif /*]*/ +#endif */ -void -toggle_screenTrace(struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) +void toggle_screenTrace(H3270 *session, struct toggle *t unused, LIB3270_TOGGLE_TYPE tt) { char *tracefile_buf = NULL; char *tracefile; diff --git a/latest/src/lib/trace_dsc.h b/latest/src/lib/trace_dsc.h index 9e5f275..48a166f 100644 --- a/latest/src/lib/trace_dsc.h +++ b/latest/src/lib/trace_dsc.h @@ -22,9 +22,9 @@ LIB3270_INTERNAL Boolean trace_skipping; const char *rcba(int baddr); -void toggle_dsTrace(struct toggle *t, LIB3270_TOGGLE_TYPE tt); -void toggle_eventTrace(struct toggle *t, LIB3270_TOGGLE_TYPE tt); -void toggle_screenTrace(struct toggle *t, LIB3270_TOGGLE_TYPE tt); +void toggle_dsTrace(H3270 *h, struct toggle *t, LIB3270_TOGGLE_TYPE tt); +void toggle_eventTrace(H3270 *h, struct toggle *t, LIB3270_TOGGLE_TYPE tt); +void toggle_screenTrace(H3270 *h, struct toggle *t, LIB3270_TOGGLE_TYPE tt); void trace_ansi_disc(void); void trace_char(char c); void trace_ds(const char *fmt, ...) printflike(1, 2); -- libgit2 0.21.2