int main(int argc, const char* argv[]) { int rc; SeparationFlags sf; SeparationPrefs preferences; const char** argvCopy = NULL; #ifdef NDEBUG mwDisableErrorBoxes(); #endif /* NDEBUG */ argvCopy = mwFixArgv(argc, argv); rc = parseParameters(argc, argvCopy ? argvCopy : argv, &sf); if (rc) { if (BOINC_APPLICATION) { freeSeparationFlags(&sf); mwBoincInit(MW_PLAIN); parseParameters(argc, argvCopy, &sf); printVersion(TRUE, FALSE); } mw_printf("Failed to parse parameters\n"); free(argvCopy); mw_finish(EXIT_FAILURE); } rc = separationInit(sf.debugBOINC); free(argvCopy); if (rc) return rc; separationReadPreferences(&preferences); setFlagsFromPreferences(&sf, &preferences, argv[0]); if (sf.processPriority != MW_PRIORITY_INVALID) { mwSetProcessPriority(sf.processPriority); } rc = worker(&sf); freeSeparationFlags(&sf); if (!sf.ignoreCheckpoint && sf.cleanupCheckpoint && rc == 0) { mw_report("Removing checkpoint file '%s'\n", CHECKPOINT_FILE); mw_remove(CHECKPOINT_FILE); } mw_finish(rc); return rc; }
int main(int argc, const char* argv[]) { NBodyFlags nbf; int rc = 0; const char** argvCopy = mwFixArgv(argc, argv); nbSpecialSetup(); if (nbReadParameters(argc, argvCopy ? argvCopy : argv, &nbf)) { if (BOINC_APPLICATION) { mwBoincInit(MW_PLAIN); nbReadParameters(argc, argvCopy ? argvCopy : argv, &nbf); nbPrintVersion(TRUE, FALSE); } mw_finish(EXIT_FAILURE); } if (nbInit(&nbf)) { exit(EXIT_FAILURE); } if (BOINC_APPLICATION && mwIsFirstRun()) { nbPrintVersion(TRUE, FALSE); } nbSetDefaultFlags(&nbf); if (nbSetNumThreads(nbf.numThreads)) { mw_finish(EXIT_FAILURE); } if (nbf.verifyOnly) { rc = nbVerifyFile(&nbf); } else if (nbf.matchHistogram) { double emd; emd = nbMatchHistogramFiles(nbf.histogramFileName, nbf.matchHistogram); mw_printf("%.15f\n", emd); rc = isnan(emd); } else { rc = nbMain(&nbf); rc = nbStatusToRC(rc); if (!nbf.noCleanCheckpoint) { mw_report("Removing checkpoint file '%s'\n", nbf.checkpointFileName); mw_remove(nbf.checkpointFileName); } } fflush(stderr); fflush(stdout); /* Odd things happen with the OpenCL one where stdout starts disappearing */ freeNBodyFlags(&nbf); if (BOINC_APPLICATION) { mw_finish(rc); } return rc; }