Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

231 lines
5.7 KiB

/* Main test program for the softfont stuffer arounder */
#include <fontgen.h>
PVOID _MapFile( HANDLE );
void exit( int );
int atoi( char * );
void
main( argc, argv )
int argc;
char **argv;
{
/*
* Basically loop through the parameters, assuming each is a
* soft font file name, and processing it accordingly.
*/
BYTE *pbFile;
HANDLE hheap; /* Heap for our convenience */
HANDLE hFile; /* File handle */
FI_DATA FD; /* This is filled in for us! */
DWORD dwSize; /* Determine the file size */
int iI; /* Miscellaneous use */
BOOL bRet; /* From font update! */
WCHAR wchName[ 128 ]; /* BIG ENOUGH */
FID *pFID; /* For access to fontfile routines */
FONTLIST *pFIL; /* The linked list of data to write */
FONTLIST *pFILPrev; /* Previous one */
FONTLIST *pFILFirst; /* Start of the list */
int iDel[ 256 ]; /* Enough! */
int iDelIndex; /* Location of next entry */
if( !(hheap = HeapCreate( HEAP_NO_SERIALIZE, 10 * 1024, 256 * 1024 )) )
{
DbgPrint( "Heap creation fails in soft font tester\n" );
exit( 0 );
}
/*
* Start up the manipulation stuff.
*/
strcpy2WChar( wchName, "_LH_name.XXX" );
pFID = pFIOpen( wchName, hheap );
if( pFID == 0 )
{
DbgPrint( "pvFIOpen fails\n" );
exit( 1 );
}
pFILFirst = pFILPrev = 0; /* None to start with */
iDel[ 0 ] = 0;
iDelIndex = 1;
for( --argc, ++argv; argc > 0; --argc, ++argv )
{
if( **argv >= '0' && **argv <= '9' )
{
iDel[ iDelIndex++ ] = atoi( *argv );
++iDel[ 0 ]; /* Number to delete */
DbgPrint( "..Delete %ld\n", atoi( *argv ) );
continue;
}
DbgPrint( "softfont: file is '%s': ", *argv );
if( (hFile = CreateFileA( *argv, GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
NULL) ) == INVALID_HANDLE_VALUE )
{
RIP( "MapFileA: CreateFileA failed.\n" );
exit( 2 );
}
if( (pbFile = _MapFile( hFile )) == 0 )
{
DbgPrint( "MapFileA( %s ) fails\n", *argv );
continue;
}
/*
* Want to find out how big the file is, so now seek to the
* end, and see what address comes back! There appears to be
* no other way to do this.
*/
dwSize = SetFilePointer( hFile, 0L, NULL, FILE_END );
if( !bSFontToFIData( &FD, hheap, pbFile, dwSize ) )
{
DbgPrint( "bSFontToFIData() fails\n" );
continue; /* Ignore this one */
}
if( !CloseHandle( hFile ) )
RIP( "MapFileA: CloseHandle(hFile) failed.\n" );
UnmapViewOfFile( pbFile ); /* Input no longer needed */
pFIL = (FONTLIST *)HeapAlloc( hheap, 0, sizeof( FONTLIST ) );
if( !pFIL )
{
DbgPrint( "HeapAlloc( FONTLIST ) fails\n" );
exit( 1 );
}
if( pFILPrev )
pFILPrev->pFLNext = pFIL;
else
pFILFirst = pFIL;
pFIL->pFLNext = 0; /* No next one */
pFIL->pvFixData = HeapAlloc( hheap, 0, sizeof( FD ) );
if( pFIL->pvFixData )
memcpy( pFIL->pvFixData, &FD, sizeof( FD ) );
else
{
DbgPrint( "HeapALloc fails in main loop!\n" );
exit( 1 );
}
pFIL->pvVarData = HeapAlloc( hheap, 0, strlen( *argv ) + 1 );
if( pFIL->pvVarData )
{
/* Copy our file name into here */
strcpy( pFIL->pvVarData, *argv );
}
pFILPrev = pFIL; /* For next time */
}
bRet = bFIUpdate( pFID, iDel, pFILFirst );
if( !bRet )
DbgPrint( "bFIUpdate returns FALSE\n" );
if( !bRet )
exit( 9 );
if( !bFIClose( pFID, bRet ) )
{
DbgPrint( "bFIClose returns failure\n" );
}
HeapDestroy( hheap ); /* Probably not needed */
exit( 0 );
}
/***************************************************************************
* _MapFileA
* Returns a pointer to the mapped file defined by hFile passed in.
*
* Parameters:
* hFile: the handle to the file to be desired.
*
* Returns:
* Pointer to mapped memory if success, NULL if error.
*
* NOTE: UnmapViewOfFile will have to be called by the user at some
* point to free up this allocation.
*
* History:
* 15:54 on Wed 19 Feb 1992 -by- Lindsay Harris [lindsayh]
* Modified to accept open file handle.
*
* 05-Nov-1991 -by- Kent Settle [kentse]
* Wrote it.
*
***************************************************************************/
PVOID
_MapFile( hFile )
HANDLE hFile;
{
PVOID pv;
HANDLE hFileMap;
/*
* Create the mapping object.
*/
if( !(hFileMap = CreateFileMappingA( hFile, NULL, PAGE_READONLY,
0, 0, (PSZ)NULL )) )
{
RIP("MapFileA: CreateFileMapping failed.\n");
return NULL;
}
/*
* Get the pointer mapped to the desired file.
*/
if( !(pv = MapViewOfFile( hFileMap, FILE_MAP_READ, 0, 0, 0 )) )
{
RIP("MapFileA: MapViewOfFile failed.\n");
return NULL;
}
/*
* Now that we have our pointer, we can close the file and the
* mapping object.
*/
if( !CloseHandle( hFileMap ) )
RIP( "MapFileA: CloseHandle(hFileMap) failed.\n" );
return pv;
}