Пример #1
0
char* FileBasedAGSDebugger::GetNextMessage()
{
    Stream *in = Common::File::OpenFileRead("dbgsend.tmp");
    if (in == NULL)
    {
        // check again, because the editor might have deleted the file in the meantime
        return NULL;
    }
    int fileSize = in->GetLength();
    char *msg = (char*)malloc(fileSize + 1);
    in->Read(msg, fileSize);
    delete in;
    unlink("dbgsend.tmp");
    msg[fileSize] = 0;
    return msg;
}
Пример #2
0
	///////////////////////////////////////////////////////////////////////////////
	//                                                                           //
	// File I/O                                                                  //
	//                                                                           //
	///////////////////////////////////////////////////////////////////////////////
	aalError Sample::Load(const char * _name)
	{
		Stream * stream = CreateStream(_name);

		if (!stream) return AAL_ERROR_FILEIO;

		stream->GetFormat(format);
		stream->GetLength(length);
		DeleteStream(stream);

		aalVoid * ptr = realloc(name, strlen(_name) + 1);

		if (!ptr) return AAL_ERROR_MEMORY;

		name = (char *)ptr;
		strcpy(name, _name);

		return AAL_OK;
	}
Пример #3
0
// Test whether all three reads return the same thing.
void consistencyTesting(Stream &s) {
	int location = rand() % s.GetLength();
	int size = 128;

	// Run all three tests: Sequential, Backwards, and Random.
	int* seq = testReadSequential(s, location, size);
	int* back = testReadBackwards(s, location, size);
	int* random = testReadRandom(s, location, size);

	// Are they all the same?
	if (seq == back && back == random)
		printf("Data is consistent between all three read formats.\n");
	// Otherwise, error check.
	else {
		if (seq != back)
			printf("Error: Data is not consistent between sequential and backwards reading.\n");
		if (seq != random)
			printf("Error: Data is not consistent between sequential and random reading.\n");
		if (random != back)
			printf("Error: Data is not consistent between backwards and random reading.\n");
	}
}
Пример #4
0
void start_playback()
{
    Stream *in = Common::File::OpenFileRead(replayfile);
    if (in != NULL) {
        char buffer [100];
        in->Read(buffer, 12);
        buffer[12] = 0;
        if (strcmp (buffer, "AGSRecording") != 0) {
            Display("ERROR: Invalid recorded data file");
            play.playback = 0;
        }
        else {
            String version_string = String::FromStream(in, 12);
            AGS::Engine::Version requested_engine_version(version_string);
            if (requested_engine_version.Major != '2') 
                quit("!Replay file is from an old version of AGS");
            if (requested_engine_version < AGS::Engine::Version(2, 55, 553))
                quit("!Replay file was recorded with an older incompatible version");

            if (requested_engine_version != EngineVersion) {
                // Disable text as speech while displaying the warning message
                // This happens if the user's graphics card does BGR order 16-bit colour
                int oldalways = game.options[OPT_ALWAYSSPCH];
                game.options[OPT_ALWAYSSPCH] = 0;
                play.playback = 0;
                Display("Warning! replay is from a different version of AGS (%s) - it may not work properly.", buffer);
                play.playback = 1;
                srand (play.randseed);
                play.gamestep = 0;
                game.options[OPT_ALWAYSSPCH] = oldalways;
            }

            int replayver = in->ReadInt32();

            if ((replayver < 1) || (replayver > 3))
                quit("!Unsupported Replay file version");

            if (replayver >= 2) {
                fgetstring_limit (buffer, in, 99);
                int uid = in->ReadInt32 ();
                if ((strcmp (buffer, game.gamename) != 0) || (uid != game.uniqueid)) {
                    char msg[150];
                    sprintf (msg, "!This replay is meant for the game '%s' and will not work correctly with this game.", buffer);
                    delete in;
                    quit (msg);
                }
                // skip the total time
                in->ReadInt32 ();
                // replay description, maybe we'll use this later
                fgetstring_limit (buffer, in, 99);
            }

            play.randseed = in->ReadInt32();
            int flen = in->GetLength() - in->GetPosition ();
            if (replayver >= 3) {
                flen = in->ReadInt32() * sizeof(short);
            }
            recordbuffer = (short*)malloc (flen);
            in->Read(recordbuffer, flen);
            srand (play.randseed);
            recbuffersize = flen / sizeof(short);
            recsize = 0;
            disable_mgetgraphpos = 1;
            replay_time = 0;
            replay_last_second = loopcounter;
            if (replayver >= 3) {
                int issave = in->ReadInt32();
                if (issave) {
                    if (RestoreGameState(in, kSvgVersion_321) != kSvgErr_NoError)
                        quit("!Error running replay... could be incorrect game version");
                    replay_last_second = loopcounter;
                }
            }
            delete in;
        }
    }
    else // file not found
        play.playback = 0;
}
Пример #5
0
void Write_Validation_Tests(Stream & S)
{
	char s_buf[4000];
	char r_buf[4000];

	for (int i = 0; i < 4000; i++)
	{
		s_buf[i] = 'a';
	}
	s_buf[3999] = '\0';

	//cout << s_buf << endl;
	if (S.CanWrite())
	{
		cout << "Can write" << endl;
	}
	else
	{
		cout << "Can't write Unit test passed" << endl;

		return;
	}

	S.Write(s_buf, 4000);
	S.Read(r_buf, 4000);
	if (memcmp(r_buf, s_buf, 4000) == 0)
	{
		cout << "T1). PASS: Write all in one write works" << endl;
	}
	else
	{
		cout << "T1). FAILED: Write all in one write does not match" << endl;
	}

	char k_buf[1024];
	char o_buf[1801];
	for (int i = 0; i < 4000; i++)
	{
		s_buf[i] = 'b';
	}
	s_buf[3999] = '\0';
	S.SetPosition(S.GetLength());

	int k = 4000;
	for (int i = 0; i <= 3; i++)
	{
		int l;
		if ((k - 1024) >= 0)
		{
			l = 1024;
			k = k - 1024;
		}
		else
		{
			l = k;
		}
		for (int j = 0; j < l; j++)
		{
			k_buf[j] = s_buf[i * 1024 + j];
		}
		S.Write(k_buf, l);
		S.SetPosition(S.GetLength());
	}

	S.SetPosition(4000);
	k = 4000;
	for (int i = 0; i <= 3; i++)
	{
		if (k - 1024 >= 0)
		{
			S.Read(k_buf, 1024);
			k = k - 1024;
			memcpy(&r_buf[i * 1024], k_buf, 1024);
		}
		else
		{
			S.Read(k_buf, k);
			memcpy(&r_buf[i * 1024], k_buf, k);
		}

		S.SetPosition(4000 + (i*1024));
	}
	r_buf[3999] = '\0';

	if (memcmp(r_buf, s_buf, 4000) == 0)
	{
		cout << "T2). PASS: Write by block works" << endl;
	}
	else
	{
		cout << "T2). FAILED: Write all in one write does not match" << endl;
	}



	for (int i = 0; i < 4000; i++)
	{
		s_buf[i] = 'c';
	}
	s_buf[3999] = '\0';
	S.SetPosition(S.GetLength());

    k = 4000;
	for (int i = 0; i <= 2; i++)
	{
		int l;
		if ((k - 1801) >= 0)
		{
			l = 1801;
			k = k - 1801;
		}
		else
		{
			l = k;
		}
		for (int j = 0; j < l; j++)
		{
			o_buf[j] = s_buf[i * 1801 + j];
		}
		S.Write(o_buf, l);
		S.SetPosition(S.GetLength());
	}
	S.SetPosition(8000);
	k = 4000;

	for (int i = 0; i <= 2; i++)
	{
		if (k - 1801 >= 0)
		{
			S.Read(o_buf, 1801);
			k = k - 1801;
			memcpy(&r_buf[i * 1801], o_buf, 1801);
		}
		else
		{
			S.Read(o_buf, k);
			memcpy(&r_buf[i * 1801], o_buf, k);
		}

		S.SetPosition(8000 + (i * 1801));
	}
	r_buf[3999] = '\0';

	if (memcmp(r_buf, s_buf, 4000) == 0)
	{
		cout << "T3). PASS: Write by uncommon buffer size works" << endl;
	}
	else
	{
		cout << "T3). FAILED: Write all in one write does not match" << endl;
	}





	system("pause");
	return;
}