645 lines
23 KiB
C
645 lines
23 KiB
C
// ReadMbm.c
|
|
// Slightly modified by Yan...
|
|
|
|
#include "tde.h"
|
|
|
|
#define RedOn6bits 0
|
|
#define GreenOn6bits 1
|
|
#define BlueOn6bits 0
|
|
|
|
ACP_tdxBool TDE_g_bRedOn6bits;
|
|
ACP_tdxBool TDE_g_bGreenOn6bits;
|
|
ACP_tdxBool TDE_g_bBlueOn6bits;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_vSetRGBFormat
|
|
// Set the RGB format
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
void TDE_vSetRGBFormat ( ACP_tdxBool bRedOn6bits, ACP_tdxBool bGreenOn6bits, ACP_tdxBool bBlueOn6bits )
|
|
{
|
|
TDE_g_bRedOn6bits = bRedOn6bits;
|
|
TDE_g_bGreenOn6bits = bGreenOn6bits;
|
|
TDE_g_bBlueOn6bits = bBlueOn6bits;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_lReadMBMData
|
|
// Reads the MBM data from an opened file and convert them into the right
|
|
// format according to the video board.
|
|
// Return 1 if OK, 0 if Failed.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
long TDE_lReadMBMData (FILE *pFile, TDE_tdsSprite *p_stSprite)
|
|
{
|
|
// Local variables
|
|
size_t nbBlocks;
|
|
unsigned short sPictureWidth, sPictureHeight, sMagicColor;
|
|
unsigned short R, G, B, c555;
|
|
TDE_tdxPixel *Buffer, *TempBuff;
|
|
unsigned long usI, usLine, lPicSize;
|
|
BOOL bTransparent;
|
|
|
|
//**********************************************************
|
|
// Read the data
|
|
//**********************************************************
|
|
|
|
// Read the Width
|
|
nbBlocks = fread( &sPictureWidth, sizeof(short), 1, pFile);
|
|
if (nbBlocks != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
// Read the Height
|
|
nbBlocks = fread( &sPictureHeight, sizeof(short), 1, pFile);
|
|
if (nbBlocks != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
// Read the magic color
|
|
nbBlocks = fread( &sMagicColor, sizeof(short), 1, pFile);
|
|
if (nbBlocks != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
// Compute the size of the picture (in pixels)
|
|
lPicSize = (long)(sPictureHeight) * (long)(sPictureWidth);
|
|
// Allocate memory for temporary buffer and for definitive buffer
|
|
M_TdeAlloc(Buffer,TDE_tdxPixel *,(sizeof(short)*lPicSize));
|
|
if (Buffer == NULL)
|
|
return 0;
|
|
M_TdeAlloc(TempBuff,TDE_tdxPixel *,(sizeof(short)*lPicSize));
|
|
if (TempBuff == NULL)
|
|
{
|
|
M_TdeFree (Buffer);
|
|
return 0;
|
|
}
|
|
// Read the data
|
|
nbBlocks = fread( TempBuff, sizeof(short), lPicSize, pFile);
|
|
if (nbBlocks != lPicSize)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
|
|
//**********************************************************
|
|
// Convert the data
|
|
//**********************************************************
|
|
|
|
// Let's assume the bitmap isn't transparent
|
|
bTransparent = FALSE;
|
|
|
|
// 555 -> 565
|
|
if (TDE_g_bGreenOn6bits)
|
|
{
|
|
// Magic color
|
|
R = (sMagicColor&0x7C00)>>10;
|
|
G = (sMagicColor&0x3E0)>>5;
|
|
B = sMagicColor&0x1F;
|
|
sMagicColor = (R<<11) + (G<<6) + B;
|
|
// Loop on each line
|
|
for ( usLine=0; usLine<lPicSize; usLine+=sPictureWidth )
|
|
{
|
|
// Loop on each point
|
|
for ( usI=0; usI<sPictureWidth; usI++ )
|
|
{
|
|
// Get the original color
|
|
c555 = TempBuff[lPicSize - usLine - sPictureWidth + usI];
|
|
// If it is not transparent, convert it
|
|
if (c555&&0x8000)
|
|
{
|
|
R = (c555&0x7C00)>>10;
|
|
G = (c555&0x3E0)>>5;
|
|
B = c555&0x1F;
|
|
Buffer[usLine + usI] = (R<<11) + (G<<6) + B;
|
|
}
|
|
// If it is transparent, set it to the magic color
|
|
else
|
|
{
|
|
bTransparent = TRUE;
|
|
Buffer[usLine + usI] = sMagicColor;
|
|
}
|
|
} // for (usI....
|
|
} // for (us Line ....
|
|
}
|
|
// 555 -> 556
|
|
else if (TDE_g_bBlueOn6bits)
|
|
{
|
|
// Magic color
|
|
R = (sMagicColor&0x7C00)>>10;
|
|
G = (sMagicColor&0x3E0)>>5;
|
|
B = sMagicColor&0x1F;
|
|
sMagicColor = (R<<11) + (G<<6) + (B<<1);
|
|
// Loop on each line
|
|
for ( usLine=0; usLine<(sPictureHeight*sPictureWidth); usLine+=sPictureWidth )
|
|
{
|
|
// Loop on each point
|
|
for ( usI=0; usI<sPictureWidth; usI++ )
|
|
{
|
|
// Get the original color
|
|
c555 = TempBuff[lPicSize - usLine - sPictureWidth + usI];
|
|
// If it is not transparent, convert it
|
|
if (c555&&0x8000)
|
|
{
|
|
R = (c555&0x7C00)>>10;
|
|
G = (c555&0x3E0)>>5;
|
|
B = c555&0x1F;
|
|
Buffer[usLine + usI] = (R<<11) + (G<<5) + (B<<1);
|
|
}
|
|
// If it is transparent, set it to the magic color
|
|
else
|
|
{
|
|
bTransparent = TRUE;
|
|
Buffer[usLine + usI] = sMagicColor;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 555 -> 655
|
|
else if (TDE_g_bRedOn6bits)
|
|
{
|
|
// Magic color
|
|
R = (sMagicColor&0x7C00)>>10;
|
|
G = (sMagicColor&0x3E0)>>5;
|
|
B = sMagicColor&0x1F;
|
|
sMagicColor = (R<<11) + (G<<5) + B;
|
|
// Loop on each line
|
|
for ( usLine=0; usLine<(sPictureHeight*sPictureWidth); usLine+=sPictureWidth )
|
|
{
|
|
// Loop on each point
|
|
for ( usI=0; usI<sPictureWidth; usI++ )
|
|
{
|
|
// Get the original color
|
|
c555 = TempBuff[lPicSize - usLine - sPictureWidth + usI];
|
|
// If it is not transparent, convert it
|
|
if (c555&&0x8000)
|
|
{
|
|
R = (c555&0x7C00)>>10;
|
|
G = (c555&0x3E0)>>5;
|
|
B = c555&0x1F;
|
|
Buffer[usLine + usI] = (R<<11) + (G<<5) + B;
|
|
}
|
|
// If it is transparent, set it to the magic color
|
|
else
|
|
{
|
|
bTransparent = TRUE;
|
|
Buffer[usLine + usI] = sMagicColor;
|
|
}
|
|
} // for (usI...
|
|
} // for (usLine...
|
|
} // if
|
|
// 555 -> 555
|
|
else
|
|
{
|
|
// Loop on each line
|
|
for ( usLine=0; usLine<(sPictureHeight*sPictureWidth); usLine+=sPictureWidth )
|
|
{
|
|
// Loop on each point
|
|
for ( usI=0; usI<sPictureWidth; usI++ )
|
|
{
|
|
// Get the original color
|
|
c555 = TempBuff[lPicSize - usLine - sPictureWidth + usI];
|
|
// If it is not transparent, convert it
|
|
if (c555&&0x8000)
|
|
{
|
|
Buffer[usLine + usI] = c555;
|
|
}
|
|
// If it is transparent, set it to the magic color
|
|
else
|
|
{
|
|
bTransparent = TRUE;
|
|
Buffer[usLine + usI] = sMagicColor;
|
|
}
|
|
} // for (usI...
|
|
} // for (usLine...
|
|
}
|
|
// Free the temporary buffer
|
|
M_TdeFree(TempBuff);
|
|
// Set the members of the sprite structure
|
|
p_stSprite->stDim.xX = sPictureWidth;
|
|
p_stSprite->stDim.xY = sPictureHeight;
|
|
p_stSprite->xMagicColor = sMagicColor;
|
|
p_stSprite->v_pData = Buffer;
|
|
// Set transparency
|
|
if (bTransparent)
|
|
p_stSprite->c_NZ = 1;
|
|
else
|
|
p_stSprite->c_NZ = 0;
|
|
return 1;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_lReadAndConvertMBMFile
|
|
// Read a MBM file (open and close it).
|
|
// Returns 1 if OK, 0 if FAILED
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
long TDE_lReadAndConvertMBMFile(char *filename, TDE_tdsSprite *p_stSprite)
|
|
{
|
|
FILE *pFile;
|
|
|
|
// Open the file
|
|
if ( (pFile = fopen(filename, "rb")) != NULL )
|
|
{
|
|
fseek (pFile, 0, SEEK_SET);
|
|
// Read it and convert the data
|
|
if (!TDE_lReadMBMData (pFile, p_stSprite))
|
|
{
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
fclose (pFile);
|
|
}
|
|
else
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantOpenFileForReading,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_lReadCursorAnimation
|
|
// Read cursor animation in a text file
|
|
// Returns 1 if OK
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
long TDE_lReadCursorAnimation (char *szDir, char *szTxtFile, TDE_tdsAnimatedCursor *Anim)
|
|
{
|
|
FILE *pFile;
|
|
char text[30];
|
|
int NB_STEP, i;
|
|
TDE_p_stAnimatedCursor Next;
|
|
char szFilename[100];
|
|
|
|
// Obtain txt filename with path
|
|
strcpy (szFilename, szDir);
|
|
strcat (szFilename, szTxtFile);
|
|
|
|
// Open txt file
|
|
if ( (pFile = fopen(szFilename, "r")) != NULL )
|
|
{
|
|
fseek (pFile, 0, SEEK_SET);
|
|
// Number of sprites
|
|
if (!fgets (text, 30, pFile))
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
NB_STEP = atoi(text);
|
|
// Active point coordinates
|
|
if (!fgets(text, 30, pFile))
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
Anim->stActiveCoordinates.xX = atof(text);
|
|
if (!fgets(text, 30, pFile))
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
Anim->stActiveCoordinates.xY = atof(text);
|
|
// First step
|
|
Anim->Step.v_pData = NULL;
|
|
Anim->Step.c_NZ = 1;
|
|
Anim->Step.cFlip = 0;
|
|
Anim->Step.cSemiTransparent = 0;
|
|
if (!fscanf (pFile, "%s", text))
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// Obtain MBM filename with path
|
|
strcpy (szFilename, szDir);
|
|
strcat (szFilename, text);
|
|
// Read MBM file
|
|
if (!TDE_lReadAndConvertMBMFile(szFilename, &(Anim->Step)))
|
|
{
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
Next = Anim;
|
|
|
|
for ( i=0; i<NB_STEP; i++ )
|
|
{
|
|
M_TdeAlloc(Next->Next, TDE_tdsAnimatedCursor *, (sizeof(TDE_tdsAnimatedCursor)));
|
|
Next = Next->Next;
|
|
if (Next == NULL)
|
|
{
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
Next->Next = NULL;
|
|
Next->Step.v_pData = NULL;
|
|
Next->Step.c_NZ = 1;
|
|
Next->Step.cFlip = 0;
|
|
Next->Step.cSemiTransparent = 0;
|
|
if (!fscanf (pFile, "%s", text))
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// Obtain MBM filename with path
|
|
strcpy (szFilename, szDir);
|
|
strcat (szFilename, text);
|
|
// Read MBM file
|
|
if (!TDE_lReadAndConvertMBMFile(szFilename, &(Next->Step)))
|
|
{
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
}
|
|
fclose (pFile);
|
|
}
|
|
else
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantOpenFileForReading,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_vDestroyAnimatedCursor
|
|
// Aim : Destroy animated cursor
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
void TDE_vDestroyAnimatedCursor(TDE_tdsAnimatedCursor *Anim)
|
|
{
|
|
TDE_p_stAnimatedCursor Last, Previous;
|
|
|
|
if ( Anim == NULL)
|
|
return;
|
|
|
|
while (Anim->Next != NULL)
|
|
{
|
|
Last = Anim->Next;
|
|
Previous = Anim;
|
|
while (Last->Next != NULL)
|
|
{
|
|
Previous = Last;
|
|
Last = Last->Next;
|
|
}
|
|
if (Last->Step.v_pData)
|
|
M_TdeFree (Last->Step.v_pData);
|
|
M_TdeFree (Last);
|
|
Previous->Next = NULL;
|
|
}
|
|
if (Anim->Step.v_pData)
|
|
M_TdeFree (Anim->Step.v_pData);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_lReadMBFFile
|
|
// Read a MBF file (font file)
|
|
// File structure :
|
|
// 224 character definitions, ASCII codes from 32 to 255
|
|
// Returns 1 if OK, 0 if failed
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
long TDE_lReadMBFFile(char *filename, TDE_tdsBitmapFont *BFont)
|
|
{
|
|
// Local variables
|
|
FILE *pFile;
|
|
unsigned short VAlign;
|
|
short i;
|
|
TDE_tdsBitmapLetter *pLetter;
|
|
TDE_tdsSprite *p_Spr;
|
|
unsigned short H, HMax = 0;
|
|
unsigned short VAMax = 0;
|
|
unsigned short HorzSep, VertSep;
|
|
|
|
// First initialize every characters to NULL
|
|
for ( i=0; i<TDE_kNBLETTERS; i++ )
|
|
{
|
|
BFont->p_stMBLetter[i] = NULL;
|
|
}
|
|
// Open the file
|
|
if ( (pFile = fopen(filename, "rb")) != NULL )
|
|
{
|
|
fseek( pFile, 0, SEEK_SET );
|
|
// Loop on each character
|
|
for ( i=0; i<TDE_kNBLETTERS; i++ )
|
|
{
|
|
// Read the vertical alignment
|
|
if (fread(&VAlign, sizeof(unsigned short), 1, pFile) != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// If the character is defined
|
|
if ( VAlign != 0x8000 )
|
|
{
|
|
// SuperObject memory allocation
|
|
M_TdeAlloc (pLetter, TDE_tdsBitmapLetter *, sizeof(TDE_tdsBitmapLetter));
|
|
if (pLetter == NULL)
|
|
return 0;
|
|
pLetter->usVAlign = VAlign;
|
|
|
|
// SuperObject initialisation
|
|
pLetter->stBLetter.sPriority = 40;
|
|
pLetter->stBLetter.p_stChild = NULL;
|
|
pLetter->stBLetter.p_stLeftBrother = NULL;
|
|
pLetter->stBLetter.p_stRightBrother = NULL;
|
|
pLetter->stBLetter.p_stFather = NULL;
|
|
pLetter->stBLetter.eType = TDE_eOT_SPRITE;
|
|
pLetter->stBLetter.stMatrix.xAngle = 0;
|
|
pLetter->stBLetter.stMatrix.stScale.xX = 0;
|
|
pLetter->stBLetter.stMatrix.stScale.xY = 0;
|
|
pLetter->stBLetter.stMatrix.stTranslateVertex.xX = 0;
|
|
pLetter->stBLetter.stMatrix.stTranslateVertex.xY = 0;
|
|
pLetter->stBLetter.p_stSOClipRect = NULL;
|
|
pLetter->stBLetter.lArea = 0xFFFFFFFF;
|
|
pLetter->stBLetter.lObject = 0xFFFFFFFF;
|
|
|
|
// Sprite allocation and initialization
|
|
TDE_vInitMemSprite( &(pLetter->stBLetter), NULL, 1);
|
|
p_Spr = pLetter->stBLetter.p_stSprite;
|
|
if (p_Spr == NULL)
|
|
{
|
|
M_TdeFree (pLetter);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// Read MBM bitmap
|
|
if (!TDE_lReadMBMData (pFile, p_Spr))
|
|
{
|
|
TDE_vReleaseMemSprite (p_Spr);
|
|
M_TdeFree (pLetter);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// HMax & VAMax
|
|
if (pLetter->usVAlign > VAMax)
|
|
VAMax = pLetter->usVAlign;
|
|
H = p_Spr->stDim.xY - pLetter->usVAlign;
|
|
if (H>HMax)
|
|
HMax = H;
|
|
// Set character
|
|
BFont->p_stMBLetter[i] = pLetter;
|
|
}
|
|
else
|
|
{
|
|
BFont->p_stMBLetter[i] = NULL;
|
|
}
|
|
}
|
|
// Read Horizontal spacing (default:3)
|
|
if (fread( &HorzSep, sizeof(short), 1, pFile) != 1)
|
|
HorzSep = 3;
|
|
// Read Vertical spacing (default:3)
|
|
if (fread( &VertSep, sizeof(short), 1, pFile) != 1)
|
|
VertSep = 3;
|
|
// Set global members
|
|
BFont->usHorzSep = HorzSep;
|
|
BFont->usVertSep = VertSep;
|
|
BFont->usVAMax = VAMax;
|
|
BFont->usHMax = HMax;
|
|
// Close the file
|
|
fclose(pFile);
|
|
}
|
|
else
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantOpenFileForReading,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
// TDE_lReadMTFFile
|
|
// Read a MTF file (open and close it).
|
|
// Returns 1 if OK, 0 if FAILED
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
long TDE_lReadMTFFile(char *filename, TDE_tdsTrueTypeFont *pFont)
|
|
{
|
|
FILE *pFile;
|
|
LOGFONT stLogFont;
|
|
COLORREF lColor;
|
|
HFONT hFont;
|
|
|
|
// Open the file
|
|
if ( (pFile = fopen(filename, "rb")) != NULL )
|
|
{
|
|
fseek (pFile, 0, SEEK_SET);
|
|
// Read the LOGFONT structure
|
|
if (fread(&stLogFont, sizeof(LOGFONT), 1, pFile) != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
// Read the COLORREF
|
|
if (fread(&lColor, sizeof(COLORREF), 1, pFile) != 1)
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantReadFile,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
fclose (pFile);
|
|
return 0;
|
|
}
|
|
fclose (pFile);
|
|
// Create the Windows font
|
|
hFont = CreateFont
|
|
(stLogFont.lfHeight, stLogFont.lfWidth, stLogFont.lfEscapement,
|
|
stLogFont.lfOrientation, stLogFont.lfWeight, stLogFont.lfItalic,
|
|
stLogFont.lfUnderline, stLogFont.lfStrikeOut, stLogFont.lfCharSet,
|
|
stLogFont.lfOutPrecision, stLogFont.lfClipPrecision, stLogFont.lfQuality,
|
|
stLogFont.lfPitchAndFamily, stLogFont.lfFaceName);
|
|
if (hFont == NULL)
|
|
return 0;
|
|
// Set the members of the structure
|
|
pFont->hFont = hFont;
|
|
pFont->lColor = lColor;
|
|
}
|
|
else
|
|
{
|
|
Erm_M_UpdateLastError (Tde,
|
|
C_ucErmDefaultChannel,
|
|
E_uwTdeWarningCantOpenFileForReading,
|
|
C_lErmNoDebugData,
|
|
C_ucErmOpenInfoWindow,
|
|
C_ucAllowStopForDebug, NULL);
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|