csgo-2018-source/common/valvefont.h
2021-07-24 21:11:47 -07:00

67 lines
1.6 KiB
C++

//===== Copyright c 1996-2008, Valve Corporation, All rights reserved. ======//
//
// Purpose: Simple encoder/decoder
//
//===========================================================================//
#ifndef COMMON_VALVE_FONT
#define COMMON_VALVE_FONT
#include "simplecodec.h"
#include <time.h>
namespace ValveFont
{
//
// Encodes the font buffer, buffer size is increased automatically
//
inline void EncodeFont( CUtlBuffer &buffer )
{
srand( (unsigned) time( NULL ) );
int numBytes = buffer.TellPut();
int numSultBytes = 0x10 + ( rand() % 0x10 );
char const *szTag = "VFONT1";
int numTagBytes = strlen( szTag );
for ( int k = 0; k < numSultBytes; ++ k )
buffer.PutUnsignedChar( k );
for ( int k = 0; k < numTagBytes; ++ k )
buffer.PutUnsignedChar( szTag[ k ] );
SimpleCodec::EncodeBuffer( ( unsigned char * ) buffer.Base(), numBytes, numSultBytes );
}
//
// Decodes font buffer, returns true if successful, buffer's put pointer is positioned
// at the end of the font data.
// Returns false on failure.
//
inline bool DecodeFont( CUtlBuffer &buffer )
{
int numTotalBytes = buffer.TellPut();
char const *szTag = "VFONT1";
int numTagBytes = strlen( szTag );
if ( numTotalBytes <= numTagBytes )
return false;
if ( memcmp( (( unsigned char * ) buffer.Base() ) + numTotalBytes - numTagBytes,
szTag, numTagBytes ) )
return false;
numTotalBytes -= numTagBytes;
SimpleCodec::DecodeBuffer( ( unsigned char * ) buffer.Base(), numTotalBytes );
buffer.SeekPut( CUtlBuffer::SEEK_HEAD, numTotalBytes );
return true;
}
}; // namespace ValveFont
#endif // COMMON_VALVE_FONT