From 8d37354a0fb22eb5801f999967d47899a5447bdf Mon Sep 17 00:00:00 2001 From: perry.werneck@gmail.com Date: Wed, 7 Mar 2012 13:04:29 +0000 Subject: [PATCH] Incluindo novo tratamento de janelas popup --- pw3270.cbp | 2 ++ src/gtk/main.c | 49 ++++++++++++++++++++++++++++++++++++++++++++----- src/gtk/v3270/widget.c | 9 ++++++++- src/include/lib3270/popup.h | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib3270/api.h | 11 +---------- src/lib3270/charset.c | 8 ++++---- src/lib3270/ctlr.c | 13 ++++++------- src/lib3270/glue.c | 4 ++-- src/lib3270/kybd.c | 22 +++++++++------------- src/lib3270/proxy.c | 8 ++++---- src/lib3270/screen.c | 240 ++++++++++++++++++++++++++++++++---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- src/lib3270/telnet.c | 14 +++++++------- 12 files changed, 169 insertions(+), 261 deletions(-) create mode 100644 src/include/lib3270/popup.h diff --git a/pw3270.cbp b/pw3270.cbp index 97c6e7c..6708331 100644 --- a/pw3270.cbp +++ b/pw3270.cbp @@ -116,6 +116,8 @@ + + diff --git a/src/gtk/main.c b/src/gtk/main.c index 2f8c5a9..3460f35 100644 --- a/src/gtk/main.c +++ b/src/gtk/main.c @@ -31,22 +31,61 @@ #include "globals.h" #include "v3270/v3270.h" +#include #include +/*--[ Statics ]--------------------------------------------------------------------------------------*/ + + static GtkWidget *toplevel = NULL; + /*--[ Implement ]------------------------------------------------------------------------------------*/ -int main (int argc, char *argv[]) +static int popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) { - GtkWidget *window; + GtkWidget * dialog; + GtkMessageType msgtype = GTK_MESSAGE_WARNING; + GtkButtonsType buttons = GTK_BUTTONS_OK; + gchar * text = g_strdup_vprintf(fmt,args); + + if(type == LIB3270_NOTIFY_CRITICAL) + { + msgtype = GTK_MESSAGE_ERROR; + buttons = GTK_BUTTONS_CLOSE; + } + + if(msg) + { + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",msg); + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); + } + else + { + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); + } + g_free(text); + + gtk_window_set_title(GTK_WINDOW(dialog),title ? title : "Error"); + + gtk_dialog_run(GTK_DIALOG (dialog)); + gtk_widget_destroy(dialog); + + + return 0; +} + +int main (int argc, char *argv[]) +{ gtk_init(&argc, &argv); + configuration_init(); + lib3270_set_popup_handler(popup_handler); - window = create_main_window(); + toplevel = create_main_window(); - if(window) + if(toplevel) { - gtk_widget_show(window); + gtk_widget_show(toplevel); gtk_main(); } diff --git a/src/gtk/v3270/widget.c b/src/gtk/v3270/widget.c index dd8fe3f..473aa33 100644 --- a/src/gtk/v3270/widget.c +++ b/src/gtk/v3270/widget.c @@ -108,11 +108,18 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea } +static void loghandler(H3270 *session, const char *module, int rc, const char *fmt, va_list args) +{ + g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args); +} + static void v3270_class_init(v3270Class *klass) { GObjectClass * gobject_class = G_OBJECT_CLASS(klass); GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); + lib3270_set_log_handler(loghandler); + widget_class->realize = v3270_realize; widget_class->size_allocate = v3270_size_allocate; widget_class->key_press_event = v3270_key_press_event; @@ -395,7 +402,7 @@ static void v3270_init(v3270 *widget) if(widget->host->sz != sizeof(H3270)) { - g_critical(N_( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); + g_error(N_( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); return; } diff --git a/src/include/lib3270/popup.h b/src/include/lib3270/popup.h new file mode 100644 index 0000000..1c55854 --- /dev/null +++ b/src/include/lib3270/popup.h @@ -0,0 +1,50 @@ +/* + * "Software PW3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple + * Place, Suite 330, Boston, MA, 02111-1307, USA + * + * Este programa está nomeado como api.h e possui 444 linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) + * licinio@bb.com.br (Licínio Luis Branco) + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) + * + */ + +#ifndef LIB3270_POPUP_INCLUDED + + #define LIB3270_POPUP_INCLUDED 1 + + typedef enum _LIB3270_NOTIFY + { + LIB3270_NOTIFY_INFO, /**< Simple information dialog */ + LIB3270_NOTIFY_WARNING, + LIB3270_NOTIFY_ERROR, + LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ + + LIB3270_NOTIFY_USER /**< Reserver, always the last one */ + } LIB3270_NOTIFY; + + LIB3270_EXPORT void lib3270_set_popup_handler(int (*popup_handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)); + +#endif // LIB3270_POPUP_INCLUDED + + diff --git a/src/lib3270/api.h b/src/lib3270/api.h index f07590b..318164b 100644 --- a/src/lib3270/api.h +++ b/src/lib3270/api.h @@ -26,7 +26,6 @@ * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) * licinio@bb.com.br (Licínio Luis Branco) * kraucer@bb.com.br (Kraucer Fernandes Mazuco) - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) * */ @@ -179,15 +178,7 @@ /** Type of dialog boxes */ - typedef enum _LIB3270_NOTIFY - { - LIB3270_NOTIFY_INFO, /**< Simple information dialog */ - LIB3270_NOTIFY_WARNING, - LIB3270_NOTIFY_ERROR, - LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ - - LIB3270_NOTIFY_USER /**< Reserver, always the last one */ - } LIB3270_NOTIFY; + #include #define PW3270_DIALOG_INFO LIB3270_NOTIFY_INFO #define PW3270_DIALOG_CRITICAL LIB3270_NOTIFY_CRITICAL diff --git a/src/lib3270/charset.c b/src/lib3270/charset.c index 04f7a61..ff7d008 100644 --- a/src/lib3270/charset.c +++ b/src/lib3270/charset.c @@ -410,7 +410,7 @@ resource_charset(char *csname, char *cs, char *ftcs) #endif /*]*/ break; default: - popup_an_error("Extra %s value(s), ignoring", + popup_an_error(NULL,"Extra %s value(s), ignoring", ResDisplayCharset); break; } @@ -421,7 +421,7 @@ resource_charset(char *csname, char *cs, char *ftcs) #if defined(X3270_DBCS) /*[*/ /* Can't swap DBCS modes while connected. */ if (IN_3270 && (n_rcs == 2) != dbcs) { - popup_an_error("Can't change DBCS modes while connected"); + popup_an_error(NULL,"Can't change DBCS modes while connected"); return CS_ILLEGAL; } #endif /*]*/ @@ -646,7 +646,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) s = CN; } if (ebc != 256) { - popup_an_error("Charset has %d entries, need 256", ebc); + popup_an_error(NULL,"Charset has %d entries, need 256", ebc); rc = CS_BAD; } else { /* @@ -679,7 +679,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) ((ebc = strtoul(ebcs, &ptr, 0)), ptr == ebcs || *ptr != '\0') || (iso = parse_keysym(isos, True)) == NoSymbol) { - popup_an_error("Cannot parse %s \"%s\", entry %d", + popup_an_error(NULL,"Cannot parse %s \"%s\", entry %d", ResCharset, csname, *ne); rc = CS_BAD; break; diff --git a/src/lib3270/ctlr.c b/src/lib3270/ctlr.c index 5b885bf..c968745 100644 --- a/src/lib3270/ctlr.c +++ b/src/lib3270/ctlr.c @@ -225,7 +225,7 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) if(idx < 0 || idx >= (sizeof(sz)/sizeof(struct _sz))) { idx = 2; - popup_an_error("Unknown model: %d - Defaulting to 4 (%dx%d)", mn, sz[idx].cols,sz[idx].rows); + popup_an_error(NULL,"Unknown model: %d - Defaulting to 4 (%dx%d)", mn, sz[idx].cols,sz[idx].rows); mn = 4; } @@ -237,13 +237,13 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) if (ovc != 0 || ovr != 0) { if (ovc <= 0 || ovr <= 0) - popup_an_error("Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); + popup_an_error(NULL,"Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); else if (ovc * ovr >= 0x4000) - popup_an_error("Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); + popup_an_error(NULL,"Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); else if (ovc > 0 && ovc < session->maxCOLS) - popup_an_error("Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); + popup_an_error(NULL,"Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); else if (ovr > 0 && ovr < session->maxROWS) - popup_an_error("Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); + popup_an_error(NULL,"Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); else update_model_info(session,mn,session->ov_cols = ovc,session->ov_rows = ovr); } @@ -563,8 +563,7 @@ process_ds(unsigned char *buf, int buflen) break; default: /* unknown 3270 command */ - popup_an_error("Unknown 3270 Data Stream command: 0x%X\n", - buf[0]); + popup_an_error(NULL,"Unknown 3270 Data Stream command: 0x%X\n",buf[0]); return PDS_BAD_CMD; } } diff --git a/src/lib3270/glue.c b/src/lib3270/glue.c index f6c6782..cc18b97 100644 --- a/src/lib3270/glue.c +++ b/src/lib3270/glue.c @@ -198,7 +198,7 @@ static void lib3270_session_init(H3270 *hSession, const char *model) model_number = parse_model_number(model); if (model_number < 0) { - popup_an_error("Invalid model number: %s", model); + popup_an_error(NULL,"Invalid model number: %s", model); model_number = 0; } @@ -268,7 +268,7 @@ H3270 * lib3270_session_new(const char *model) Trace("Charset: %s",appres.charset); if (charset_init(appres.charset) != CS_OKAY) { - Warning( _( "Cannot find charset \"%s\", using defaults" ), appres.charset); + Warning(NULL, _( "Cannot find charset \"%s\", using defaults" ), appres.charset); (void) charset_init(CN); } diff --git a/src/lib3270/kybd.c b/src/lib3270/kybd.c index 2ee6500..2a69554 100644 --- a/src/lib3270/kybd.c +++ b/src/lib3270/kybd.c @@ -3245,7 +3245,7 @@ static void do_pa(unsigned n) { if (n < 1 || n > PA_SZ) { - popup_an_error( _( "Unknown PA key %d" ), n); + popup_an_error(NULL, _( "Unknown PA key %d" ), n); return; } @@ -3257,7 +3257,7 @@ do_pa(unsigned n) static void do_pf(unsigned n) { if (n < 1 || n > PF_SZ) { - popup_an_error( _( "Unknown PF key %d" ), n); + popup_an_error(NULL, _( "Unknown PF key %d" ), n); return; } @@ -3471,8 +3471,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p case BACKSLASH: /* last character was a backslash */ switch (c) { case 'a': - popup_an_error("%s: Bell not supported", - action_name(String_action)); + popup_an_error(NULL,"%s: Bell not supported",action_name(String_action)); // cancel_if_idle_command(); state = BASE; break; @@ -3520,7 +3519,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p state = BASE; break; case 'v': - popup_an_error("%s: Vertical tab not supported",action_name(String_action)); + popup_an_error(NULL,"%s: Vertical tab not supported",action_name(String_action)); // cancel_if_idle_command(); state = BASE; break; @@ -3561,8 +3560,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p state = BACKPF; break; default: - popup_an_error("%s: Unknown character " - "after \\p", + popup_an_error(NULL,"%s: Unknown character after \\p", action_name(String_action)); // cancel_if_idle_command(); state = BASE; @@ -3574,8 +3572,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p literal = (literal * 10) + (c - '0'); nc++; } else if (!nc) { - popup_an_error("%s: Unknown character " - "after \\pf", + popup_an_error(NULL,"%s: Unknown character after \\pf", action_name(String_action)); // cancel_if_idle_command(); state = BASE; @@ -3593,8 +3590,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p literal = (literal * 10) + (c - '0'); nc++; } else if (!nc) { - popup_an_error("%s: Unknown character " - "after \\pa", + popup_an_error(NULL,"%s: Unknown character after \\pa", action_name(String_action)); // cancel_if_idle_command(); state = BASE; @@ -3614,7 +3610,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p nc = 0; continue; } else { - popup_an_error("%s: Missing hex digits after \\x", + popup_an_error(NULL,"%s: Missing hex digits after \\x", action_name(String_action)); // cancel_if_idle_command(); state = BASE; @@ -3691,7 +3687,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p } break; default: - popup_an_error("%s: Missing data after \\", + popup_an_error(NULL,"%s: Missing data after \\", action_name(String_action)); // cancel_if_idle_command(); break; diff --git a/src/lib3270/proxy.c b/src/lib3270/proxy.c index d140f22..b5263f6 100644 --- a/src/lib3270/proxy.c +++ b/src/lib3270/proxy.c @@ -228,7 +228,7 @@ proxy_setup(char **phost, char **pport) *pport = NewString(PORT_SOCKS5D); return PT_SOCKS5D; } - popup_an_error("Invalid proxy type '%.*s'", sl, proxy); + popup_an_error(NULL,"Invalid proxy type '%.*s'", sl, proxy); return -1; } @@ -695,7 +695,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) if (rv == -2) use_name = 1; else if (rv < 0) { - popup_an_error("SOCKS5 proxy: %s/%u: %s", host, port, + popup_an_error(NULL,"SOCKS5 proxy: %s/%u: %s", host, port, errmsg); return -1; } @@ -863,7 +863,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) switch (nread++) { case 0: if (r != 0x05) { - popup_an_error("SOCKS5 Proxy: incorrect " + popup_an_error(NULL,"SOCKS5 Proxy: incorrect " "reply version 0x%02x", r); #if defined(X3270_TRACE) /*[*/ if (nread) @@ -932,7 +932,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) break; #endif /*]*/ default: - popup_an_error("SOCKS5 Proxy: unknown server " + popup_an_error(NULL,"SOCKS5 Proxy: unknown server " "address type 0x%02x", r); #if defined(X3270_TRACE) /*[*/ if (nread) diff --git a/src/lib3270/screen.c b/src/lib3270/screen.c index 7af38a9..4c95544 100644 --- a/src/lib3270/screen.c +++ b/src/lib3270/screen.c @@ -26,7 +26,6 @@ * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * licinio@bb.com.br (Licínio Luis Branco) * kraucer@bb.com.br (Kraucer Fernandes Mazuco) - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) * */ @@ -75,11 +74,15 @@ #define get_color_pair(fg,bg) (((bg&0x0F) << 4) | (fg&0x0F)) #define DEFCOLOR_MAP(f) ((((f) & FA_PROTECT) >> 4) | (((f) & FA_INT_HIGH_SEL) >> 3)) -#if defined(WC3270) /*[*/ -extern char *profile_name; -#endif +// #if defined(WC3270) +// extern char *profile_name; +// #endif + +static int logpopup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg); + +static int (*popup_handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list) = logpopup; -static const struct lib3270_screen_callbacks *callbacks = NULL; +// static const struct lib3270_screen_callbacks *callbacks = NULL; // static SCRIPT_STATE script_state = SCRIPT_STATE_NONE; @@ -92,12 +95,10 @@ static void status_connect(H3270 *session, int ignored, void *dunno); static void status_3270_mode(H3270 *session, int ignored, void *dunno); static void status_printer(H3270 *session, int on, void *dunno); static unsigned short color_from_fa(unsigned char fa); -static void relabel(H3270 *session, int ignored, void *dunno); +// static void relabel(H3270 *session, int ignored, void *dunno); void set_display_charset(char *dcs) { - if(callbacks && callbacks->charset) - callbacks->charset(dcs); } static void addch(H3270 *session, int baddr, unsigned char c, unsigned short attr) @@ -109,9 +110,6 @@ static void addch(H3270 *session, int baddr, unsigned char c, unsigned short att ea_buf[baddr].chr = c; ea_buf[baddr].attr = attr; - if(callbacks && callbacks->addch) - callbacks->addch(baddr/session->cols, baddr%session->cols, c, attr); - if(session->update) session->update(session,baddr,c,attr,baddr == session->cursor_addr); } @@ -126,76 +124,19 @@ int screen_init(H3270 *session) { CHECK_SESSION_HANDLE(session); - /* Initialize the console. */ - if(callbacks) - { - /* Init default callbacks */ - if(callbacks->move_cursor) - session->update_cursor = callbacks->move_cursor; - - if(callbacks->set_oia) - session->update_oia = callbacks->set_oia; - - if(callbacks->set_viewsize) - session->configure = callbacks->set_viewsize; - - if(callbacks->lu) - session->update_luname = callbacks->lu; - - if(callbacks->status) - session->update_status = callbacks->status; - - if(callbacks->erase) - session->erase = callbacks->erase; - - if(callbacks->cursor) - session->cursor = callbacks->cursor; - - if(callbacks->toggle_changed) - session->update_toggle = callbacks->toggle_changed; - - if(callbacks->model_changed) - session->update_model = callbacks->model_changed; - - if(callbacks->init()) - { - popup_an_error(session,"Can't initialize terminal."); - return -1; - } - } - /* Set up callbacks for state changes. */ lib3270_register_schange(session,ST_CONNECT, status_connect,0); lib3270_register_schange(session,ST_3270_MODE, status_3270_mode,0); lib3270_register_schange(session,ST_PRINTER, status_printer,0); - lib3270_register_schange(session,ST_HALF_CONNECT, relabel,0); - lib3270_register_schange(session,ST_CONNECT, relabel,0); - lib3270_register_schange(session,ST_3270_MODE, relabel,0); - - /* See about all-bold behavior. */ -// if (appres.all_bold_on) -// ab_mode = TS_ON; -// else if (!ts_value(appres.all_bold, &ab_mode)) -// (void) fprintf(stderr, "invalid %s value: '%s', assuming 'auto'\n", ResAllBold, appres.all_bold); -// if (ab_mode == TS_AUTO) -// ab_mode = appres.m3279? TS_ON: TS_OFF; +// lib3270_register_schange(session,ST_HALF_CONNECT, relabel,0); +// lib3270_register_schange(session,ST_CONNECT, relabel,0); +// lib3270_register_schange(session,ST_3270_MODE, relabel,0); /* Set up the controller. */ ctlr_init(session,-1); ctlr_reinit(session,-1); - /* Set the window label. */ -#if defined(WC3270) /*[*/ - - if (appres.title != CN) - screen_title(appres.title); - else if (profile_name != CN) - screen_title(profile_name); - else - screen_title(NULL); -#endif - /* Finish screen initialization. */ screen_suspend(session); @@ -318,8 +259,6 @@ void update_model_info(H3270 *session, int model, int cols, int rows) if(session->update_model) session->update_model(session, session->model_name,session->model_num,rows,cols); - else if(callbacks && callbacks->model_changed) - callbacks->model_changed(session, session->model_name,session->model_num,rows,cols); } LIB3270_EXPORT int lib3270_get_contents(H3270 *h, int first, int last, unsigned char *chr, unsigned short *attr) @@ -452,27 +391,16 @@ static void screen_update(H3270 *session, int bstart, int bend) void screen_disp(H3270 *session) { -// session->first_changed = -1; -// session->last_changed = -1; - screen_update(session,0,session->rows*session->cols); - - if(callbacks && callbacks->display) - callbacks->display(session); } void screen_suspend(H3270 *session) { - if(callbacks && callbacks->set_suspended) - callbacks->set_suspended(1); } void screen_resume(H3270 *session) { screen_disp(session); - - if(callbacks && callbacks->set_suspended) - callbacks->set_suspended(0); } LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h) @@ -586,12 +514,6 @@ void status_reset(H3270 *session) screen_disp(session); - if(callbacks && callbacks->reset) - { - Trace("%s calling reset",__FUNCTION__); - callbacks->reset(kybdlock); - } - } /** @@ -700,59 +622,38 @@ static void status_printer(H3270 *session, int on, void *dunno) set_status(session,OIA_FLAG_PRINTER,on); } -/* -SCRIPT_STATE status_script(SCRIPT_STATE state) -{ - if(state != script_state && callbacks && callbacks->set_script) - callbacks->set_script(state); - return script_state = state; -} -*/ - void status_timing(H3270 *session, struct timeval *t0, struct timeval *t1) { - CHECK_SESSION_HANDLE(session); - - if(callbacks && callbacks->show_timer) - callbacks->show_timer(t1->tv_sec - t0->tv_sec); } void status_untiming(H3270 *session) { CHECK_SESSION_HANDLE(session); - if(callbacks && callbacks->show_timer) - callbacks->show_timer(-1); - if(session->set_timer) session->set_timer(session,0); } void ring_bell(void) { - if(callbacks && callbacks->ring_bell) - callbacks->ring_bell(); } -/* Set the window title. */ -void -screen_title(char *text) +/* Set the window title. */ /* +void screen_title(char *text) { - if(callbacks && callbacks->title) - callbacks->title(text); } static void relabel(H3270 *session, int ignored unused, void *dunno) { -#if defined(WC3270) /*[*/ +#if defined(WC3270) if (appres.title != CN) return; #endif if (PCONNECTED) { -#if defined(WC3270) /*[*/ +#if defined(WC3270) if (profile_name != CN) screen_title(profile_name); else @@ -770,19 +671,7 @@ int query_counter(COUNTER_ID id) { return lib3270_event_counter[id]; } - -int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk) -{ - if(!cbk) - return EINVAL; - - if(cbk->sz != sizeof(struct lib3270_screen_callbacks)) - return -EINVAL; - - callbacks = cbk; - - return 0; -} +*/ void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, ...) { @@ -793,16 +682,15 @@ void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *tit va_list arg_ptr; va_start(arg_ptr, fmt); - - if(callbacks && callbacks->notify) - callbacks->notify(session,type,title,msg,fmt,arg_ptr); - else - lib3270_write_va_log(session,"lib3270",fmt,arg_ptr); - + popup_handler(session,type,title,msg,fmt,arg_ptr); va_end(arg_ptr); } +static int logpopup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) +{ + lib3270_write_va_log(session,"lib3270",fmt,arg); +} void Error(H3270 *session, const char *fmt, ...) { @@ -811,12 +699,7 @@ void Error(H3270 *session, const char *fmt, ...) CHECK_SESSION_HANDLE(session); va_start(arg_ptr, fmt); - - if(callbacks && callbacks->notify) - callbacks->notify(session,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); - else - lib3270_write_va_log(&h3270,"lib3270",fmt,arg_ptr); - + popup_handler(session,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); va_end(arg_ptr); } @@ -828,12 +711,7 @@ void Warning(H3270 *session, const char *fmt, ...) CHECK_SESSION_HANDLE(session); va_start(arg_ptr, fmt); - - if(callbacks && callbacks->notify) - callbacks->notify(session,LIB3270_NOTIFY_WARNING, _( "3270 Warning" ),NULL,fmt,arg_ptr); - else - lib3270_write_va_log(&h3270,"lib3270",fmt,arg_ptr); - + popup_handler(session,LIB3270_NOTIFY_WARNING, _( "3270 Warning" ),NULL,fmt,arg_ptr); va_end(arg_ptr); } @@ -846,12 +724,7 @@ extern void popup_an_error(H3270 *session, const char *fmt, ...) CHECK_SESSION_HANDLE(session); va_start(args, fmt); - - if(callbacks && callbacks->notify) - callbacks->notify(session,LIB3270_NOTIFY_ERROR,_( "3270 Error" ),NULL,fmt,args); - else - lib3270_write_va_log(&h3270,"lib3270",fmt,args); - + popup_handler(session,LIB3270_NOTIFY_ERROR,_( "3270 Error" ),NULL,fmt,args); va_end(args); } @@ -863,19 +736,13 @@ void popup_system_error(H3270 *session, const char *title, const char *message, CHECK_SESSION_HANDLE(session); va_start(args, fmt); - - if(callbacks && callbacks->notify) - callbacks->notify(session,LIB3270_NOTIFY_ERROR,title ? title : _( "3270 Error" ), message,fmt,args); - else - lib3270_write_va_log(&h3270,"lib3270",fmt,args); - + popup_handler(session,LIB3270_NOTIFY_ERROR,title ? title : _( "3270 Error" ), message,fmt,args); va_end(args); } - - LIB3270_EXPORT void update_toggle_actions(void) { +/* int f; if(callbacks && callbacks->toggle_changed) @@ -883,6 +750,7 @@ LIB3270_EXPORT void update_toggle_actions(void) for(f=0;f< N_TOGGLES;f++) callbacks->toggle_changed(&h3270,f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]); } +*/ } void mcursor_set(H3270 *session,LIB3270_CURSOR m) @@ -947,7 +815,7 @@ LIB3270_ACTION( testpattern ) }; int row = 0; - int max = (h3270.maxROWS * h3270.maxCOLS); + int max = (hSession->maxROWS * hSession->maxCOLS); int pos = 0; int f; int fg = COLOR_BLUE; @@ -973,58 +841,14 @@ LIB3270_ACTION( testpattern ) Trace("%s display",__FUNCTION__); - screen_disp(&h3270); + screen_disp(hSession); Trace("%s ends",__FUNCTION__); return 0; } -/* -LIB3270_EXPORT struct ea * copy_device_buffer(int *el) -{ - int sz = sizeof(struct ea) * (h3270.maxROWS * h3270.maxCOLS); - struct ea *ret = malloc(sz); - memcpy(ret,ea_buf,sz); - if(el) - *el = (h3270.maxROWS * h3270.maxCOLS); - return ret; -} -*/ - -/* -LIB3270_EXPORT HCONSOLE console_window_new(const char *title, const char *label) -{ - if(callbacks && callbacks->console_new ) - return callbacks->console_new(title,label); - - return NULL; -} - -LIB3270_EXPORT void console_window_delete(HCONSOLE hwnd) -{ - if(callbacks && callbacks->console_delete ) - callbacks->console_delete(hwnd); -} - -LIB3270_EXPORT int console_window_append(HCONSOLE hwnd, const char *fmt, ...) +LIB3270_EXPORT void lib3270_set_popup_handler(int (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)) { - va_list args; - - if(callbacks && callbacks->console_append) - { - va_start(args, fmt); - callbacks->console_append(hwnd, fmt, args); - va_end(args); - } - - return 0; + popup_handler = handler ? handler : logpopup; } -LIB3270_EXPORT char * console_window_wait_for_user_entry(HCONSOLE hwnd) -{ - if(callbacks && callbacks->console_entry ) - return callbacks->console_entry(hwnd); - return NULL; -} -*/ - diff --git a/src/lib3270/telnet.c b/src/lib3270/telnet.c index 7ac176c..8ef574a 100644 --- a/src/lib3270/telnet.c +++ b/src/lib3270/telnet.c @@ -475,7 +475,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving hp = gethostbyname(hn); if (hp == (struct hostent *) 0) { - popup_an_error("Unknown passthru host: %s", hn); + popup_an_error(NULL,"Unknown passthru host: %s", hn); return -1; } (void) memmove(passthru_haddr, hp->h_addr, hp->h_length); @@ -497,7 +497,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving if (ptr == portname || *ptr != '\0' || lport == 0L || lport & ~0xffff) { if (!(sp = getservbyname(portname, "tcp"))) { - popup_an_error("Unknown port number " + popup_an_error(NULL,"Unknown port number " "or service: %s", portname); return -1; } @@ -657,7 +657,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving output_id = AddOutput(h3270.sock, &h3270, output_possible); #endif /*]*/ } else { - popup_a_sockerr( N_( "Can't connect to %s:%d" ),h3270.hostname, h3270.current_port); + popup_a_sockerr(NULL, N_( "Can't connect to %s:%d" ),h3270.hostname, h3270.current_port); close_fail; } } else { @@ -1029,7 +1029,7 @@ void net_input(H3270 *session) */ trace_dsn("RCVD socket error %d\n", errno); if (HALF_CONNECTED) { - popup_a_sockerr( N_( "%s:%d" ),h3270.hostname, h3270.current_port); + popup_a_sockerr(NULL, N_( "%s:%d" ),h3270.hostname, h3270.current_port); } else if (socket_errno() != SE_ECONNRESET) { popup_a_sockerr(NULL, N_( "Socket read error" ) ); } @@ -3179,14 +3179,14 @@ non_blocking(Boolean on) int i = on ? 1 : 0; if (SOCK_IOCTL(h3270.sock, FIONBIO, (int *) &i) < 0) { - popup_a_sockerr( N_( "ioctl(%s)" ), "FIONBIO"); + popup_a_sockerr(NULL, N_( "ioctl(%s)" ), "FIONBIO"); return -1; } # else /*][*/ int f; if ((f = fcntl(sock, F_GETFL, 0)) == -1) { - popup_an_errno(errno, N_( "fcntl(%s)" ), "F_GETFL" ); + popup_an_errno(NULL,errno, N_( "fcntl(%s)" ), "F_GETFL" ); return -1; } if (on) @@ -3194,7 +3194,7 @@ non_blocking(Boolean on) else f &= ~O_NDELAY; if (fcntl(sock, F_SETFL, f) < 0) { - popup_an_errno(errno, N_( "fcntl(%s)" ), "F_GETFL"); + popup_an_errno(NULL,errno, N_( "fcntl(%s)" ), "F_GETFL"); return -1; } # endif /*]*/ -- libgit2 0.21.2