diff --git a/LEGO1/omni/include/mxio.h b/LEGO1/omni/include/mxio.h index 86ef5581..30032096 100644 --- a/LEGO1/omni/include/mxio.h +++ b/LEGO1/omni/include/mxio.h @@ -29,6 +29,7 @@ class MXIOINFO { // NOTE: In MXIOINFO, the `hmmio` member of MMIOINFO is used like // an HFILE (int) instead of an HMMIO (WORD). MMIOINFO m_info; + HFILE m_file; }; #endif // MXIO_H diff --git a/LEGO1/omni/src/stream/mxio.cpp b/LEGO1/omni/src/stream/mxio.cpp index 518b60f9..d7caeb8a 100644 --- a/LEGO1/omni/src/stream/mxio.cpp +++ b/LEGO1/omni/src/stream/mxio.cpp @@ -33,9 +33,10 @@ MxU16 MXIOINFO::Open(const char* p_filename, MxULong p_flags) m_info.lDiskOffset = m_info.lBufOffset = 0; // DECOMP: Cast of p_flags to u16 forces the `movzx` instruction - m_info.hmmio = (HMMIO) OpenFile(p_filename, &unused, (MxU16) p_flags); + // original: m_info.hmmio = OpenFile(p_filename, &unused, (MxU16) p_flags); + m_file = OpenFile(p_filename, &unused, (MxU16) p_flags); - if ((HFILE) m_info.hmmio != HFILE_ERROR) { + if (m_file != HFILE_ERROR) { m_info.dwFlags = p_flags; if (m_info.dwFlags & MMIO_ALLOCBUF) { @@ -75,10 +76,10 @@ MxU16 MXIOINFO::Close(MxLong p_unused) { MxU16 result = 0; - if (m_info.hmmio) { + if (m_file) { result = Flush(0); - _lclose((HFILE) m_info.hmmio); - m_info.hmmio = 0; + _lclose(m_file); + m_file = 0; if (m_info.dwFlags & MMIO_ALLOCBUF) { delete[] m_info.pchBuffer; @@ -127,12 +128,12 @@ MxLong MXIOINFO::Read(void* p_buf, MxLong p_len) } } } - else if (m_info.hmmio && p_len > 0) { - bytesRead = _hread((HFILE) m_info.hmmio, p_buf, p_len); + else if (m_file && p_len > 0) { + bytesRead = _hread(m_file, p_buf, p_len); if (bytesRead == -1) { bytesRead = 0; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesRead; @@ -180,12 +181,12 @@ MxLong MXIOINFO::Write(void* p_buf, MxLong p_len) } } } - else if (m_info.hmmio && p_len > 0) { - bytesWritten = _hwrite((HFILE) m_info.hmmio, (const char*) p_buf, p_len); + else if (m_file && p_len > 0) { + bytesWritten = _hwrite(m_file, (const char*) p_buf, p_len); if (bytesWritten == -1) { bytesWritten = 0; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesWritten; @@ -234,11 +235,11 @@ MxLong MXIOINFO::Seek(MxLong p_offset, MxLong p_origin) } else { // we have to read another chunk from disk. - if (m_info.hmmio && !Flush(0)) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, p_offset, p_origin); + if (m_file && !Flush(0)) { + m_info.lDiskOffset = _llseek(m_file, p_offset, p_origin); if (m_info.lDiskOffset == -1) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { @@ -248,10 +249,10 @@ MxLong MXIOINFO::Seek(MxLong p_offset, MxLong p_origin) // do we need to seek again? // (i.e. are we already aligned to buffer size?) if (p_offset != m_info.lBufOffset) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, m_info.lBufOffset, SEEK_SET); + m_info.lDiskOffset = _llseek(m_file, m_info.lBufOffset, SEEK_SET); if (m_info.lDiskOffset == -1) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } } @@ -259,10 +260,10 @@ MxLong MXIOINFO::Seek(MxLong p_offset, MxLong p_origin) // is the file open for writing only? if ((m_info.dwFlags & MMIO_RWMODE) == 0 || (m_info.dwFlags & MMIO_RWMODE) == MMIO_READWRITE) { // We can read from the file. Fill the buffer. - bytesRead = _hread((HFILE) m_info.hmmio, m_info.pchBuffer, m_info.cchBuffer); + bytesRead = _hread(m_file, m_info.pchBuffer, m_info.cchBuffer); if (bytesRead == -1) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesRead; @@ -283,19 +284,19 @@ MxLong MXIOINFO::Seek(MxLong p_offset, MxLong p_origin) } } } - else if (m_info.hmmio) { + else if (m_file) { // No buffer so just seek the file directly (if we have a valid handle) // i.e. if we just want to get the current file position if (p_origin == SEEK_CUR && p_offset == 0) { return m_info.lDiskOffset; } - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, p_offset, p_origin); + m_info.lDiskOffset = _llseek(m_file, p_offset, p_origin); result = m_info.lDiskOffset; if (result == -1) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } } @@ -334,25 +335,25 @@ MxU16 MXIOINFO::Flush(MxU16 p_unused) // if we have allocated an IO buffer if (m_info.pchBuffer) { // if we have a file open for writing - if (m_info.hmmio && (m_info.dwFlags & MMIO_RWMODE)) { + if (m_file && (m_info.dwFlags & MMIO_RWMODE)) { // DECOMP: pulling this value out into a variable forces it into EBX MxLong cchBuffer = m_info.cchBuffer; if (cchBuffer > 0) { if (m_info.lBufOffset != m_info.lDiskOffset) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, m_info.lBufOffset, SEEK_SET); + m_info.lDiskOffset = _llseek(m_file, m_info.lBufOffset, SEEK_SET); } // Was the previous seek (if required) successful? if (m_info.lBufOffset != m_info.lDiskOffset) { result = MMIOERR_CANNOTSEEK; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { - bytesWritten = _hwrite((HFILE) m_info.hmmio, m_info.pchBuffer, cchBuffer); + bytesWritten = _hwrite(m_file, m_info.pchBuffer, cchBuffer); if (bytesWritten == -1 || bytesWritten != cchBuffer) { result = MMIOERR_CANNOTWRITE; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesWritten; @@ -392,19 +393,19 @@ MxU16 MXIOINFO::Advance(MxU16 p_option) ((p_option & MMIO_WRITE) || (rwmode == MMIO_READWRITE)) && cch > 0) { if (m_info.lBufOffset != m_info.lDiskOffset) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, m_info.lBufOffset, SEEK_SET); + m_info.lDiskOffset = _llseek(m_file, m_info.lBufOffset, SEEK_SET); } if (m_info.lBufOffset != m_info.lDiskOffset) { result = MMIOERR_CANNOTSEEK; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { - bytesCounter = _hwrite((HFILE) m_info.hmmio, m_info.pchBuffer, cch); + bytesCounter = _hwrite(m_file, m_info.pchBuffer, cch); if (bytesCounter == -1 || bytesCounter != cch) { result = MMIOERR_CANNOTWRITE; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesCounter; @@ -418,20 +419,20 @@ MxU16 MXIOINFO::Advance(MxU16 p_option) m_info.lBufOffset += cch; if ((!rwmode || rwmode == MMIO_READWRITE) && cch > 0) { if (m_info.lBufOffset != m_info.lDiskOffset) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, m_info.lBufOffset, SEEK_SET); + m_info.lDiskOffset = _llseek(m_file, m_info.lBufOffset, SEEK_SET); } // if previous seek failed if (m_info.lBufOffset != m_info.lDiskOffset) { result = MMIOERR_CANNOTSEEK; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { - bytesCounter = _hread((HFILE) m_info.hmmio, m_info.pchBuffer, cch); + bytesCounter = _hread(m_file, m_info.pchBuffer, cch); if (bytesCounter == -1) { result = MMIOERR_CANNOTREAD; - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); } else { m_info.lDiskOffset += bytesCounter; @@ -574,11 +575,11 @@ MxU16 MXIOINFO::Ascend(MMCKINFO* p_chunkInfo, MxU16 p_ascend) m_info.dwFlags |= MMIO_DIRTY; } else { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, ofs, SEEK_SET); + m_info.lDiskOffset = _llseek(m_file, ofs, SEEK_SET); if (m_info.lDiskOffset == ofs) { - if (_lwrite((HFILE) m_info.hmmio, (char*) &size, 4) != 4) { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + if (_lwrite(m_file, (char*) &size, 4) != 4) { + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); result = MMIOERR_CANNOTWRITE; } else { @@ -586,7 +587,7 @@ MxU16 MXIOINFO::Ascend(MMCKINFO* p_chunkInfo, MxU16 p_ascend) } } else { - m_info.lDiskOffset = _llseek((HFILE) m_info.hmmio, 0, SEEK_CUR); + m_info.lDiskOffset = _llseek(m_file, 0, SEEK_CUR); result = MMIOERR_CANNOTSEEK; } }