Browse Source

engine: client: read console_history.txt as binary, skip empty and repeating lines, reimplement it through FS_Gets for fun

master
Alibek Omarov 9 months ago
parent
commit
081cf9132b
  1. 51
      engine/client/console.c

51
engine/client/console.c

@ -1125,7 +1125,7 @@ Con_ClearField
*/ */
static void Con_ClearField( field_t *edit ) static void Con_ClearField( field_t *edit )
{ {
memset( edit->buffer, 0, MAX_STRING ); memset( edit->buffer, 0, sizeof( edit->buffer ));
edit->cursor = 0; edit->cursor = 0;
edit->scroll = 0; edit->scroll = 0;
} }
@ -1444,36 +1444,49 @@ static void Con_HistoryAppend( con_history_t *self, field_t *from )
static void Con_LoadHistory( con_history_t *self ) static void Con_LoadHistory( con_history_t *self )
{ {
const byte *aFile = FS_LoadFile( "console_history.txt", NULL, true );
const char *pLine, *pFile;
int i, len;
field_t *f; field_t *f;
file_t *fd;
int i;
fd = FS_Open( "console_history.txt", "rb", true );
if( !aFile ) if( !fd )
return; return;
for( pFile = pLine = (char *)aFile; *pFile; pFile++ ) while( !FS_Eof( fd ))
{ {
if( *pFile != '\n' )
continue;
Con_ClearField( &self->lines[self->next] );
len = Q_min( pFile - pLine + 1, sizeof( f->buffer ));
f = &self->lines[self->next % CON_HISTORY]; f = &self->lines[self->next % CON_HISTORY];
Con_ClearField( f );
f->widthInChars = con.linewidth; f->widthInChars = con.linewidth;
f->cursor = len - 1;
Q_strncpy( f->buffer, pLine, len);
self->next++; FS_Gets( fd, f->buffer, sizeof( f->buffer ));
f->cursor = Q_strlen( f->buffer );
// skip empty lines
if( f->cursor == 0 )
continue;
pLine = pFile + 1; // skip repeating lines
if( self->next > 0 )
{
field_t *prev;
prev = &self->lines[(self->next - 1) % CON_HISTORY];
if( !Q_stricmp( prev->buffer, f->buffer ))
continue;
}
self->next++;
} }
FS_Close( fd );
for( i = self->next; i < CON_HISTORY; i++ ) for( i = self->next; i < CON_HISTORY; i++ )
{ {
Con_ClearField( &self->lines[i] ); f = &self->lines[i];
self->lines[i].widthInChars = con.linewidth;
Con_ClearField( f );
f->widthInChars = con.linewidth;
} }
self->line = self->next; self->line = self->next;
@ -1491,7 +1504,7 @@ static void Con_SaveHistory( con_history_t *self )
if( historyStart < 0 ) if( historyStart < 0 )
historyStart = 0; historyStart = 0;
f = FS_Open( "console_history.txt", "w", true ); f = FS_Open( "console_history.txt", "wb", true );
for( i = historyStart; i < self->next; i++ ) for( i = historyStart; i < self->next; i++ )
FS_Printf( f, "%s\n", self->lines[i % CON_HISTORY].buffer ); FS_Printf( f, "%s\n", self->lines[i % CON_HISTORY].buffer );

Loading…
Cancel
Save