mirror of
https://github.com/DrBeef/ioq3quest.git
synced 2024-11-10 06:41:58 +00:00
Merge "which" command upstream from Tremulous, patch provided by Chris Schwarz
This commit is contained in:
parent
2c57226d9f
commit
4dc750aedb
3 changed files with 75 additions and 0 deletions
2
README
2
README
|
@ -236,6 +236,8 @@ New commands
|
|||
net_restart - restart network subsystem to change latched settings
|
||||
game_restart <fs_game> - Switch to another mod
|
||||
|
||||
which <filename/path> - print out the path on disk to a loaded item
|
||||
|
||||
------------------------------------------------------------ Miscellaneous -----
|
||||
|
||||
Using shared libraries instead of qvm
|
||||
|
|
|
@ -2440,6 +2440,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;
|
||||
}
|
||||
|
||||
|
||||
//===========================================================================
|
||||
|
||||
|
||||
|
@ -2719,6 +2787,7 @@ void FS_Shutdown( qboolean closemfp ) {
|
|||
Cmd_RemoveCommand( "dir" );
|
||||
Cmd_RemoveCommand( "fdir" );
|
||||
Cmd_RemoveCommand( "touchFile" );
|
||||
Cmd_RemoveCommand( "which" );
|
||||
|
||||
#ifdef FS_MISSING
|
||||
if (closemfp) {
|
||||
|
@ -2852,6 +2921,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
|
||||
|
|
|
@ -384,6 +384,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" );
|
||||
|
||||
|
|
Loading…
Reference in a new issue