mirror of
https://github.com/AxioDL/PrimeWorldEditor.git
synced 2025-09-01 08:18:51 +00:00
96 lines
1.7 KiB
C++
96 lines
1.7 KiB
C++
#include "CTextOutStream.h"
|
|
#include <stdarg.h>
|
|
|
|
CTextOutStream::CTextOutStream()
|
|
: mpFStream(nullptr)
|
|
, mSize(0)
|
|
{
|
|
}
|
|
|
|
CTextOutStream::CTextOutStream(const TString& rkFile)
|
|
: mpFStream(nullptr)
|
|
{
|
|
Open(rkFile);
|
|
}
|
|
|
|
CTextOutStream::CTextOutStream(const CTextOutStream& rkSrc)
|
|
: mpFStream(nullptr)
|
|
{
|
|
Open(rkSrc.mFileName);
|
|
|
|
if (rkSrc.IsValid())
|
|
Seek(rkSrc.Tell(), SEEK_SET);
|
|
}
|
|
|
|
CTextOutStream::~CTextOutStream()
|
|
{
|
|
if (IsValid())
|
|
Close();
|
|
}
|
|
|
|
void CTextOutStream::Open(const TString& rkFile)
|
|
{
|
|
TWideString WideFile = rkFile.ToUTF16();
|
|
_wfopen_s(&mpFStream, *WideFile, L"w");
|
|
mFileName = rkFile;
|
|
mSize = 0;
|
|
}
|
|
|
|
void CTextOutStream::Close()
|
|
{
|
|
if (IsValid())
|
|
fclose(mpFStream);
|
|
mpFStream = nullptr;
|
|
mSize = 0;
|
|
}
|
|
|
|
void CTextOutStream::Print(const char *pkFormat, ... )
|
|
{
|
|
if (!IsValid()) return;
|
|
|
|
va_list Args;
|
|
va_start(Args, pkFormat);
|
|
vfprintf(mpFStream, pkFormat, Args);
|
|
}
|
|
|
|
void CTextOutStream::WriteChar(char Chr)
|
|
{
|
|
if (!IsValid()) return;
|
|
fputc(Chr, mpFStream);
|
|
if (Tell() > mSize) mSize = Tell();
|
|
}
|
|
|
|
void CTextOutStream::WriteString(const TString& rkStr)
|
|
{
|
|
if (!IsValid()) return;
|
|
fputs(*rkStr, mpFStream);
|
|
if (Tell() > mSize) mSize = Tell();
|
|
}
|
|
|
|
bool CTextOutStream::Seek(s32 Offset, u32 Origin)
|
|
{
|
|
if (!IsValid()) return false;
|
|
return (fseek(mpFStream, Offset, Origin) != 0);
|
|
}
|
|
|
|
u32 CTextOutStream::Tell() const
|
|
{
|
|
if (!IsValid()) return 0;
|
|
return ftell(mpFStream);
|
|
}
|
|
|
|
bool CTextOutStream::EoF() const
|
|
{
|
|
return (Tell() == mSize);
|
|
}
|
|
|
|
bool CTextOutStream::IsValid() const
|
|
{
|
|
return (mpFStream != 0);
|
|
}
|
|
|
|
u32 CTextOutStream::Size() const
|
|
{
|
|
return mSize;
|
|
}
|