/* main {{{ */ int main(int argc, char *argv[]) { int c; char *display = NULL; struct sigaction sa; const struct option long_options[] = { { "config", required_argument, 0, 'c' }, { "display", required_argument, 0, 'd' }, { "help", no_argument, 0, 'h' }, { "check", no_argument, 0, 'k' }, { "no-randr", no_argument, 0, 'n' }, { "replace", no_argument, 0, 'r' }, { "sublets", required_argument, 0, 's' }, { "version", no_argument, 0, 'v' }, #ifdef DEBUG { "level", required_argument, 0, 'l' }, { "debug", no_argument, 0, 'D' }, #endif /* DEBUG */ { 0, 0, 0, 0} }; /* Create subtle */ subtle = (SubSubtle *)(subSharedMemoryAlloc(1, sizeof(SubSubtle))); subtle->flags |= (SUB_SUBTLE_XRANDR|SUB_SUBTLE_XINERAMA); /* Parse arguments */ while(-1 != (c = getopt_long(argc, argv, "c:d:hknrs:vl:D", long_options, NULL))) { switch(c) { case 'c': subtle->paths.config = optarg; break; case 'd': display = optarg; break; case 'h': SubtleUsage(); return 0; case 'k': subtle->flags |= SUB_SUBTLE_CHECK; break; case 'n': subtle->flags &= ~SUB_SUBTLE_XRANDR; break; case 'r': subtle->flags |= SUB_SUBTLE_REPLACE; break; case 's': subtle->paths.sublets = optarg; break; case 'v': SubtleVersion(); return 0; #ifdef DEBUG case 'l': subSharedLogLevel(SubtleLevel(optarg)); break; case 'D': subtle->flags |= SUB_SUBTLE_DEBUG; subSharedLogLevel(DEFAULT_LOGLEVEL|DEBUG_LOGLEVEL); break; #else /* DEBUG */ case 'l': case 'D': printf("Please recompile %s with `debug=yes'\n", PKG_NAME); return 0; #endif /* DEBUG */ case '?': printf("Try `%s --help' for more information\n", PKG_NAME); return -1; } } /* Signal handler */ sa.sa_handler = SubtleSignal; sa.sa_flags = 0; memset(&sa.sa_mask, 0, sizeof(sigset_t)); ///< Avoid uninitialized values sigemptyset(&sa.sa_mask); sigaction(SIGHUP, &sa, NULL); sigaction(SIGINT, &sa, NULL); sigaction(SIGSEGV, &sa, NULL); sigaction(SIGCHLD, &sa, NULL); /* Load and check config only */ if(subtle->flags & SUB_SUBTLE_CHECK) { int ret = 0; subRubyInit(); if((ret = subRubyLoadConfig())) printf("Syntax OK\n"); subRubyFinish(); free(subtle); return !ret; } /* Alloc arrays */ subtle->clients = subArrayNew(); subtle->grabs = subArrayNew(); subtle->gravities = subArrayNew(); subtle->hooks = subArrayNew(); subtle->screens = subArrayNew(); subtle->sublets = subArrayNew(); subtle->tags = subArrayNew(); subtle->trays = subArrayNew(); subtle->views = subArrayNew(); /* Init */ SubtleVersion(); subDisplayInit(display); subEwmhInit(); subScreenInit(); subRubyInit(); subGrabInit(); /* Load */ subRubyLoadConfig(); subRubyLoadSublets(); subRubyLoadPanels(); /* Display */ subDisplayConfigure(); subDisplayScan(); subEventLoop(); /* Restart if necessary */ if(subtle->flags & SUB_SUBTLE_RESTART) { subSubtleFinish(); printf("Restarting\n"); execvp(argv[0], argv); } else subSubtleFinish(); printf("Exit\n"); return 0; } /* }}} */
/* OK w95 */ void mainEventLoop() { short sVal, sXCurrent, sYCurrent; long lDevice; int i=0; int state = FALSE; short attached = 1; short value; int dev; int pupval; // make_all(); //init_menu(); nCurrentDir = DIR_NONE; czclear(0x404040, getgdesc(GD_ZMAX)); while (TRUE) { if (qtest()) { lDevice = qread(&sVal); switch (lDevice) { case INPUTCHANGE: #ifdef DOFF printf(" %d, %d, %d\n", Win_ids[0], Win_ids[1], sVal); #endif if ( sVal != 0 ) Input_win = sVal; else Input_win = -1; break; case REDRAW: if ( sVal == Win_ids[1] && Win_ids[1] != -1 ) vDrawHelpScene(); else if ( sVal == Win_ids[0] ) { reshapeviewport(); getsize(&nWinWidth, &nWinHeight); getorigin(&nXWinOrigin, &nYWinOrigin); } break; case RIGHTMOUSE: pupval = dopup(mainmenu); break; case SPACEKEY: state = TRUE; i++; if ( i == 4 ) subEventLoop(); break; case RKEY: if ( Last_Actions[FIRE] == TRUE ) vEventLoop(&vDrawTitle); break; case QKEY: if ( Input_win == Win_ids[1] ) { winclose(Input_win); Win_ids[1] != -1; } else if ( Input_win == Win_ids[0] ) { winclose(Win_ids[0]); if ( Win_ids[1] != -1 ) winclose(Win_ids[1]); exit(0); } break; default: break; } } getdev(DR_NUM_BUT, Devs, Last_Actions); vDrawTitle(state); } }