//===== Copyright c 1996-2008, Valve Corporation, All rights reserved. ======// // // Purpose: Valve font compiler // //===========================================================================// #include #include #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; }