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.
 
 
 
 
 
 

108 lines
2.7 KiB

/*************************** Module Header *********************************
* GetWidthVector
* Retrieves the width vector for the "current" font, allocates
* storage for it, and copies data from resources. It is presumed
* that the caller has verified that there is a width table.
*
* RETURNS:
* Pointer to storage, else 0 for error (no storage available).
*
* HISTORY:
* 17:06 on Wed 19 Aug 1992 -by- Lindsay Harris [lindsayh]
* Support scalable fonts; Removed call to WinSetError
*
* 17:26 on Fri 31 Jan 1992 -by- Lindsay Harris [lindsayh]
* Moved from rasdd
*
* 14:48 on Thu 14 Mar 1991 -by- Lindsay Harris [lindsayh]
* First version.
*
* Copyright (C) 1992 Microsoft Corporation.
*
****************************************************************************/
#include <precomp.h>
#include <winddi.h>
#include <winres.h>
#include <libproto.h>
#include <memory.h>
#include "udmindrv.h"
#include "udpfm.h"
#include "uddevice.h"
#include "udresrc.h"
#include "raslib.h"
#include "rasdd.h"
short *
GetWidthVector( hHeap, pFDat )
HANDLE hHeap; /* For storage allocation */
FONTDAT *pFDat; /* Details of the current font */
{
/*
* For debugging code, verify that we have a width table! Then,
* allocate memory and copy into it.
*/
short *pus; /* Destination address */
int cb; /* Number of bytes required */
#if DBG
if( pFDat->PFMH.dfPixWidth )
{
DbgPrint( "RasPrint!GetWidthVec(): called for FIXED PITCH FONT\n" );
return 0;
}
#endif
/*
* There are LastChar - FirstChar width entries, plus the default
* char. And the widths are shorts.
*/
cb = (pFDat->PFMH.dfLastChar - pFDat->PFMH.dfFirstChar + 2) * sizeof( short );
pus = (short *)HeapAlloc( hHeap, 0, cb );
/*
* If this is a bitmap font, then use the width table, but use
* the extent table (in PFMEXTENSION area) as these are ready to
* to scale.
*/
if( pus )
{
BYTE *pb;
if( pFDat->pETM &&
pFDat->pETM->emMinScale != pFDat->pETM->emMaxScale &&
pFDat->PFMExt.dfExtentTable )
{
/* Scalable, so use the extent table */
pb = pFDat->pBase + pFDat->PFMExt.dfExtentTable;
}
else
{
/* Not scalable. */
pb = pFDat->pBase + sizeof( res_PFMHEADER );
}
memcpy( pus, pb, cb );
}
#if DBG
else
DbgPrint( "RasPrint!GetWidthVec(): HeapAlloc( %ld ) fails\n", cb );
#endif
return pus;
}