reman3/Rayman_X/cpa/Appli/Max23Dos/src/SaveModifLst.c

307 lines
7.9 KiB
C

/*=========================================================================
*
* SaveMdf.c - Saving functions for ModifLst.txt file
*
* Version 1.0
* Revision date
*
*=======================================================================*/
#include <windows.h>
#include <stdio.h>
#include "SaveModifLst.h"
#include "main.h"
#include "print.h"
#include "SctSave.h"
//--- Defines ---------------------------------------------------------------
// maximum number of directory texture in one session
#define MLT_C_MaxDirectoryTextures 10
// file for unknown texture
#define M_FichierTexture "textures.log"
// modification file for the VssDataManager
#define M_FichierSCR_Modif "ModifLst.txt"
//--- Global defines --------------------------------------------------------
BOOL g_bPrintOutOK = TRUE;
//--- Global statics --------------------------------------------------------
BOOL gs_bTextureOK = FALSE;
BOOL gs_bFirstAccess = TRUE;
FILE *gs_stTextureFile;
long gs_lOldPosInModifFile;
xString gs_a_sDirectoryTextures[MLT_C_MaxDirectoryTextures];
long gs_lNbDirectoryTextures = 0;
//--- Global externs --------------------------------------------------------
//--------------------------------------------------------------------
/****************************************************************************
* Description: Open the Texture.log file
*
* Parameters: sDir : texture directory
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vBeginSaveTextureFile (char *sDir)
{
xString sFileName;
CreateDirectory(sDir, NULL);
sprintf(sFileName,"%s\\%s", sDir, M_FichierTexture);
gs_stTextureFile = fopen(sFileName, "at");
if(gs_stTextureFile == NULL)
{
MLT_vOutput( C_ComRes_cErrorLine, "\nError : Can't open file %s", sFileName);
gs_bTextureOK = FALSE;
}
else
gs_bTextureOK = TRUE;
}
/****************************************************************************
* Description: if necessary, create file and directory
*
* Parameters: sDir : texture directory
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
BOOL MLT_bFirstAccesInFile (char *sDir)
{
long i=0;
while( (i<gs_lNbDirectoryTextures) && stricmp(gs_a_sDirectoryTextures[i], sDir) ) i++;
if(i == gs_lNbDirectoryTextures)
{
xString sFileName;
// add a new file
sprintf(gs_a_sDirectoryTextures[i], "%s", sDir);
gs_lNbDirectoryTextures++;
// delete file
CreateDirectory(sDir, NULL);
sprintf(sFileName,"%s\\%s", sDir, M_FichierTexture);
gs_stTextureFile = fopen(sFileName, "w");
if(gs_stTextureFile == NULL)
{
MLT_vOutput( C_ComRes_cErrorLine, "\nError : Can't open file %s", sFileName);
}
else
{
fclose(gs_stTextureFile);
}
return TRUE;
}
return FALSE;
}
/****************************************************************************
* Description: Write a line in the Texture.log file
*
* Parameters: sDir : texture directory
* sMessage : line to write
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vWriteInTextureFile(char *sDir, char *sMessage)
{
if (g_bPrintOutOK)
{
if (MLT_bFirstAccesInFile(sDir))
gs_bFirstAccess = FALSE;
MLT_vBeginSaveTextureFile(sDir);
if (gs_bTextureOK)
fprintf(gs_stTextureFile, "%s\n", sMessage);
MLT_vEndSaveTextureFile();
}
}
/****************************************************************************
* Description: Close the Texture.log file
*
* Parameters:
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vEndSaveTextureFile()
{
if (gs_bTextureOK)
fclose(gs_stTextureFile);
}
/****************************************************************************
* Description: save current position in modif file
*
* Parameters:
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vSavePosInModifFile()
{
FILE *file;
SetCurrentDirectory(g_sGameData);
file = fopen(M_FichierSCR_Modif, "rt");
if(file != NULL)
{
fseek(file, 0, SEEK_END);
gs_lOldPosInModifFile = ftell(file);
fclose(file);
}
else
gs_lOldPosInModifFile = 0;
}
/****************************************************************************
* Description: add a line in the modif file
*
* Parameters: sLine : line to add
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vAddEntryToModifFile (char *sLine)
{
FILE *file;
SetCurrentDirectory(g_sGameData);
file = fopen(M_TempSCR_Modif, "at");
if(file != NULL)
{
fputs(sLine, file);
fclose(file);
}
}
/****************************************************************************
* Description: update all paths in modif file
*
* Parameters: _p_cPath : required path
*---------------------------------------------------------------------------
* Revision date: Author:
*****************************************************************************/
void MLT_vUpdatePathInModifFile (char *_p_cPath)
{
xString sRead, sRead1, sWrite, sGame, sIdent;
FILE *fileR, *fileW, *fileA;
char *p_cPath, *p_cChar, *p_Char1;
long i;
SetCurrentDirectory(g_sGameData);
p_cPath = _p_cPath + strlen(g_sInitialDir) + 1;
p_cChar = strrchr( g_sGameData, '\\' );
strcpy(sGame, p_cChar+1);
CopyFile(M_FichierSCR_Modif, "temp.scr", FALSE);
if (g_bModifLst)
{
MLT_vOutput( C_ComRes_cNormalLine, "\n\tUpdate ModifLst...");
fileR = fopen(M_TempSCR_Modif, "rt");
fileW = fopen(M_FichierSCR_Modif, "at");
if (fileR==NULL) return;
if (fileW==NULL) return;
while(fgets(sRead, 256, fileR) != NULL)
{
p_cChar=strstr(_p_cPath, sGame);
sprintf(sWrite, "(%c)%s%s", *(sRead+1), p_cChar, sRead+3);
fileA = fopen("temp.scr", "rt");
if (fileA)
{ fgets(sRead1, 256, fileA);
if (!strcmp(sRead1, sWrite) && (*(sWrite+1) == 'A'))
*(sWrite+1) = 'R';
else
while(ftell(fileA) < gs_lOldPosInModifFile)
{ fgets(sRead1, 256, fileA);
if (!strcmp(sRead1, sWrite) && (*(sWrite+1) == 'A'))
{ *(sWrite+1) = 'R';
break;
}
}
fclose(fileA);
}
fputs(sWrite, fileW);
}
for (i=0; i<g_lNbOldSector; i++)
{ strcpy(sIdent, p_cChar);
sIdent[strlen(sIdent)-1]='\0';
p_Char1=strrchr(sIdent, '\\');
sprintf(sWrite, "(D)%s%s.sct^Sector:%s\n", p_cChar, p_Char1+1, g_a_sOldSector[i]);
fputs(sWrite, fileW);
}
for (i=0; i<g_lNbOldSector; i++)
strcpy(g_a_sOldSector[g_lNbOldSector], "") ;
g_lNbOldSector = 0;
if (g_bExistMdt)
{ strcpy(sIdent, p_cChar);
sIdent[strlen(sIdent)-1]='\0';
p_Char1=strrchr(sIdent, '\\');
sprintf(sWrite, "(D)%s%s.mdt\n", p_cChar, p_Char1+1);
fputs(sWrite, fileW);
}
if (g_bExistMdf)
{ strcpy(sIdent, p_cChar);
sIdent[strlen(sIdent)-1]='\0';
p_Char1=strrchr(sIdent, '\\');
sprintf(sWrite, "(D)%s%s.mdf\n", p_cChar, p_Char1+1);
fputs(sWrite, fileW);
}
gs_lOldPosInModifFile = ftell(fileW);
fclose(fileR);
fclose(fileW);
}
remove("temp.scr");
remove(M_TempSCR_Modif);
}