mirror of https://github.com/lianthony/NT4.0
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.
214 lines
6.6 KiB
214 lines
6.6 KiB
|
|
/********************************************************************
|
|
*
|
|
* rastel tag font file format
|
|
*
|
|
*
|
|
*********************************************************************/
|
|
/* magic string of INSTALL TAG FILE */
|
|
#define TAG_MAGIC_STRING ";ID=RASTEL FIXED-PITCH SHIFT-JIS"
|
|
#define LEN_TAG_MAGIC_STRING (sizeof(TAG_MAGIC_STRING)-1)
|
|
|
|
#define SZ_Attribute "ATTRIBUTE"
|
|
#define SZ_FontFiles "FONTFILES"
|
|
#define SZ_FaceName "FACENAME"
|
|
#define SZ_FamilyName "FAMILYNAME"
|
|
#define SZ_DescriptionName "DESCRIPTIONNAME"
|
|
#define SZ_MinorCharSet "MINORCHARSET"
|
|
#define SZ_StandardMode "STANDARDMODE"
|
|
#define SZ_EnhancedMode "386ENHANCEDMODE"
|
|
#define SZ_RealMode "REALMODE"
|
|
#define SZ_Enable "ENABLE"
|
|
#define SZ_Preload "PRELOAD"
|
|
#define SZ_Discardable "DISCARDABLE"
|
|
#define SZ_NullString ""
|
|
|
|
/********************************************************************
|
|
*
|
|
* rastel physical font file format
|
|
*
|
|
* Because there is no guarantee that the contents of physical font
|
|
* is DWORD aligned, we can't directly map the font file into a struct.
|
|
*
|
|
*********************************************************************/
|
|
|
|
/*
|
|
header
|
|
magic string - 32 byte of magic string
|
|
parameter struct
|
|
PixelSizeOfFont - PixelSize of kanji character ( x == y )
|
|
ySizeOfSBCS - height of SBCS character
|
|
segment descriptor table
|
|
NumOfSegment - number of segment
|
|
SegmentDescriptor[0]
|
|
OffsetInFile - offset of segment 0
|
|
SizeOfSegmentOnFile - size of segment 0
|
|
SizeOfSegmentOnMemory
|
|
CompressionMode
|
|
SegmentAttribute
|
|
Reserved1
|
|
Reserved2
|
|
SegmentDescriptor[1]
|
|
OffsetInFile
|
|
SizeOfSegmentOnFile
|
|
SizeOfSegmentOnMemory
|
|
CompressionMode
|
|
SegmentAttribute
|
|
Reserved1
|
|
Reserved2
|
|
SegmentDescriptor[2]
|
|
OffsetInFile
|
|
SizeOfSegmentOnFile
|
|
SizeOfSegmentOnMemory
|
|
CompressionMode
|
|
SegmentAttribute
|
|
Reserved1
|
|
Reserved2
|
|
|
|
....
|
|
|
|
SegmentDescriptor[n]
|
|
OffsetInFile
|
|
SizeOfSegmentOnFile
|
|
SizeOfSegmentOnMemory
|
|
CompressionMode
|
|
SegmentAttribute
|
|
Reserved1
|
|
Reserved2
|
|
...
|
|
Segment 0 ( index segment for horizontal writing font )
|
|
Segment 1 ( index segment for vertical writing font )
|
|
Segment 2 ( code range table segment )
|
|
Segment 3 ( bitmap data segment)
|
|
... ( bitmap data segment)
|
|
Segment n ( bitmap data segment)
|
|
|
|
*/
|
|
|
|
|
|
/* magic string of PHYSICAL FONT FILE */
|
|
/* This string must have 32 character length */
|
|
#define LEN_PHYS_MAGIC_STRING (32)
|
|
#define PHYS_MAGIC_STRING "RASTEL FIXED-PITCH SHIFT-JIS "
|
|
/*00000000011111111112222222222333*/
|
|
/*12345678901234567890123456789012*/
|
|
|
|
#define OFF_ID 0L
|
|
#define OFF_PixelSizeOfFont 32L
|
|
#define OFF_ySizeOfSBCS 34L
|
|
#define OFF_NumOfSegment 36L
|
|
|
|
#define DESCRIPTOR_SIZE 16
|
|
|
|
#define OFF_Seg_Descriptor 38L
|
|
#define OFF_Seg_Horizontal 38L
|
|
#define OFF_Seg_Vertical OFF_Seg_Horizontal+DESCRIPTOR_SIZE
|
|
#define OFF_Seg_CodeArea OFF_Seg_Vertical+DESCRIPTOR_SIZE
|
|
|
|
#define SEG_HORIZONTAL 0
|
|
#define SEG_VERTICAL 1
|
|
#define SEG_CODEAREA 2
|
|
#define SEG_BITMAP_START 3
|
|
/*
|
|
** internal offset in Segment Descriptor
|
|
*/
|
|
#define OFF_OffsetInFile 0
|
|
#define OFF_SizeOfSegmentOnFile 4
|
|
#define OFF_SizeOfSegmentOnMemory 6
|
|
#define OFF_CompressionMode 8
|
|
#define OFF_SegmentAttribute 10
|
|
#define OFF_Reserved1 12
|
|
#define OFF_Reserved2 14
|
|
|
|
|
|
typedef struct _SEGMENTDESCRIPTOR
|
|
{
|
|
ULONG OffsetInFile; // the offset of segment in file
|
|
USHORT SizeOfSegmentOnFile; // the size of segment in file ( before decompression )
|
|
USHORT SizeOfSegmentOnMemory; // the size of segment in memory ( after decompression)
|
|
USHORT CompressionMode; // 0(no compression), 1(upward index compression)
|
|
USHORT SegmentAttribute; // bit0:preload, bit1:discardable
|
|
USHORT Reserved1;
|
|
USHORT Reserved2;
|
|
} SEGMENTDESCRIPTOR;
|
|
|
|
typedef SEGMENTDESCRIPTOR *PSEGMENTDESCRIPTOR;
|
|
|
|
typedef struct _BITMAP_INDEX
|
|
{
|
|
USHORT SegmentNumber;
|
|
USHORT OffsetInSegment;
|
|
} BITMAP_INDEX;
|
|
|
|
typedef struct _ONE_PATCH
|
|
{
|
|
USHORT OffsetInSegment;
|
|
BITMAP_INDEX TheIndex;
|
|
} ONE_PATCH;
|
|
|
|
typedef ONE_PATCH *PONE_PATCH;
|
|
|
|
typedef struct _PATCH_TABLE
|
|
{
|
|
USHORT NumberOfPatchs;
|
|
ONE_PATCH patchs[];
|
|
} PATCH_TABLE;
|
|
|
|
typedef PATCH_TABLE *PPATCH_TABLE;
|
|
|
|
/*
|
|
** code area
|
|
*/
|
|
|
|
#define OFF_CodeFrom 0
|
|
#define OFF_CodeTo 2
|
|
#define CODEAREA_SIZE 4
|
|
#define BITMAP_SEGMENT_LIMIT 65535L
|
|
#define TRAILING_BYTE_OF_SBCS 0x20
|
|
/*
|
|
** code area shiftjis code first byte and second byte
|
|
*/
|
|
#define LEADING_BYTE LOBYTE
|
|
#define TRAILING_BYTE HIBYTE
|
|
|
|
/*
|
|
** internal offset in bitmap index segment
|
|
*/
|
|
#define INDEXSIZE 4 // sizeof(SegmentNumber) + sizeof(OffsetInSegment)
|
|
|
|
#define DBCS_LeadingStart1 ((BYTE)0x81)
|
|
#define DBCS_LeadingEnd1 ((BYTE)0x9f)
|
|
#define DBCS_LeadingStart2 ((BYTE)0xe0)
|
|
#define DBCS_LeadingEnd2 ((BYTE)0xfc)
|
|
#define DBCS_TrailingStart ((BYTE)0x40)
|
|
#define DBCS_TrailingEnd ((BYTE)0xfc)
|
|
#define LeadingRange1 ( DBCS_LeadingEnd1 - DBCS_LeadingStart1 )
|
|
#define LeadingRange2 ( DBCS_LeadingEnd2 - DBCS_LeadingStart2 )
|
|
#define TrailingRange ( DBCS_TrailingEnd - DBCS_TrailingStart )
|
|
#define OFF_SBCS_Offset 0
|
|
#define OFF_DBCS_Offset1 (OFF_SBCS_Offset+256*INDEXSIZE)
|
|
#define OFF_DBCS_Offset2 (OFF_DBCS_Offset1+(LeadingRange1+1)*(TrailingRange+1)*INDEXSIZE)
|
|
|
|
#define INDEX_SEGMENT_SIZE ( INDEXSIZE * 256 + \
|
|
INDEXSIZE * ( LeadingRange1 + 1 ) * ( TrailingRange + 1 ) + \
|
|
INDEXSIZE * ( LeadingRange2 + 1 ) * ( TrailingRange + 1 ) )
|
|
/*
|
|
** internal offset in bitmap index
|
|
*/
|
|
#define OFF_SegmentNumber 0
|
|
#define OFF_OffsetInSegment 2
|
|
|
|
/*
|
|
** segment number for pre-defined segment
|
|
*/
|
|
#define HORIZONTAL_FONT_INDEX 0
|
|
#define VERTICAL_FONT_INDEX 1
|
|
#define CODE_AREA 2
|
|
|
|
/*
|
|
** compression mode
|
|
*/
|
|
#define COMPMODE_NO_COMPRESSION 0
|
|
#define COMPMODE_UPWARD_INDEX 1
|
|
|
|
/********************* Rastel Font File Format *********************/
|