bool saveGame(const Common::String &fname) { Common::OutSaveFile *fp = g_system->getSavefileManager()->openForSaving(fname); if (fp == NULL) return false; fp->writeString("SLUDSA"); fp->writeByte(0); fp->writeByte(0); fp->writeByte(MAJOR_VERSION); fp->writeByte(MINOR_VERSION); if (!g_sludge->_gfxMan->saveThumbnail(fp)) return false; fp->write(&fileTime, sizeof(FILETIME)); // DON'T ADD ANYTHING NEW BEFORE THIS POINT! fp->writeByte(allowAnyFilename); fp->writeByte(captureAllKeys); fp->writeByte(true); g_sludge->_txtMan->saveFont(fp); // Save backdrop fp->writeUint16BE(g_sludge->_gfxMan->getCamX()); fp->writeUint16BE(g_sludge->_gfxMan->getCamY()); fp->writeFloatLE(g_sludge->_gfxMan->getCamZoom()); fp->writeByte(brightnessLevel); g_sludge->_gfxMan->saveHSI(fp); // Save event handlers g_sludge->_evtMan->saveHandlers(fp); // Save regions saveRegions(fp); g_sludge->_cursorMan->saveCursor(fp); // Save functions LoadedFunction *thisFunction = allRunningFunctions; int countFunctions = 0; while (thisFunction) { countFunctions++; thisFunction = thisFunction->next; } fp->writeUint16BE(countFunctions); thisFunction = allRunningFunctions; while (thisFunction) { saveFunction(thisFunction, fp); thisFunction = thisFunction->next; } for (int a = 0; a < numGlobals; a++) { saveVariable(&globalVars[a], fp); } savePeople(fp); if (currentFloor->numPolygons) { fp->writeByte(1); fp->writeUint16BE(currentFloor->originalNum); } else { fp->writeByte(0); } g_sludge->_gfxMan->saveZBuffer(fp); g_sludge->_gfxMan->saveLightMap(fp); fp->writeByte(fadeMode); g_sludge->_speechMan->save(fp); saveStatusBars(fp); g_sludge->_soundMan->saveSounds(fp); fp->writeUint16BE(saveEncoding); blur_saveSettings(fp); g_sludge->_gfxMan->saveColors(fp); g_sludge->_gfxMan->saveParallax(fp); fp->writeByte(0); g_sludge->_languageMan->saveLanguageSetting(fp); g_sludge->_gfxMan->saveSnapshot(fp); fp->flush(); fp->finalize(); delete fp; clearStackLib(); return true; }
int main(int argc, char *argv[]) { if(argc != 5){ printf("Usage: gregions mode distance regionsfile.prof \n"); printf("\t mode = 0 -> ASCII candidates \n"); printf("\t mode = 1 -> Reference Candidates \n"); printf("example: bin/gregions 1 1.2 input/regions-score.1M.prof input/human_genome.fasta \n"); exit(0); } regions_t *regions; sequences_t *genome; seq_format_t candidatesMode = SEQ_ASCII, queriesMode = SEQ_ASCII; uint32_t mode = atof(argv[1]); float distance = atof(argv[2]); char *profileFile = argv[3], *genomeFile = argv[4]; char regionsFile[512]; FILE *fp = NULL; const uint32_t numGenomes = 1; uint32_t *h_genomePositionCandidates = NULL, *h_regionsProfiledScores = NULL; uint32_t numQueries = 0, totalSizeQueries = 0, numCandidates = 0, totalSizeCandidates = 0; if(mode == 1) candidatesMode |= SEQ_REF_POS; fp = fopen(profileFile, "rb"); if (fp == NULL) return(E_OPENING_FILE); PSA_ERROR(countRegionsProfile(fp, distance, &numQueries, &totalSizeQueries, &numCandidates, &totalSizeCandidates)); PSA_ERROR(initRegions(®ions, numQueries, numCandidates, numCandidates)); PSA_ERROR(allocateRegions(regions, distance, totalSizeQueries, queriesMode, totalSizeCandidates, candidatesMode)); h_genomePositionCandidates = (uint32_t *) malloc(numCandidates * sizeof(uint32_t)); if (h_genomePositionCandidates == NULL) PSA_ERROR(E_ALLOCATE_MEM); h_regionsProfiledScores = (uint32_t *) malloc(numCandidates * sizeof(uint32_t)); if (h_regionsProfiledScores == NULL) PSA_ERROR(E_ALLOCATE_MEM); rewind(fp); if(mode == 1) PSA_ERROR(loadRegionsProfile(fp, regions->queries->h_ASCII, regions->queries->h_size, regions->queries->h_ASCIIposition, regions->candidates->h_refPosition, regions->alignments->h_info, h_regionsProfiledScores)); else PSA_ERROR(loadRegionsProfile(fp, regions->queries->h_ASCII, regions->queries->h_size, regions->queries->h_ASCIIposition, h_genomePositionCandidates, regions->alignments->h_info, h_regionsProfiledScores)); regions->queries->formats |= queriesMode; fclose(fp); fp = fopen(genomeFile, "rb"); if (fp == NULL) return(E_OPENING_FILE); PSA_ERROR(initSequences(&genome, numGenomes)); PSA_ERROR(loadSequenceMFASTA(fp, &genome->h_size, &genome->h_ASCII, &genome->h_ASCIIposition, &genome->formats)); fclose(fp); /* recover the candidates from genome in ASCII rep */ if (mode == 1) PSA_ERROR(gatherCandidatesASCIIReference(regions, genome)); else PSA_ERROR(gatherCandidatesASCIIStream(regions, h_genomePositionCandidates, genome)); regions->candidates->formats |= candidatesMode; /* DEBUG REGIONS*/ #if defined(DEBUG) PSA_ERROR(printRegions(regions, 4, 1)); #endif if (mode == 1) sprintf(regionsFile, "%s.%u.%u.%u.ref.regions", profileFile, regions->queries->num, regions->averageSizeQuery, regions->averageCandidatesPerQuery);\ else sprintf(regionsFile, "%s.%u.%u.%u.regions", profileFile, regions->queries->num, regions->averageSizeQuery, regions->averageCandidatesPerQuery); fp = fopen(regionsFile, "wb"); if (fp == NULL) return(E_OPENING_FILE); PSA_ERROR(saveRegions(fp, regions)); fclose(fp); PSA_ERROR(freeRegions(®ions)); free(h_genomePositionCandidates); free(h_regionsProfiledScores); return (SUCCESS); }