コード例 #1
0
ファイル: host.c プロジェクト: infernuslord/uqe-quake
void Host_InitVCR (quakeparms_t *parms)
{
	int		i, len, n;
	char	*p;
	
	if (COM_CheckParm("-playback"))
	{
		if (com_argc != 2)
			Sys_Error("No other parameters allowed with -playback\n");

		Sys_FileOpenRead("quake.vcr", &vcrFile);
		if (vcrFile == -1)
			Sys_Error("playback file not found\n");

		Sys_FileRead (vcrFile, &i, sizeof(int));
		if (i != VCR_SIGNATURE)
			Sys_Error("Invalid signature in vcr file\n");

		Sys_FileRead (vcrFile, &com_argc, sizeof(int));
		com_argv = malloc(com_argc * sizeof(char *));
		com_argv[0] = parms->argv[0];
		for (i = 0; i < com_argc; i++)
		{
			Sys_FileRead (vcrFile, &len, sizeof(int));
			p = malloc(len);
			Sys_FileRead (vcrFile, p, len);
			com_argv[i+1] = p;
		}
		com_argc++; /* add one for arg[0] */
		parms->argc = com_argc;
		parms->argv = com_argv;
	}

	if ( (n = COM_CheckParm("-record")) != 0)
	{
		vcrFile = Sys_FileOpenWrite("quake.vcr");

		i = VCR_SIGNATURE;
		Sys_FileWrite(vcrFile, &i, sizeof(int));
		i = com_argc - 1;
		Sys_FileWrite(vcrFile, &i, sizeof(int));
		for (i = 1; i < com_argc; i++)
		{
			if (i == n)
			{
				len = 10;
				Sys_FileWrite(vcrFile, &len, sizeof(int));
				Sys_FileWrite(vcrFile, "-playback", len);
				continue;
			}
			len = Q_strlen(com_argv[i]) + 1;
			Sys_FileWrite(vcrFile, &len, sizeof(int));
			Sys_FileWrite(vcrFile, com_argv[i], len);
		}
	}
	
}
コード例 #2
0
ファイル: Source.c プロジェクト: ChunHungLiu/HandmadeQuake
pack_t *COM_LoadPackFile(char *PakFile)
{
    int PakSize;
    int PakHandle = Sys_FileOpenRead(PakFile, &PakSize);

    if (PakHandle == -1)
    {
        return NULL;
    }

    dpackheader_t PakHeader;

    Sys_FileRead(PakHandle, &PakHeader, sizeof(PakHeader));

    if (PakHeader.Magic[0] != 'P' || PakHeader.Magic[1] != 'A' || PakHeader.Magic[2] != 'C' || PakHeader.Magic[3] != 'K')
    {
        return NULL;
    }

    int NumPackFiles = PakHeader.DirectoryLength / sizeof(dpackfile_t);

    packfile_t* FilesInMemory = malloc(NumPackFiles * sizeof(packfile_t));

    Sys_FileSeek(PakHandle, PakHeader.DirectoryOffset);

    dpackfile_t TempPackFile[MAX_FILES_IN_PACK];
    Sys_FileRead(PakHandle, (void *)TempPackFile, PakHeader.DirectoryLength);

    for (int i = 0; i < NumPackFiles; i++)
    {
        strcpy_s(FilesInMemory[i].FileName, 56, TempPackFile[i].FileName);
        FilesInMemory[i].FileLength = TempPackFile[i].FileLength;
        FilesInMemory[i].FilePosition = TempPackFile[i].FilePosition;
    }

    pack_t  *Pak0 = (void*)malloc(sizeof(pack_t));
    strcpy_s(Pak0->PackName, 64, PakFile);
    Pak0->PackHandle = PakHandle;
    Pak0->NumberOfFiles = NumPackFiles;
    Pak0->PakFiles = FilesInMemory;


    return Pak0;
}
コード例 #3
0
ファイル: main.cpp プロジェクト: BackupGGCode/quake-gamecube
		static void check_pak_file_exists()
		{
			int handle = -1;
			if (Sys_FileOpenRead(QUAKE_WII_BASEDIR"/id1/pak0.pak", &handle) < 0)
			{
				Sys_Error(
					QUAKE_WII_BASEDIR"/ID1/PAK0.PAK was not found.\n"
					"\n"
					"This file comes with the full or demo version of Quake\n"
					"and is necessary for the game to run.\n"
					"\n"
					"Please make sure it is on your SD card in the correct\n"
					"location.\n"
					"\n"
					"If you are absolutely sure the file is correct, your SD\n"
					"card may not be compatible with the SD card lib which\n"
					"Quake uses, or the Wii. Please check the issue tracker.");
				return;
			}
			else
			{
				Sys_FileClose(handle);
			}
		}
コード例 #4
0
ファイル: cd_revol.c プロジェクト: Izhido/qrevpak
void CDAudio_Play(byte track, qboolean looping)
{
	int i, lf;
	trackinfo_t* tnod;
	int trackHdl;
	int newTrackDataLength;
	byte* newTrackData;

	if (!enabled)
		return;
	
	if (!cdValid)
	{
		CDAudio_GetAudioDiskInfo();
		if (!cdValid)
			return;
	}

	track = remap[track];

	if (track < 1 || track > maxTrack)
	{
		Con_DPrintf("CDAudio: Bad track number %u.\n", track);
		return;
	}

	i = track;

	if(cd_nofirst.value)
		i--;
	
	if (playing)
	{
		if (playTrack == track)
			return;
		CDAudio_Stop();
	}

	lf = -1;
	tnod = CDAudio_GetTrack(trackList, i - 1, &lf); 

	if(tnod == NULL)
	{
		Con_Printf("CDAudio: Can't locate track %i\n", track);
		return;
	}

	newTrackDataLength = Sys_FileOpenRead(tnod->track, &trackHdl);
	if(newTrackDataLength <= 0)
	{
		Con_Printf("CDAudio: Can't open track %i\n", track);
		return;
	};

	if(trackData == NULL)
	{
		trackData = Sys_Malloc(newTrackDataLength, "CDAudio_Play");
		trackDataSize = newTrackDataLength;
	} else if(trackDataSize < newTrackDataLength)
	{
		newTrackData = realloc(trackData, newTrackDataLength);
		if(newTrackData == NULL)
		{
			free(trackData);
			trackData = Sys_Malloc(newTrackDataLength, "CDAudio_Play");
		} else
		{
			trackData = newTrackData;
		};
		trackDataSize = newTrackDataLength;
	};
	trackDataLength = newTrackDataLength;

	Sys_FileRead(trackHdl, trackData, trackDataLength);
	Sys_FileClose(trackHdl);

	if(PlayOgg(trackData, trackDataLength, 0, looping ? OGG_INFINITE_TIME : OGG_ONE_TIME))
	{
		Con_Printf("CDAudio: Can't play track %i\n", track);
		return;
	};

	playLooping = looping;
	playTrack = track;
	playing = true;

	//Con_Printf("Now playing: %s\n", tnod->track);

	if (cdvolume == 0.0)
		CDAudio_Pause ();
}