diff options
Diffstat (limited to 'src/qcommon')
| -rw-r--r-- | src/qcommon/files.c | 69 | ||||
| -rw-r--r-- | src/qcommon/vm.c | 3 | 
2 files changed, 72 insertions, 0 deletions
diff --git a/src/qcommon/files.c b/src/qcommon/files.c index 75686111..721536c4 100644 --- a/src/qcommon/files.c +++ b/src/qcommon/files.c @@ -2406,6 +2406,74 @@ void FS_TouchFile_f( void ) {  	}  } +/* +============ +FS_Which_f +============ +*/ +void FS_Which_f( void ) { +	searchpath_t	*search; +	char			*netpath; +	pack_t			*pak; +	fileInPack_t	*pakFile; +	directory_t		*dir; +	long			hash; +	FILE			*temp; +	char			*filename; +    char            buf[ MAX_OSPATH ]; + +	hash = 0; +	filename = Cmd_Argv(1); + +	if ( !filename[0] ) { +		Com_Printf( "Usage: which <file>\n" ); +		return; +	} + +	// qpaths are not supposed to have a leading slash +	if ( filename[0] == '/' || filename[0] == '\\' ) { +		filename++; +	} + +	// just wants to see if file is there +	for ( search = fs_searchpaths ; search ; search = search->next ) { +		if ( search->pack ) { +			hash = FS_HashFileName(filename, search->pack->hashSize); +		} +	// is the element a pak file? +		if ( search->pack && search->pack->hashTable[hash] ) { +			// look through all the pak file elements +			pak = search->pack; +			pakFile = pak->hashTable[hash]; +			do { +				// case and separator insensitive comparisons +				if ( !FS_FilenameCompare( pakFile->name, filename ) ) { +					// found it! +					Com_Printf( "File \"%s\" found in \"%s\"\n", filename, pak->pakFilename ); +					return; +				} +				pakFile = pakFile->next; +			} while(pakFile != NULL); +		} else if ( search->dir ) { +			dir = search->dir; + +			netpath = FS_BuildOSPath( dir->path, dir->gamedir, filename ); +			temp = fopen (netpath, "rb"); +			if ( !temp ) { +				continue; +			} +			fclose(temp); +            Com_sprintf( buf, sizeof( buf ), "%s/%s", dir->path, dir->gamedir ); +            FS_ReplaceSeparators( buf ); +			Com_Printf( "File \"%s\" found at \"%s\"\n", filename, buf ); +			return; +		} +	} +	Com_Printf( "File not found: \"%s\"\n", filename ); +	return; +} + +  //=========================================================================== @@ -2791,6 +2859,7 @@ static void FS_Startup( const char *gameName )  	Cmd_AddCommand ("dir", FS_Dir_f );  	Cmd_AddCommand ("fdir", FS_NewDir_f );  	Cmd_AddCommand ("touchFile", FS_TouchFile_f ); +	Cmd_AddCommand ("which", FS_Which_f );  	// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=506  	// reorder the pure pk3 files according to server order diff --git a/src/qcommon/vm.c b/src/qcommon/vm.c index 713256a7..876d36d5 100644 --- a/src/qcommon/vm.c +++ b/src/qcommon/vm.c @@ -387,6 +387,9 @@ vmHeader_t *VM_LoadQVM( vm_t *vm, qboolean alloc ) {  		return NULL;  	} +    // show where the qvm was loaded from +    Cmd_ExecuteString( va( "which %s\n", filename ) ); +  	if( LittleLong( header.h->vmMagic ) == VM_MAGIC_VER2 ) {  		Com_Printf( "...which has vmMagic VM_MAGIC_VER2\n" );  | 
