Fixed other bugs within MMIO implementation. Now, it's possible to

copy/cut from PhotoPaint and paste to CorelDraw.
oldstable
Noomen Hamza 2000-04-11 19:36:13 +00:00 committed by Alexandre Julliard
parent 3873f44505
commit 50b5c29e26
1 changed files with 15 additions and 16 deletions

View File

@ -617,18 +617,15 @@ static LRESULT MMIO_Flush(WINE_MMIO* wm, UINT uFlags)
/* not quite sure what to do here, but I'll guess */ /* not quite sure what to do here, but I'll guess */
if (wm->info.dwFlags & MMIO_DIRTY) { if (wm->info.dwFlags & MMIO_DIRTY) {
MMIO_SendMessage(wm, MMIOM_SEEK, wm->info.lBufOffset, MMIO_SendMessage(wm, MMIOM_SEEK, wm->info.lDiskOffset,
SEEK_SET, MMIO_PROC_32A); SEEK_SET, MMIO_PROC_32A);
MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)wm->info.pchBuffer, MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)wm->info.pchBuffer,
wm->info.pchNext - wm->info.pchBuffer, MMIO_PROC_32A); wm->info.pchNext - wm->info.pchBuffer, MMIO_PROC_32A);
wm->info.dwFlags &= ~MMIO_DIRTY; wm->info.dwFlags &= ~MMIO_DIRTY;
} }
if (uFlags & MMIO_EMPTYBUF) { if (uFlags & MMIO_EMPTYBUF)
wm->info.pchNext = wm->info.pchBuffer; wm->info.pchNext = wm->info.pchBuffer;
wm->info.pchEndRead = wm->info.pchBuffer;
wm->info.pchEndWrite = wm->info.pchBuffer;
}
return 0; return 0;
} }
@ -995,7 +992,7 @@ LONG WINAPI mmioRead16(HMMIO16 hmmio, HPSTR pch, LONG cch)
LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch) LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
{ {
LPWINE_MMIO wm; LPWINE_MMIO wm;
LONG count; LONG count,bytesW=0;
TRACE("(%04X, %p, %ld);\n", hmmio, pch, cch); TRACE("(%04X, %p, %ld);\n", hmmio, pch, cch);
@ -1011,26 +1008,28 @@ LONG WINAPI mmioWrite(HMMIO hmmio, HPCSTR pch, LONG cch)
memcpy(wm->info.pchNext, pch, count); memcpy(wm->info.pchNext, pch, count);
wm->info.pchNext += count; wm->info.pchNext += count;
pch += count; pch += count;
cch -= count; cch -= count;
bytesW+=count;
wm->info.dwFlags |= MMIO_DIRTY; wm->info.dwFlags |= MMIO_DIRTY;
} else } else
if (wm->info.fccIOProc == FOURCC_MEM) { if (wm->info.fccIOProc == FOURCC_MEM) {
if (wm->info.adwInfo[0]) { if (wm->info.adwInfo[0]) {
/* from where would we get the memory handle? */ /* from where would we get the memory handle? */
FIXME("memory file expansion not implemented!\n"); FIXME("memory file expansion not implemented!\n");
break;
} else break; } else break;
} }
if (wm->info.pchNext == wm->info.pchEndWrite && if (wm->info.pchNext == wm->info.pchEndWrite) MMIO_Flush(wm, MMIO_EMPTYBUF);
MMIO_Flush(wm, MMIO_EMPTYBUF)) break; else break;
} }
} else { } else {
count = MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)pch, cch, MMIO_PROC_32A); bytesW = MMIO_SendMessage(wm, MMIOM_WRITE, (LPARAM)pch, cch, MMIO_PROC_32A);
wm->info.lBufOffset = wm->info.lDiskOffset; wm->info.lBufOffset = wm->info.lDiskOffset;
} }
TRACE("count=%ld\n", count); TRACE("bytes written=%ld\n", bytesW);
return count; return bytesW;
} }
/************************************************************************** /**************************************************************************