5fcc021293
git-svn-id: https://clonekeenplus.svn.sourceforge.net/svnroot/clonekeenplus/cgenius/trunk@87 4df4b0f3-56ce-47cb-b001-ed939b7d65a6
89 lines
1.7 KiB
C++
89 lines
1.7 KiB
C++
/*
|
|
* story.c
|
|
*
|
|
* Created on: 07.02.2009
|
|
* Author: gerstrong
|
|
*
|
|
* This file handles the database that has be loaded in order to get show
|
|
* the story. It is only a textfile.. though
|
|
*/
|
|
|
|
#include "../keen.h"
|
|
#include "../include/fileio.h"
|
|
#include "../fileio/CExeFile.h"
|
|
#include "../CLogFile.h"
|
|
#include "../StringUtils.h"
|
|
|
|
int readStoryText(char **ptext, int episode, const std::string& path)
|
|
{
|
|
std::string buf2 = formatPathString(path);
|
|
std::string buf = buf2 + "storytxt.ck" + itoa(episode);
|
|
|
|
FILE *fp;
|
|
if((fp=fopen(buf.c_str(),"rt"))==NULL)
|
|
{
|
|
buf = buf2 + "keen" + itoa(episode) + ".exe";
|
|
|
|
if((fp=fopen(buf.c_str(),"rb"))!=NULL)
|
|
{
|
|
unsigned char *filebuf;
|
|
int startflag=0, endflag=0; // where story begins and ends!
|
|
|
|
CExeFile *ExeFile = new CExeFile(episode, buf2);
|
|
ExeFile->readData();
|
|
filebuf = ExeFile->getData();
|
|
|
|
if(episode == 2)
|
|
{
|
|
startflag = 92864;
|
|
endflag = 96088;
|
|
}
|
|
if(episode == 3)
|
|
{
|
|
startflag = 101328;
|
|
endflag = 104435;
|
|
}
|
|
|
|
if(startflag == 0 || endflag == 0)
|
|
{
|
|
g_pLogFile->textOut(PURPLE,"Sorry, but your exe-file is not compatible for reading the story.<br>");
|
|
}
|
|
else
|
|
{
|
|
*ptext = (char*) malloc((endflag-startflag+10)*sizeof(char));
|
|
strncpy((*ptext),(char*)filebuf+startflag,(endflag-startflag)*sizeof(char));
|
|
}
|
|
delete ExeFile;
|
|
|
|
return (endflag-startflag);
|
|
}
|
|
else
|
|
return -1;
|
|
}
|
|
else
|
|
{
|
|
int pos;
|
|
int filesize;
|
|
|
|
pos = ftell (fp);
|
|
fseek (fp, 0, SEEK_END);
|
|
filesize = ftell (fp);
|
|
fseek (fp, pos, SEEK_SET);
|
|
|
|
pos = 0;
|
|
|
|
*ptext = (char*) malloc((filesize+10)*sizeof(char));
|
|
|
|
while(!feof(fp))
|
|
{
|
|
(*ptext)[pos] = fgetc(fp);
|
|
pos++;
|
|
}
|
|
|
|
fclose(fp);
|
|
|
|
return filesize;
|
|
}
|
|
}
|
|
|