/*==LICENSE==* CyanWorlds.com Engine - MMOG client, server and tools Copyright (C) 2011 Cyan Worlds, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . You can contact Cyan Worlds, Inc. by email legal@cyan.com or by snail mail at: Cyan Worlds, Inc. 14617 N Newport Hwy Mead, WA 99021 *==LICENSE==*/ #include "hsMMIOStream.h" ////////////////////////////////////////////////////////////////////////////////////// #if HS_BUILD_FOR_WIN32 #include "hsExceptions.h" UInt32 hsMMIOStream::Read(UInt32 bytes, void* buffer) { fBytesRead += bytes; fPosition += bytes; int numItems = ::mmioRead(fHmfr, (char*)buffer, bytes); if ((unsigned)numItems < bytes) { if (numItems>=0 && ::mmioSeek(fHmfr,0,SEEK_CUR)==::mmioSeek(fHmfr,0,SEEK_END)) { // EOF ocurred char str[128]; sprintf(str, "Hit EOF on MMIO Read, only read %d out of requested %d bytes\n", numItems, bytes); hsDebugMessage(str, 0); } else { hsDebugMessage("Error on MMIO Read",0); } } return numItems; } hsBool hsMMIOStream::AtEnd() { return (::mmioSeek(fHmfr,0,SEEK_CUR)==::mmioSeek(fHmfr,0,SEEK_END)); } UInt32 hsMMIOStream::Write(UInt32 bytes, const void* buffer) { fPosition += bytes; return ::mmioWrite(fHmfr,(const char*)buffer,bytes); } void hsMMIOStream::Skip(UInt32 delta) { fBytesRead += delta; fPosition += delta; (void)::mmioSeek(fHmfr, delta, SEEK_CUR); } void hsMMIOStream::Rewind() { fBytesRead = 0; fPosition = 0; (void)::mmioSeek(fHmfr, 0, SEEK_SET); } void hsMMIOStream::FastFwd() { fBytesRead = fPosition = ::mmioSeek(fHmfr, 0, SEEK_END); } void hsMMIOStream::Truncate() { hsThrow("Truncate unimplemented by subclass of stream"); } #endif