X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fmain.cc;h=f4369c8c363b1a073cba47fec4484af32ce05621;hb=8b5a616b31681a57ef625ee13e1e56e2955e3403;hp=c7c1a768663c2349db7902e1a46d18d6c465f228;hpb=426b1ea2b60d4fe1368d318730a0cd098559b896;p=chaz%2Fopenbox diff --git a/util/epist/main.cc b/util/epist/main.cc index c7c1a768..f4369c8c 100644 --- a/util/epist/main.cc +++ b/util/epist/main.cc @@ -1,5 +1,5 @@ // -*- mode: C++; indent-tabs-mode: nil; -*- -// main.cc for Epistory - a key handler for NETWM/EWMH window managers. +// main.cc for Epistrophy - a key handler for NETWM/EWMH window managers. // Copyright (c) 2002 - 2002 Ben Jansens // // Permission is hereby granted, free of charge, to any person obtaining a @@ -25,95 +25,58 @@ #endif // HAVE_CONFIG_H extern "C" { -#include - #ifdef HAVE_UNISTD_H # include # include #endif // HAVE_UNISTD_H -#ifdef HAVE_SIGNAL_H -# include -#endif // HAVE_SIGNAL_H - -#ifdef HAVE_SYS_SIGNAL_H -# include -#endif // HAVE_SYS_SIGNAL_H +#ifdef HAVE_STDIO_H +# include +#endif // HAVE_STDIO_H -#ifdef HAVE_LIBGEN_H -# include -#endif // HAVE_LIBGEN_H +#ifdef HAVE_STDLIB_H +# include +#endif // HAVE_STDLIB_H } #include +#include using std::cout; using std::endl; - -bool _shutdown = false; -char **_argv; -char *_display_name = 0; -Display *_display = 0; - -#ifdef HAVE_SIGACTION -static void signalhandler(int sig) -#else // HAVE_SIGACTION -static RETSIGTYPE signalhandler(int sig) -#endif // HAVE_SIGACTION -{ - switch (sig) { - case SIGSEGV: - cout << "Segmentation fault. Aborting and dumping core.\n"; - abort(); - case SIGHUP: - cout << "Restarting on request.\n"; - execvp(_argv[0], _argv); - execvp(basename(_argv[0]), _argv); - } - _shutdown = true; - -#ifndef HAVE_SIGACTION - // assume broken, braindead sysv signal semantics - signal(sig, (RETSIGTYPE (*)(int)) signalhandler); -#endif // HAVE_SIGACTION -} - - -int main(int, char **argv) { - _argv = argv; - -#ifdef HAVE_SIGACTION - struct sigaction action; - - action.sa_handler = signalhandler; - action.sa_mask = sigset_t(); - action.sa_flags = SA_NOCLDSTOP | SA_NODEFER; - - sigaction(SIGPIPE, &action, NULL); - sigaction(SIGSEGV, &action, NULL); - sigaction(SIGFPE, &action, NULL); - sigaction(SIGTERM, &action, NULL); - sigaction(SIGINT, &action, NULL); - sigaction(SIGHUP, &action, NULL); -#else // !HAVE_SIGACTION - signal(SIGPIPE, (RETSIGTYPE (*)(int)) signalhandler); - signal(SIGSEGV, (RETSIGTYPE (*)(int)) signalhandler); - signal(SIGFPE, (RETSIGTYPE (*)(int)) signalhandler); - signal(SIGTERM, (RETSIGTYPE (*)(int)) signalhandler); - signal(SIGINT, (RETSIGTYPE (*)(int)) signalhandler); - signal(SIGHUP, (RETSIGTYPE (*)(int)) signalhandler); -#endif // HAVE_SIGACTION - - _display = XOpenDisplay(_display_name); - if (! _display) { - cout << "Connection to X server '" << _display_name << "' failed.\n"; - return 1; - } - - while (! _shutdown) { - usleep(500); +using std::string; + +#include "epist.hh" +#include "../../src/i18n.hh" + +I18n i18n; + +int main(int argc, char **argv) { + i18n.openCatalog("openbox.cat"); + + // parse the command line + char *display_name = 0; + char *rc_file = 0; + + for (int i = 1; i < argc; ++i) { + if (string(argv[i]) == "-display") { + if (++i >= argc) { + fprintf(stderr, i18n(mainSet, mainDISPLAYRequiresArg, + "error: '-display' requires an argument\n")); + exit(1); + } + display_name = argv[i]; + } else if (string(argv[i]) == "-rc") { + if (++i >= argc) { + fprintf(stderr, i18n(mainSet, mainRCRequiresArg, + "error: '-rc' requires an argument\n")); + exit(1); + } + rc_file = argv[i]; + } } - - XCloseDisplay(_display); + + epist ep(argv, display_name, rc_file); + ep.eventLoop(); return 0; }