bool initConfigAndLogger(int argc, char** argv, SPConfig* config) { char *configFilename, *loggerFilename; SP_CONFIG_MSG configMsg = SP_CONFIG_SUCCESS; SP_LOGGER_LEVEL loggerLevel; SP_LOGGER_MSG loggerMsg; if (!(configFilename = getConfigFilename(argc, argv))) { printf(INVALID_CMD_LINE); return false; } if (!(*config = getConfigFromFile(configFilename, &configMsg)) || configMsg != SP_CONFIG_SUCCESS) { printf(ERROR_AT_GET_CONFIG_FROM_FILE, configMsgToStr(configMsg)); return false; } loggerFilename = spConfigGetLoggerFilename(*config, &configMsg); if (loggerFilename == NULL || configMsg != SP_CONFIG_SUCCESS) { printf(ERROR_AT_GET_LOGGER_FILENAME_FROM_CONFIG, configMsgToStr(configMsg)); return false; } loggerLevel = spConfigGetLoggerLevel(*config, &configMsg); if (configMsg != SP_CONFIG_SUCCESS) { printf(ERROR_AT_GET_LOGGER_LEVEL_FROM_CONFIG, configMsgToStr(configMsg)); return false; } loggerMsg = spLoggerCreate(!strcmp(loggerFilename, STDOUT) ? NULL : loggerFilename, loggerLevel); if (loggerMsg != SP_LOGGER_SUCCESS) { printf(ERROR_AT_CREATE_LOGGER, loggerMsgToStr(loggerMsg)); return false; } spLoggerSafePrintDebug(DEBUG_LOGGER_HAS_BEEN_CREATED, __FILE__, __FUNCTION__, __LINE__); return true; }
int main(int argc, char **argv) { // fix `fullscreen quit kills mouse` issue. atexit(SDL_Quit); std::string config_filename = getConfigFilename(); ConfigFile config(config_filename); // window dimensions from configfile wvw = config.read<int>("Window Width", 512); wvh = config.read<int>("Window Height", 512); fullscreen = config.read("Fullscreen", true); init_display(wvw, wvh, &fvw, &fvh, fullscreen); SDL_WM_SetCaption(PROJECTM_TITLE, NULL); // memleak test while (doMemleakTest) { static int k = 0; std::cerr << "[iter " << k++ << "]" << std::endl; globalPM = new projectM(config_filename); assert(globalPM); delete (globalPM); if (k >= memLeakIterations) break; } globalPM = new projectM(config_filename); // if started fullscreen, give PM new viewport dimensions if (fullscreen) globalPM->projectM_resetGL(fvw, fvh); renderLoop(); // not reached return 1; }