reman3/Rayman_X/cpa/tempgrp/GAM/Locale/fonfont.c

480 lines
17 KiB
C

/*=========================================================================
* mnufont.c : Functions for the menus management
*
* Version 1.0
* Creation date 27/05/97
* Revision date
*
* That file needs to be compatible for all platforms.
*
* (c) Ubi R&D 1997
*=======================================================================*/
/*
*=======================================================================
Modifications:
*=======================================================================*/
/*
#include "fonhdls.h"
*/
#include "ACP_Base.h"
#include "ToolsCPA.h"
/*
#include "DPT.h"
#include "GEO.h"
#include "GLI.h"
*/
#include "SCR.h"
#include "RND.h"
/*
#include "POS.h"
#include "SPO.h"
#include "LST.h"
#include "SNA.h"
*/
#define FON_MainFile
#include "fonmem.h"
#include "fonerm.h"
#include "fonpub.h"
#include "fonfont.h"
#include "FON_Eff.h"
#include "fontext.h"
/*#if defined (U64)
void qsort(void *,size_t,size_t,int (*)(const void *,const void *));
#endif*/
/*extern void SNA_fn_vWritePointerInGlobalPointersFile(unsigned long ulPointerAdr);*/
/*extern unsigned long SNA_fn_vReadPointerFromGlobalPointersFile();*/
/*-----------------------------------------------------------------------------
* Description : Create a font
*-----------------------------------------------------------------------------
* Input : Name of the font
* Output : Handle of the font
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*FON_tdxHandleOfFont FON_fn_xCreateFont(char *szFontName,unsigned long ulMaxNumberOfCharacters)
{
FON_tdxHandleOfFont hFont;
// Allocate the memory
hFont=FON_fn_p_vAllocInBloc(E_ucFONMemoryBlock,sizeof(FON_tdstFont));
#if !defined(U64)
hFont->p_szFontName = FON_fn_p_vAllocInBloc(E_ucFONMemoryBlock,(strlen(szFontName)+1)*sizeof(char));
#endif / U64
strcpy(hFont->p_szFontName,szFontName);
hFont->dLetter = FON_fn_p_vAllocInBloc(E_ucFONMemoryBlock,ulMaxNumberOfCharacters*sizeof(FON_tdxHandleOfVisual));
hFont->ulMaxNumberOfCharacters = ulMaxNumberOfCharacters;
#if !defined(U64)
// SCR_fnp_st_Link_SetValue(&FON_g_stGeneral.stFontLinkTable,szFontName,(unsigned long)hFont);
LST2_M_StaticInitElement(hFont);
LST2_M_StaticAddTail(&FON_g_stGeneral.hFontList,hFont);
#endif // U64
return (hFont);
}*/
/*-----------------------------------------------------------------------------
* Description : Release a font
*-----------------------------------------------------------------------------
* Input : Handle of a font
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*void FON_fn_vReleaseFont(FON_tdxHandleOfFont hFont)
{
FON_fn_vFreeInBloc(E_ucFONMemoryBlock,hFont->dLetter);
#if !defined(U64)
FON_fn_vFreeInBloc(E_ucFONMemoryBlock,hFont->p_szFontName);
#endif // U64
FON_fn_vFreeInBloc(E_ucFONMemoryBlock,hFont);
}*/
/*-----------------------------------------------------------------------------
* Description : Remove a font from the global array
*-----------------------------------------------------------------------------
* Input : Name of the font
* Output : None
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*void FON_fn_vRemoveFont(char *szFontName)
{
FON_fn_vReleaseFont(FON_fn_xGetFont(szFontName));
}*/
/*-----------------------------------------------------------------------------
* Description : Return a font from its name
*-----------------------------------------------------------------------------
* Input : Name of the font
* Output : Handle of the font
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*FON_tdxHandleOfFont FON_fn_xGetFont(char *szFontName)
{
FON_tdxHandleOfFont hReturn = NULL;
#if !defined(U64)
long i;
FON_tdxHandleOfFont hFontElement;
/ *
SCR_tdst_Link_Value *p_xIndex;
p_xIndex = SCR_fnp_st_Link_SearchKey(&FON_g_stGeneral.stFontLinkTable,szFontName);
if (p_xIndex!=NULL&&SCR_M_e_Link_GetState(p_xIndex)==SCR_ELS_Link_Initialized)
hReturn = (FON_tdxHandleOfFont)SCR_M_ul_Link_GetValue(p_xIndex);
else
* /
LST2_M_StaticForEachElementOf(&FON_g_stGeneral.hFontList,hFontElement,i)
{
if (!stricmp(hFontElement->p_szFontName,szFontName))
hReturn = hFontElement;
}
if (hReturn==NULL)
M_FONWarningError(E_uwFONUnknownFont);
#endif // U64
return(hReturn);
}*/
/*-----------------------------------------------------------------------------
* Description : Return the name of a font
*-----------------------------------------------------------------------------
* Input : Font
* Output : Name of the font
*-----------------------------------------------------------------------------
* Creation date : 27/10/97 Author : François
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*char *FON_fn_szGetFontName(FON_tdxHandleOfFont hFont)
{
char *p_szFontName = NULL;
#if !defined(U64)
long i;
FON_tdxHandleOfFont hFontElement;
LST2_M_StaticForEachElementOf(&FON_g_stGeneral.hFontList,hFontElement,i)
{
if (hFontElement==hFont)
p_szFontName = hFontElement->p_szFontName;
}
/ *
SCR_tdst_Link_Value *p_xIndex;
p_xIndex = SCR_fnp_st_Link_SearchValue(&FON_g_stGeneral.stFontLinkTable,(unsigned long)hFont);
if (p_xIndex!=NULL&&SCR_M_e_Link_GetState(p_xIndex)==SCR_ELS_Link_Initialized)
p_szFontName = SCR_M_p_sz_Link_GetKey(p_xIndex);
else
* /
if (p_szFontName==NULL)
M_FONWarningError(E_uwFONUnknownFont);
#endif // U64
return(p_szFontName);
}*/
/*-----------------------------------------------------------------------------
* Description : Return TRUE if a font exists
*-----------------------------------------------------------------------------
* Input : Name of the font
* Output : TRUE/FALSE
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
/*unsigned char FON_fn_bIsFontExists(char *szFontName)
{
unsigned char ucReturn = FALSE;
#if !defined(U64)
long i;
FON_tdxHandleOfFont hFontElement;
LST2_M_StaticForEachElementOf(&FON_g_stGeneral.hFontList,hFontElement,i)
{
if (!stricmp(hFontElement->p_szFontName,szFontName))
ucReturn = TRUE;
}
/ *
SCR_tdst_Link_Value *p_xIndex;
p_xIndex = SCR_fnp_st_Link_SearchKey(&FON_g_stGeneral.stFontLinkTable,szFontName);
if (p_xIndex!=NULL&&SCR_M_e_Link_GetState(p_xIndex)==SCR_ELS_Link_Initialized)
{
ucReturn = TRUE;
}
* /
#endif // U64
return(ucReturn);
}*/
/*-----------------------------------------------------------------------------
* Description : General inits for the fonts
*-----------------------------------------------------------------------------
* Input : Nothing
* Output : Nothing
*-----------------------------------------------------------------------------
* Creation date : 2./05/96 Author : Michaël
*-----------------------------------------------------------------------------
* Modification date : Modification Author :
* Modifications :
*---------------------------------------------------------------------------*/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void FON_fn_vInitFonts(void)
{
/*FON_g_stGeneral.hMatrix = GEO_fn_hCreateMatrix();
POS_fn_vSetIdentityMatrix(FON_g_stGeneral.hMatrix);*/
#if !defined(U64)
SCR_fn_v_Link_InitTable(&FON_g_stTextLinkTable);
/* SCR_fn_v_Link_InitTable(&FON_g_stGeneral.stFontLinkTable);*/
/*LST2_M_StaticInitAnchor(&FON_g_stGeneral.hFontList);*/
#endif /* U64 */
FON_g_stGeneral.uwNumberOfLanguages = 0; /* number of defined languages */
FON_g_stGeneral.d_sLanguageArray = NULL; /* array of defined languages */
FON_g_stGeneral.p_stCommonLanguage = NULL ; /* common language strings */
FON_g_stGeneral.ulElapsedTime = 0;
FON_g_stGeneral.hRandomHandle = RND_fn_hReserveANewHandleIndex();
/*memset(&FON_g_stEffectByDisplay,0,sizeof(FON_stEffectByDisplay));*/
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
/*************************************************************************/
/*int FON_fn_iQSortCmp(const void *hElement1,const void *hElement2)
{
unsigned short uwChar1,uwChar2;
uwChar1 = (*(struct FON_tdstVisualFont_ **)hElement1)->uwCharacter;
uwChar2 = (*(struct FON_tdstVisualFont_ **)hElement2)->uwCharacter;
return(uwChar1-uwChar2);
}*/
/*************************************************************************/
/*void FON_fn_vTreatLoadedFont(FON_tdxHandleOfFont hFont)
{
unsigned long i;
// *** Leave all non used characters *** - Oliv' - Portage v15 - 1 warning removed here
for (i=hFont->ulMaxNumberOfCharacters-1;i>0&&hFont->dLetter[i]==NULL;i--);
if (hFont->ulMaxNumberOfCharacters!=i+1)
{
M_FONInformationErrorWithString(E_uwFONTooManyCharacterInFont,FON_fn_szGetFontName(hFont));
hFont->ulMaxNumberOfCharacters = i+1;
}
qsort((void*)hFont->dLetter,hFont->ulMaxNumberOfCharacters,sizeof(FON_tdxHandleOfVisual),FON_fn_iQSortCmp);
}*/
/*************************************************************************/
#ifndef _FIRE_DEADCODE_U64_ /* Added by RUC */
void FON_fn_vDesInitFonts ( void )
{
FON_fn_vDesinitFONMemory ( ) ;
}
#endif /* _FIRE_DEADCODE_U64_ */ /* Added by RUC */
#ifdef ACTIVE_EDITOR
void FON_fn_vReInitFonts ( void )
{
FON_fn_vInitFonts ( ) ;
/* also clear the GAM list of available languages */
g_stEngineStructure . ucNbLanguages = 0 ;
if ( g_stEngineStructure . p_stLanguageTable )
{
/* this macro clears the pointer, so no need to do it ourselves */
M_GameFreeInHLM ( g_stEngineStructure . p_stLanguageTable ) ;
}
}
#endif /* ACTIVE_EDITOR */
/*************************************************************************/
/*void FON_fn_vAddCharacterInFont(FON_tdxHandleOfFont hFont,unsigned long ulCharacterNumber,unsigned short uwCharacter,struct FON_st3DFont_ *h3DObject,MTH_tdxReal xBaseY)
{
hFont->dLetter[ulCharacterNumber]=FON_fn_p_vAllocInBloc(E_ucFONMemoryBlock,sizeof(struct FON_tdstVisualFont_));
hFont->dLetter[ulCharacterNumber]->uwCharacter = uwCharacter;
hFont->dLetter[ulCharacterNumber]->xBaseY = xBaseY;
hFont->dLetter[ulCharacterNumber]->h3DObject = h3DObject;
}*/
/*************************************************************************/
/*struct FON_st3DFont_ *FON_fn_p_stGet3dObjectOfCharacter(FON_tdxHandleOfFont hFont,unsigned short uwCharacher)
{
struct FON_st3DFont_ *h3DObject = NULL;
unsigned long i;
for (i=0;i<hFont->ulMaxNumberOfCharacters&&hFont->dLetter[i]->uwCharacter!=uwCharacher;i++)
{
if (h3DObject==NULL&&hFont->dLetter[i]->uwCharacter==' ')
h3DObject = hFont->dLetter[i]->h3DObject;
}
if (i<hFont->ulMaxNumberOfCharacters&&hFont->dLetter[i]->uwCharacter==uwCharacher)
h3DObject = hFont->dLetter[i]->h3DObject;
return (h3DObject);
}*/
/*************************************************************************/
/*MTH_tdxReal FON_fn_xGetBaseYOfCharacter(FON_tdxHandleOfFont hFont,unsigned short uwCharacher)
{
MTH_tdxReal xBaseY=0;
unsigned long i;
for (i=0;i<hFont->ulMaxNumberOfCharacters&&hFont->dLetter[i]->uwCharacter!=uwCharacher;i++)
{
if (xBaseY==0&&hFont->dLetter[i]->uwCharacter==' ')
xBaseY = hFont->dLetter[i]->xBaseY;
}
if (i<hFont->ulMaxNumberOfCharacters&&hFont->dLetter[i]->uwCharacter==uwCharacher)
xBaseY = hFont->dLetter[i]->xBaseY;
return (xBaseY);
}*/
/*************************************************************************/
/*unsigned short FON_fn_uwGetDisplayedCharacter(FON_tdxHandleOfFont hFont,char *szText,unsigned long lIndex)
{
unsigned short uwReturn = 0;
if (hFont->eTypeOfFont&FON_eGeneralStandard)
uwReturn = (unsigned char)szText[lIndex];
else if (hFont->eTypeOfFont&FON_eGeneralUnicode)
{
if ((unsigned char)szText[lIndex]<128)
uwReturn = (unsigned char)szText[lIndex];
else
uwReturn = (unsigned short)((((unsigned char)szText[lIndex])<<8)+(unsigned char)szText[lIndex+1]);
}
return(uwReturn);
}*/
/*************************************************************************/
/*unsigned long FON_fn_vGetNextCharacter(FON_tdxHandleOfFont hFont,char *szText,unsigned long lIndex)
{
unsigned long ulReturn = 0;
if (hFont->eTypeOfFont&FON_eGeneralStandard)
ulReturn = lIndex+1;
else if (hFont->eTypeOfFont&FON_eGeneralUnicode)
{
if ((unsigned char)szText[lIndex]<128)
ulReturn = lIndex+1;
else
ulReturn = lIndex+2;
}
return(ulReturn);
}*/
/*************************************************************************/
/*void FON_fn_vRemoveAllFonts()
{
}*/
/*************************************************************************/
/*GLI_tdstLight *FON_fn_p_stCreateLight(MTH_tdxReal xR,MTH_tdxReal xG,MTH_tdxReal xB,MTH_tdxReal xA)
{
GLI_tdstLight *p_stLight;
POS_tdstCompletePosition stLightMatrix;
GLI_tdstColor stColor;
MTH3D_tdstVector stI;
MTH3D_tdstVector stJ;
MTH3D_tdstVector stK;
GLI_xCreateLight (&p_stLight,GLI_C_lParallelLight);
stColor.xR = xR;
stColor.xG = xG;
stColor.xB = xB;
stColor.xA = xA;
GLI_xSetLightColor (p_stLight,&stColor );
GLI_xGetLightMatrix(p_stLight,&stLightMatrix);
POS_fn_vGetRotationMatrix(&stLightMatrix, &stI, &stJ, &stK);
MTH3D_M_vSetVectorElements(&stI,MTH_C_MinusONE,MTH_C_ZERO,MTH_C_ZERO);
MTH3D_M_vSetVectorElements(&stJ,MTH_C_ZERO,MTH_C_ZERO,MTH_C_ONE);
MTH3D_M_vSetVectorElements(&stK,MTH_C_ZERO,MTH_C_ZERO,MTH_C_ONE);
POS_fn_vSetRotationMatrix(&stLightMatrix, &stI, &stJ, &stK);
POS_fn_vComputeTransformMatrix (&stLightMatrix);
GLI_xSetLightMatrix(p_stLight,&stLightMatrix);
return(p_stLight);
}*/
/*************************************************************************/
/* MR0410*/
/*void fn_vSaveFONGeneral()
{
unsigned long i;
#if !defined(U64)
//SNA_fn_vWriteStructureInGlobalPointersFile((unsigned long *)&FON_g_stGeneral,sizeof(FON_tdstGeneral));
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) FON_g_stGeneral.d_stFontAndEffectArray);
for (i=0;i<FON_g_stGeneral.ulNumberOfTexts;i++)
{
SNA_fn_vWritePointerInGlobalPointersFile((unsigned long) FON_g_stGeneral.d_stFontAndEffectArray[i]);
}
// *** DFM 13/01/98 *** - Oliv' - Portage v15 - 1 warning removed here
SNA_fn_vWriteStructureInGlobalPointersFile((unsigned long *)&FON_g_stGeneral.hFontList,sizeof(LST2_M_StaticAnchorDeclaration(FON_tdxHandleOfFont)));
#endif // U64
}*/
/*void fn_vReadFONGeneral()
{
unsigned long i;
FON_tdxHandleOfFont hLastElementFont,hCurrentFont,hNextFont;
#if !defined(U64)
//SNA_fn_vReadStructureFromGlobalPointersFile((unsigned long *)&FON_g_stGeneral,sizeof(FON_tdstGeneral));
FON_g_stGeneral.d_stFontAndEffectArray=(struct FON_tdstFontAndEffect_ **)SNA_fn_vReadPointerFromGlobalPointersFile();
for (i=0;i<FON_g_stGeneral.ulNumberOfTexts;i++)
{
FON_g_stGeneral.d_stFontAndEffectArray[i]=(struct FON_tdstFontAndEffect_ *)SNA_fn_vReadPointerFromGlobalPointersFile();
}
// *** DFM 13/01/98 *** - Oliv' - Portage v15 - 1 warning removed here
SNA_fn_vReadStructureFromGlobalPointersFile((unsigned long *)&FON_g_stGeneral.hFontList,sizeof(LST2_M_StaticAnchorDeclaration(FON_tdxHandleOfFont)));
hLastElementFont=LST2_M_StaticGetLastElement(&FON_g_stGeneral.hFontList);
SNA_M_vValidateStaticLst(&FON_g_stGeneral.hFontList,hLastElementFont,hCurrentFont,hNextFont);
#endif // U64
}*/