diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/sdktools/fontedit/fontcvt.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/sdktools/fontedit/fontcvt.c')
-rw-r--r-- | private/sdktools/fontedit/fontcvt.c | 577 |
1 files changed, 577 insertions, 0 deletions
diff --git a/private/sdktools/fontedit/fontcvt.c b/private/sdktools/fontedit/fontcvt.c new file mode 100644 index 000000000..bb66f4819 --- /dev/null +++ b/private/sdktools/fontedit/fontcvt.c @@ -0,0 +1,577 @@ +/*++ + +Copyright (c) 1991 Microsoft Corporation + +Module Name: + + fontcvt.c + +Abstract: + + Font Editor specific routines for interface to the type conversion + functions in Typecvt.c. + +Author: + + David J. Marsyla (t-davema) 6-Aug-1991 + +Revision History: + + +--*/ + + +#include "windows.h" +#include <port1632.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. + +--*/ + +{ + //LONG lFontHeaderSize; // Temp variable. + + // + // 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). + ); +} |