diff options
Diffstat (limited to 'source/cl_aastat.c')
-rw-r--r-- | source/cl_aastat.c | 39 |
1 files changed, 23 insertions, 16 deletions
diff --git a/source/cl_aastat.c b/source/cl_aastat.c index b1f305f..0b14549 100644 --- a/source/cl_aastat.c +++ b/source/cl_aastat.c @@ -292,9 +292,9 @@ static void TH_DrawLayoutString( char *dst, const char *s ) { static void SCR_ScoreShot_f( void ) { char buffer[( TH_WIDTH + 1 ) * TH_HEIGHT]; char path[MAX_OSPATH]; - fileHandle_t f; - size_t len; + qhandle_t f; int i; + qerror_t ret; if( cls.state != ca_active ) { Com_Printf( "Must be in a level.\n" ); @@ -302,31 +302,32 @@ static void SCR_ScoreShot_f( void ) { } if( Cmd_Argc() > 1 ) { - len = Q_concat( path, sizeof( path ), SCORESHOTS_DIRECTORY "/", Cmd_Argv( 1 ), ".txt", NULL ); - if( len >= sizeof( path ) ) { - Com_EPrintf( "Oversize filename specified.\n" ); + f = FS_EasyOpenFile( path, sizeof( path ), FS_MODE_WRITE, + SCORESHOTS_DIRECTORY "/", Cmd_Argv( 1 ), ".txt" ); + if( !f ) { return; } } else { + // find a file name to save it to for( i = 0; i < 1000; i++ ) { Q_snprintf( path, sizeof( path ), SCORESHOTS_DIRECTORY "/quake%03d.txt", i ); - if( FS_LoadFileEx( path, NULL, FS_PATH_GAME, TAG_FREE ) == INVALID_LENGTH ) { - break; // file doesn't exist + ret = FS_FOpenFile( path, &f, FS_MODE_WRITE|FS_FLAG_EXCL ); + if( f ) { + break; + } + if( ret != Q_ERR_EXIST ) { + Com_EPrintf( "Couldn't exclusively open %s for writing: %s\n", + path, Q_ErrorString( ret ) ); + return; } } if( i == 1000 ) { - Com_Printf( "All scoreshot slots are full.\n" ); + Com_EPrintf( "All scoreshot slots are full.\n" ); return; } } - FS_FOpenFile( path, &f, FS_MODE_WRITE ); - if( !f ) { - Com_EPrintf( "Couldn't open %s for writing.\n", path ); - return; - } - memset( buffer, ' ', sizeof( buffer ) ); for( i = 0; i < TH_HEIGHT; i++ ) { buffer[ i * ( TH_WIDTH + 1 ) + TH_WIDTH ] = '\n'; @@ -346,15 +347,21 @@ static void SCR_ScoreDump_f( void ) { char buffer[( TH_WIDTH + 1 ) * TH_HEIGHT]; int i; + if( cls.state != ca_active ) { + Com_Printf( "Must be in a level.\n" ); + return; + } + memset( buffer, ' ', sizeof( buffer ) ); - for( i = 0; i < TH_HEIGHT; i++ ) { + for( i = 0; i < TH_HEIGHT - 1; i++ ) { buffer[ i * ( TH_WIDTH + 1 ) + TH_WIDTH ] = '\n'; } + buffer[ i * ( TH_WIDTH + 1 ) + TH_WIDTH ] = 0; TH_DrawLayoutString( buffer, cl.configstrings[CS_STATUSBAR] ); TH_DrawLayoutString( buffer, cl.layout ); - Com_Printf( "%s", buffer ); + Com_Printf( "%s\n", buffer ); } void CL_InitAscii( void ) { |