diff options
Diffstat (limited to 'engines/lab/labfile.cpp')
-rw-r--r-- | engines/lab/labfile.cpp | 65 |
1 files changed, 18 insertions, 47 deletions
diff --git a/engines/lab/labfile.cpp b/engines/lab/labfile.cpp index 3a34f80b43..4fee3ba93e 100644 --- a/engines/lab/labfile.cpp +++ b/engines/lab/labfile.cpp @@ -69,38 +69,6 @@ static void freeFile(uint16 RMarker) { FileMarkers[RMarker].End = NULL; } - - - - -/*****************************************************************************/ -/* Gets a chunk of memory from the buffer. */ -/*****************************************************************************/ -static void *getCurMemLabFile(uint32 size) { - void *ptr = 0; - - if ((((char *) _memPlace) + size - 1) >= - (((char *) buffer) + buffersize)) - _memPlace = buffer; - - ptr = _memPlace; - _memPlace = (char *)_memPlace + size; - - for (int i = 0; i < MAXMARKERS; i++) { - if (FileMarkers[i].name[0]) { - if ( ((FileMarkers[i].Start >= ptr) && (FileMarkers[i].Start < _memPlace)) - || ((FileMarkers[i].End >= ptr) && (FileMarkers[i].End < _memPlace)) - || ((ptr >= FileMarkers[i].Start) && (ptr <= FileMarkers[i].End))) - freeFile(i); - } - } - - return ptr; -} - - - - /*****************************************************************************/ /* Checks if a file is already buffered. */ /*****************************************************************************/ @@ -118,9 +86,6 @@ byte **isBuffered(const char *fileName) { return NULL; } - - - /*****************************************************************************/ /* Grabs a chunk of memory from the room buffer, and manages it for a */ /* particular room. If it returns true, then the file is already in memory. */ @@ -148,16 +113,29 @@ bool allocFile(void **Ptr, uint32 Size, const char *fileName) { freeFile(RMarker); strcpy(FileMarkers[RMarker].name, fileName); - *Ptr = getCurMemLabFile(Size); - FileMarkers[RMarker].Start = *Ptr; - FileMarkers[RMarker].End = (void *)(((char *)(*Ptr)) + Size - 1); + *Ptr = 0; - return false; -} + if ((((char *)_memPlace) + Size - 1) >= + (((char *)buffer) + buffersize)) + _memPlace = buffer; + *Ptr = _memPlace; + _memPlace = (char *)_memPlace + Size; + for (int i = 0; i < MAXMARKERS; i++) { + if (FileMarkers[i].name[0]) { + if (((FileMarkers[i].Start >= Ptr) && (FileMarkers[i].Start < _memPlace)) + || ((FileMarkers[i].End >= Ptr) && (FileMarkers[i].End < _memPlace)) + || ((Ptr >= FileMarkers[i].Start) && (Ptr <= FileMarkers[i].End))) + freeFile(i); + } + } + FileMarkers[RMarker].Start = *Ptr; + FileMarkers[RMarker].End = (void *)(((char *)(*Ptr)) + Size - 1); + return false; +} /*----- Main routines -----*/ @@ -215,7 +193,6 @@ void resetBuffer() { } - /*****************************************************************************/ /* Initializes the buffer. */ /*****************************************************************************/ @@ -231,9 +208,6 @@ bool initBuffer(uint32 BufSize, bool IsGraphicsMem) { return (buffer != NULL); } - - - /*****************************************************************************/ /* Frees the buffer. */ /*****************************************************************************/ @@ -244,9 +218,6 @@ void freeBuffer() { free(buffer); } - - - /*------------------------------------------------------------------------*/ /* The following routines allow stealing of memory from the buffer (which */ /* later may or may not be given back). */ |