char* FileBasedAGSDebugger::GetNextMessage() { DataStream *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; }
void start_playback() { DataStream *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 { fgetstring_limit (buffer, in, 12); if (buffer[0] != '2') quit("!Replay file is from an old version of AGS"); if (strcmp (buffer, "2.55.553") < 0) quit("!Replay file was recorded with an older incompatible version"); if (strcmp (buffer, ACI_VERSION_TEXT)) { // 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 (restore_game_data (in, replayfile)) quit("!Error running replay... could be incorrect game version"); replay_last_second = loopcounter; } } delete in; } } else // file not found play.playback = 0; }