X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Firssi%2Fsrc%2Ffe-text%2Fsilc.c;fp=apps%2Firssi%2Fsrc%2Ffe-text%2Fsilc.c;h=9112b568506c17e3eb93b4e53051975b3c30561a;hb=23c5df1c8b0bfe539d3fa65802186e6e09e044aa;hp=0000000000000000000000000000000000000000;hpb=0f9738ce962b8498bbed0a75d5fb6fa127e3577f;p=silc.git diff --git a/apps/irssi/src/fe-text/silc.c b/apps/irssi/src/fe-text/silc.c new file mode 100644 index 00000000..9112b568 --- /dev/null +++ b/apps/irssi/src/fe-text/silc.c @@ -0,0 +1,298 @@ +/* + irssi.c : irssi + + Copyright (C) 1999-2000 Timo Sirainen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include "module.h" +#include "module-formats.h" +#include "args.h" +#include "signals.h" +#include "levels.h" +#include "core.h" +#include "settings.h" + +#include "printtext.h" +#include "fe-common-core.h" +#include "fe-common-silc.h" +#include "themes.h" + +#include "screen.h" +#include "gui-entry.h" +#include "mainwindows.h" +#include "gui-printtext.h" +#include "gui-readline.h" +#include "statusbar.h" +#include "gui-windows.h" + +#include + +#ifdef HAVE_STATIC_PERL +void perl_core_init(void); +void perl_core_deinit(void); + +void fe_perl_init(void); +void fe_perl_deinit(void); +#endif + +void silc_init(void); +void silc_deinit(void); + +void gui_expandos_init(void); +void gui_expandos_deinit(void); + +void textbuffer_commands_init(void); +void textbuffer_commands_deinit(void); + +void lastlog_init(void); +void lastlog_deinit(void); + +void mainwindow_activity_init(void); +void mainwindow_activity_deinit(void); + +void mainwindows_save_init(void); +void mainwindows_save_deinit(void); + +static GMainLoop *main_loop; +int quitting; + +static const char *firsttimer_text = + "Looks like this is the first time you run irssi.\n" + "This is just a reminder that you really should go read\n" + "startup-HOWTO if you haven't already. Irssi's default\n" + "settings aren't probably what you've used to, and you\n" + "shouldn't judge the whole client as crap based on them.\n\n" + "You can find startup-HOWTO and more irssi beginner info at\n" + "http://irssi.org/beginner/"; +static int display_firsttimer = FALSE; + + +static void sig_exit(void) +{ + g_main_quit(main_loop); +} + +/* redraw irssi's screen.. */ +void irssi_redraw(void) +{ + clear(); + refresh(); + + /* windows */ + mainwindows_redraw(); + /* statusbar */ + statusbar_redraw(NULL); + /* entry line */ + gui_entry_redraw(); +} + +static void textui_init(void) +{ + static struct poptOption options[] = { + POPT_AUTOHELP + { NULL, '\0', 0, NULL } + }; + + args_register(options); + + irssi_gui = IRSSI_GUI_TEXT; + core_init(); + silc_init(); + fe_common_core_init(); + fe_common_silc_init(); + + theme_register(gui_text_formats); + signal_add("gui exit", (SIGNAL_FUNC) sig_exit); +} + +static void textui_finish_init(void) +{ + quitting = FALSE; + + screen_refresh_freeze(); + textbuffer_init(); + textbuffer_view_init(); + textbuffer_commands_init(); + gui_entry_init(); + gui_expandos_init(); + gui_printtext_init(); + gui_readline_init(); + lastlog_init(); + mainwindows_init(); + mainwindow_activity_init(); + mainwindows_save_init(); + gui_windows_init(); + statusbar_init(); + + settings_check(); + + fe_common_core_finish_init(); + +#ifdef HAVE_STATIC_PERL + perl_core_init(); + fe_perl_init(); +#endif + signal_emit("irssi init finished", 0); + + if (display_firsttimer) { + printtext_window(active_win, MSGLEVEL_CLIENTNOTICE, + "%s", firsttimer_text); + } + + screen_refresh_thaw(); +} + +static void textui_deinit(void) +{ + quitting = TRUE; + signal(SIGINT, SIG_DFL); + + screen_refresh_freeze(); + while (modules != NULL) + module_unload(modules->data); + + signal_remove("gui exit", (SIGNAL_FUNC) sig_exit); + + lastlog_deinit(); + statusbar_deinit(); + gui_printtext_deinit(); + gui_readline_deinit(); + gui_windows_deinit(); + mainwindows_save_deinit(); + mainwindow_activity_deinit(); + mainwindows_deinit(); + gui_expandos_deinit(); + gui_entry_deinit(); + textbuffer_commands_deinit(); + textbuffer_view_deinit(); + textbuffer_deinit(); + + screen_refresh_thaw(); + deinit_screen(); + +#ifdef HAVE_STATIC_PERL + fe_perl_deinit(); + perl_core_deinit(); +#endif + + theme_unregister(); + + fe_common_silc_deinit(); + fe_common_core_deinit(); + silc_deinit(); + core_deinit(); +} + +static void check_oldcrap(void) +{ + FILE *f; + char *path, str[256]; + int found; + + /* check that default.theme is up-to-date */ + path = g_strdup_printf("%s/.irssi/default.theme", g_get_home_dir()); + f = fopen(path, "r+"); + if (f == NULL) { + g_free(path); + return; + } + found = FALSE; + while (!found && fgets(str, sizeof(str), f) != NULL) + found = strstr(str, "abstracts = ") != NULL; + fclose(f); + + if (found) { + g_free(path); + return; + } + + printf("\nYou seem to have old default.theme in ~/.irssi/ directory.\n"); + printf("Themeing system has changed a bit since last irssi release,\n"); + printf("you should either delete your old default.theme or manually\n"); + printf("merge it with the new default.theme.\n\n"); + printf("Do you want to delete the old theme now? (Y/n)\n"); + + str[0] = '\0'; + fgets(str, sizeof(str), stdin); + if (toupper(str[0]) == 'Y' || str[0] == '\n' || str[0] == '\0') + remove(path); + g_free(path); +} + +static void check_files(void) +{ + struct stat statbuf; + char *path; + + path = g_strdup_printf("%s/.irssi", g_get_home_dir()); + if (stat(path, &statbuf) != 0) { + /* ~/.irssi doesn't exist, first time running irssi */ + display_firsttimer = TRUE; + } else { + check_oldcrap(); + } + g_free(path); +} + +#ifdef WIN32 +static void winsock_init(void) +{ + WORD wVersionRequested; + WSADATA wsaData; + + wVersionRequested = MAKEWORD(2, 2); + + if (WSAStartup(wVersionRequested, &wsaData) != 0) { + printf("Error initializing winsock\n"); + exit(1); + } +} +#endif + +int main(int argc, char **argv) +{ + check_files(); +#ifdef WIN32 + winsock_init(); +#endif +#ifdef HAVE_SOCKS + SOCKSinit(argv[0]); +#endif +#ifdef ENABLE_NLS + /* initialize the i18n stuff */ + bindtextdomain(PACKAGE, LOCALEDIR); + textdomain(PACKAGE); +#endif + + textui_init(); + args_execute(argc, argv); + + if (!init_screen()) + g_error("Can't initialize screen handling, quitting.\n"); + + textui_finish_init(); + main_loop = g_main_new(TRUE); + g_main_run(main_loop); + g_main_destroy(main_loop); + textui_deinit(); + +#ifdef MEM_DEBUG + ig_mem_profile(); +#endif + + return 0; +}