X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fmain.cc;h=2f39212e64e87b47caaa09d06243b2cfcb1439f9;hb=38b124e1b86de0a7611ea66a90689cc6b9f8800e;hp=7c7d58407053c95ffc1f8a4fea5a0f54c27047f5;hpb=c8d584f90e261b914487f8aa813ab0cd8c1d52f4;p=chaz%2Fopenbox diff --git a/util/epist/main.cc b/util/epist/main.cc index 7c7d5840..2f39212e 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 @@ -30,77 +30,80 @@ 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; +#include "../../version.h" +#include "epist.hh" +#include "../../src/i18n.hh" -#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 -} +I18n i18n; -int main(int, char **argv) { - _argv = argv; +static void usage(); -#ifdef HAVE_SIGACTION - struct sigaction action; +int main(int argc, char **argv) { + i18n.openCatalog("openbox.cat"); - action.sa_handler = signalhandler; - action.sa_mask = sigset_t(); - action.sa_flags = SA_NOCLDSTOP | SA_NODEFER; + // parse the command line + char *display_name = 0; + char *rc_file = 0; - 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) { + const string argvi(argv[i]); + if (argvi == "-display") { + if (++i >= argc) { + fprintf(stderr, i18n(mainSet, mainDISPLAYRequiresArg, + "error: '-display' requires an argument\n")); + exit(1); + } + display_name = argv[i]; + } else if (argvi == "-rc") { + if (++i >= argc) { + fprintf(stderr, i18n(mainSet, mainRCRequiresArg, + "error: '-rc' requires an argument\n")); + exit(1); + } + rc_file = argv[i]; + } else if (argvi == "-help") { + usage(); + } else if (argvi == "-version") { + fprintf(stderr, "epist - shipped with openbox %s\n", + OPENBOX_VERSION); + exit(0); + } + else + usage(); } + + epist ep(argv, display_name, rc_file); + ep.eventLoop(); return 0; } + +static void usage() +{ + cout << "usage: epist OPTIONS" << endl; + cout << endl; + cout << "Options:" << endl; + cout << + " -rc RCFILE Specifies the path to an alternate rc file to load" + << endl << + " -display DISPLAY Specifies the X display to run on" << endl << + " -help Display this help and exit" << endl << + " -version Display the version and exit" << endl << + endl; + exit(0); +}