/* * "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 main.c e possui - linhas de código. * * Contatos: * * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) * licinio@bb.com.br (Licínio Luis Branco) * kraucer@bb.com.br (Kraucer Fernandes Mazuco) * */ #include "globals.h" #include "v3270/v3270.h" #include #include /*--[ Statics ]--------------------------------------------------------------------------------------*/ static GtkWidget *toplevel = NULL; /*--[ Implement ]------------------------------------------------------------------------------------*/ static int popup_handler(H3270 *session, LIB3270_NOTIFY type, const char *title, const char *msg, const char *fmt, va_list args) { 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; } static int initialize(void) { const gchar * msg = gtk_check_version(GTK_MAJOR_VERSION, GTK_MINOR_VERSION, GTK_MICRO_VERSION); if(msg) { // Invalid GTK version, notify user int rc; GtkWidget *dialog = gtk_message_dialog_new( NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_WARNING, GTK_BUTTONS_OK_CANCEL, _( "This program requires GTK version %d.%d.%d" ),GTK_MAJOR_VERSION,GTK_MINOR_VERSION,GTK_MICRO_VERSION ); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",msg); gtk_window_set_title(GTK_WINDOW(dialog),_( "GTK Version mismatch" )); #if GTK_CHECK_VERSION(2,10,0) gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); #endif rc = gtk_dialog_run(GTK_DIALOG (dialog)); gtk_widget_destroy(dialog); if(rc != GTK_RESPONSE_OK) return EINVAL; } return 0; } int main(int argc, char *argv[]) { static const gchar * appname = PACKAGE_NAME; int rc = 0; // Process command-line options { static const GOptionEntry app_options[] = { { "appname", 'a', 0, G_OPTION_ARG_STRING, &appname, N_( "Application name" ), PACKAGE_NAME }, { NULL } }; GOptionContext * options = g_option_context_new (_("- 3270 Emulator for Gtk")); GError * error = NULL; g_option_context_add_main_entries(options, app_options, NULL); gtk_init(&argc, &argv); if(!g_option_context_parse( options, &argc, &argv, &error )) { GtkWidget *dialog = gtk_message_dialog_new( NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_CANCEL, "%s", _( "Option parsing failed." )); gtk_window_set_title(GTK_WINDOW(dialog),_( "Parse error" )); gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog), "%s", error->message); gtk_dialog_run(GTK_DIALOG (dialog)); gtk_widget_destroy(dialog); g_error_free(error); return -1; } } g_set_application_name(appname); rc = initialize(); if(!rc) { configuration_init(); lib3270_set_popup_handler(popup_handler); toplevel = create_main_window(); if(toplevel) { gtk_window_present(GTK_WINDOW(toplevel)); gtk_main(); } configuration_deinit(); } return rc; }