10#include "binaryFile.hpp"
12#include "FgSerial.hpp"
18FutBinaryFileC::FutBinaryFileC(
22 FGASSERT(fileId.size() == 8);
29FutBinaryFileC::changeFileId(
string const &newFileId)
31 FGASSERT(newFileId.size() == 8);
32 FGASSERT(fptr == NULL);
41FutBinaryFileC::openForRead(
42 String8
const & a_fname)
46 fptr = openFile(a_fname,
false);
48 fgThrow(
"Unable to read-open binary file",a_fname);
50 vector<char> buff(fileId.size()+1);
52 if (!readHeader(&buff[0],
static_cast<uint
>(fileId.size()),1))
55 vector<char> buff2 = buff;
58 if (fileId != &buff2[0])
61 fgThrow(
"Incorrect file type",a_fname);
64 if (buff[5] >
'0' && fileId[5] != buff[5])
67 fgThrow(
"Incorrect file type",a_fname);
77FutBinaryFileC::openForOverwrite(
78 String8
const & a_fname)
82 fptr = openFile(a_fname,
true);
84 fgThrow(
"Unable to write-open file",a_fname);
87 if (!writeHeader(fileId.c_str(),
static_cast<uint
>(fileId.size()),1))
90 fgThrow(
"Unable to write to file",a_fname);
98FutBinaryFileC::writeHeader(
const void *data, uint size, uint num)
100 if (fptr == NULL)
return false;
104 if (fwrite(data,size,num,fptr) != num)
107 fgThrow(
"Unable to write header data to file");
114FutBinaryFileC::readHeader(
void *data, uint size, uint num)
116 if (fptr == NULL)
return false;
117 if (fread(data,size,num,fptr) != num)
120 fgThrow(
"Unable to read header data from file");
128FutBinaryFileC::write(
133 return writeHeader(data,size,num);
145 return readHeader(data,size,num);
153FutBinaryFileC::seek(
long offsetFromBeginning)
155 if (fptr == NULL)
return false;
156 if (fseek(fptr,offsetFromBeginning,SEEK_SET))
159 fgThrow(
"Unable to seek-read from file");
165FutBinaryFileC::close()
177 FGASSERT(fptr != NULL);
178 long pos = ftell(fptr);
179 bool ret = (getc(fptr) == EOF) ?
true : false;