/*
===========================================================================
Copyright (C) 2005 - 2015, ioquake3 contributors
Copyright (C) 2013 - 2015, OpenJK contributors
This file is part of the OpenJK source code.
OpenJK is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, see .
===========================================================================
*/
#include "con_local.h"
#include
#include
/*
========================================================================
CONSOLE LOG
========================================================================
*/
#define MAX_CONSOLE_LOG_SIZE (65535)
struct ConsoleLog
{
// Cicular buffer of characters. Be careful, there is no null terminator.
// You're expected to use the console log length to know where the end
// of the string is.
char text[MAX_CONSOLE_LOG_SIZE];
// Where to start writing the next string
int writeHead;
// Length of buffer
int length;
};
static ConsoleLog consoleLog;
void ConsoleLogAppend( const char *string )
{
for ( int i = 0; string[i]; i++ )
{
consoleLog.text[consoleLog.writeHead] = string[i];
consoleLog.writeHead = (consoleLog.writeHead + 1) % MAX_CONSOLE_LOG_SIZE;
consoleLog.length++;
if ( consoleLog.length > MAX_CONSOLE_LOG_SIZE )
{
consoleLog.length = MAX_CONSOLE_LOG_SIZE;
}
}
}
void ConsoleLogWriteOut( FILE *fp )
{
assert( fp );
if ( consoleLog.length == MAX_CONSOLE_LOG_SIZE &&
consoleLog.writeHead != MAX_CONSOLE_LOG_SIZE )
{
fwrite( consoleLog.text + consoleLog.writeHead, MAX_CONSOLE_LOG_SIZE - consoleLog.writeHead, 1, fp );
}
fwrite( consoleLog.text, consoleLog.writeHead, 1, fp );
}