X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=util%2Fepist%2Fmain.cc;h=f873717daaf462989d7aaac080442b6fad6da4d7;hb=97019b8b77f7e6450d87b057bcb6eae43e9f3e2b;hp=c7c1a768663c2349db7902e1a46d18d6c465f228;hpb=426b1ea2b60d4fe1368d318730a0cd098559b896;p=chaz%2Fopenbox diff --git a/util/epist/main.cc b/util/epist/main.cc index c7c1a768..f873717d 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,78 @@ #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); +using std::string; + +#include "../../version.h" +#include "epist.hh" + +static void usage(); + +int main(int argc, char **argv) { + // parse the command line + char *display_name = 0; + char *rc_file = 0; + + for (int i = 1; i < argc; ++i) { + const string argvi(argv[i]); + if (argvi == "-display") { + if (++i >= argc) { + fprintf(stderr, "error: '-display' requires an argument\n"); + exit(1); + } + display_name = argv[i]; + } else if (argvi == "-rc") { + if (++i >= argc) { + fprintf(stderr, "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(); } - _shutdown = true; - -#ifndef HAVE_SIGACTION - // assume broken, braindead sysv signal semantics - signal(sig, (RETSIGTYPE (*)(int)) signalhandler); -#endif // HAVE_SIGACTION + + epist ep(argv, display_name, rc_file); + ep.eventLoop(); + return 0; } - -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); - } - - XCloseDisplay(_display); - 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); }