home *** CD-ROM | disk | FTP | other *** search
- /*++
-
- Copyright (c) 1993-1997 Microsoft Corporation
-
- Module Name:
-
- fontcvt.c
-
- Abstract:
-
- Font Editor specific routines for interface to the type conversion
- functions in Typecvt.c.
-
-
- --*/
-
-
- #include "windows.h"
- #include <windowsx.h>
- #include "typecvt.h"
- #include "fontedit.h"
-
-
- extern LONG lSizeOfOldFontHeader; /* Old packed font header size. */
- extern LONG lSizeOfOldFontHeader30; /* Old 3.0 packed font header size. */
- extern LONG lSizeOfOldGlyph20; /* Old packed glyph 2.0 structure. */
- extern LONG lSizeOfOldGlyph30; /* Old packed glyph 3.0 structure. */
-
-
- //
- // The following is a definition of the current 2.0 font header structure.
- // This is the same as the old structure except that it will now be stored
- // DWORD aligned in memory.
- //
- // First, we give it the size of the element type (as it was under Win 3.0).
- // Second, we give it the actual size of the element. These will only differ
- // if the element is some sort of array.
- //
- // Note that it is important that this array accurately reflect any changes
- // in the actual structure. When CalculateStructOffsets is called it will
- // return an error if the structure does not match in size, but it cannot
- // detect swapped element errors.
- //
-
- #define pfh2T ((FontHeaderType *)NULL)
-
- SDI rgsdiFontHeader [] =
- {
- { sizeof (WORD), sizeof (pfh2T->Version) },
- { sizeof (DWORD), sizeof (pfh2T->Size) },
- { sizeof (CHAR), sizeof (pfh2T->Copyright) },
- { sizeof (WORD), sizeof (pfh2T->Type) },
- { sizeof (WORD), sizeof (pfh2T->Points) },
- { sizeof (WORD), sizeof (pfh2T->VertRes) },
- { sizeof (WORD), sizeof (pfh2T->HorizRes) },
- { sizeof (WORD), sizeof (pfh2T->Ascent) },
- { sizeof (WORD), sizeof (pfh2T->IntLeading) },
- { sizeof (WORD), sizeof (pfh2T->ExtLeading) },
- { sizeof (BYTE), sizeof (pfh2T->Italic) },
- { sizeof (BYTE), sizeof (pfh2T->Underline) },
- { sizeof (BYTE), sizeof (pfh2T->StrikeOut) },
- { sizeof (WORD), sizeof (pfh2T->Weight) },
- { sizeof (BYTE), sizeof (pfh2T->CharSet) },
- { sizeof (WORD), sizeof (pfh2T->PixWidth) },
- { sizeof (WORD), sizeof (pfh2T->PixHeight) },
- { sizeof (BYTE), sizeof (pfh2T->Family) },
- { sizeof (WORD), sizeof (pfh2T->AvgWidth) },
- { sizeof (WORD), sizeof (pfh2T->MaxWidth) },
- { sizeof (BYTE), sizeof (pfh2T->FirstChar) },
- { sizeof (BYTE), sizeof (pfh2T->LastChar) },
- { sizeof (BYTE), sizeof (pfh2T->DefaultChar) },
- { sizeof (BYTE), sizeof (pfh2T->BreakChar) },
- { sizeof (WORD), sizeof (pfh2T->WidthBytes) },
- { sizeof (DWORD), sizeof (pfh2T->Device) },
- { sizeof (DWORD), sizeof (pfh2T->Face) },
- { sizeof (DWORD), sizeof (pfh2T->BitsPointer) },
- { sizeof (DWORD), sizeof (pfh2T->BitsOffset) },
- { 0, 0 }
- };
-
- //
- // The following is the current font 3.0 header. This structure has not
- // changed at all. Note that it will contain filler between elements to
- // maintain DWORD alignment.
- //
-
- #define pfh3T ((FontHeader30 *)NULL)
-
- SDI rgsdiFontHeader30 [] =
- {
- { sizeof (WORD), sizeof (pfh3T->fsVersion) },
- { sizeof (DWORD), sizeof (pfh3T->fsSize) },
- { sizeof (CHAR), sizeof (pfh3T->fsCopyright) },
- { sizeof (WORD), sizeof (pfh3T->fsType) },
- { sizeof (WORD), sizeof (pfh3T->fsPoints) },
- { sizeof (WORD), sizeof (pfh3T->fsVertRes) },
- { sizeof (WORD), sizeof (pfh3T->fsHorizRes) },
- { sizeof (WORD), sizeof (pfh3T->fsAscent) },
- { sizeof (WORD), sizeof (pfh3T->fsInternalLeading) },
- { sizeof (WORD), sizeof (pfh3T->fsExternalLeading) },
- { sizeof (BYTE), sizeof (pfh3T->fsItalic) },
- { sizeof (BYTE), sizeof (pfh3T->fsUnderline) },
- { sizeof (BYTE), sizeof (pfh3T->fsStrikeOut) },
- { sizeof (WORD), sizeof (pfh3T->fsWeight) },
- { sizeof (BYTE), sizeof (pfh3T->fsCharSet) },
- { sizeof (WORD), sizeof (pfh3T->fsPixWidth) },
- { sizeof (WORD), sizeof (pfh3T->fsPixHeight) },
- { sizeof (BYTE), sizeof (pfh3T->fsPitchAndFamily) },
- { sizeof (WORD), sizeof (pfh3T->fsAvgWidth) },
- { sizeof (WORD), sizeof (pfh3T->fsMaxWidth) },
- { sizeof (BYTE), sizeof (pfh3T->fsFirstChar) },
- { sizeof (BYTE), sizeof (pfh3T->fsLastChar) },
- { sizeof (BYTE), sizeof (pfh3T->fsDefaultChar) },
- { sizeof (BYTE), sizeof (pfh3T->fsBreakChar) },
- { sizeof (WORD), sizeof (pfh3T->fsWidthBytes) },
- { sizeof (DWORD), sizeof (pfh3T->fsDevice) },
- { sizeof (DWORD), sizeof (pfh3T->fsFace) },
- { sizeof (DWORD), sizeof (pfh3T->fsBitsPointer) },
- { sizeof (DWORD), sizeof (pfh3T->fsBitsOffset) },
- { sizeof (CHAR), sizeof (pfh3T->fsDBfiller) },
- { sizeof (DWORD), sizeof (pfh3T->fsFlags) },
- { sizeof (WORD), sizeof (pfh3T->fsAspace) },
- { sizeof (WORD), sizeof (pfh3T->fsBspace) },
- { sizeof (WORD), sizeof (pfh3T->fsCspace) },
- { sizeof (DWORD), sizeof (pfh3T->fsColorPointer) },
- { sizeof (DWORD), sizeof (pfh3T->fsReserved) },
- { sizeof (CHAR), sizeof (pfh3T->fsCharOffset) },
- { 0, 0 }
- };
-
- //
- // The following definition is for the GlyphInfo20 structure. These
- // structures are read off of disk and then converted into memory.
- //
-
- #define pgi2T ((GLYPHINFO_20 *)NULL)
-
- SDI rgsdiGlyph20 [] =
- {
- { sizeof (SHORT), sizeof (pgi2T->GIwidth) },
- { sizeof (SHORT), sizeof (pgi2T->GIoffset) },
- { 0, 0 }
- };
-
- //
- // The following definition is for the GlyphInfo30 structure. These
- // structures are read off of disk and then converted into memory.
- //
-
- #define pgi3T ((GLYPHINFO_30 *)NULL)
-
- SDI rgsdiGlyph30 [] =
- {
- { sizeof (SHORT), sizeof (pgi3T->GIwidth) },
- { sizeof (LONG), sizeof (pgi3T->GIoffset) },
- { 0, 0 }
- };
-
-
-
- BOOL
- fConvStructInit ()
-
- /*++
-
- Routine Description:
-
- This function performs all the necessary initialization on the font
- editor's structure definition info strucrures (SDI) and type conversion
- structures (TCI). This routine should be called before either
- FontStructFromBuffer or BufferFromFontStruct are called.
- It is also important that this function be called before the global
- variable ulOldFontHeaderSize is accessed.
-
- Arguments:
-
- None. The function accesses the global definition structures and sets
- the variable ulOldFontHeaderSize to the size of the packed font header
- structure.
-
- Return Value:
-
- BOOL - TRUE = the function successfully initialized all internal
- strucutres.
- FALSE = there was an error in one of the structure definitions.
- This is usually caused by element changes which are not reflected
- in the structure definition. The program should perform an
- assertion failure if this is the case.
- Also, the global variable ulOldFontHeaderSize is set to the size of the
- packed font header structure.
-
- --*/
-
- {
- //
- // Calculate all of the element offsets for the old font header structure.
- // The function will return the size of the structure in packed format.
- //
- lSizeOfOldFontHeader = lCalculateStructOffsets (
- rgsdiFontHeader, // Give it the struct definition.
- CVT_ALIGN_PACKED, // Alignment type is packed on disk.
- sizeof (FontHeaderType)
- );
-
- //
- // If CalculateStructOffsets returns -1 then there was a problem with
- // structure definition. The only types of error it can find is if the
- // structure size it is passed does not match the one it calculates.
- //
- if (lSizeOfOldFontHeader == -1) {
- return (FALSE);
- }
-
- //
- // Calculate The size of the old font 3.0 structure.
- // The function will return the size of the structure in packed format.
- //
-
- lSizeOfOldFontHeader30 = lCalculateStructOffsets (
- rgsdiFontHeader30, // Give it the new font header struct.
- CVT_ALIGN_PACKED, // Alignment type is packed on disk.
- sizeof (FontHeader30)
- );
-
- //
- // Check if the routine detected and error in the structure definition.
- //
- if (lSizeOfOldFontHeader30 == -1) {
- return (FALSE);
- }
-
- //
- // Now do the same operations on the glyph information structures.
- //
-
- lSizeOfOldGlyph20 = lCalculateStructOffsets (
- rgsdiGlyph20,
- CVT_ALIGN_PACKED,
- sizeof (GLYPHINFO_20)
- );
-
- if (lSizeOfOldGlyph20 == -1) {
- return (FALSE);
- }
-
- lSizeOfOldGlyph30 = lCalculateStructOffsets (
- rgsdiGlyph30,
- CVT_ALIGN_PACKED,
- sizeof (GLYPHINFO_30)
- );
-
- if (lSizeOfOldGlyph30 == -1) {
- return (FALSE);
- }
-
- return (TRUE); // No error found.
- }
-
-
- VOID
- vFontStructFromBuffer (
- PBYTE pjSourceBuff,
- FontHeaderType *pfhDestFHStruct
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pjSourceBuff - This is a pointer to the source buffer with the old
- packed font header information. This buffer is from a
- memory mapped disk file.
-
- pfhDestFHStruct - This is a pointer to the destination FontHeaderType
- structure. This structure is of the new DWORD aligned
- type.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiFontHeader, // Give it the structure description.
- pjSourceBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT, // Use file endian type (little).
- (PBYTE)pfhDestFHStruct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM // Use the current system endian.
- );
- }
-
-
- VOID
- vBufferFromFontStruct (
- FontHeaderType *pfhSrcFHStruct,
- PBYTE pjDestBuff
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It converts a source structure of type FontHeaderType to a destination
- buffer which can then be written out to disk.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pfhSrcFHStruct - This is a pointer to the source FontHeaderType structure.
- This structure is of the new DWORD aligned type.
-
- pjDestBuff - This is a pointer to the destination buffer which will
- hold the old packed font header structure.
- This buffer is from a memory mapped disk file.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiFontHeader, // Give it the structure description.
- (PBYTE)pfhSrcFHStruct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM, // Use the current system endian.
- pjDestBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT // Use file endian type (little).
- );
- }
-
-
- VOID
- vBufferFromFont30Struct (
- FontHeader30 *pfh3SrcFH3Struct,
- PBYTE pjDestBuff
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It converts a source structure of type FontHeader30 to a destination
- buffer which can then be written out to disk.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pfh3SrcFH3Struct- This is a pointer to the source FontHeader30 structure.
- This structure is of the new DWORD aligned type.
-
- pjDestBuff - This is a pointer to the destination buffer which will
- hold the old packed font header structure.
- This buffer is from a memory mapped disk file.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiFontHeader30, // Give it the structure description.
- (PBYTE)pfh3SrcFH3Struct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM, // Use the current system endian.
- pjDestBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT // Use file endian type (little).
- );
- }
-
-
- VOID
- vGlyphInfo20FromBuffer (
- PBYTE pjSourceBuff,
- GLYPHINFO_20 *pgi2DestGI2Struct
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pjSourceBuff - This is a pointer to the source buffer with the old
- packed font header information. This buffer is from a
- memory mapped disk file.
-
- pgi2DestGI2Struct - This is a pointer to the destination GLYPHINFO_20
- structure. This structure is of the new DWORD aligned
- type.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiGlyph20, // Give it the structure description.
- pjSourceBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT, // Use file endian type (little).
- (PBYTE)pgi2DestGI2Struct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM // Use the current system endian.
- );
- }
-
-
- VOID
- vGlyphInfo30FromBuffer (
- PBYTE pjSourceBuff,
- GLYPHINFO_30 *pgi3DestGI3Struct
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pjSourceBuff - This is a pointer to the source buffer with the old
- packed font header information. This buffer is from a
- memory mapped disk file.
-
- pgi3DestGI3Struct - This is a pointer to the destination GLYPHINFO_30
- structure. This structure is of the new DWORD aligned
- type.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiGlyph30, // Give it the structure description.
- pjSourceBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT, // Use file endian type (little).
- (PBYTE)pgi3DestGI3Struct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM // Use the current system endian.
- );
- }
-
-
- VOID
- vBufferFromGlyphInfo20 (
- GLYPHINFO_20 *pgi2SrcGI2Struct,
- PBYTE pjDestBuff
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It converts a source structure of type GLYPHINFO_20 to a destination
- buffer which can then be written out to disk.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pgi2SrcGI2Struct- This is a pointer to the source GLYPHINFO_20 structure.
- This structure is of the new DWORD aligned type.
-
- pjDestBuff - This is a pointer to the destination buffer which will
- hold the old packed font header structure.
- This buffer is from a memory mapped disk file.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiGlyph20, // Give it the structure description.
- (PBYTE)pgi2SrcGI2Struct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM, // Use the current system endian.
- pjDestBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT // Use file endian type (little).
- );
- }
-
-
- VOID
- vBufferFromGlyphInfo30 (
- GLYPHINFO_30 *pgi3SrcGI3Struct,
- PBYTE pjDestBuff
- )
-
- /*++
-
- Routine Description:
-
- This function provides an interface to the font editor for the strutcture
- type conversion routines.
- It converts a source structure of type GLYPHINFO_30 to a destination
- buffer which can then be written out to disk.
- It essentially just calls the typecvt routines but hides the details from
- the font editor.
-
- Arguments:
-
- pgi3SrcGI3Struct- This is a pointer to the source GLYPHINFO_30 structure.
- This structure is of the new DWORD aligned type.
-
- pjDestBuff - This is a pointer to the destination buffer which will
- hold the old packed font header structure.
- This buffer is from a memory mapped disk file.
-
- Return Value:
-
- None.
-
- --*/
-
- {
- vPerformConversion (
- rgsdiGlyph30, // Give it the structure description.
- (PBYTE)pgi3SrcGI3Struct, // Give it our destination buffer.
- CVT_ALIGN_SYSTEM, // Use the current system aligment.
- CVT_ENDIAN_SYSTEM, // Use the current system endian.
- pjDestBuff, // Give it our source file buffer.
- CVT_ALIGN_PACKED, // File is packed alignment.
- CVT_FILE_ENDIAN_DEFAULT // Use file endian type (little).
- );
- }
-