mirror of
https://bitbucket.org/seefoe/dockerized-swg-src.git
synced 2026-07-14 00:01:36 -04:00
165 lines
3.4 KiB
C++
165 lines
3.4 KiB
C++
//===========================================================================
|
|
//
|
|
// FILENAME: OutputFileHandler.cpp
|
|
// COPYRIGHT: (C) 1999 BY Bootprint Entertainment
|
|
//
|
|
// DESCRIPTION: file handler for Output file (IFF file)
|
|
// AUTHOR: Hideki Ikeda
|
|
// DATE: 1/13/99 4:52:42 PM
|
|
//
|
|
//===========================================================================
|
|
|
|
#include "sharedFoundation/FirstSharedFoundation.h"
|
|
#include "OutputFileHandler.h"
|
|
|
|
#include "sharedFile/Iff.h"
|
|
|
|
//===========================================================================
|
|
// Constructor
|
|
|
|
OutputFileHandler::OutputFileHandler(const char *filename)
|
|
{
|
|
outputIFF = new Iff(MAXIFFDATASIZE);
|
|
outFilename = NULL;
|
|
|
|
setCurrentFilename(filename);
|
|
}
|
|
|
|
void OutputFileHandler::setCurrentFilename(const char *filename)
|
|
{
|
|
if (outFilename)
|
|
delete [] outFilename;
|
|
|
|
outFilename = new char[strlen(filename)+1];
|
|
strcpy(outFilename, filename);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Destructor
|
|
|
|
OutputFileHandler::~OutputFileHandler(void)
|
|
{
|
|
if (outputIFF && outFilename)
|
|
{
|
|
delete outputIFF;
|
|
delete [] outFilename;
|
|
}
|
|
|
|
outputIFF = NULL;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// begins a new FORM in the IFF
|
|
//
|
|
// Return Value:
|
|
// bool - true == success
|
|
//
|
|
// See Also:
|
|
// Iff::insertForm()
|
|
|
|
void OutputFileHandler::insertForm(
|
|
const char *tag
|
|
)
|
|
{
|
|
Tag formTag = convertStrToTag(tag);
|
|
outputIFF->insertForm(formTag);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// begins a new CHUNK in the IFF
|
|
//
|
|
// See Also:
|
|
// Iff::insertChunk()
|
|
|
|
void OutputFileHandler::insertChunk(
|
|
const char *tag
|
|
)
|
|
{
|
|
Tag chunkTag = convertStrToTag(tag);
|
|
outputIFF->insertChunk(chunkTag);
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// converts string (4 bytes) form into Tag format
|
|
//
|
|
// Return Value:
|
|
// Tag
|
|
//
|
|
// Remarks:
|
|
// currently, this code is machine dependant code (non portable) and it assumes little endian
|
|
//
|
|
// See Also:
|
|
// Tag
|
|
|
|
Tag OutputFileHandler::convertStrToTag(
|
|
const char *str
|
|
)
|
|
{
|
|
// prepare for hack-o-rama. It is byte order dependant, thus not portable ^_^
|
|
Tag retVal = str[3] + (str[2] * 0x100) + (str[1] * 0x10000) + (str[0] * 0x1000000);
|
|
|
|
return(retVal);
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// adds new chunk data into the current chunk it is in
|
|
//
|
|
// See Also:
|
|
// Iff::insertChunkData()
|
|
//
|
|
|
|
void OutputFileHandler::insertChunkData(
|
|
void *data,
|
|
int length
|
|
)
|
|
{
|
|
outputIFF->insertChunkData(data, length);
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// exits current FORM section we are in
|
|
//
|
|
// See Also:
|
|
// Iff::exitForm()
|
|
|
|
void OutputFileHandler::exitForm(void)
|
|
{
|
|
outputIFF->exitForm();
|
|
}
|
|
|
|
//---------------------------------------------------------------------------
|
|
// exits current CHUNK we are in
|
|
//
|
|
// See Also:
|
|
// Iff::exitChunk()
|
|
|
|
void OutputFileHandler::exitChunk(void)
|
|
{
|
|
outputIFF->exitChunk();
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
// Calls Iff:write()
|
|
//
|
|
// Return Value:
|
|
//
|
|
// True if the Iff was successfully written, otherwise false
|
|
//
|
|
// See Also:
|
|
// Iff::write()
|
|
|
|
bool OutputFileHandler::writeBuffer(void)
|
|
{
|
|
if (outputIFF && outFilename)
|
|
return outputIFF->write(outFilename, true);
|
|
|
|
return false;
|
|
}
|
|
|
|
//===========================================================================
|
|
|