Commit 8d37354a0fb22eb5801f999967d47899a5447bdf
1 parent
31052932
Exists in
master
and in
5 other branches
Incluindo novo tratamento de janelas popup
Showing
12 changed files
with
169 additions
and
261 deletions
Show diff stats
pw3270.cbp
| @@ -116,6 +116,8 @@ | @@ -116,6 +116,8 @@ | ||
| 116 | </Unit> | 116 | </Unit> |
| 117 | <Unit filename="src/include/lib3270.h" /> | 117 | <Unit filename="src/include/lib3270.h" /> |
| 118 | <Unit filename="src/include/lib3270/config.h.in" /> | 118 | <Unit filename="src/include/lib3270/config.h.in" /> |
| 119 | + <Unit filename="src/include/lib3270/log.h" /> | ||
| 120 | + <Unit filename="src/include/lib3270/popup.h" /> | ||
| 119 | <Unit filename="src/include/lib3270/session.h" /> | 121 | <Unit filename="src/include/lib3270/session.h" /> |
| 120 | <Unit filename="src/include/pw3270.h" /> | 122 | <Unit filename="src/include/pw3270.h" /> |
| 121 | <Unit filename="src/include/rules.mak.in" /> | 123 | <Unit filename="src/include/rules.mak.in" /> |
src/gtk/main.c
| @@ -31,22 +31,61 @@ | @@ -31,22 +31,61 @@ | ||
| 31 | 31 | ||
| 32 | #include "globals.h" | 32 | #include "globals.h" |
| 33 | #include "v3270/v3270.h" | 33 | #include "v3270/v3270.h" |
| 34 | +#include <lib3270/popup.h> | ||
| 34 | #include <stdlib.h> | 35 | #include <stdlib.h> |
| 35 | 36 | ||
| 37 | +/*--[ Statics ]--------------------------------------------------------------------------------------*/ | ||
| 38 | + | ||
| 39 | + static GtkWidget *toplevel = NULL; | ||
| 40 | + | ||
| 36 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 41 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| 37 | 42 | ||
| 38 | -int main (int argc, char *argv[]) | 43 | +static int popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) |
| 39 | { | 44 | { |
| 40 | - GtkWidget *window; | 45 | + GtkWidget * dialog; |
| 46 | + GtkMessageType msgtype = GTK_MESSAGE_WARNING; | ||
| 47 | + GtkButtonsType buttons = GTK_BUTTONS_OK; | ||
| 48 | + gchar * text = g_strdup_vprintf(fmt,args); | ||
| 49 | + | ||
| 50 | + if(type == LIB3270_NOTIFY_CRITICAL) | ||
| 51 | + { | ||
| 52 | + msgtype = GTK_MESSAGE_ERROR; | ||
| 53 | + buttons = GTK_BUTTONS_CLOSE; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + if(msg) | ||
| 57 | + { | ||
| 58 | + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",msg); | ||
| 59 | + gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),"%s",text); | ||
| 60 | + } | ||
| 61 | + else | ||
| 62 | + { | ||
| 63 | + dialog = gtk_message_dialog_new_with_markup(GTK_WINDOW(toplevel),GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,msgtype,buttons,"%s",text); | ||
| 64 | + } | ||
| 41 | 65 | ||
| 66 | + g_free(text); | ||
| 67 | + | ||
| 68 | + gtk_window_set_title(GTK_WINDOW(dialog),title ? title : "Error"); | ||
| 69 | + | ||
| 70 | + gtk_dialog_run(GTK_DIALOG (dialog)); | ||
| 71 | + gtk_widget_destroy(dialog); | ||
| 72 | + | ||
| 73 | + | ||
| 74 | + return 0; | ||
| 75 | +} | ||
| 76 | + | ||
| 77 | +int main (int argc, char *argv[]) | ||
| 78 | +{ | ||
| 42 | gtk_init(&argc, &argv); | 79 | gtk_init(&argc, &argv); |
| 80 | + | ||
| 43 | configuration_init(); | 81 | configuration_init(); |
| 82 | + lib3270_set_popup_handler(popup_handler); | ||
| 44 | 83 | ||
| 45 | - window = create_main_window(); | 84 | + toplevel = create_main_window(); |
| 46 | 85 | ||
| 47 | - if(window) | 86 | + if(toplevel) |
| 48 | { | 87 | { |
| 49 | - gtk_widget_show(window); | 88 | + gtk_widget_show(toplevel); |
| 50 | gtk_main(); | 89 | gtk_main(); |
| 51 | } | 90 | } |
| 52 | 91 |
src/gtk/v3270/widget.c
| @@ -108,11 +108,18 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea | @@ -108,11 +108,18 @@ static void v3270_toggle_changed(v3270 *widget,LIB3270_TOGGLE toggle_id, gboolea | ||
| 108 | 108 | ||
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | +static void loghandler(H3270 *session, const char *module, int rc, const char *fmt, va_list args) | ||
| 112 | +{ | ||
| 113 | + g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args); | ||
| 114 | +} | ||
| 115 | + | ||
| 111 | static void v3270_class_init(v3270Class *klass) | 116 | static void v3270_class_init(v3270Class *klass) |
| 112 | { | 117 | { |
| 113 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); | 118 | GObjectClass * gobject_class = G_OBJECT_CLASS(klass); |
| 114 | GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); | 119 | GtkWidgetClass * widget_class = GTK_WIDGET_CLASS(klass); |
| 115 | 120 | ||
| 121 | + lib3270_set_log_handler(loghandler); | ||
| 122 | + | ||
| 116 | widget_class->realize = v3270_realize; | 123 | widget_class->realize = v3270_realize; |
| 117 | widget_class->size_allocate = v3270_size_allocate; | 124 | widget_class->size_allocate = v3270_size_allocate; |
| 118 | widget_class->key_press_event = v3270_key_press_event; | 125 | widget_class->key_press_event = v3270_key_press_event; |
| @@ -395,7 +402,7 @@ static void v3270_init(v3270 *widget) | @@ -395,7 +402,7 @@ static void v3270_init(v3270 *widget) | ||
| 395 | 402 | ||
| 396 | if(widget->host->sz != sizeof(H3270)) | 403 | if(widget->host->sz != sizeof(H3270)) |
| 397 | { | 404 | { |
| 398 | - g_critical(N_( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); | 405 | + g_error(N_( "Unexpected signature in H3270 object, possible version mismatch in lib3270") ); |
| 399 | return; | 406 | return; |
| 400 | } | 407 | } |
| 401 | 408 |
| @@ -0,0 +1,50 @@ | @@ -0,0 +1,50 @@ | ||
| 1 | +/* | ||
| 2 | + * "Software PW3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 | ||
| 3 | + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a | ||
| 4 | + * aplicativos mainframe. Registro no INPI sob o nome G3270. | ||
| 5 | + * | ||
| 6 | + * Copyright (C) <2008> <Banco do Brasil S.A.> | ||
| 7 | + * | ||
| 8 | + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob | ||
| 9 | + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela | ||
| 10 | + * Free Software Foundation. | ||
| 11 | + * | ||
| 12 | + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER | ||
| 13 | + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO | ||
| 14 | + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para | ||
| 15 | + * obter mais detalhes. | ||
| 16 | + * | ||
| 17 | + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este | ||
| 18 | + * programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple | ||
| 19 | + * Place, Suite 330, Boston, MA, 02111-1307, USA | ||
| 20 | + * | ||
| 21 | + * Este programa está nomeado como api.h e possui 444 linhas de código. | ||
| 22 | + * | ||
| 23 | + * Contatos: | ||
| 24 | + * | ||
| 25 | + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) | ||
| 26 | + * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | ||
| 27 | + * licinio@bb.com.br (Licínio Luis Branco) | ||
| 28 | + * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | ||
| 29 | + * | ||
| 30 | + */ | ||
| 31 | + | ||
| 32 | +#ifndef LIB3270_POPUP_INCLUDED | ||
| 33 | + | ||
| 34 | + #define LIB3270_POPUP_INCLUDED 1 | ||
| 35 | + | ||
| 36 | + typedef enum _LIB3270_NOTIFY | ||
| 37 | + { | ||
| 38 | + LIB3270_NOTIFY_INFO, /**< Simple information dialog */ | ||
| 39 | + LIB3270_NOTIFY_WARNING, | ||
| 40 | + LIB3270_NOTIFY_ERROR, | ||
| 41 | + LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ | ||
| 42 | + | ||
| 43 | + LIB3270_NOTIFY_USER /**< Reserver, always the last one */ | ||
| 44 | + } LIB3270_NOTIFY; | ||
| 45 | + | ||
| 46 | + LIB3270_EXPORT void lib3270_set_popup_handler(int (*popup_handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)); | ||
| 47 | + | ||
| 48 | +#endif // LIB3270_POPUP_INCLUDED | ||
| 49 | + | ||
| 50 | + |
src/lib3270/api.h
| @@ -26,7 +26,6 @@ | @@ -26,7 +26,6 @@ | ||
| 26 | * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) | 26 | * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça) |
| 27 | * licinio@bb.com.br (Licínio Luis Branco) | 27 | * licinio@bb.com.br (Licínio Luis Branco) |
| 28 | * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | 28 | * kraucer@bb.com.br (Kraucer Fernandes Mazuco) |
| 29 | - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | ||
| 30 | * | 29 | * |
| 31 | */ | 30 | */ |
| 32 | 31 | ||
| @@ -179,15 +178,7 @@ | @@ -179,15 +178,7 @@ | ||
| 179 | 178 | ||
| 180 | 179 | ||
| 181 | /** Type of dialog boxes */ | 180 | /** Type of dialog boxes */ |
| 182 | - typedef enum _LIB3270_NOTIFY | ||
| 183 | - { | ||
| 184 | - LIB3270_NOTIFY_INFO, /**< Simple information dialog */ | ||
| 185 | - LIB3270_NOTIFY_WARNING, | ||
| 186 | - LIB3270_NOTIFY_ERROR, | ||
| 187 | - LIB3270_NOTIFY_CRITICAL, /**< Critical error, user can abort application */ | ||
| 188 | - | ||
| 189 | - LIB3270_NOTIFY_USER /**< Reserver, always the last one */ | ||
| 190 | - } LIB3270_NOTIFY; | 181 | + #include <lib3270/popup.h> |
| 191 | 182 | ||
| 192 | #define PW3270_DIALOG_INFO LIB3270_NOTIFY_INFO | 183 | #define PW3270_DIALOG_INFO LIB3270_NOTIFY_INFO |
| 193 | #define PW3270_DIALOG_CRITICAL LIB3270_NOTIFY_CRITICAL | 184 | #define PW3270_DIALOG_CRITICAL LIB3270_NOTIFY_CRITICAL |
src/lib3270/charset.c
| @@ -410,7 +410,7 @@ resource_charset(char *csname, char *cs, char *ftcs) | @@ -410,7 +410,7 @@ resource_charset(char *csname, char *cs, char *ftcs) | ||
| 410 | #endif /*]*/ | 410 | #endif /*]*/ |
| 411 | break; | 411 | break; |
| 412 | default: | 412 | default: |
| 413 | - popup_an_error("Extra %s value(s), ignoring", | 413 | + popup_an_error(NULL,"Extra %s value(s), ignoring", |
| 414 | ResDisplayCharset); | 414 | ResDisplayCharset); |
| 415 | break; | 415 | break; |
| 416 | } | 416 | } |
| @@ -421,7 +421,7 @@ resource_charset(char *csname, char *cs, char *ftcs) | @@ -421,7 +421,7 @@ resource_charset(char *csname, char *cs, char *ftcs) | ||
| 421 | #if defined(X3270_DBCS) /*[*/ | 421 | #if defined(X3270_DBCS) /*[*/ |
| 422 | /* Can't swap DBCS modes while connected. */ | 422 | /* Can't swap DBCS modes while connected. */ |
| 423 | if (IN_3270 && (n_rcs == 2) != dbcs) { | 423 | if (IN_3270 && (n_rcs == 2) != dbcs) { |
| 424 | - popup_an_error("Can't change DBCS modes while connected"); | 424 | + popup_an_error(NULL,"Can't change DBCS modes while connected"); |
| 425 | return CS_ILLEGAL; | 425 | return CS_ILLEGAL; |
| 426 | } | 426 | } |
| 427 | #endif /*]*/ | 427 | #endif /*]*/ |
| @@ -646,7 +646,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) | @@ -646,7 +646,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) | ||
| 646 | s = CN; | 646 | s = CN; |
| 647 | } | 647 | } |
| 648 | if (ebc != 256) { | 648 | if (ebc != 256) { |
| 649 | - popup_an_error("Charset has %d entries, need 256", ebc); | 649 | + popup_an_error(NULL,"Charset has %d entries, need 256", ebc); |
| 650 | rc = CS_BAD; | 650 | rc = CS_BAD; |
| 651 | } else { | 651 | } else { |
| 652 | /* | 652 | /* |
| @@ -679,7 +679,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) | @@ -679,7 +679,7 @@ remap_chars(char *csname, char *spec, remap_scope scope, int *ne) | ||
| 679 | ((ebc = strtoul(ebcs, &ptr, 0)), | 679 | ((ebc = strtoul(ebcs, &ptr, 0)), |
| 680 | ptr == ebcs || *ptr != '\0') || | 680 | ptr == ebcs || *ptr != '\0') || |
| 681 | (iso = parse_keysym(isos, True)) == NoSymbol) { | 681 | (iso = parse_keysym(isos, True)) == NoSymbol) { |
| 682 | - popup_an_error("Cannot parse %s \"%s\", entry %d", | 682 | + popup_an_error(NULL,"Cannot parse %s \"%s\", entry %d", |
| 683 | ResCharset, csname, *ne); | 683 | ResCharset, csname, *ne); |
| 684 | rc = CS_BAD; | 684 | rc = CS_BAD; |
| 685 | break; | 685 | break; |
src/lib3270/ctlr.c
| @@ -225,7 +225,7 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | @@ -225,7 +225,7 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | ||
| 225 | if(idx < 0 || idx >= (sizeof(sz)/sizeof(struct _sz))) | 225 | if(idx < 0 || idx >= (sizeof(sz)/sizeof(struct _sz))) |
| 226 | { | 226 | { |
| 227 | idx = 2; | 227 | idx = 2; |
| 228 | - popup_an_error("Unknown model: %d - Defaulting to 4 (%dx%d)", mn, sz[idx].cols,sz[idx].rows); | 228 | + popup_an_error(NULL,"Unknown model: %d - Defaulting to 4 (%dx%d)", mn, sz[idx].cols,sz[idx].rows); |
| 229 | mn = 4; | 229 | mn = 4; |
| 230 | } | 230 | } |
| 231 | 231 | ||
| @@ -237,13 +237,13 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | @@ -237,13 +237,13 @@ void ctlr_set_rows_cols(H3270 *session, int mn, int ovc, int ovr) | ||
| 237 | if (ovc != 0 || ovr != 0) | 237 | if (ovc != 0 || ovr != 0) |
| 238 | { | 238 | { |
| 239 | if (ovc <= 0 || ovr <= 0) | 239 | if (ovc <= 0 || ovr <= 0) |
| 240 | - popup_an_error("Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); | 240 | + popup_an_error(NULL,"Invalid %s %dx%d:\nNegative or zero",ResOversize, ovc, ovr); |
| 241 | else if (ovc * ovr >= 0x4000) | 241 | else if (ovc * ovr >= 0x4000) |
| 242 | - popup_an_error("Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); | 242 | + popup_an_error(NULL,"Invalid %s %dx%d:\nToo big",ResOversize, ovc, ovr); |
| 243 | else if (ovc > 0 && ovc < session->maxCOLS) | 243 | else if (ovc > 0 && ovc < session->maxCOLS) |
| 244 | - popup_an_error("Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); | 244 | + popup_an_error(NULL,"Invalid %s cols (%d):\nLess than model %d cols (%d)",ResOversize, ovc, session->model_num, session->maxCOLS); |
| 245 | else if (ovr > 0 && ovr < session->maxROWS) | 245 | else if (ovr > 0 && ovr < session->maxROWS) |
| 246 | - popup_an_error("Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); | 246 | + popup_an_error(NULL,"Invalid %s rows (%d):\nLess than model %d rows (%d)",ResOversize, ovr, session->model_num, session->maxROWS); |
| 247 | else | 247 | else |
| 248 | update_model_info(session,mn,session->ov_cols = ovc,session->ov_rows = ovr); | 248 | update_model_info(session,mn,session->ov_cols = ovc,session->ov_rows = ovr); |
| 249 | } | 249 | } |
| @@ -563,8 +563,7 @@ process_ds(unsigned char *buf, int buflen) | @@ -563,8 +563,7 @@ process_ds(unsigned char *buf, int buflen) | ||
| 563 | break; | 563 | break; |
| 564 | default: | 564 | default: |
| 565 | /* unknown 3270 command */ | 565 | /* unknown 3270 command */ |
| 566 | - popup_an_error("Unknown 3270 Data Stream command: 0x%X\n", | ||
| 567 | - buf[0]); | 566 | + popup_an_error(NULL,"Unknown 3270 Data Stream command: 0x%X\n",buf[0]); |
| 568 | return PDS_BAD_CMD; | 567 | return PDS_BAD_CMD; |
| 569 | } | 568 | } |
| 570 | } | 569 | } |
src/lib3270/glue.c
| @@ -198,7 +198,7 @@ static void lib3270_session_init(H3270 *hSession, const char *model) | @@ -198,7 +198,7 @@ static void lib3270_session_init(H3270 *hSession, const char *model) | ||
| 198 | model_number = parse_model_number(model); | 198 | model_number = parse_model_number(model); |
| 199 | if (model_number < 0) | 199 | if (model_number < 0) |
| 200 | { | 200 | { |
| 201 | - popup_an_error("Invalid model number: %s", model); | 201 | + popup_an_error(NULL,"Invalid model number: %s", model); |
| 202 | model_number = 0; | 202 | model_number = 0; |
| 203 | } | 203 | } |
| 204 | 204 | ||
| @@ -268,7 +268,7 @@ H3270 * lib3270_session_new(const char *model) | @@ -268,7 +268,7 @@ H3270 * lib3270_session_new(const char *model) | ||
| 268 | Trace("Charset: %s",appres.charset); | 268 | Trace("Charset: %s",appres.charset); |
| 269 | if (charset_init(appres.charset) != CS_OKAY) | 269 | if (charset_init(appres.charset) != CS_OKAY) |
| 270 | { | 270 | { |
| 271 | - Warning( _( "Cannot find charset \"%s\", using defaults" ), appres.charset); | 271 | + Warning(NULL, _( "Cannot find charset \"%s\", using defaults" ), appres.charset); |
| 272 | (void) charset_init(CN); | 272 | (void) charset_init(CN); |
| 273 | } | 273 | } |
| 274 | 274 |
src/lib3270/kybd.c
| @@ -3245,7 +3245,7 @@ static void | @@ -3245,7 +3245,7 @@ static void | ||
| 3245 | do_pa(unsigned n) | 3245 | do_pa(unsigned n) |
| 3246 | { | 3246 | { |
| 3247 | if (n < 1 || n > PA_SZ) { | 3247 | if (n < 1 || n > PA_SZ) { |
| 3248 | - popup_an_error( _( "Unknown PA key %d" ), n); | 3248 | + popup_an_error(NULL, _( "Unknown PA key %d" ), n); |
| 3249 | return; | 3249 | return; |
| 3250 | } | 3250 | } |
| 3251 | 3251 | ||
| @@ -3257,7 +3257,7 @@ do_pa(unsigned n) | @@ -3257,7 +3257,7 @@ do_pa(unsigned n) | ||
| 3257 | static void do_pf(unsigned n) | 3257 | static void do_pf(unsigned n) |
| 3258 | { | 3258 | { |
| 3259 | if (n < 1 || n > PF_SZ) { | 3259 | if (n < 1 || n > PF_SZ) { |
| 3260 | - popup_an_error( _( "Unknown PF key %d" ), n); | 3260 | + popup_an_error(NULL, _( "Unknown PF key %d" ), n); |
| 3261 | return; | 3261 | return; |
| 3262 | } | 3262 | } |
| 3263 | 3263 | ||
| @@ -3471,8 +3471,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3471,8 +3471,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3471 | case BACKSLASH: /* last character was a backslash */ | 3471 | case BACKSLASH: /* last character was a backslash */ |
| 3472 | switch (c) { | 3472 | switch (c) { |
| 3473 | case 'a': | 3473 | case 'a': |
| 3474 | - popup_an_error("%s: Bell not supported", | ||
| 3475 | - action_name(String_action)); | 3474 | + popup_an_error(NULL,"%s: Bell not supported",action_name(String_action)); |
| 3476 | // cancel_if_idle_command(); | 3475 | // cancel_if_idle_command(); |
| 3477 | state = BASE; | 3476 | state = BASE; |
| 3478 | break; | 3477 | break; |
| @@ -3520,7 +3519,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3520,7 +3519,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3520 | state = BASE; | 3519 | state = BASE; |
| 3521 | break; | 3520 | break; |
| 3522 | case 'v': | 3521 | case 'v': |
| 3523 | - popup_an_error("%s: Vertical tab not supported",action_name(String_action)); | 3522 | + popup_an_error(NULL,"%s: Vertical tab not supported",action_name(String_action)); |
| 3524 | // cancel_if_idle_command(); | 3523 | // cancel_if_idle_command(); |
| 3525 | state = BASE; | 3524 | state = BASE; |
| 3526 | break; | 3525 | break; |
| @@ -3561,8 +3560,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3561,8 +3560,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3561 | state = BACKPF; | 3560 | state = BACKPF; |
| 3562 | break; | 3561 | break; |
| 3563 | default: | 3562 | default: |
| 3564 | - popup_an_error("%s: Unknown character " | ||
| 3565 | - "after \\p", | 3563 | + popup_an_error(NULL,"%s: Unknown character after \\p", |
| 3566 | action_name(String_action)); | 3564 | action_name(String_action)); |
| 3567 | // cancel_if_idle_command(); | 3565 | // cancel_if_idle_command(); |
| 3568 | state = BASE; | 3566 | state = BASE; |
| @@ -3574,8 +3572,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3574,8 +3572,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3574 | literal = (literal * 10) + (c - '0'); | 3572 | literal = (literal * 10) + (c - '0'); |
| 3575 | nc++; | 3573 | nc++; |
| 3576 | } else if (!nc) { | 3574 | } else if (!nc) { |
| 3577 | - popup_an_error("%s: Unknown character " | ||
| 3578 | - "after \\pf", | 3575 | + popup_an_error(NULL,"%s: Unknown character after \\pf", |
| 3579 | action_name(String_action)); | 3576 | action_name(String_action)); |
| 3580 | // cancel_if_idle_command(); | 3577 | // cancel_if_idle_command(); |
| 3581 | state = BASE; | 3578 | state = BASE; |
| @@ -3593,8 +3590,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3593,8 +3590,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3593 | literal = (literal * 10) + (c - '0'); | 3590 | literal = (literal * 10) + (c - '0'); |
| 3594 | nc++; | 3591 | nc++; |
| 3595 | } else if (!nc) { | 3592 | } else if (!nc) { |
| 3596 | - popup_an_error("%s: Unknown character " | ||
| 3597 | - "after \\pa", | 3593 | + popup_an_error(NULL,"%s: Unknown character after \\pa", |
| 3598 | action_name(String_action)); | 3594 | action_name(String_action)); |
| 3599 | // cancel_if_idle_command(); | 3595 | // cancel_if_idle_command(); |
| 3600 | state = BASE; | 3596 | state = BASE; |
| @@ -3614,7 +3610,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3614,7 +3610,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3614 | nc = 0; | 3610 | nc = 0; |
| 3615 | continue; | 3611 | continue; |
| 3616 | } else { | 3612 | } else { |
| 3617 | - popup_an_error("%s: Missing hex digits after \x", | 3613 | + popup_an_error(NULL,"%s: Missing hex digits after \x", |
| 3618 | action_name(String_action)); | 3614 | action_name(String_action)); |
| 3619 | // cancel_if_idle_command(); | 3615 | // cancel_if_idle_command(); |
| 3620 | state = BASE; | 3616 | state = BASE; |
| @@ -3691,7 +3687,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | @@ -3691,7 +3687,7 @@ LIB3270_EXPORT int lib3270_emulate_input(H3270 *session, char *s, int len, int p | ||
| 3691 | } | 3687 | } |
| 3692 | break; | 3688 | break; |
| 3693 | default: | 3689 | default: |
| 3694 | - popup_an_error("%s: Missing data after \", | 3690 | + popup_an_error(NULL,"%s: Missing data after \", |
| 3695 | action_name(String_action)); | 3691 | action_name(String_action)); |
| 3696 | // cancel_if_idle_command(); | 3692 | // cancel_if_idle_command(); |
| 3697 | break; | 3693 | break; |
src/lib3270/proxy.c
| @@ -228,7 +228,7 @@ proxy_setup(char **phost, char **pport) | @@ -228,7 +228,7 @@ proxy_setup(char **phost, char **pport) | ||
| 228 | *pport = NewString(PORT_SOCKS5D); | 228 | *pport = NewString(PORT_SOCKS5D); |
| 229 | return PT_SOCKS5D; | 229 | return PT_SOCKS5D; |
| 230 | } | 230 | } |
| 231 | - popup_an_error("Invalid proxy type '%.*s'", sl, proxy); | 231 | + popup_an_error(NULL,"Invalid proxy type '%.*s'", sl, proxy); |
| 232 | return -1; | 232 | return -1; |
| 233 | } | 233 | } |
| 234 | 234 | ||
| @@ -695,7 +695,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | @@ -695,7 +695,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | ||
| 695 | if (rv == -2) | 695 | if (rv == -2) |
| 696 | use_name = 1; | 696 | use_name = 1; |
| 697 | else if (rv < 0) { | 697 | else if (rv < 0) { |
| 698 | - popup_an_error("SOCKS5 proxy: %s/%u: %s", host, port, | 698 | + popup_an_error(NULL,"SOCKS5 proxy: %s/%u: %s", host, port, |
| 699 | errmsg); | 699 | errmsg); |
| 700 | return -1; | 700 | return -1; |
| 701 | } | 701 | } |
| @@ -863,7 +863,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | @@ -863,7 +863,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | ||
| 863 | switch (nread++) { | 863 | switch (nread++) { |
| 864 | case 0: | 864 | case 0: |
| 865 | if (r != 0x05) { | 865 | if (r != 0x05) { |
| 866 | - popup_an_error("SOCKS5 Proxy: incorrect " | 866 | + popup_an_error(NULL,"SOCKS5 Proxy: incorrect " |
| 867 | "reply version 0x%02x", r); | 867 | "reply version 0x%02x", r); |
| 868 | #if defined(X3270_TRACE) /*[*/ | 868 | #if defined(X3270_TRACE) /*[*/ |
| 869 | if (nread) | 869 | if (nread) |
| @@ -932,7 +932,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | @@ -932,7 +932,7 @@ proxy_socks5(int fd, char *host, unsigned short port, int force_d) | ||
| 932 | break; | 932 | break; |
| 933 | #endif /*]*/ | 933 | #endif /*]*/ |
| 934 | default: | 934 | default: |
| 935 | - popup_an_error("SOCKS5 Proxy: unknown server " | 935 | + popup_an_error(NULL,"SOCKS5 Proxy: unknown server " |
| 936 | "address type 0x%02x", r); | 936 | "address type 0x%02x", r); |
| 937 | #if defined(X3270_TRACE) /*[*/ | 937 | #if defined(X3270_TRACE) /*[*/ |
| 938 | if (nread) | 938 | if (nread) |
src/lib3270/screen.c
| @@ -26,7 +26,6 @@ | @@ -26,7 +26,6 @@ | ||
| 26 | * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) | 26 | * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) |
| 27 | * licinio@bb.com.br (Licínio Luis Branco) | 27 | * licinio@bb.com.br (Licínio Luis Branco) |
| 28 | * kraucer@bb.com.br (Kraucer Fernandes Mazuco) | 28 | * kraucer@bb.com.br (Kraucer Fernandes Mazuco) |
| 29 | - * macmiranda@bb.com.br (Marco Aurélio Caldas Miranda) | ||
| 30 | * | 29 | * |
| 31 | */ | 30 | */ |
| 32 | 31 | ||
| @@ -75,11 +74,15 @@ | @@ -75,11 +74,15 @@ | ||
| 75 | #define get_color_pair(fg,bg) (((bg&0x0F) << 4) | (fg&0x0F)) | 74 | #define get_color_pair(fg,bg) (((bg&0x0F) << 4) | (fg&0x0F)) |
| 76 | #define DEFCOLOR_MAP(f) ((((f) & FA_PROTECT) >> 4) | (((f) & FA_INT_HIGH_SEL) >> 3)) | 75 | #define DEFCOLOR_MAP(f) ((((f) & FA_PROTECT) >> 4) | (((f) & FA_INT_HIGH_SEL) >> 3)) |
| 77 | 76 | ||
| 78 | -#if defined(WC3270) /*[*/ | ||
| 79 | -extern char *profile_name; | ||
| 80 | -#endif | 77 | +// #if defined(WC3270) |
| 78 | +// extern char *profile_name; | ||
| 79 | +// #endif | ||
| 80 | + | ||
| 81 | +static int logpopup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg); | ||
| 82 | + | ||
| 83 | +static int (*popup_handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list) = logpopup; | ||
| 81 | 84 | ||
| 82 | -static const struct lib3270_screen_callbacks *callbacks = NULL; | 85 | +// static const struct lib3270_screen_callbacks *callbacks = NULL; |
| 83 | // static SCRIPT_STATE script_state = SCRIPT_STATE_NONE; | 86 | // static SCRIPT_STATE script_state = SCRIPT_STATE_NONE; |
| 84 | 87 | ||
| 85 | 88 | ||
| @@ -92,12 +95,10 @@ static void status_connect(H3270 *session, int ignored, void *dunno); | @@ -92,12 +95,10 @@ static void status_connect(H3270 *session, int ignored, void *dunno); | ||
| 92 | static void status_3270_mode(H3270 *session, int ignored, void *dunno); | 95 | static void status_3270_mode(H3270 *session, int ignored, void *dunno); |
| 93 | static void status_printer(H3270 *session, int on, void *dunno); | 96 | static void status_printer(H3270 *session, int on, void *dunno); |
| 94 | static unsigned short color_from_fa(unsigned char fa); | 97 | static unsigned short color_from_fa(unsigned char fa); |
| 95 | -static void relabel(H3270 *session, int ignored, void *dunno); | 98 | +// static void relabel(H3270 *session, int ignored, void *dunno); |
| 96 | 99 | ||
| 97 | void set_display_charset(char *dcs) | 100 | void set_display_charset(char *dcs) |
| 98 | { | 101 | { |
| 99 | - if(callbacks && callbacks->charset) | ||
| 100 | - callbacks->charset(dcs); | ||
| 101 | } | 102 | } |
| 102 | 103 | ||
| 103 | static void addch(H3270 *session, int baddr, unsigned char c, unsigned short attr) | 104 | 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 | @@ -109,9 +110,6 @@ static void addch(H3270 *session, int baddr, unsigned char c, unsigned short att | ||
| 109 | ea_buf[baddr].chr = c; | 110 | ea_buf[baddr].chr = c; |
| 110 | ea_buf[baddr].attr = attr; | 111 | ea_buf[baddr].attr = attr; |
| 111 | 112 | ||
| 112 | - if(callbacks && callbacks->addch) | ||
| 113 | - callbacks->addch(baddr/session->cols, baddr%session->cols, c, attr); | ||
| 114 | - | ||
| 115 | if(session->update) | 113 | if(session->update) |
| 116 | session->update(session,baddr,c,attr,baddr == session->cursor_addr); | 114 | session->update(session,baddr,c,attr,baddr == session->cursor_addr); |
| 117 | } | 115 | } |
| @@ -126,76 +124,19 @@ int screen_init(H3270 *session) | @@ -126,76 +124,19 @@ int screen_init(H3270 *session) | ||
| 126 | { | 124 | { |
| 127 | CHECK_SESSION_HANDLE(session); | 125 | CHECK_SESSION_HANDLE(session); |
| 128 | 126 | ||
| 129 | - /* Initialize the console. */ | ||
| 130 | - if(callbacks) | ||
| 131 | - { | ||
| 132 | - /* Init default callbacks */ | ||
| 133 | - if(callbacks->move_cursor) | ||
| 134 | - session->update_cursor = callbacks->move_cursor; | ||
| 135 | - | ||
| 136 | - if(callbacks->set_oia) | ||
| 137 | - session->update_oia = callbacks->set_oia; | ||
| 138 | - | ||
| 139 | - if(callbacks->set_viewsize) | ||
| 140 | - session->configure = callbacks->set_viewsize; | ||
| 141 | - | ||
| 142 | - if(callbacks->lu) | ||
| 143 | - session->update_luname = callbacks->lu; | ||
| 144 | - | ||
| 145 | - if(callbacks->status) | ||
| 146 | - session->update_status = callbacks->status; | ||
| 147 | - | ||
| 148 | - if(callbacks->erase) | ||
| 149 | - session->erase = callbacks->erase; | ||
| 150 | - | ||
| 151 | - if(callbacks->cursor) | ||
| 152 | - session->cursor = callbacks->cursor; | ||
| 153 | - | ||
| 154 | - if(callbacks->toggle_changed) | ||
| 155 | - session->update_toggle = callbacks->toggle_changed; | ||
| 156 | - | ||
| 157 | - if(callbacks->model_changed) | ||
| 158 | - session->update_model = callbacks->model_changed; | ||
| 159 | - | ||
| 160 | - if(callbacks->init()) | ||
| 161 | - { | ||
| 162 | - popup_an_error(session,"Can't initialize terminal."); | ||
| 163 | - return -1; | ||
| 164 | - } | ||
| 165 | - } | ||
| 166 | - | ||
| 167 | /* Set up callbacks for state changes. */ | 127 | /* Set up callbacks for state changes. */ |
| 168 | lib3270_register_schange(session,ST_CONNECT, status_connect,0); | 128 | lib3270_register_schange(session,ST_CONNECT, status_connect,0); |
| 169 | lib3270_register_schange(session,ST_3270_MODE, status_3270_mode,0); | 129 | lib3270_register_schange(session,ST_3270_MODE, status_3270_mode,0); |
| 170 | lib3270_register_schange(session,ST_PRINTER, status_printer,0); | 130 | lib3270_register_schange(session,ST_PRINTER, status_printer,0); |
| 171 | 131 | ||
| 172 | - lib3270_register_schange(session,ST_HALF_CONNECT, relabel,0); | ||
| 173 | - lib3270_register_schange(session,ST_CONNECT, relabel,0); | ||
| 174 | - lib3270_register_schange(session,ST_3270_MODE, relabel,0); | ||
| 175 | - | ||
| 176 | - /* See about all-bold behavior. */ | ||
| 177 | -// if (appres.all_bold_on) | ||
| 178 | -// ab_mode = TS_ON; | ||
| 179 | -// else if (!ts_value(appres.all_bold, &ab_mode)) | ||
| 180 | -// (void) fprintf(stderr, "invalid %s value: '%s', assuming 'auto'\n", ResAllBold, appres.all_bold); | ||
| 181 | -// if (ab_mode == TS_AUTO) | ||
| 182 | -// ab_mode = appres.m3279? TS_ON: TS_OFF; | 132 | +// lib3270_register_schange(session,ST_HALF_CONNECT, relabel,0); |
| 133 | +// lib3270_register_schange(session,ST_CONNECT, relabel,0); | ||
| 134 | +// lib3270_register_schange(session,ST_3270_MODE, relabel,0); | ||
| 183 | 135 | ||
| 184 | /* Set up the controller. */ | 136 | /* Set up the controller. */ |
| 185 | ctlr_init(session,-1); | 137 | ctlr_init(session,-1); |
| 186 | ctlr_reinit(session,-1); | 138 | ctlr_reinit(session,-1); |
| 187 | 139 | ||
| 188 | - /* Set the window label. */ | ||
| 189 | -#if defined(WC3270) /*[*/ | ||
| 190 | - | ||
| 191 | - if (appres.title != CN) | ||
| 192 | - screen_title(appres.title); | ||
| 193 | - else if (profile_name != CN) | ||
| 194 | - screen_title(profile_name); | ||
| 195 | - else | ||
| 196 | - screen_title(NULL); | ||
| 197 | -#endif | ||
| 198 | - | ||
| 199 | /* Finish screen initialization. */ | 140 | /* Finish screen initialization. */ |
| 200 | screen_suspend(session); | 141 | screen_suspend(session); |
| 201 | 142 | ||
| @@ -318,8 +259,6 @@ void update_model_info(H3270 *session, int model, int cols, int rows) | @@ -318,8 +259,6 @@ void update_model_info(H3270 *session, int model, int cols, int rows) | ||
| 318 | 259 | ||
| 319 | if(session->update_model) | 260 | if(session->update_model) |
| 320 | session->update_model(session, session->model_name,session->model_num,rows,cols); | 261 | session->update_model(session, session->model_name,session->model_num,rows,cols); |
| 321 | - else if(callbacks && callbacks->model_changed) | ||
| 322 | - callbacks->model_changed(session, session->model_name,session->model_num,rows,cols); | ||
| 323 | } | 262 | } |
| 324 | 263 | ||
| 325 | LIB3270_EXPORT int lib3270_get_contents(H3270 *h, int first, int last, unsigned char *chr, unsigned short *attr) | 264 | 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) | @@ -452,27 +391,16 @@ static void screen_update(H3270 *session, int bstart, int bend) | ||
| 452 | 391 | ||
| 453 | void screen_disp(H3270 *session) | 392 | void screen_disp(H3270 *session) |
| 454 | { | 393 | { |
| 455 | -// session->first_changed = -1; | ||
| 456 | -// session->last_changed = -1; | ||
| 457 | - | ||
| 458 | screen_update(session,0,session->rows*session->cols); | 394 | screen_update(session,0,session->rows*session->cols); |
| 459 | - | ||
| 460 | - if(callbacks && callbacks->display) | ||
| 461 | - callbacks->display(session); | ||
| 462 | } | 395 | } |
| 463 | 396 | ||
| 464 | void screen_suspend(H3270 *session) | 397 | void screen_suspend(H3270 *session) |
| 465 | { | 398 | { |
| 466 | - if(callbacks && callbacks->set_suspended) | ||
| 467 | - callbacks->set_suspended(1); | ||
| 468 | } | 399 | } |
| 469 | 400 | ||
| 470 | void screen_resume(H3270 *session) | 401 | void screen_resume(H3270 *session) |
| 471 | { | 402 | { |
| 472 | screen_disp(session); | 403 | screen_disp(session); |
| 473 | - | ||
| 474 | - if(callbacks && callbacks->set_suspended) | ||
| 475 | - callbacks->set_suspended(0); | ||
| 476 | } | 404 | } |
| 477 | 405 | ||
| 478 | LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h) | 406 | LIB3270_EXPORT int lib3270_get_cursor_address(H3270 *h) |
| @@ -586,12 +514,6 @@ void status_reset(H3270 *session) | @@ -586,12 +514,6 @@ void status_reset(H3270 *session) | ||
| 586 | 514 | ||
| 587 | screen_disp(session); | 515 | screen_disp(session); |
| 588 | 516 | ||
| 589 | - if(callbacks && callbacks->reset) | ||
| 590 | - { | ||
| 591 | - Trace("%s calling reset",__FUNCTION__); | ||
| 592 | - callbacks->reset(kybdlock); | ||
| 593 | - } | ||
| 594 | - | ||
| 595 | } | 517 | } |
| 596 | 518 | ||
| 597 | /** | 519 | /** |
| @@ -700,59 +622,38 @@ static void status_printer(H3270 *session, int on, void *dunno) | @@ -700,59 +622,38 @@ static void status_printer(H3270 *session, int on, void *dunno) | ||
| 700 | set_status(session,OIA_FLAG_PRINTER,on); | 622 | set_status(session,OIA_FLAG_PRINTER,on); |
| 701 | } | 623 | } |
| 702 | 624 | ||
| 703 | -/* | ||
| 704 | -SCRIPT_STATE status_script(SCRIPT_STATE state) | ||
| 705 | -{ | ||
| 706 | - if(state != script_state && callbacks && callbacks->set_script) | ||
| 707 | - callbacks->set_script(state); | ||
| 708 | - return script_state = state; | ||
| 709 | -} | ||
| 710 | -*/ | ||
| 711 | - | ||
| 712 | void status_timing(H3270 *session, struct timeval *t0, struct timeval *t1) | 625 | void status_timing(H3270 *session, struct timeval *t0, struct timeval *t1) |
| 713 | { | 626 | { |
| 714 | - CHECK_SESSION_HANDLE(session); | ||
| 715 | - | ||
| 716 | - if(callbacks && callbacks->show_timer) | ||
| 717 | - callbacks->show_timer(t1->tv_sec - t0->tv_sec); | ||
| 718 | } | 627 | } |
| 719 | 628 | ||
| 720 | void status_untiming(H3270 *session) | 629 | void status_untiming(H3270 *session) |
| 721 | { | 630 | { |
| 722 | CHECK_SESSION_HANDLE(session); | 631 | CHECK_SESSION_HANDLE(session); |
| 723 | 632 | ||
| 724 | - if(callbacks && callbacks->show_timer) | ||
| 725 | - callbacks->show_timer(-1); | ||
| 726 | - | ||
| 727 | if(session->set_timer) | 633 | if(session->set_timer) |
| 728 | session->set_timer(session,0); | 634 | session->set_timer(session,0); |
| 729 | } | 635 | } |
| 730 | 636 | ||
| 731 | void ring_bell(void) | 637 | void ring_bell(void) |
| 732 | { | 638 | { |
| 733 | - if(callbacks && callbacks->ring_bell) | ||
| 734 | - callbacks->ring_bell(); | ||
| 735 | } | 639 | } |
| 736 | 640 | ||
| 737 | -/* Set the window title. */ | ||
| 738 | -void | ||
| 739 | -screen_title(char *text) | 641 | +/* Set the window title. */ /* |
| 642 | +void screen_title(char *text) | ||
| 740 | { | 643 | { |
| 741 | - if(callbacks && callbacks->title) | ||
| 742 | - callbacks->title(text); | ||
| 743 | } | 644 | } |
| 744 | 645 | ||
| 745 | static void | 646 | static void |
| 746 | relabel(H3270 *session, int ignored unused, void *dunno) | 647 | relabel(H3270 *session, int ignored unused, void *dunno) |
| 747 | { | 648 | { |
| 748 | -#if defined(WC3270) /*[*/ | 649 | +#if defined(WC3270) |
| 749 | if (appres.title != CN) | 650 | if (appres.title != CN) |
| 750 | return; | 651 | return; |
| 751 | #endif | 652 | #endif |
| 752 | 653 | ||
| 753 | if (PCONNECTED) | 654 | if (PCONNECTED) |
| 754 | { | 655 | { |
| 755 | -#if defined(WC3270) /*[*/ | 656 | +#if defined(WC3270) |
| 756 | if (profile_name != CN) | 657 | if (profile_name != CN) |
| 757 | screen_title(profile_name); | 658 | screen_title(profile_name); |
| 758 | else | 659 | else |
| @@ -770,19 +671,7 @@ int query_counter(COUNTER_ID id) | @@ -770,19 +671,7 @@ int query_counter(COUNTER_ID id) | ||
| 770 | { | 671 | { |
| 771 | return lib3270_event_counter[id]; | 672 | return lib3270_event_counter[id]; |
| 772 | } | 673 | } |
| 773 | - | ||
| 774 | -int Register3270ScreenCallbacks(const struct lib3270_screen_callbacks *cbk) | ||
| 775 | -{ | ||
| 776 | - if(!cbk) | ||
| 777 | - return EINVAL; | ||
| 778 | - | ||
| 779 | - if(cbk->sz != sizeof(struct lib3270_screen_callbacks)) | ||
| 780 | - return -EINVAL; | ||
| 781 | - | ||
| 782 | - callbacks = cbk; | ||
| 783 | - | ||
| 784 | - return 0; | ||
| 785 | -} | 674 | +*/ |
| 786 | 675 | ||
| 787 | void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, ...) | 676 | void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, ...) |
| 788 | { | 677 | { |
| @@ -793,16 +682,15 @@ void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *tit | @@ -793,16 +682,15 @@ void show_3270_popup_dialog(H3270 *session, LIB3270_NOTIFY type, const char *tit | ||
| 793 | 682 | ||
| 794 | va_list arg_ptr; | 683 | va_list arg_ptr; |
| 795 | va_start(arg_ptr, fmt); | 684 | va_start(arg_ptr, fmt); |
| 796 | - | ||
| 797 | - if(callbacks && callbacks->notify) | ||
| 798 | - callbacks->notify(session,type,title,msg,fmt,arg_ptr); | ||
| 799 | - else | ||
| 800 | - lib3270_write_va_log(session,"lib3270",fmt,arg_ptr); | ||
| 801 | - | 685 | + popup_handler(session,type,title,msg,fmt,arg_ptr); |
| 802 | va_end(arg_ptr); | 686 | va_end(arg_ptr); |
| 803 | 687 | ||
| 804 | } | 688 | } |
| 805 | 689 | ||
| 690 | +static int logpopup(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list arg) | ||
| 691 | +{ | ||
| 692 | + lib3270_write_va_log(session,"lib3270",fmt,arg); | ||
| 693 | +} | ||
| 806 | 694 | ||
| 807 | void Error(H3270 *session, const char *fmt, ...) | 695 | void Error(H3270 *session, const char *fmt, ...) |
| 808 | { | 696 | { |
| @@ -811,12 +699,7 @@ void Error(H3270 *session, const char *fmt, ...) | @@ -811,12 +699,7 @@ void Error(H3270 *session, const char *fmt, ...) | ||
| 811 | CHECK_SESSION_HANDLE(session); | 699 | CHECK_SESSION_HANDLE(session); |
| 812 | 700 | ||
| 813 | va_start(arg_ptr, fmt); | 701 | va_start(arg_ptr, fmt); |
| 814 | - | ||
| 815 | - if(callbacks && callbacks->notify) | ||
| 816 | - callbacks->notify(session,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); | ||
| 817 | - else | ||
| 818 | - lib3270_write_va_log(&h3270,"lib3270",fmt,arg_ptr); | ||
| 819 | - | 702 | + popup_handler(session,LIB3270_NOTIFY_ERROR, _( "3270 Error" ),NULL,fmt,arg_ptr); |
| 820 | va_end(arg_ptr); | 703 | va_end(arg_ptr); |
| 821 | 704 | ||
| 822 | } | 705 | } |
| @@ -828,12 +711,7 @@ void Warning(H3270 *session, const char *fmt, ...) | @@ -828,12 +711,7 @@ void Warning(H3270 *session, const char *fmt, ...) | ||
| 828 | CHECK_SESSION_HANDLE(session); | 711 | CHECK_SESSION_HANDLE(session); |
| 829 | 712 | ||
| 830 | va_start(arg_ptr, fmt); | 713 | va_start(arg_ptr, fmt); |
| 831 | - | ||
| 832 | - if(callbacks && callbacks->notify) | ||
| 833 | - callbacks->notify(session,LIB3270_NOTIFY_WARNING, _( "3270 Warning" ),NULL,fmt,arg_ptr); | ||
| 834 | - else | ||
| 835 | - lib3270_write_va_log(&h3270,"lib3270",fmt,arg_ptr); | ||
| 836 | - | 714 | + popup_handler(session,LIB3270_NOTIFY_WARNING, _( "3270 Warning" ),NULL,fmt,arg_ptr); |
| 837 | va_end(arg_ptr); | 715 | va_end(arg_ptr); |
| 838 | 716 | ||
| 839 | } | 717 | } |
| @@ -846,12 +724,7 @@ extern void popup_an_error(H3270 *session, const char *fmt, ...) | @@ -846,12 +724,7 @@ extern void popup_an_error(H3270 *session, const char *fmt, ...) | ||
| 846 | CHECK_SESSION_HANDLE(session); | 724 | CHECK_SESSION_HANDLE(session); |
| 847 | 725 | ||
| 848 | va_start(args, fmt); | 726 | va_start(args, fmt); |
| 849 | - | ||
| 850 | - if(callbacks && callbacks->notify) | ||
| 851 | - callbacks->notify(session,LIB3270_NOTIFY_ERROR,_( "3270 Error" ),NULL,fmt,args); | ||
| 852 | - else | ||
| 853 | - lib3270_write_va_log(&h3270,"lib3270",fmt,args); | ||
| 854 | - | 727 | + popup_handler(session,LIB3270_NOTIFY_ERROR,_( "3270 Error" ),NULL,fmt,args); |
| 855 | va_end(args); | 728 | va_end(args); |
| 856 | 729 | ||
| 857 | } | 730 | } |
| @@ -863,19 +736,13 @@ void popup_system_error(H3270 *session, const char *title, const char *message, | @@ -863,19 +736,13 @@ void popup_system_error(H3270 *session, const char *title, const char *message, | ||
| 863 | CHECK_SESSION_HANDLE(session); | 736 | CHECK_SESSION_HANDLE(session); |
| 864 | 737 | ||
| 865 | va_start(args, fmt); | 738 | va_start(args, fmt); |
| 866 | - | ||
| 867 | - if(callbacks && callbacks->notify) | ||
| 868 | - callbacks->notify(session,LIB3270_NOTIFY_ERROR,title ? title : _( "3270 Error" ), message,fmt,args); | ||
| 869 | - else | ||
| 870 | - lib3270_write_va_log(&h3270,"lib3270",fmt,args); | ||
| 871 | - | 739 | + popup_handler(session,LIB3270_NOTIFY_ERROR,title ? title : _( "3270 Error" ), message,fmt,args); |
| 872 | va_end(args); | 740 | va_end(args); |
| 873 | } | 741 | } |
| 874 | 742 | ||
| 875 | - | ||
| 876 | - | ||
| 877 | LIB3270_EXPORT void update_toggle_actions(void) | 743 | LIB3270_EXPORT void update_toggle_actions(void) |
| 878 | { | 744 | { |
| 745 | +/* | ||
| 879 | int f; | 746 | int f; |
| 880 | 747 | ||
| 881 | if(callbacks && callbacks->toggle_changed) | 748 | if(callbacks && callbacks->toggle_changed) |
| @@ -883,6 +750,7 @@ LIB3270_EXPORT void update_toggle_actions(void) | @@ -883,6 +750,7 @@ LIB3270_EXPORT void update_toggle_actions(void) | ||
| 883 | for(f=0;f< N_TOGGLES;f++) | 750 | for(f=0;f< N_TOGGLES;f++) |
| 884 | callbacks->toggle_changed(&h3270,f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]); | 751 | callbacks->toggle_changed(&h3270,f,appres.toggle[f].value,TT_UPDATE,toggle_names[f]); |
| 885 | } | 752 | } |
| 753 | +*/ | ||
| 886 | } | 754 | } |
| 887 | 755 | ||
| 888 | void mcursor_set(H3270 *session,LIB3270_CURSOR m) | 756 | void mcursor_set(H3270 *session,LIB3270_CURSOR m) |
| @@ -947,7 +815,7 @@ LIB3270_ACTION( testpattern ) | @@ -947,7 +815,7 @@ LIB3270_ACTION( testpattern ) | ||
| 947 | }; | 815 | }; |
| 948 | 816 | ||
| 949 | int row = 0; | 817 | int row = 0; |
| 950 | - int max = (h3270.maxROWS * h3270.maxCOLS); | 818 | + int max = (hSession->maxROWS * hSession->maxCOLS); |
| 951 | int pos = 0; | 819 | int pos = 0; |
| 952 | int f; | 820 | int f; |
| 953 | int fg = COLOR_BLUE; | 821 | int fg = COLOR_BLUE; |
| @@ -973,58 +841,14 @@ LIB3270_ACTION( testpattern ) | @@ -973,58 +841,14 @@ LIB3270_ACTION( testpattern ) | ||
| 973 | 841 | ||
| 974 | Trace("%s display",__FUNCTION__); | 842 | Trace("%s display",__FUNCTION__); |
| 975 | 843 | ||
| 976 | - screen_disp(&h3270); | 844 | + screen_disp(hSession); |
| 977 | 845 | ||
| 978 | Trace("%s ends",__FUNCTION__); | 846 | Trace("%s ends",__FUNCTION__); |
| 979 | return 0; | 847 | return 0; |
| 980 | } | 848 | } |
| 981 | 849 | ||
| 982 | -/* | ||
| 983 | -LIB3270_EXPORT struct ea * copy_device_buffer(int *el) | ||
| 984 | -{ | ||
| 985 | - int sz = sizeof(struct ea) * (h3270.maxROWS * h3270.maxCOLS); | ||
| 986 | - struct ea *ret = malloc(sz); | ||
| 987 | - memcpy(ret,ea_buf,sz); | ||
| 988 | - if(el) | ||
| 989 | - *el = (h3270.maxROWS * h3270.maxCOLS); | ||
| 990 | - return ret; | ||
| 991 | -} | ||
| 992 | -*/ | ||
| 993 | - | ||
| 994 | -/* | ||
| 995 | -LIB3270_EXPORT HCONSOLE console_window_new(const char *title, const char *label) | ||
| 996 | -{ | ||
| 997 | - if(callbacks && callbacks->console_new ) | ||
| 998 | - return callbacks->console_new(title,label); | ||
| 999 | - | ||
| 1000 | - return NULL; | ||
| 1001 | -} | ||
| 1002 | - | ||
| 1003 | -LIB3270_EXPORT void console_window_delete(HCONSOLE hwnd) | ||
| 1004 | -{ | ||
| 1005 | - if(callbacks && callbacks->console_delete ) | ||
| 1006 | - callbacks->console_delete(hwnd); | ||
| 1007 | -} | ||
| 1008 | - | ||
| 1009 | -LIB3270_EXPORT int console_window_append(HCONSOLE hwnd, const char *fmt, ...) | 850 | +LIB3270_EXPORT void lib3270_set_popup_handler(int (*handler)(H3270 *, LIB3270_NOTIFY, const char *, const char *, const char *, va_list)) |
| 1010 | { | 851 | { |
| 1011 | - va_list args; | ||
| 1012 | - | ||
| 1013 | - if(callbacks && callbacks->console_append) | ||
| 1014 | - { | ||
| 1015 | - va_start(args, fmt); | ||
| 1016 | - callbacks->console_append(hwnd, fmt, args); | ||
| 1017 | - va_end(args); | ||
| 1018 | - } | ||
| 1019 | - | ||
| 1020 | - return 0; | 852 | + popup_handler = handler ? handler : logpopup; |
| 1021 | } | 853 | } |
| 1022 | 854 | ||
| 1023 | -LIB3270_EXPORT char * console_window_wait_for_user_entry(HCONSOLE hwnd) | ||
| 1024 | -{ | ||
| 1025 | - if(callbacks && callbacks->console_entry ) | ||
| 1026 | - return callbacks->console_entry(hwnd); | ||
| 1027 | - return NULL; | ||
| 1028 | -} | ||
| 1029 | -*/ | ||
| 1030 | - |
src/lib3270/telnet.c
| @@ -475,7 +475,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | @@ -475,7 +475,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | ||
| 475 | 475 | ||
| 476 | hp = gethostbyname(hn); | 476 | hp = gethostbyname(hn); |
| 477 | if (hp == (struct hostent *) 0) { | 477 | if (hp == (struct hostent *) 0) { |
| 478 | - popup_an_error("Unknown passthru host: %s", hn); | 478 | + popup_an_error(NULL,"Unknown passthru host: %s", hn); |
| 479 | return -1; | 479 | return -1; |
| 480 | } | 480 | } |
| 481 | (void) memmove(passthru_haddr, hp->h_addr, hp->h_length); | 481 | (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 | @@ -497,7 +497,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | ||
| 497 | if (ptr == portname || *ptr != '\0' || lport == 0L || | 497 | if (ptr == portname || *ptr != '\0' || lport == 0L || |
| 498 | lport & ~0xffff) { | 498 | lport & ~0xffff) { |
| 499 | if (!(sp = getservbyname(portname, "tcp"))) { | 499 | if (!(sp = getservbyname(portname, "tcp"))) { |
| 500 | - popup_an_error("Unknown port number " | 500 | + popup_an_error(NULL,"Unknown port number " |
| 501 | "or service: %s", portname); | 501 | "or service: %s", portname); |
| 502 | return -1; | 502 | return -1; |
| 503 | } | 503 | } |
| @@ -657,7 +657,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | @@ -657,7 +657,7 @@ int net_connect(const char *host, char *portname, Boolean ls, Boolean *resolving | ||
| 657 | output_id = AddOutput(h3270.sock, &h3270, output_possible); | 657 | output_id = AddOutput(h3270.sock, &h3270, output_possible); |
| 658 | #endif /*]*/ | 658 | #endif /*]*/ |
| 659 | } else { | 659 | } else { |
| 660 | - popup_a_sockerr( N_( "Can't connect to %s:%d" ),h3270.hostname, h3270.current_port); | 660 | + popup_a_sockerr(NULL, N_( "Can't connect to %s:%d" ),h3270.hostname, h3270.current_port); |
| 661 | close_fail; | 661 | close_fail; |
| 662 | } | 662 | } |
| 663 | } else { | 663 | } else { |
| @@ -1029,7 +1029,7 @@ void net_input(H3270 *session) | @@ -1029,7 +1029,7 @@ void net_input(H3270 *session) | ||
| 1029 | */ | 1029 | */ |
| 1030 | trace_dsn("RCVD socket error %d\n", errno); | 1030 | trace_dsn("RCVD socket error %d\n", errno); |
| 1031 | if (HALF_CONNECTED) { | 1031 | if (HALF_CONNECTED) { |
| 1032 | - popup_a_sockerr( N_( "%s:%d" ),h3270.hostname, h3270.current_port); | 1032 | + popup_a_sockerr(NULL, N_( "%s:%d" ),h3270.hostname, h3270.current_port); |
| 1033 | } else if (socket_errno() != SE_ECONNRESET) { | 1033 | } else if (socket_errno() != SE_ECONNRESET) { |
| 1034 | popup_a_sockerr(NULL, N_( "Socket read error" ) ); | 1034 | popup_a_sockerr(NULL, N_( "Socket read error" ) ); |
| 1035 | } | 1035 | } |
| @@ -3179,14 +3179,14 @@ non_blocking(Boolean on) | @@ -3179,14 +3179,14 @@ non_blocking(Boolean on) | ||
| 3179 | int i = on ? 1 : 0; | 3179 | int i = on ? 1 : 0; |
| 3180 | 3180 | ||
| 3181 | if (SOCK_IOCTL(h3270.sock, FIONBIO, (int *) &i) < 0) { | 3181 | if (SOCK_IOCTL(h3270.sock, FIONBIO, (int *) &i) < 0) { |
| 3182 | - popup_a_sockerr( N_( "ioctl(%s)" ), "FIONBIO"); | 3182 | + popup_a_sockerr(NULL, N_( "ioctl(%s)" ), "FIONBIO"); |
| 3183 | return -1; | 3183 | return -1; |
| 3184 | } | 3184 | } |
| 3185 | # else /*][*/ | 3185 | # else /*][*/ |
| 3186 | int f; | 3186 | int f; |
| 3187 | 3187 | ||
| 3188 | if ((f = fcntl(sock, F_GETFL, 0)) == -1) { | 3188 | if ((f = fcntl(sock, F_GETFL, 0)) == -1) { |
| 3189 | - popup_an_errno(errno, N_( "fcntl(%s)" ), "F_GETFL" ); | 3189 | + popup_an_errno(NULL,errno, N_( "fcntl(%s)" ), "F_GETFL" ); |
| 3190 | return -1; | 3190 | return -1; |
| 3191 | } | 3191 | } |
| 3192 | if (on) | 3192 | if (on) |
| @@ -3194,7 +3194,7 @@ non_blocking(Boolean on) | @@ -3194,7 +3194,7 @@ non_blocking(Boolean on) | ||
| 3194 | else | 3194 | else |
| 3195 | f &= ~O_NDELAY; | 3195 | f &= ~O_NDELAY; |
| 3196 | if (fcntl(sock, F_SETFL, f) < 0) { | 3196 | if (fcntl(sock, F_SETFL, f) < 0) { |
| 3197 | - popup_an_errno(errno, N_( "fcntl(%s)" ), "F_GETFL"); | 3197 | + popup_an_errno(NULL,errno, N_( "fcntl(%s)" ), "F_GETFL"); |
| 3198 | return -1; | 3198 | return -1; |
| 3199 | } | 3199 | } |
| 3200 | # endif /*]*/ | 3200 | # endif /*]*/ |