137 lines
2.4 KiB
C++
137 lines
2.4 KiB
C++
//===== Copyright c 1996-2008, Valve Corporation, All rights reserved. ======//
|
|
//
|
|
// Purpose: Valve font compiler
|
|
//
|
|
//===========================================================================//
|
|
|
|
#include <stdlib.h>
|
|
#include <stdio.h>
|
|
|
|
#include "utlbuffer.h"
|
|
#include "valvefont.h"
|
|
|
|
int Usage()
|
|
{
|
|
printf( "Usage: vfont inputfont.ttf [outputfont.vfont]\n" );
|
|
return -1;
|
|
}
|
|
|
|
int main( int argc, char ** argv )
|
|
{
|
|
printf( "Valve Software - vfont.exe (" __DATE__ ")\n" );
|
|
|
|
int iArg = 1;
|
|
if ( iArg >= argc )
|
|
return Usage();
|
|
|
|
//
|
|
// Check if we are in decompiler mode
|
|
//
|
|
#if VFONT_DECOMPILER
|
|
bool bDecompiler = false;
|
|
bDecompiler = !stricmp( argv[ iArg ], "-d" );
|
|
if ( bDecompiler )
|
|
++ iArg;
|
|
#endif
|
|
|
|
if ( iArg >= argc )
|
|
return Usage();
|
|
|
|
//
|
|
// Input file
|
|
//
|
|
char const *szInput = argv[ iArg ];
|
|
++ iArg;
|
|
|
|
//
|
|
// Output file
|
|
//
|
|
char szOutput[ 512 ] = {0};
|
|
|
|
if ( iArg >= argc )
|
|
{
|
|
int numBytes = strlen( szInput );
|
|
strcpy( szOutput, szInput );
|
|
|
|
char *pDot = strrchr( szOutput, '.' );
|
|
char *pSlash1 = strrchr( szOutput, '/' );
|
|
char *pSlash2 = strrchr( szOutput, '\\' );
|
|
|
|
if ( !pDot )
|
|
{
|
|
pDot = szOutput + numBytes;
|
|
}
|
|
else if ( pDot < pSlash1 || pDot < pSlash2 )
|
|
{
|
|
pDot = szOutput + numBytes;
|
|
}
|
|
|
|
sprintf( pDot, ".vfont" );
|
|
}
|
|
else
|
|
{
|
|
strcpy( szOutput, argv[ iArg ] );
|
|
}
|
|
|
|
//
|
|
// Read the input
|
|
//
|
|
FILE *fin = fopen( szInput, "rb" );
|
|
if ( !fin )
|
|
{
|
|
printf( "Error: cannot open input file '%s'!\n", szInput );
|
|
return -2;
|
|
}
|
|
|
|
fseek( fin, 0, SEEK_END );
|
|
long lSize = ftell( fin );
|
|
fseek( fin, 0, SEEK_SET );
|
|
|
|
CUtlBuffer buf;
|
|
buf.EnsureCapacity( lSize );
|
|
fread( buf.Base(), 1, lSize, fin );
|
|
buf.SeekPut( CUtlBuffer::SEEK_HEAD, lSize );
|
|
fclose( fin );
|
|
|
|
//
|
|
// Compile
|
|
//
|
|
#if VFONT_DECOMPILER
|
|
if ( bDecompiler )
|
|
{
|
|
bool bResult = ValveFont::DecodeFont( buf );
|
|
if ( !bResult )
|
|
{
|
|
printf( "Error: cannot decompile input file '%s'!\n", szInput );
|
|
return 1;
|
|
}
|
|
}
|
|
else
|
|
ValveFont::EncodeFont( buf );
|
|
#else
|
|
ValveFont::EncodeFont( buf );
|
|
#endif
|
|
|
|
//
|
|
// Write the output
|
|
//
|
|
FILE *fout = fopen( szOutput, "wb" );
|
|
if ( !fout )
|
|
{
|
|
printf( "Error: cannot open output file '%s'!\n", szOutput );
|
|
return -3;
|
|
}
|
|
|
|
fwrite( buf.Base(), 1, buf.TellPut(), fout );
|
|
fclose( fout );
|
|
|
|
printf( "vfont successfully %scompiled '%s' as '%s'.\n",
|
|
#if VFONT_DECOMPILER
|
|
bDecompiler ? "de" : "",
|
|
#else
|
|
"",
|
|
#endif
|
|
szInput, szOutput );
|
|
return 0;
|
|
}
|