2009-02-17 15:02:16 +00:00
|
|
|
/* ScummVM - Graphic Adventure Engine
|
|
|
|
*
|
|
|
|
* ScummVM is the legal property of its developers, whose names
|
|
|
|
* are too numerous to list here. Please refer to the COPYRIGHT
|
|
|
|
* file distributed with this source distribution.
|
|
|
|
*
|
|
|
|
* 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 2
|
|
|
|
* 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, write to the Free Software
|
|
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
*
|
|
|
|
* $URL$
|
|
|
|
* $Id$
|
|
|
|
*
|
|
|
|
*/
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-08-25 08:38:14 +00:00
|
|
|
#ifndef SCI_ENGINE_segmentManager_H
|
|
|
|
#define SCI_ENGINE_segmentManager_H
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-05-03 09:25:15 +00:00
|
|
|
#include "common/scummsys.h"
|
|
|
|
#include "common/serializer.h"
|
2009-02-24 05:56:26 +00:00
|
|
|
#include "sci/engine/vm.h"
|
2009-06-04 11:45:17 +00:00
|
|
|
#include "sci/engine/memobj.h"
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-02-21 10:23:36 +00:00
|
|
|
namespace Sci {
|
|
|
|
|
2009-05-03 22:46:11 +00:00
|
|
|
#define GET_SEGMENT(mgr, index, rtype) (((index) > 0 && (int)(mgr)._heap.size() > index) ? \
|
|
|
|
(((mgr)._heap[index] && (mgr)._heap[index]->getType() == rtype)? (mgr)._heap[index] : NULL) : NULL)
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-05-03 22:46:11 +00:00
|
|
|
#define GET_SEGMENT_ANY(mgr, index) (((index) > 0 && (int)(mgr)._heap.size() > index) ? \
|
|
|
|
(((mgr)._heap[index])? (mgr)._heap[index] : NULL) : NULL)
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-05-03 22:46:11 +00:00
|
|
|
#define GET_OBJECT_SEGMENT(mgr, index) (((index) > 0 && (int)(mgr)._heap.size() > index) ? \
|
|
|
|
(((mgr)._heap[index] && ((mgr)._heap[index]->getType() == MEM_OBJ_SCRIPT || (mgr)._heap[index]->getType() == MEM_OBJ_CLONES))? (mgr)._heap[index] \
|
2009-05-03 11:07:07 +00:00
|
|
|
: NULL): NULL)
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-08-17 05:55:21 +00:00
|
|
|
/**
|
|
|
|
* Parameters for getSegment()
|
|
|
|
*/
|
|
|
|
typedef enum {
|
|
|
|
SCRIPT_GET_DONT_LOAD = 0, /**< Fail if not loaded */
|
|
|
|
SCRIPT_GET_LOAD = 1, /**< Load, if neccessary */
|
|
|
|
SCRIPT_GET_LOCK = 3 /**< Load, if neccessary, and lock */
|
|
|
|
} SCRIPT_GET;
|
|
|
|
|
|
|
|
|
2009-05-03 09:25:15 +00:00
|
|
|
class SegManager : public Common::Serializable {
|
2009-02-21 23:27:24 +00:00
|
|
|
public:
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Initialize the segment manager
|
|
|
|
*/
|
2009-08-25 08:38:14 +00:00
|
|
|
SegManager(ResourceManager *resourceManager);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Deallocate all memory associated with the segment manager
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
~SegManager();
|
|
|
|
|
2009-05-03 09:25:15 +00:00
|
|
|
virtual void saveLoadWithSerializer(Common::Serializer &ser);
|
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
// 1. Scripts
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate a script into the segment manager
|
|
|
|
* @param script_nr The number of the script to load
|
|
|
|
* @param seg_id The segment ID of the newly allocated segment,
|
|
|
|
* on success
|
|
|
|
* @return 0 on failure, 1 on success
|
|
|
|
*/
|
2009-08-17 05:55:21 +00:00
|
|
|
Script *allocateScript(int script_nr, SegmentId *seg_id);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
// The script must then be initialised; see section (1b.), below.
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Forcefully deallocate a previously allocated script
|
|
|
|
* @param script_nr number of the script to deallocate
|
|
|
|
* @return 1 on success, 0 on failure
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
int deallocateScript(int script_nr);
|
|
|
|
|
2009-05-15 09:27:39 +00:00
|
|
|
/**
|
|
|
|
* Determines whether a script has been loaded yet.
|
2009-05-15 09:28:31 +00:00
|
|
|
* @param seg ID of the script segment to check for
|
2009-05-15 09:27:39 +00:00
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
bool scriptIsLoaded(SegmentId seg);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Validate whether the specified public function is exported by
|
|
|
|
* the script in the specified segment
|
|
|
|
* @param pubfunct Index of the function to validate
|
|
|
|
* @param seg Segment ID of the script the check is to
|
|
|
|
* be performed for
|
|
|
|
* @return NULL if the public function is invalid, its
|
|
|
|
* offset into the script's segment otherwise
|
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
uint16 validateExportFunc(int pubfunct, SegmentId seg);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Get the segment ID associated with a script number
|
|
|
|
* @param script_nr Number of the script to look up
|
|
|
|
* @return The associated segment ID, or -1 if no
|
|
|
|
* matching segment exists
|
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
SegmentId segGet(int script_nr) const;
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-05-15 09:27:39 +00:00
|
|
|
/**
|
2009-06-18 22:09:57 +00:00
|
|
|
* Return a pointer to the specified script.
|
|
|
|
* If the id is invalid, does not refer to a script or the script is
|
|
|
|
* not loaded, this will invoke error().
|
2009-05-15 09:28:31 +00:00
|
|
|
* @param seg ID of the script segment to check for
|
2009-06-18 22:09:57 +00:00
|
|
|
* @return A pointer to the Script object
|
2009-05-15 09:27:39 +00:00
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
Script *getScript(SegmentId seg);
|
2009-05-03 09:20:21 +00:00
|
|
|
|
2009-05-15 09:27:39 +00:00
|
|
|
/**
|
2009-06-18 22:09:57 +00:00
|
|
|
* Return a pointer to the specified script.
|
|
|
|
* If the id is invalid, does not refer to a script, or
|
|
|
|
* the script is not loaded, this will return NULL
|
2009-05-15 09:28:31 +00:00
|
|
|
* @param seg ID of the script segment to check for
|
2009-06-18 22:09:57 +00:00
|
|
|
* @return A pointer to the Script object, or NULL
|
2009-05-15 09:27:39 +00:00
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
Script *getScriptIfLoaded(SegmentId seg);
|
2009-05-15 09:27:39 +00:00
|
|
|
|
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 1b. Script Initialisation
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// The set of functions below are intended
|
|
|
|
// to be used during script instantiation,
|
|
|
|
// i.e. loading and linking.
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Initializes a script's local variable block
|
|
|
|
* All variables are initialized to zero.
|
|
|
|
* @param seg Segment containing the script to initialize
|
|
|
|
* @param nr Number of local variables to allocate
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
void scriptInitialiseLocalsZero(SegmentId seg, int nr);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Initializes a script's local variable block according to a prototype
|
|
|
|
* @param location Location to initialize from
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
void scriptInitialiseLocals(reg_t location);
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Initializes an object within the segment manager
|
|
|
|
* @param obj_pos Location (segment, offset) of the object. It must
|
|
|
|
* point to the beginning of the script/class block
|
|
|
|
* (as opposed to what the VM considers to be the
|
|
|
|
* object location)
|
|
|
|
* @returns A newly created Object describing the object,
|
|
|
|
* stored within the relevant script
|
|
|
|
*/
|
2009-08-17 05:55:21 +00:00
|
|
|
Object *scriptObjInit(reg_t obj_pos);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Informs the segment manager that a code block must be relocated
|
|
|
|
* @param location Start of block to relocate
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
void scriptAddCodeBlock(reg_t location);
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Tells the segment manager whether exports are wide (32-bit) or not.
|
|
|
|
* @param flag 1 if exports are wide, 0 otherwise
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
void setExportWidth(int flag);
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Processes a relocation block witin a script
|
|
|
|
* This function is idempotent, but it must only be called after all
|
|
|
|
* objects have been instantiated, or a run-time error will occur.
|
|
|
|
* @param obj_pos Location (segment, offset) of the block
|
|
|
|
* @return Location of the relocation block
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
void scriptRelocate(reg_t block);
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Determines whether the script referenced by the indicated segment
|
|
|
|
* is marked as being deleted.
|
|
|
|
* Will return 0 when applied to an invalid or non-script seg.
|
|
|
|
* @param seg Segment ID of the script to investigate
|
|
|
|
* @return 1 iff seg points to a script and the segment is
|
|
|
|
* deleted, 0 otherwise
|
|
|
|
*/
|
2009-05-15 09:27:07 +00:00
|
|
|
bool scriptIsMarkedAsDeleted(SegmentId seg);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 2. Clones
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate a fresh clone
|
|
|
|
* @param addr The offset of the freshly allocated clone
|
|
|
|
* @return Reference to the memory allocated for the clone
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
Clone *alloc_Clone(reg_t *addr);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 3. Objects (static, from Scripts, and dynmic, from Clones)
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 4. Stack
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocates a data stack
|
|
|
|
* @param size Number of stack entries to reserve
|
|
|
|
* @param segid Segment ID of the stack
|
|
|
|
* @return The physical stack
|
|
|
|
*/
|
2009-05-08 09:53:31 +00:00
|
|
|
DataStack *allocateStack(int size, SegmentId *segid);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 5. System Strings
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocates a system string table
|
|
|
|
* See also sys_string_acquire();
|
|
|
|
* @param[in] segid Segment ID of the stack
|
|
|
|
* @returns The physical stack
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
SystemStrings *allocateSysStrings(SegmentId *segid);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
|
|
|
|
2009-03-10 14:52:02 +00:00
|
|
|
// 5. System Strings
|
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocates a string fragments segment
|
|
|
|
* See also stringfrag.h
|
|
|
|
* @return Segment ID to use for string fragments
|
|
|
|
*/
|
2009-03-10 14:52:02 +00:00
|
|
|
SegmentId allocateStringFrags();
|
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 6, 7. Lists and Nodes
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate a fresh list
|
|
|
|
* @param[in] addr The offset of the freshly allocated list
|
|
|
|
* @return Reference to the memory allocated for the list
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
List *alloc_List(reg_t *addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate a fresh node
|
|
|
|
* @param[in] addr The offset of the freshly allocated node
|
|
|
|
* @return Reference to the memory allocated for the node
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
Node *alloc_Node(reg_t *addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
// 8. Hunk Memory
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate a fresh chunk of the hunk
|
|
|
|
* @param[in] size Number of bytes to allocate for the hunk entry
|
|
|
|
* @param[in] hunk_type A descriptive string for the hunk entry, for
|
|
|
|
* debugging purposes
|
|
|
|
* @param[out] addr The offset of the freshly allocated hunk entry
|
|
|
|
* @return Reference to the memory allocated for the hunk
|
|
|
|
* piece
|
|
|
|
*/
|
2009-02-28 11:12:59 +00:00
|
|
|
Hunk *alloc_hunk_entry(const char *hunk_type, int size, reg_t *addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Deallocates a hunk entry
|
|
|
|
* @param[in] addr Offset of the hunk entry to delete
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
void free_hunk_entry(reg_t addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-02-22 12:18:22 +00:00
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
// 9. Dynamic Memory
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Allocate some dynamic memory
|
|
|
|
* @param[in] size Number of bytes to allocate
|
|
|
|
* @param[in] description A descriptive string for debugging purposes
|
|
|
|
* @param[out] addr The offset of the freshly allocated X
|
|
|
|
* @return Raw pointer into the allocated dynamic
|
|
|
|
* memory
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
unsigned char *allocDynmem(int size, const char *description, reg_t *addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Deallocates a piece of dynamic memory
|
|
|
|
* @param[in] addr Offset of the dynmem chunk to free
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
int freeDynmem(reg_t addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Gets the description of a dynmem segment
|
|
|
|
* @param[in] addr Segment to describe
|
|
|
|
* @return Pointer to the descriptive string set in allocDynmem
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
const char *getDescription(reg_t addr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// 10. Reserved segments
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
// Reserves a special-purpose segment
|
|
|
|
// Parameters: (char *) name: A string name identifying the segment (the string is cloned and retained)
|
|
|
|
// Returns : A fresh segment ID for the segment in question
|
|
|
|
// Reserved segments are never used by the segment manager. They can be used to tag special-purpose addresses.
|
|
|
|
// Segment 0 is implicitly reserved for numbers.
|
2009-02-28 11:12:59 +00:00
|
|
|
//SegmentId sm_allocate_reserved_segment(char *name);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
|
|
|
|
2009-02-22 13:11:43 +00:00
|
|
|
// Generic Operations on Segments and Addresses
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Dereferences a raw memory pointer
|
|
|
|
* @param[in] reg The reference to dereference
|
|
|
|
* @param[out] size (optional) The theoretical maximum size
|
|
|
|
* @return The data block referenced
|
|
|
|
*/
|
2009-02-21 23:27:24 +00:00
|
|
|
byte *dereference(reg_t reg, int *size);
|
2009-02-16 09:23:58 +00:00
|
|
|
|
2009-08-17 05:55:21 +00:00
|
|
|
/**
|
|
|
|
* Determines the segment occupied by a certain script
|
|
|
|
* @param[in] script_id The script in question
|
|
|
|
* @param[in] load One of SCRIPT_GET_*
|
|
|
|
* @return The script's segment, or 0 on failure
|
|
|
|
*/
|
|
|
|
SegmentId getSegment(int script_nr, SCRIPT_GET load);
|
|
|
|
reg_t get_class_address(int classnr, SCRIPT_GET lock, reg_t caller);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
|
|
|
|
2009-05-18 12:34:03 +00:00
|
|
|
void heapRelocate(reg_t block);
|
2009-05-18 12:34:56 +00:00
|
|
|
void scriptRelocateExportsSci11(SegmentId seg);
|
2009-08-17 05:55:21 +00:00
|
|
|
void scriptInitialiseObjectsSci11(SegmentId seg);
|
|
|
|
int initialiseScript(Script &scr, int script_nr);
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-08-25 08:38:14 +00:00
|
|
|
SciVersion sciVersion() { return _resourceManager->sciVersion(); }
|
|
|
|
|
2009-05-03 09:25:15 +00:00
|
|
|
private:
|
2009-06-18 22:09:57 +00:00
|
|
|
IntMapper *id_seg_map; ///< id - script id; seg - index of heap
|
2009-05-03 09:25:15 +00:00
|
|
|
public: // TODO: make private
|
2009-05-03 22:46:11 +00:00
|
|
|
Common::Array<MemObject *> _heap;
|
2009-02-21 23:27:24 +00:00
|
|
|
int reserved_id;
|
|
|
|
int exports_wide;
|
2009-08-17 05:55:21 +00:00
|
|
|
Common::Array<Class> _classtable; /**< Table of all classes */
|
2009-08-25 08:38:14 +00:00
|
|
|
ResourceManager *_resourceManager;
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
SegmentId Clones_seg_id; ///< ID of the (a) clones segment
|
|
|
|
SegmentId Lists_seg_id; ///< ID of the (a) list segment
|
|
|
|
SegmentId Nodes_seg_id; ///< ID of the (a) node segment
|
|
|
|
SegmentId Hunks_seg_id; ///< ID of the (a) hunk segment
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-02-21 23:27:24 +00:00
|
|
|
private:
|
2009-05-03 22:46:38 +00:00
|
|
|
MemObject *allocNonscriptSegment(MemObjectType type, SegmentId *segid);
|
2009-02-28 11:12:59 +00:00
|
|
|
LocalVariables *allocLocalsSegment(Script *scr, int count);
|
2009-05-03 22:46:38 +00:00
|
|
|
MemObject *memObjAllocate(SegmentId segid, int hash_id, MemObjectType type);
|
2009-05-18 12:34:56 +00:00
|
|
|
int deallocate(SegmentId seg, bool recursive);
|
2009-08-24 01:59:58 +00:00
|
|
|
int createClassTable();
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-02-28 11:12:59 +00:00
|
|
|
Hunk *alloc_Hunk(reg_t *);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-03-12 03:26:47 +00:00
|
|
|
int relocateLocal(Script *scr, SegmentId segment, int location);
|
2009-05-12 23:30:42 +00:00
|
|
|
int relocateBlock(Common::Array<reg_t> &block, int block_location, SegmentId segment, int location);
|
2009-03-12 03:26:47 +00:00
|
|
|
int relocateObject(Object *obj, SegmentId segment, int location);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-03-12 03:26:47 +00:00
|
|
|
int findFreeId(int *id);
|
2009-08-17 05:55:21 +00:00
|
|
|
void setScriptSize(Script &scr, int script_nr);
|
|
|
|
Object *scriptObjInit0(reg_t obj_pos);
|
|
|
|
Object *scriptObjInit11(reg_t obj_pos);
|
2009-02-21 23:27:24 +00:00
|
|
|
|
2009-06-18 22:09:57 +00:00
|
|
|
/**
|
|
|
|
* Check segment validity
|
|
|
|
* @param[in] seg The segment to validate
|
|
|
|
* @return false if 'seg' is an invalid segment, true if
|
|
|
|
* 'seg' is a valid segment
|
|
|
|
*/
|
2009-05-18 12:34:56 +00:00
|
|
|
bool check(SegmentId seg);
|
2009-02-21 23:27:24 +00:00
|
|
|
};
|
2009-02-20 22:29:49 +00:00
|
|
|
|
2009-02-21 10:23:36 +00:00
|
|
|
} // End of namespace Sci
|
|
|
|
|
2009-08-25 08:38:14 +00:00
|
|
|
#endif // SCI_ENGINE_segmentManager
|