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