コード例 #1
0
ファイル: SystemOnTPTP.c プロジェクト: mihasighi/smtcomp14-sl
//-----------------------------------------------------------------------------
//----1 means positive result, -1 means negative result, 0 means no result
int SystemOnTPTP(LISTNODE Axioms,ANNOTATEDFORMULA Conjecture,
char * PositiveChecker,char * PositiveResult,int TestNegative,
char * NegativeChecker,char * NegativeResult,int TimeLimit,
char * SystemOutputPrefix,int KeepOutputFiles,char * FilesDirectory,
char * UsersOutputFileName,String OutputFileName) {

    String ProblemFileName;
    String CopyUsersOutputFileName;
    String SystemResult;
    int Correct;

    if (!MakeProblemFile(FilesDirectory,UsersOutputFileName,".p",
ProblemFileName,Axioms,axiom,Conjecture,conjecture)) {
        return(0);
    }

//----0 means no result yet
    Correct = 0;

//----Need to make a copy in case the same variable is used
//----Set to empty if nothing given, to cause use of mktemp
    if (UsersOutputFileName == NULL) {
        strcpy(CopyUsersOutputFileName,"");
    } else {
        strcpy(CopyUsersOutputFileName,UsersOutputFileName);
    }
    if (Correct == 0) {
        if (SystemOnTPTPGetResult(0,ProblemFileName,PositiveChecker,TimeLimit,
"",SystemOutputPrefix,KeepOutputFiles,FilesDirectory,CopyUsersOutputFileName,
OutputFileName,SystemResult,NULL)) {
            if (!strcmp(SystemResult,PositiveResult)) {
                Correct = 1;
//----Should not trust prover's disproofs
//            } else if (!strcmp(SystemResult,NegativeResult)) {
//                Correct = -1;
            }
        }
    }

//----Check if really not provable
    if (Correct == 0 && TestNegative) {
        PathBasename(OutputFileName,CopyUsersOutputFileName,NULL);
        strcat(CopyUsersOutputFileName,"_not");
        if (SystemOnTPTPGetResult(0,ProblemFileName,NegativeChecker,TimeLimit,
"",SystemOutputPrefix,KeepOutputFiles,FilesDirectory,CopyUsersOutputFileName,
OutputFileName,SystemResult,NULL)) {
            if (!strcmp(SystemResult,NegativeResult)) {
                Correct = -1;
//----Should not trust disprover's proofs
//            } else if (!strcmp(SystemResult,PositiveResult)) {
//                Correct = 1;
            }
        }
    }

    if (!KeepOutputFiles) {
        RemoveFile(ProblemFileName);
    }

    return(Correct);
}
コード例 #2
0
ファイル: sdd1.cpp プロジェクト: dtzWill/supernes
void S9xLoadSDD1Data ()
{
	char packdir[_MAX_PATH + 1];

	// Unload any previous pack
	Settings.SDD1Pack = FALSE;
	Memory.FreeSDD1Data();

	if (!S9xGetSDD1Dir(packdir)) {
		printf("SDD1: Didn't found pack for this ROM\n");
		return;
	}

	printf("SDD1: Searching for pack in %s\n", packdir);
	Settings.SDD1Pack=TRUE;

	char index[_MAX_PATH + 1];
	char data[_MAX_PATH + 1];
	char patch[_MAX_PATH + 1];
	DIR *dir = opendir(packdir);

	index[0] = 0;
	data[0] = 0;
	patch[0] = 0;

	if (dir) {
		struct dirent *d;

		while ((d = readdir (dir))) {
			if (strcasecmp (d->d_name, "SDD1GFX.IDX") == 0) {
				strcpy(index, packdir);
				strcat(index, "/");
				strcat(index, d->d_name);
			} else if (strcasecmp (d->d_name, "SDD1GFX.DAT") == 0) {
				strcpy(data, packdir);
				strcat(data, "/");
				strcat(data, d->d_name);
			} else if (strcasecmp (d->d_name, "SDD1GFX.PAT") == 0) {
				strcpy(patch, packdir);
				strcat(patch, "/");
				strcat(patch, d->d_name);
			}
		}
		closedir (dir);
	}

	if (strlen (index) && strlen (data)) {
		FILE *fs = fopen (index, "rb");
		int len = 0;

		if (fs)	{
			// Index is stored as a sequence of entries, each entry being
			// 12 bytes consisting of:
			// 4 byte key: (24bit address & 0xfffff * 16) | translated block
			// 4 byte ROM offset
			// 4 byte length

			fseek (fs, 0, SEEK_END);
			len = ftell (fs);
			rewind (fs);
			Memory.SDD1Index = (uint8 *) malloc (len);
			fread (Memory.SDD1Index, 1, len, fs);
			fclose (fs);
			Memory.SDD1Entries = len / 12;
		} else {
			fprintf(stderr, "Failed to read SDD1 index file %s\n", index);
			return;
		}
		printf("SDD1: index: %s\n", PathBasename(index));

		if (!(fs = fopen (data, "rb")))	{
			fprintf(stderr, "Failed to read SDD1 data file %s\n", data);
			free ((char *) Memory.SDD1Index);
			Memory.SDD1Index = NULL;
			Memory.SDD1Entries = 0;
			return;
		} else {
			fseek (fs, 0, SEEK_END);
			len = ftell (fs);
			rewind (fs);
			Memory.SDD1Data = (uint8 *) malloc (len);
			fread (Memory.SDD1Data, 1, len, fs);
			fclose (fs);
		}
		printf("SDD1: data pack: %s\n", PathBasename(data));

		if (strlen (patch) > 0 && (fs = fopen (patch, "rb"))) {
			fclose (fs);
		}

#ifdef MSB_FIRST
		// Swap the byte order of the 32-bit value triplets on
		// MSBFirst machines.
		uint8 *ptr = Memory.SDD1Index;
		for (int i = 0; i < Memory.SDD1Entries; i++, ptr += 12) 	{
			SWAP_DWORD ((*(uint32 *) (ptr + 0)));
			SWAP_DWORD ((*(uint32 *) (ptr + 4)));
			SWAP_DWORD ((*(uint32 *) (ptr + 8)));
		}
#endif

		qsort(Memory.SDD1Index, Memory.SDD1Entries, 12,
			S9xCompareSDD1IndexEntries);
		printf("SDD1: Pack loaded succesfully\n");
	} else {
		fprintf(stderr, "SDD1: SDD1 data pack not found in '%s'\n",
			packdir);
		fprintf(stderr, "SDD1: Check if sdd1gfx files exist\n");
		printf("SDD1: Failed to load pack\n");
	}
}