X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fmain.cc;h=71f7a75eb7c72473577a83938206ade40027e4b7;hb=652addd232e3f2a7c6c681b9669917e0a416331f;hp=7c7d58407053c95ffc1f8a4fea5a0f54c27047f5;hpb=c8d584f90e261b914487f8aa813ab0cd8c1d52f4;p=chaz%2Fopenbox diff --git a/util/epist/main.cc b/util/epist/main.cc index 7c7d5840..71f7a75e 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 Epistophy - 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 @@ -30,77 +30,53 @@ extern "C" { # include #endif // HAVE_UNISTD_H -#ifdef HAVE_SIGNAL_H -# include -#endif // HAVE_SIGNAL_H +#ifdef HAVE_STDIO_H +# include +#endif // HAVE_STDIO_H -#ifdef HAVE_SYS_SIGNAL_H -# include -#endif // HAVE_SYS_SIGNAL_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; +using std::string; -bool _shutdown = false; -char **_argv; - -#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; +#include "epist.hh" +#include "../../src/i18n.hh" -#ifndef HAVE_SIGACTION - // assume broken, braindead sysv signal semantics - signal(sig, (RETSIGTYPE (*)(int)) signalhandler); -#endif // HAVE_SIGACTION -} +I18n i18n; -int main(int, char **argv) { - _argv = argv; +int main(int argc, char **argv) { + i18n.openCatalog("openbox.cat"); -#ifdef HAVE_SIGACTION - struct sigaction action; + // parse the command line + char *display_name = 0; + char *rc_file = 0; - 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 - - while (! _shutdown) { - usleep(500); + 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]; + } } + + epist ep(argv, display_name, rc_file); + ep.eventLoop(); return 0; }