mirror of
https://github.com/ioquake/ioq3.git
synced 2024-11-10 07:11:46 +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
|
net_restart - restart network subsystem to change latched settings
|
||||||
game_restart <fs_game> - Switch to another mod
|
game_restart <fs_game> - Switch to another mod
|
||||||
|
|
||||||
|
which <filename/path> - print out the path on disk to a loaded item
|
||||||
|
|
||||||
------------------------------------------------------------ Miscellaneous -----
|
------------------------------------------------------------ Miscellaneous -----
|
||||||
|
|
||||||
Using shared libraries instead of qvm
|
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( "dir" );
|
||||||
Cmd_RemoveCommand( "fdir" );
|
Cmd_RemoveCommand( "fdir" );
|
||||||
Cmd_RemoveCommand( "touchFile" );
|
Cmd_RemoveCommand( "touchFile" );
|
||||||
|
Cmd_RemoveCommand( "which" );
|
||||||
|
|
||||||
#ifdef FS_MISSING
|
#ifdef FS_MISSING
|
||||||
if (closemfp) {
|
if (closemfp) {
|
||||||
|
@ -2852,6 +2921,7 @@ static void FS_Startup( const char *gameName )
|
||||||
Cmd_AddCommand ("dir", FS_Dir_f );
|
Cmd_AddCommand ("dir", FS_Dir_f );
|
||||||
Cmd_AddCommand ("fdir", FS_NewDir_f );
|
Cmd_AddCommand ("fdir", FS_NewDir_f );
|
||||||
Cmd_AddCommand ("touchFile", FS_TouchFile_f );
|
Cmd_AddCommand ("touchFile", FS_TouchFile_f );
|
||||||
|
Cmd_AddCommand ("which", FS_Which_f );
|
||||||
|
|
||||||
// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=506
|
// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=506
|
||||||
// reorder the pure pk3 files according to server order
|
// reorder the pure pk3 files according to server order
|
||||||
|
|
|
@ -384,6 +384,9 @@ vmHeader_t *VM_LoadQVM( vm_t *vm, qboolean alloc ) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// show where the qvm was loaded from
|
||||||
|
Cmd_ExecuteString( va( "which %s\n", filename ) );
|
||||||
|
|
||||||
if( LittleLong( header.h->vmMagic ) == VM_MAGIC_VER2 ) {
|
if( LittleLong( header.h->vmMagic ) == VM_MAGIC_VER2 ) {
|
||||||
Com_Printf( "...which has vmMagic VM_MAGIC_VER2\n" );
|
Com_Printf( "...which has vmMagic VM_MAGIC_VER2\n" );
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue