void signal_handler(int sig) { if (sig == SIGTSTP) handle_tstp(); if (sig == SIGCONT) handle_cont(); if (sig == SIGWINCH) handle_winch(); if (sig == SIGINT || sig == SIGTERM) handle_killers(); }
char LibNcurses::HandleEvent() { int tmp; char button; tmp = getch(); button = 0; if (tmp == KEY_ESC) button = -1; else if (tmp == KEY_LEFT) button = 1; else if (tmp == KEY_RIGHT) button = 2; else if (tmp == KEY_PAUSE) button = 3; else if (tmp == KEY_RESIZE) handle_winch(maxX, maxY); return (button); }
/** Initialize various subsystems. This also closes stdin and replaces it with a copy of stderr, so the reading of completion strings must be done before init is called. */ static void init( int mangle_descriptors, int out ) { struct sigaction act; static struct termios pager_modes; char *term; if( mangle_descriptors ) { /* Make fd 1 output to screen, and use some other fd for writing the resulting output back to the caller */ int in; out = dup( 1 ); close(1); close(0); /* OK to not use CLO_EXEC here because fish_pager is single threaded */ if( (in = open( ttyname(2), O_RDWR )) != -1 ) { if( dup2( 2, 1 ) == -1 ) { debug( 0, _(L"Could not set up output file descriptors for pager") ); exit( 1 ); } if( dup2( in, 0 ) == -1 ) { debug( 0, _(L"Could not set up input file descriptors for pager") ); exit( 1 ); } } else { debug( 0, _(L"Could not open tty for pager") ); exit( 1 ); } } if( !(out_file = fdopen( out, "w" )) ) { debug( 0, _(L"Could not initialize result pipe" ) ); exit( 1 ); } env_universal_init( 0, 0, 0, 0); input_common_init( &interrupt_handler ); output_set_writer( &pager_buffered_writer ); sigemptyset( & act.sa_mask ); act.sa_flags=0; act.sa_handler=SIG_DFL; act.sa_flags = 0; act.sa_handler= &handle_winch; if( sigaction( SIGWINCH, &act, 0 ) ) { wperror( L"sigaction" ); exit(1); } handle_winch( 0 ); /* Set handler for window change events */ tcgetattr(0,&pager_modes); /* get the current terminal modes */ memcpy( &saved_modes, &pager_modes, sizeof(saved_modes)); /* save a copy so we can reset the terminal later */ pager_modes.c_lflag &= ~ICANON; /* turn off canonical mode */ pager_modes.c_lflag &= ~ECHO; /* turn off echo mode */ pager_modes.c_cc[VMIN]=1; pager_modes.c_cc[VTIME]=0; /* */ if( tcsetattr(0,TCSANOW,&pager_modes)) /* set the new modes */ { wperror(L"tcsetattr"); exit(1); } if( setupterm( 0, STDOUT_FILENO, 0) == ERR ) { debug( 0, _(L"Could not set up terminal") ); exit(1); } term = getenv("TERM"); if( term ) { wchar_t *wterm = str2wcs(term); output_set_term( wterm ); free( wterm ); } /* Infer term256 support */ char *fish_term256 = getenv("fish_term256"); bool support_term256; if (fish_term256) { support_term256 = from_string<bool>(fish_term256); } else { support_term256 = term && strstr(term, "256color"); } output_set_supports_term256(support_term256); }
bool InitSystem(void) { setlocale(LC_ALL, ""); systemData.locale = QLocale::system(); systemData.locale.setNumberOptions(QLocale::OmitGroupSeparator); QLocale::setDefault(systemData.locale); QTextStream out(stdout); systemData.homedir = QDir::homePath() + QDir::separator(); #ifdef WIN32 /* WINDOWS */ systemData.sharedDir = (QDir::currentPath() + QDir::separator()); #else systemData.sharedDir = QString(SHARED_DIR) + QDir::separator(); #endif /* WINDOWS */ //logfile #ifdef WIN32 /* WINDOWS */ systemData.logfileName = systemData.homedir + "mandelbulber_log.txt"; #else systemData.logfileName = systemData.homedir + ".mandelbulber_log.txt"; #endif FILE *logfile = fopen(systemData.logfileName.toUtf8().constData(), "w"); fclose(logfile); out << "Mandelbulber " << MANDELBULBER_VERSION_STRING << ", build date: " << QString(__DATE__) << "\n"; out << "Log file name: " << systemData.logfileName << endl; WriteLogString("Mandelbulber version", QString(MANDELBULBER_VERSION_STRING)); WriteLogString("Mandelbulber compilation date", QString(__DATE__) + " " + QString(__TIME__)); //detecting number of CPU cores systemData.numberOfThreads = get_cpu_count(); //NR_THREADS = 1; printf("Detected %d CPUs\n", systemData.numberOfThreads); WriteLogDouble("CPUs detected", systemData.numberOfThreads); #ifdef ONETHREAD //for debugging NR_THREADS = 1; #endif //data directory location #ifdef WIN32 /* WINDOWS */ systemData.dataDirectory = systemData.homedir + "mandelbulber" + QDir::separator(); #else systemData.dataDirectory = systemData.homedir + ".mandelbulber" + QDir::separator(); #endif out << "Default data directory: " << systemData.dataDirectory << endl; WriteLogString("Default data directory", systemData.dataDirectory); systemData.thumbnailDir = systemData.dataDirectory + "thumbnails" + QDir::separator(); systemData.autosaveFile = systemData.dataDirectory + ".autosave.fract"; //*********** temporary set to false ************ systemData.noGui = false; systemData.lastSettingsFile = systemData.dataDirectory + "settings" + QDir::separator() + QString("settings.fract"); systemData.lastImageFile = systemData.dataDirectory + "images" + QDir::separator() + QString("image.jpg"); systemData.lastImagePaletteFile = systemData.sharedDir + "textures" + QDir::separator() + QString("colour palette.jpg"); QLocale systemLocale = QLocale::system(); systemData.decimalPoint = systemLocale.decimalPoint(); WriteLogString("Decimal point", QString(systemData.decimalPoint)); systemData.supportedLanguages.insert("en_EN", "English"); systemData.supportedLanguages.insert("pl_PL", "Polski"); systemData.supportedLanguages.insert("de_DE", "Deutsch"); systemData.supportedLanguages.insert("it_IT", "Italiano"); //get number of columns of console #ifdef WIN32 systemData.terminalWidth = 80; #else handle_winch(-1); #endif return true; }