Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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(&regions, 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(&regions));
	free(h_genomePositionCandidates);
	free(h_regionsProfiledScores);

    return (SUCCESS);
}