aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/engine/seg_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sci/engine/seg_manager.cpp')
-rw-r--r--engines/sci/engine/seg_manager.cpp856
1 files changed, 385 insertions, 471 deletions
diff --git a/engines/sci/engine/seg_manager.cpp b/engines/sci/engine/seg_manager.cpp
index 78ad431a35..280dfbb104 100644
--- a/engines/sci/engine/seg_manager.cpp
+++ b/engines/sci/engine/seg_manager.cpp
@@ -1,5 +1,5 @@
/***************************************************************************
- seg_manager.c Copyright (C) 2002 Xiaojun Chen, Christoph Reichenbach
+ seg_manager.c Copyright (C) 2002 Xiaojun Chen, Christoph Reichenbach
This program may be modified and copied freely according to the terms of
@@ -46,14 +46,14 @@ mem_obj_t* mem_obj_allocate(seg_manager_t *self, seg_id_t segid, int hash_id, me
sciprintf( "%s, *d, no enough memory", __FILE__, __LINE__ ); \
return ret; \
}
-
+
#define INVALID_SCRIPT_ID -1
-
-void dbg_print( const char* msg, void *i ) {
+
+void dbg_print(const char* msg, void *i) {
#ifdef DEBUG_SEG_MANAGER
char buf[1000];
- sprintf( buf, "%s = [0x%x], dec:[%d]", msg, i, i);
- perror( buf );
+ sprintf(buf, "%s = [0x%x], dec:[%d]", msg, i, i);
+ perror(buf);
#endif
}
@@ -68,7 +68,7 @@ void
sm_script_initialise_locals(seg_manager_t *self, reg_t location);
static int
-_sm_deallocate (seg_manager_t* self, int seg, int recursive);
+_sm_deallocate(seg_manager_t* self, int seg, int recursive);
static hunk_t *
sm_alloc_hunk(seg_manager_t *self, reg_t *);
@@ -89,14 +89,13 @@ sm_check(seg_manager_t* self, int seg);
/*******************************/
static inline int
-find_free_id(seg_manager_t *self, int *id)
-{
+find_free_id(seg_manager_t *self, int *id) {
char was_added = 0;
int retval = 0;
while (!was_added) {
retval = int_hash_map_check_value(self->id_seg_map, self->reserved_id,
- 1, &was_added);
+ 1, &was_added);
*id = self->reserved_id--;
if (self->reserved_id < -1000000)
self->reserved_id = -10;
@@ -107,8 +106,7 @@ find_free_id(seg_manager_t *self, int *id)
}
static mem_obj_t *
-alloc_nonscript_segment(seg_manager_t *self, mem_obj_enum type, seg_id_t *segid)
-{ /* Allocates a non-script segment */
+alloc_nonscript_segment(seg_manager_t *self, mem_obj_enum type, seg_id_t *segid) { /* Allocates a non-script segment */
int id;
*segid = find_free_id(self, &id);
return mem_obj_allocate(self, *segid, id, type);
@@ -122,11 +120,11 @@ void sm_init(seg_manager_t* self, int sci1_1) {
self->id_seg_map = new_int_hash_map();
self->reserved_id = INVALID_SCRIPT_ID;
- int_hash_map_check_value (self->id_seg_map, self->reserved_id, 1, NULL); /* reserve 0 for seg_id */
+ int_hash_map_check_value(self->id_seg_map, self->reserved_id, 1, NULL); /* reserve 0 for seg_id */
self->reserved_id--; /* reserved_id runs in the reversed direction to make sure no one will use it. */
-
+
self->heap_size = DEFAULT_SCRIPTS;
- self->heap = (mem_obj_t**) sci_calloc(self->heap_size, sizeof(mem_obj_t *));
+ self->heap = (mem_obj_t**) sci_calloc(self->heap_size, sizeof(mem_obj_t *));
self->clones_seg_id = 0;
self->lists_seg_id = 0;
@@ -146,7 +144,7 @@ void sm_init(seg_manager_t* self, int sci1_1) {
}
/* destroy the object, free the memorys if allocated before */
-void sm_destroy (seg_manager_t* self) {
+void sm_destroy(seg_manager_t* self) {
int i;
/* free memory*/
for (i = 0; i < self->heap_size; i++) {
@@ -156,7 +154,7 @@ void sm_destroy (seg_manager_t* self) {
free_int_hash_map(self->id_seg_map);
- sci_free (self->heap);
+ sci_free(self->heap);
self->heap = NULL;
}
@@ -167,12 +165,12 @@ void sm_destroy (seg_manager_t* self) {
** 1 - allocated successfully
** seg_id - allocated segment id
*/
-mem_obj_t* sm_allocate_script (seg_manager_t* self, struct _state *s, int script_nr, int* seg_id) {
+mem_obj_t* sm_allocate_script(seg_manager_t* self, struct _state *s, int script_nr, int* seg_id) {
int seg;
char was_added;
mem_obj_t* mem;
- seg = int_hash_map_check_value (self->id_seg_map, script_nr, 1, &was_added);
+ seg = int_hash_map_check_value(self->id_seg_map, script_nr, 1, &was_added);
if (!was_added) {
*seg_id = seg;
return self->heap[*seg_id];
@@ -181,7 +179,7 @@ mem_obj_t* sm_allocate_script (seg_manager_t* self, struct _state *s, int script
/* allocate the mem_obj_t */
mem = mem_obj_allocate(self, seg, script_nr, MEM_OBJ_SCRIPT);
if (!mem) {
- sciprintf("%s, %d, Not enough memory, ", __FILE__, __LINE__ );
+ sciprintf("%s, %d, Not enough memory, ", __FILE__, __LINE__);
return NULL;
}
@@ -189,66 +187,58 @@ mem_obj_t* sm_allocate_script (seg_manager_t* self, struct _state *s, int script
return mem;
}
-static void sm_set_script_size(mem_obj_t *mem, struct _state *s, int script_nr)
-{
+static void sm_set_script_size(mem_obj_t *mem, struct _state *s, int script_nr) {
resource_t *script = scir_find_resource(s->resmgr, sci_script, script_nr, 0);
resource_t *heap = scir_find_resource(s->resmgr, sci_heap, script_nr, 0);
mem->data.script.script_size = script->size;
mem->data.script.heap_size = 0; /* Set later */
- if (!script || (s->version >= SCI_VERSION(1,001,000) && !heap))
- {
- sciprintf("%s: failed to load %s\n", __FUNCTION__,
- !script ? "script" : "heap");
+ if (!script || (s->version >= SCI_VERSION(1, 001, 000) && !heap)) {
+ sciprintf("%s: failed to load %s\n", __FUNCTION__,
+ !script ? "script" : "heap");
return;
}
if (s->version < SCI_VERSION_FTU_NEW_SCRIPT_HEADER) {
- mem->data.script.buf_size = script->size + getUInt16(script->data)*2;
+ mem->data.script.buf_size = script->size + getUInt16(script->data) * 2;
/* locals_size = getUInt16(script->data)*2; */
- }
- else if (s->version < SCI_VERSION(1,001,000)) {
+ } else if (s->version < SCI_VERSION(1, 001, 000)) {
mem->data.script.buf_size = script->size;
- }
- else
- {
+ } else {
mem->data.script.buf_size = script->size + heap->size;
mem->data.script.heap_size = heap->size;
-
+
/* Ensure that the start of the heap resource can be word-aligned. */
- if (script->size & 2)
- {
+ if (script->size & 2) {
mem->data.script.buf_size++;
mem->data.script.script_size++;
}
- if (mem->data.script.buf_size > 65535)
- {
+ if (mem->data.script.buf_size > 65535) {
sciprintf("Script and heap sizes combined exceed 64K.\n"
- "This means a fundamental design bug was made in FreeSCI\n"
- "regarding SCI1.1 games.\nPlease report this so it can be"
- "fixed in the next major version!\n");
+ "This means a fundamental design bug was made in FreeSCI\n"
+ "regarding SCI1.1 games.\nPlease report this so it can be"
+ "fixed in the next major version!\n");
return;
}
}
}
-int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr)
-{
+int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr) {
/* allocate the script.buf */
script_t *scr;
sm_set_script_size(mem, s, script_nr);
- mem->data.script.buf = (byte*) sci_malloc (mem->data.script.buf_size);
-
- dbg_print( "mem->data.script.buf ", mem->data.script.buf );
+ mem->data.script.buf = (byte*) sci_malloc(mem->data.script.buf_size);
+
+ dbg_print("mem->data.script.buf ", mem->data.script.buf);
if (!mem->data.script.buf) {
- sm_free_script ( mem );
- sciprintf("seg_manager.c: Not enough memory space for script size" );
+ sm_free_script(mem);
+ sciprintf("seg_manager.c: Not enough memory space for script size");
mem->data.script.buf_size = 0;
return 0;
}
-
+
/* Initialize objects */
scr = &(mem->data.script);
scr->objects = NULL;
@@ -268,8 +258,8 @@ int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr)
scr->obj_indices = new_int_hash_map();
- if (s->version >= SCI_VERSION(1,001,000))
- scr->heap_start = scr->buf + scr->script_size;
+ if (s->version >= SCI_VERSION(1, 001, 000))
+ scr->heap_start = scr->buf + scr->script_size;
else
scr->heap_start = scr->buf;
@@ -277,23 +267,22 @@ int sm_initialise_script(mem_obj_t *mem, struct _state *s, int script_nr)
}
int
-_sm_deallocate (seg_manager_t* self, int seg, int recursive)
-{
+_sm_deallocate(seg_manager_t* self, int seg, int recursive) {
mem_obj_t *mobj;
- VERIFY ( sm_check (self, seg), "invalid seg id" );
+ VERIFY(sm_check(self, seg), "invalid seg id");
mobj = self->heap[seg];
- int_hash_map_remove_value( self->id_seg_map, mobj->segmgr_id );
+ int_hash_map_remove_value(self->id_seg_map, mobj->segmgr_id);
switch (mobj->type) {
case MEM_OBJ_SCRIPT:
- sm_free_script ( mobj );
+ sm_free_script(mobj);
mobj->data.script.buf = NULL;
if (recursive && mobj->data.script.locals_segment)
_sm_deallocate(self, mobj->data.script.locals_segment,
- recursive);
+ recursive);
break;
case MEM_OBJ_LOCALS:
@@ -338,7 +327,7 @@ _sm_deallocate (seg_manager_t* self, int seg, int recursive)
break;
default:
fprintf(stderr, "Deallocating segment type %d not supported!\n",
- mobj->type);
+ mobj->type);
BREAKPOINT();
}
@@ -348,42 +337,38 @@ _sm_deallocate (seg_manager_t* self, int seg, int recursive)
return 1;
}
-int sm_script_marked_deleted(seg_manager_t* self, int script_nr)
-{
+int sm_script_marked_deleted(seg_manager_t* self, int script_nr) {
script_t *scr;
- int seg = sm_seg_get( self, script_nr );
- VERIFY ( sm_check (self, seg), "invalid seg id" );
-
+ int seg = sm_seg_get(self, script_nr);
+ VERIFY(sm_check(self, seg), "invalid seg id");
+
scr = &(self->heap[seg]->data.script);
return scr->marked_as_deleted;
}
-void sm_mark_script_deleted(seg_manager_t* self, int script_nr)
-{
+void sm_mark_script_deleted(seg_manager_t* self, int script_nr) {
script_t *scr;
- int seg = sm_seg_get( self, script_nr );
- VERIFY ( sm_check (self, seg), "invalid seg id" );
+ int seg = sm_seg_get(self, script_nr);
+ VERIFY(sm_check(self, seg), "invalid seg id");
scr = &(self->heap[seg]->data.script);
scr->marked_as_deleted = 1;
}
-void sm_unmark_script_deleted(seg_manager_t* self, int script_nr)
-{
+void sm_unmark_script_deleted(seg_manager_t* self, int script_nr) {
script_t *scr;
- int seg = sm_seg_get( self, script_nr );
- VERIFY ( sm_check (self, seg), "invalid seg id" );
+ int seg = sm_seg_get(self, script_nr);
+ VERIFY(sm_check(self, seg), "invalid seg id");
scr = &(self->heap[seg]->data.script);
scr->marked_as_deleted = 0;
}
int
-sm_script_is_marked_as_deleted(seg_manager_t* self, seg_id_t seg)
-{
+sm_script_is_marked_as_deleted(seg_manager_t* self, seg_id_t seg) {
script_t *scr;
- if (!sm_check (self, seg))
+ if (!sm_check(self, seg))
return 0;
if (self->heap[seg]->type != MEM_OBJ_SCRIPT)
@@ -394,19 +379,18 @@ sm_script_is_marked_as_deleted(seg_manager_t* self, seg_id_t seg)
}
-int sm_deallocate_script (seg_manager_t* self, int script_nr) {
- int seg = sm_seg_get( self, script_nr );
+int sm_deallocate_script(seg_manager_t* self, int script_nr) {
+ int seg = sm_seg_get(self, script_nr);
_sm_deallocate(self, seg, 1);
return 1;
}
mem_obj_t*
-mem_obj_allocate(seg_manager_t *self, seg_id_t segid, int hash_id, mem_obj_enum type)
-{
- mem_obj_t* mem = ( mem_obj_t* ) sci_calloc( sizeof (mem_obj_t), 1 );
- if( !mem ) {
- sciprintf( "seg_manager.c: invalid mem_obj " );
+mem_obj_allocate(seg_manager_t *self, seg_id_t segid, int hash_id, mem_obj_enum type) {
+ mem_obj_t* mem = (mem_obj_t*) sci_calloc(sizeof(mem_obj_t), 1);
+ if (!mem) {
+ sciprintf("seg_manager.c: invalid mem_obj ");
return NULL;
}
@@ -415,13 +399,13 @@ mem_obj_allocate(seg_manager_t *self, seg_id_t segid, int hash_id, mem_obj_enum
int oldhs = self->heap_size;
if (segid >= self->heap_size * 2) {
- sciprintf( "seg_manager.c: hash_map error or others??" );
+ sciprintf("seg_manager.c: hash_map error or others??");
return NULL;
}
self->heap_size *= 2;
- temp = sci_realloc ((void*)self->heap, self->heap_size * sizeof( mem_obj_t* ) );
+ temp = sci_realloc((void*)self->heap, self->heap_size * sizeof(mem_obj_t*));
if (!temp) {
- sciprintf("seg_manager.c: Not enough memory space for script size" );
+ sciprintf("seg_manager.c: Not enough memory space for script size");
return NULL;
}
self->heap = (mem_obj_t**) temp;
@@ -446,25 +430,24 @@ mem_obj_allocate(seg_manager_t *self, seg_id_t segid, int hash_id, mem_obj_enum
/* }; */
void
-sm_free_script ( mem_obj_t* mem )
-{
- if( !mem ) return;
- if( mem->data.script.buf ) {
- sci_free( mem->data.script.buf );
+sm_free_script(mem_obj_t* mem) {
+ if (!mem) return;
+ if (mem->data.script.buf) {
+ sci_free(mem->data.script.buf);
mem->data.script.buf = NULL;
mem->data.script.buf_size = 0;
}
- if( mem->data.script.objects ) {
+ if (mem->data.script.objects) {
int i;
- for( i = 0; i < mem->data.script.objects_nr; i++ ) {
+ for (i = 0; i < mem->data.script.objects_nr; i++) {
object_t* object = &mem->data.script.objects[i];
- if( object->variables ) {
- free( object->variables );
+ if (object->variables) {
+ free(object->variables);
object->variables = NULL;
object->variables_nr = 0;
}
}
- free( mem->data.script.objects );
+ free(mem->data.script.objects);
mem->data.script.objects = NULL;
mem->data.script.objects_nr = 0;
}
@@ -479,21 +462,21 @@ sm_free_script ( mem_obj_t* mem )
#if 0
// Unreferenced - removed
static void
-sm_mset (seg_manager_t* self, int offset, int c, size_t n, int id, int flag) {
+sm_mset(seg_manager_t* self, int offset, int c, size_t n, int id, int flag) {
mem_obj_t* mem_obj;
GET_SEGID();
mem_obj = self->heap[id];
switch (mem_obj->type) {
case MEM_OBJ_SCRIPT:
if (mem_obj->data.script.buf) {
- memset( mem_obj->data.script.buf + offset, c, n );
+ memset(mem_obj->data.script.buf + offset, c, n);
}
break;
case MEM_OBJ_CLONES:
- sciprintf( "memset for clones haven't been implemented\n" );
+ sciprintf("memset for clones haven't been implemented\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
}
@@ -502,42 +485,42 @@ sm_mset (seg_manager_t* self, int offset, int c, size_t n, int id, int flag) {
#if 0
// Unreferenced - removed
static void
-sm_mcpy_in_in (seg_manager_t* self, int dst, const int src, size_t n, int id, int flag) {
+sm_mcpy_in_in(seg_manager_t* self, int dst, const int src, size_t n, int id, int flag) {
mem_obj_t* mem_obj;
GET_SEGID();
mem_obj = self->heap[id];
switch (mem_obj->type) {
case MEM_OBJ_SCRIPT:
if (mem_obj->data.script.buf) {
- memcpy ( mem_obj->data.script.buf + dst, mem_obj->data.script.buf + src, n );
+ memcpy(mem_obj->data.script.buf + dst, mem_obj->data.script.buf + src, n);
}
break;
case MEM_OBJ_CLONES:
- sciprintf( "memcpy for clones haven't been implemented\n" );
+ sciprintf("memcpy for clones haven't been implemented\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
}
#endif
void
-sm_mcpy_in_out (seg_manager_t* self, int dst, const void* src, size_t n, int id, int flag) {
+sm_mcpy_in_out(seg_manager_t* self, int dst, const void* src, size_t n, int id, int flag) {
mem_obj_t* mem_obj;
GET_SEGID();
mem_obj = self->heap[id];
switch (mem_obj->type) {
case MEM_OBJ_SCRIPT:
if (mem_obj->data.script.buf) {
- memcpy ( mem_obj->data.script.buf + dst, src, n );
+ memcpy(mem_obj->data.script.buf + dst, src, n);
}
break;
case MEM_OBJ_CLONES:
- sciprintf( "memcpy for clones hasn't been implemented yet\n" );
+ sciprintf("memcpy for clones hasn't been implemented yet\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
}
@@ -545,78 +528,76 @@ sm_mcpy_in_out (seg_manager_t* self, int dst, const void* src, size_t n, int id,
#if 0
// Unreferenced - removed
static void
-sm_mcpy_out_in (seg_manager_t* self, void* dst, const int src, size_t n, int id, int flag) {
+sm_mcpy_out_in(seg_manager_t* self, void* dst, const int src, size_t n, int id, int flag) {
mem_obj_t* mem_obj;
GET_SEGID();
mem_obj = self->heap[id];
switch (mem_obj->type) {
case MEM_OBJ_SCRIPT:
if (mem_obj->data.script.buf) {
- memcpy ( dst, mem_obj->data.script.buf + src, n );
+ memcpy(dst, mem_obj->data.script.buf + src, n);
}
break;
case MEM_OBJ_CLONES:
- sciprintf( "memcpy for clones hasn't been implemented yet\n" );
+ sciprintf("memcpy for clones hasn't been implemented yet\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
}
#endif
gint16
-sm_get_heap (seg_manager_t* self, reg_t reg)
-{
+sm_get_heap(seg_manager_t* self, reg_t reg) {
mem_obj_t* mem_obj;
mem_obj_enum mem_type;
- VERIFY( sm_check (self, reg.segment), "Invalid seg id" );
+ VERIFY(sm_check(self, reg.segment), "Invalid seg id");
mem_obj = self->heap[reg.segment];
mem_type = mem_obj->type;
- switch( mem_type ) {
+ switch (mem_type) {
case MEM_OBJ_SCRIPT:
- VERIFY( reg.offset + 1 < (unsigned int)mem_obj->data.script.buf_size, "invalid offset\n" );
+ VERIFY(reg.offset + 1 < (unsigned int)mem_obj->data.script.buf_size, "invalid offset\n");
return (unsigned char)mem_obj->data.script.buf[reg.offset] |
- ( ((unsigned char)mem_obj->data.script.buf[reg.offset+1]) << 8 );
+ (((unsigned char)mem_obj->data.script.buf[reg.offset+1]) << 8);
case MEM_OBJ_CLONES:
- sciprintf( "memcpy for clones hasn't been implemented yet\n" );
+ sciprintf("memcpy for clones hasn't been implemented yet\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
return 0; /* never get here */
}
-void sm_put_heap (seg_manager_t* self, reg_t reg, gint16 value ) {
+void sm_put_heap(seg_manager_t* self, reg_t reg, gint16 value) {
mem_obj_t* mem_obj;
mem_obj_enum mem_type;
- VERIFY( sm_check (self, reg.segment), "Invalid seg id" );
+ VERIFY(sm_check(self, reg.segment), "Invalid seg id");
mem_obj = self->heap[reg.segment];
mem_type = mem_obj->type;
- switch( mem_type ) {
+ switch (mem_type) {
case MEM_OBJ_SCRIPT:
- VERIFY( reg.offset + 1 < mem_obj->data.script.buf_size, "invalid offset" );
+ VERIFY(reg.offset + 1 < mem_obj->data.script.buf_size, "invalid offset");
mem_obj->data.script.buf[reg.offset] = value & 0xff;
mem_obj->data.script.buf[reg.offset + 1] = value >> 8;
break;
case MEM_OBJ_CLONES:
- sciprintf( "memcpy for clones haven't been implemented\n" );
+ sciprintf("memcpy for clones haven't been implemented\n");
break;
default:
- sciprintf( "unknown mem obj type\n" );
+ sciprintf("unknown mem obj type\n");
break;
}
}
/* return the seg if script_id is valid and in the map, else -1 */
-int sm_seg_get (seg_manager_t* self, int script_id)
-{
- return int_hash_map_check_value (self->id_seg_map, script_id, 0, NULL);
+int sm_seg_get(seg_manager_t* self, int script_id) {
+ return int_hash_map_check_value(self->id_seg_map, script_id, 0, NULL);
}
/* validate the seg
@@ -625,56 +606,55 @@ int sm_seg_get (seg_manager_t* self, int script_id)
** 1 - valid seg
*/
static int
-sm_check (seg_manager_t* self, int seg) {
- if ( seg < 0 || seg >= self->heap_size ) {
+sm_check(seg_manager_t* self, int seg) {
+ if (seg < 0 || seg >= self->heap_size) {
return 0;
}
if (!self->heap[seg]) {
- sciprintf("seg_manager.c: seg %x is removed from memory, but not removed from hash_map\n", seg );
+ sciprintf("seg_manager.c: seg %x is removed from memory, but not removed from hash_map\n", seg);
return 0;
}
return 1;
}
-int sm_script_is_loaded (seg_manager_t* self, int id, id_flag flag) {
+int sm_script_is_loaded(seg_manager_t* self, int id, id_flag flag) {
if (flag == SCRIPT_ID)
- id = sm_seg_get (self, id);
- return sm_check (self, id);
+ id = sm_seg_get(self, id);
+ return sm_check(self, id);
}
-void sm_increment_lockers (seg_manager_t* self, int id, id_flag flag) {
+void sm_increment_lockers(seg_manager_t* self, int id, id_flag flag) {
if (flag == SCRIPT_ID)
- id = sm_seg_get (self, id);
- VERIFY ( sm_check (self, id), "invalid seg id" );
+ id = sm_seg_get(self, id);
+ VERIFY(sm_check(self, id), "invalid seg id");
self->heap[id]->data.script.lockers++;
}
-void sm_decrement_lockers (seg_manager_t* self, int id, id_flag flag) {
+void sm_decrement_lockers(seg_manager_t* self, int id, id_flag flag) {
if (flag == SCRIPT_ID)
- id = sm_seg_get (self, id);
- VERIFY ( sm_check (self, id), "invalid seg id" );
+ id = sm_seg_get(self, id);
+ VERIFY(sm_check(self, id), "invalid seg id");
if (self->heap[id]->data.script.lockers > 0)
self->heap[id]->data.script.lockers--;
}
-int sm_get_lockers (seg_manager_t* self, int id, id_flag flag) {
+int sm_get_lockers(seg_manager_t* self, int id, id_flag flag) {
if (flag == SCRIPT_ID)
- id = sm_seg_get (self, id);
- VERIFY ( sm_check (self, id), "invalid seg id" );
+ id = sm_seg_get(self, id);
+ VERIFY(sm_check(self, id), "invalid seg id");
return self->heap[id]->data.script.lockers;
}
-void sm_set_lockers (seg_manager_t* self, int lockers, int id, id_flag flag) {
+void sm_set_lockers(seg_manager_t* self, int lockers, int id, id_flag flag) {
if (flag == SCRIPT_ID)
- id = sm_seg_get (self, id);
- VERIFY ( sm_check (self, id), "invalid seg id" );
+ id = sm_seg_get(self, id);
+ VERIFY(sm_check(self, id), "invalid seg id");
self->heap[id]->data.script.lockers = lockers;
}
void
-sm_set_export_table_offset (struct _seg_manager_t* self, int offset, int id, id_flag flag)
-{
+sm_set_export_table_offset(struct _seg_manager_t* self, int offset, int id, id_flag flag) {
script_t *scr = &(self->heap[id]->data.script);
GET_SEGID();
@@ -688,8 +668,7 @@ sm_set_export_table_offset (struct _seg_manager_t* self, int offset, int id, id_
}
int
-sm_hash_segment_data(struct _seg_manager_t* self, int id)
-{
+sm_hash_segment_data(struct _seg_manager_t* self, int id) {
int i, len, hash_code = 0x55555555;
char *buf;
@@ -705,16 +684,14 @@ sm_hash_segment_data(struct _seg_manager_t* self, int id)
}
void
-sm_set_export_width(struct _seg_manager_t* self, int flag)
-{
+sm_set_export_width(struct _seg_manager_t* self, int flag) {
self->exports_wide = flag;
}
#if 0
// Unreferenced - removed
static guint16 *
-sm_get_export_table_offset (struct _seg_manager_t* self, int id, int flag, int *max)
-{
+sm_get_export_table_offset(struct _seg_manager_t* self, int id, int flag, int *max) {
GET_SEGID();
if (max)
*max = self->heap[id]->data.script.exports_nr;
@@ -723,28 +700,26 @@ sm_get_export_table_offset (struct _seg_manager_t* self, int id, int flag, int *
#endif
void
-sm_set_synonyms_offset (struct _seg_manager_t* self, int offset, int id, id_flag flag) {
+sm_set_synonyms_offset(struct _seg_manager_t* self, int offset, int id, id_flag flag) {
GET_SEGID();
- self->heap[id]->data.script.synonyms =
- self->heap[id]->data.script.buf + offset;
+ self->heap[id]->data.script.synonyms =
+ self->heap[id]->data.script.buf + offset;
}
byte *
-sm_get_synonyms(seg_manager_t *self, int id, id_flag flag)
-{
+sm_get_synonyms(seg_manager_t *self, int id, id_flag flag) {
GET_SEGID();
return self->heap[id]->data.script.synonyms;
}
void
-sm_set_synonyms_nr (struct _seg_manager_t* self, int nr, int id, id_flag flag) {
+sm_set_synonyms_nr(struct _seg_manager_t* self, int nr, int id, id_flag flag) {
GET_SEGID();
self->heap[id]->data.script.synonyms_nr = nr;
}
int
-sm_get_synonyms_nr (struct _seg_manager_t* self, int id, id_flag flag)
-{
+sm_get_synonyms_nr(struct _seg_manager_t* self, int id, id_flag flag) {
GET_SEGID();
return self->heap[id]->data.script.synonyms_nr;
}
@@ -752,8 +727,7 @@ sm_get_synonyms_nr (struct _seg_manager_t* self, int id, id_flag flag)
#if 0
// Unreferenced - removed
static int
-sm_get_heappos (struct _seg_manager_t* self, int id, int flag)
-{
+sm_get_heappos(struct _seg_manager_t* self, int id, int flag) {
GET_SEGID();
return 0;
}
@@ -762,26 +736,25 @@ sm_get_heappos (struct _seg_manager_t* self, int id, int flag)
#if 0
// Unreferenced - removed
static void
-sm_set_variables (struct _seg_manager_t* self, reg_t reg, int obj_index, reg_t variable_reg, int variable_index ) {
+sm_set_variables(struct _seg_manager_t* self, reg_t reg, int obj_index, reg_t variable_reg, int variable_index) {
script_t* script;
- VERIFY ( sm_check (self, reg.segment), "invalid seg id" );
- VERIFY ( self->heap[reg.segment], "invalid mem" );
-
+ VERIFY(sm_check(self, reg.segment), "invalid seg id");
+ VERIFY(self->heap[reg.segment], "invalid mem");
+
script = &(self->heap[reg.segment]->data.script);
- VERIFY( obj_index < script->objects_nr, "Invalid obj_index" );
+ VERIFY(obj_index < script->objects_nr, "Invalid obj_index");
- VERIFY( variable_index >= 0
- && variable_index < script->objects[obj_index].variables_nr,
- "Attempt to write to invalid variable number" );
+ VERIFY(variable_index >= 0
+ && variable_index < script->objects[obj_index].variables_nr,
+ "Attempt to write to invalid variable number");
script->objects[obj_index].variables[variable_index] = variable_reg;
}
#endif
static inline int
-_relocate_block(seg_manager_t *self, reg_t *block, int block_location, int block_items, seg_id_t segment, int location)
-{
+_relocate_block(seg_manager_t *self, reg_t *block, int block_location, int block_items, seg_id_t segment, int location) {
int rel = location - block_location;
int index;
@@ -795,7 +768,7 @@ _relocate_block(seg_manager_t *self, reg_t *block, int block_location, int block
if (rel & 1) {
sciprintf("Error: Attempt to relocate odd variable #%d.5e (relative to %04x)\n",
- index, block_location);
+ index, block_location);
return 0;
}
block[index].segment = segment; /* Perform relocation */
@@ -806,42 +779,38 @@ _relocate_block(seg_manager_t *self, reg_t *block, int block_location, int block
}
static inline int
-_relocate_local(seg_manager_t *self, script_t *scr, seg_id_t segment, int location)
-{
+_relocate_local(seg_manager_t *self, script_t *scr, seg_id_t segment, int location) {
if (scr->locals_block)
return _relocate_block(self,
- scr->locals_block->locals, scr->locals_offset,
- scr->locals_block->nr,
- segment, location);
+ scr->locals_block->locals, scr->locals_offset,
+ scr->locals_block->nr,
+ segment, location);
else
return 0; /* No hands, no cookies */
}
static inline int
-_relocate_object(seg_manager_t *self, object_t *obj, seg_id_t segment, int location)
-{
- return _relocate_block(self,
- obj->variables, obj->pos.offset, obj->variables_nr,
- segment, location);
+_relocate_object(seg_manager_t *self, object_t *obj, seg_id_t segment, int location) {
+ return _relocate_block(self,
+ obj->variables, obj->pos.offset, obj->variables_nr,
+ segment, location);
}
void
-sm_script_add_code_block(seg_manager_t *self, reg_t location)
-{
+sm_script_add_code_block(seg_manager_t *self, reg_t location) {
mem_obj_t *mobj = self->heap[location.segment];
script_t *scr;
int index;
- VERIFY( !(location.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to add a code block to non-script\n" );
+ VERIFY(!(location.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to add a code block to non-script\n");
scr = &(mobj->data.script);
- if (++scr->code_blocks_nr > scr->code_blocks_allocated)
- {
+ if (++scr->code_blocks_nr > scr->code_blocks_allocated) {
scr->code_blocks_allocated += DEFAULT_OBJECTS_INCREMENT;
scr->code = (code_block_t*)sci_realloc(scr->code, scr->code_blocks_allocated *
- sizeof(code_block_t));
+ sizeof(code_block_t));
}
index = scr->code_blocks_nr - 1;
@@ -850,26 +819,25 @@ sm_script_add_code_block(seg_manager_t *self, reg_t location)
}
void
-sm_script_relocate(seg_manager_t *self, reg_t block)
-{
+sm_script_relocate(seg_manager_t *self, reg_t block) {
mem_obj_t *mobj = self->heap[block.segment];
script_t *scr;
int count;
int i;
-
- VERIFY( !(block.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt relocate non-script\n" );
+
+ VERIFY(!(block.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt relocate non-script\n");
scr = &(mobj->data.script);
- VERIFY( block.offset < scr->buf_size
- && getUInt16(scr->buf + block.offset)*2 + block.offset < scr->buf_size,
- "Relocation block outside of script\n" );
+ VERIFY(block.offset < scr->buf_size
+ && getUInt16(scr->buf + block.offset)*2 + block.offset < scr->buf_size,
+ "Relocation block outside of script\n");
count = getUInt16(scr->buf + block.offset);
for (i = 0; i <= count; i++) {
- int pos = getUInt16(scr->buf + block.offset + 2 + (i*2));
+ int pos = getUInt16(scr->buf + block.offset + 2 + (i * 2));
if (!pos) continue; /* FIXME: A hack pending investigation */
if (!_relocate_local(self, scr, block.segment, pos)) {
@@ -882,57 +850,56 @@ sm_script_relocate(seg_manager_t *self, reg_t block)
for (k = 0; !done && k < scr->code_blocks_nr; k++) {
if (pos >= scr->code[k].pos.offset &&
- pos < scr->code[k].pos.offset+scr->code[k].size)
+ pos < scr->code[k].pos.offset + scr->code[k].size)
done = 1;
}
if (!done) {
sciprintf("While processing relocation block "PREG":\n",
- PRINT_REG(block));
- sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i+1, count);
+ PRINT_REG(block));
+ sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
if (scr->locals_block)
sciprintf("- locals: %d at %04x\n",
- scr->locals_block->nr,
- scr->locals_offset);
+ scr->locals_block->nr,
+ scr->locals_offset);
else
sciprintf("- No locals\n");
for (k = 0; k < scr->objects_nr; k++)
sciprintf("- obj#%d at %04x w/ %d vars\n",
- k,
- scr->objects[k].pos.offset,
- scr->objects[k].variables_nr);
+ k,
+ scr->objects[k].pos.offset,
+ scr->objects[k].variables_nr);
// SQ3 script 71 has broken relocation entries.
// Since this is mainstream, we can't break out as we used to do.
sciprintf("Trying to continue anyway...\n");
-// BREAKPOINT();
+// BREAKPOINT();
}
}
}
}
void
-sm_heap_relocate(seg_manager_t *self, state_t *s, reg_t block)
-{
+sm_heap_relocate(seg_manager_t *self, state_t *s, reg_t block) {
mem_obj_t *mobj = self->heap[block.segment];
script_t *scr;
int count;
int i;
-
- VERIFY( !(block.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt relocate non-script\n" );
+
+ VERIFY(!(block.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt relocate non-script\n");
scr = &(mobj->data.script);
- VERIFY( block.offset < scr->heap_size
- && getUInt16(scr->heap_start + block.offset)*2 + block.offset < scr->buf_size,
- "Relocation block outside of script\n" );
+ VERIFY(block.offset < scr->heap_size
+ && getUInt16(scr->heap_start + block.offset)*2 + block.offset < scr->buf_size,
+ "Relocation block outside of script\n");
- if (scr->relocated) return;
+ if (scr->relocated) return;
scr->relocated = 1;
count = getUInt16(scr->heap_start + block.offset);
for (i = 0; i < count; i++) {
- int pos = getUInt16(scr->heap_start + block.offset + 2 + (i*2)) + scr->script_size;
+ int pos = getUInt16(scr->heap_start + block.offset + 2 + (i * 2)) + scr->script_size;
if (!_relocate_local(self, scr, block.segment, pos)) {
int k, done = 0;
@@ -944,19 +911,19 @@ sm_heap_relocate(seg_manager_t *self, state_t *s, reg_t block)
if (!done) {
sciprintf("While processing relocation block "PREG":\n",
- PRINT_REG(block));
- sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i+1, count);
+ PRINT_REG(block));
+ sciprintf("Relocation failed for index %04x (%d/%d)\n", pos, i + 1, count);
if (scr->locals_block)
sciprintf("- locals: %d at %04x\n",
- scr->locals_block->nr,
- scr->locals_offset);
+ scr->locals_block->nr,
+ scr->locals_offset);
else
sciprintf("- No locals\n");
for (k = 0; k < scr->objects_nr; k++)
sciprintf("- obj#%d at %04x w/ %d vars\n",
- k,
- scr->objects[k].pos.offset,
- scr->objects[k].variables_nr);
+ k,
+ scr->objects[k].pos.offset,
+ scr->objects[k].variables_nr);
sciprintf("Triggering breakpoint...\n");
BREAKPOINT();
}
@@ -970,8 +937,7 @@ reg_t
get_class_address(state_t *s, int classnr, int lock, reg_t caller);
static object_t *
-sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
-{
+sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos) {
mem_obj_t *mobj = self->heap[obj_pos.segment];
script_t *scr;
object_t *obj;
@@ -979,13 +945,13 @@ sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
unsigned int base = obj_pos.offset - SCRIPT_OBJECT_MAGIC_OFFSET;
reg_t temp;
- VERIFY( !(obj_pos.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to initialize object in non-script\n" );
+ VERIFY(!(obj_pos.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to initialize object in non-script\n");
scr = &(mobj->data.script);
- VERIFY( base < scr->buf_size,
- "Attempt to initialize object beyond end of script\n" );
+ VERIFY(base < scr->buf_size,
+ "Attempt to initialize object beyond end of script\n");
if (!scr->objects) {
scr->objects_allocated = DEFAULT_OBJECTS;
@@ -994,9 +960,9 @@ sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
if (scr->objects_nr == scr->objects_allocated) {
scr->objects_allocated += DEFAULT_OBJECTS_INCREMENT;
scr->objects = (object_t*)sci_realloc(scr->objects,
- sizeof(object_t)
- * scr->objects_allocated);
-
+ sizeof(object_t)
+ * scr->objects_allocated);
+
}
temp = make_reg(obj_pos.segment, base);
@@ -1005,12 +971,12 @@ sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
obj = scr->objects + id;
- VERIFY( base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size,
- "Function area pointer stored beyond end of script\n" );
-
+ VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size,
+ "Function area pointer stored beyond end of script\n");
+
{
- byte *data = (byte *) (scr->buf + base);
- int funct_area = getUInt16( data + SCRIPT_FUNCTAREAPTR_OFFSET );
+ byte *data = (byte *)(scr->buf + base);
+ int funct_area = getUInt16(data + SCRIPT_FUNCTAREAPTR_OFFSET);
int variables_nr;
int functions_nr;
int is_class;
@@ -1019,17 +985,17 @@ sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
obj->flags = 0;
obj->pos = temp;
- VERIFY ( base + funct_area < scr->buf_size,
- "Function area pointer references beyond end of script" );
+ VERIFY(base + funct_area < scr->buf_size,
+ "Function area pointer references beyond end of script");
- variables_nr = getUInt16( data + SCRIPT_SELECTORCTR_OFFSET );
- functions_nr = getUInt16( data + funct_area - 2 );
- is_class = getUInt16( data + SCRIPT_INFO_OFFSET ) & SCRIPT_INFO_CLASS;
+ variables_nr = getUInt16(data + SCRIPT_SELECTORCTR_OFFSET);
+ functions_nr = getUInt16(data + funct_area - 2);
+ is_class = getUInt16(data + SCRIPT_INFO_OFFSET) & SCRIPT_INFO_CLASS;
- VERIFY ( base + funct_area + functions_nr * 2
- /* add again for classes, since those also store selectors */
- + (is_class? functions_nr * 2 : 0) < scr->buf_size,
- "Function area extends beyond end of script" );
+ VERIFY(base + funct_area + functions_nr * 2
+ /* add again for classes, since those also store selectors */
+ + (is_class ? functions_nr * 2 : 0) < scr->buf_size,
+ "Function area extends beyond end of script");
obj->variables_nr = variables_nr;
obj->variables = (reg_t*)sci_malloc(sizeof(reg_t) * variables_nr);
@@ -1037,32 +1003,31 @@ sm_script_obj_init0(seg_manager_t *self, state_t *s, reg_t obj_pos)
obj->methods_nr = functions_nr;
obj->base = scr->buf;
obj->base_obj = data;
- obj->base_method = (guint16 *) (data + funct_area);
+ obj->base_method = (guint16 *)(data + funct_area);
obj->base_vars = NULL;
for (i = 0; i < variables_nr; i++)
- obj->variables[i] = make_reg(0, getUInt16(data + (i*2)));
+ obj->variables[i] = make_reg(0, getUInt16(data + (i * 2)));
}
return obj;
}
static object_t *
-sm_script_obj_init11(seg_manager_t *self, state_t *s, reg_t obj_pos)
-{
+sm_script_obj_init11(seg_manager_t *self, state_t *s, reg_t obj_pos) {
mem_obj_t *mobj = self->heap[obj_pos.segment];
script_t *scr;
object_t *obj;
int id;
int base = obj_pos.offset;
- VERIFY( !(obj_pos.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to initialize object in non-script\n" );
+ VERIFY(!(obj_pos.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to initialize object in non-script\n");
scr = &(mobj->data.script);
- VERIFY( base < scr->buf_size,
- "Attempt to initialize object beyond end of script\n" );
+ VERIFY(base < scr->buf_size,
+ "Attempt to initialize object beyond end of script\n");
if (!scr->objects) {
scr->objects_allocated = DEFAULT_OBJECTS;
@@ -1071,9 +1036,9 @@ sm_script_obj_init11(seg_manager_t *self, state_t *s, reg_t obj_pos)
if (scr->objects_nr == scr->objects_allocated) {
scr->objects_allocated += DEFAULT_OBJECTS_INCREMENT;
scr->objects = (object_t*)sci_realloc(scr->objects,
- sizeof(object_t)
- * scr->objects_allocated);
-
+ sizeof(object_t)
+ * scr->objects_allocated);
+
}
id = int_hash_map_check_value(scr->obj_indices, obj_pos.offset, 1, NULL);
@@ -1081,33 +1046,33 @@ sm_script_obj_init11(seg_manager_t *self, state_t *s, reg_t obj_pos)
obj = scr->objects + id;
- VERIFY( base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size,
- "Function area pointer stored beyond end of script\n" );
-
+ VERIFY(base + SCRIPT_FUNCTAREAPTR_OFFSET < scr->buf_size,
+ "Function area pointer stored beyond end of script\n");
+
{
- byte *data = (byte *) (scr->buf + base);
- guint16 *funct_area = (guint16 *) (scr->buf + getUInt16( data + 6 ));
- guint16 *prop_area = (guint16 *) (scr->buf + getUInt16( data + 4 ));
+ byte *data = (byte *)(scr->buf + base);
+ guint16 *funct_area = (guint16 *)(scr->buf + getUInt16(data + 6));
+ guint16 *prop_area = (guint16 *)(scr->buf + getUInt16(data + 4));
int variables_nr;
int functions_nr;
int is_class;
int i;
-
+
obj->flags = 0;
obj->pos = obj_pos;
- VERIFY ( (byte *) funct_area < scr->buf + scr->buf_size,
- "Function area pointer references beyond end of script" );
+ VERIFY((byte *) funct_area < scr->buf + scr->buf_size,
+ "Function area pointer references beyond end of script");
variables_nr = getUInt16(data + 2);
functions_nr = *funct_area;
- is_class = getUInt16( data + 14 ) & SCRIPT_INFO_CLASS;
+ is_class = getUInt16(data + 14) & SCRIPT_INFO_CLASS;
obj->base_method = funct_area;
obj->base_vars = prop_area;
- VERIFY ( ((byte *) funct_area + functions_nr) < scr->buf + scr->buf_size,
- "Function area extends beyond end of script" );
+ VERIFY(((byte *) funct_area + functions_nr) < scr->buf + scr->buf_size,
+ "Function area extends beyond end of script");
obj->variables_nr = variables_nr;
obj->variable_names_nr = variables_nr;
@@ -1118,24 +1083,22 @@ sm_script_obj_init11(seg_manager_t *self, state_t *s, reg_t obj_pos)
obj->base_obj = data;
for (i = 0; i < variables_nr; i++)
- obj->variables[i] = make_reg(0, getUInt16(data + (i*2)));
+ obj->variables[i] = make_reg(0, getUInt16(data + (i * 2)));
}
return obj;
}
object_t *
-sm_script_obj_init(seg_manager_t *self, state_t *s, reg_t obj_pos)
-{
- if (!self->sci1_1)
+sm_script_obj_init(seg_manager_t *self, state_t *s, reg_t obj_pos) {
+ if (!self->sci1_1)
return sm_script_obj_init0(self, s, obj_pos);
else
return sm_script_obj_init11(self, s, obj_pos);
}
static local_variables_t *
-_sm_alloc_locals_segment(seg_manager_t *self, script_t *scr, int count)
-{
+_sm_alloc_locals_segment(seg_manager_t *self, script_t *scr, int count) {
if (!count) { /* No locals */
scr->locals_segment = 0;
scr->locals_block = NULL;
@@ -1151,7 +1114,7 @@ _sm_alloc_locals_segment(seg_manager_t *self, script_t *scr, int count)
VERIFY(mobj->data.locals.script_id == scr->nr, "Re-used locals segment belonged to other script");
} else
mobj = alloc_nonscript_segment(self, MEM_OBJ_LOCALS,
- &scr->locals_segment);
+ &scr->locals_segment);
locals = scr->locals_block = &(mobj->data.locals);
locals->script_id = scr->nr;
@@ -1163,13 +1126,12 @@ _sm_alloc_locals_segment(seg_manager_t *self, script_t *scr, int count)
}
void
-sm_script_initialise_locals_zero(seg_manager_t *self, seg_id_t seg, int count)
-{
+sm_script_initialise_locals_zero(seg_manager_t *self, seg_id_t seg, int count) {
mem_obj_t *mobj = self->heap[seg];
script_t *scr;
- VERIFY( !(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to initialize locals in non-script\n" );
+ VERIFY(!(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to initialize locals in non-script\n");
scr = &(mobj->data.script);
@@ -1179,20 +1141,19 @@ sm_script_initialise_locals_zero(seg_manager_t *self, seg_id_t seg, int count)
}
void
-sm_script_initialise_locals(seg_manager_t *self, reg_t location)
-{
+sm_script_initialise_locals(seg_manager_t *self, reg_t location) {
mem_obj_t *mobj = self->heap[location.segment];
unsigned int count;
script_t *scr;
local_variables_t *locals;
- VERIFY( !(location.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to initialize locals in non-script\n" );
+ VERIFY(!(location.segment >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to initialize locals in non-script\n");
scr = &(mobj->data.script);
- VERIFY( location.offset + 1 < scr->buf_size,
- "Locals beyond end of script\n" );
+ VERIFY(location.offset + 1 < scr->buf_size,
+ "Locals beyond end of script\n");
if (self->sci1_1)
count = getUInt16(scr->buf + location.offset - 2);
@@ -1204,43 +1165,39 @@ sm_script_initialise_locals(seg_manager_t *self, reg_t location)
if (!(location.offset + count * 2 + 1 < scr->buf_size)) {
sciprintf("Locals extend beyond end of script: offset %04x, count %x vs size %x\n",
- location.offset, count, scr->buf_size);
+ location.offset, count, scr->buf_size);
count = (scr->buf_size - location.offset) >> 1;
}
locals = _sm_alloc_locals_segment(self, scr, count);
if (locals) {
int i;
- byte *base = (byte *) (scr->buf + location.offset);
+ byte *base = (byte *)(scr->buf + location.offset);
for (i = 0; i < count; i++)
- locals->locals[i].offset = getUInt16(base + i*2);
+ locals->locals[i].offset = getUInt16(base + i * 2);
}
}
void
-sm_script_relocate_exports_sci11(seg_manager_t *self, int seg)
-{
+sm_script_relocate_exports_sci11(seg_manager_t *self, int seg) {
mem_obj_t *mobj = self->heap[seg];
script_t *scr;
int i;
int location;
- VERIFY( !(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to relocate exports in non-script\n" );
+ VERIFY(!(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to relocate exports in non-script\n");
scr = &(mobj->data.script);
- for (i = 0; i < scr->exports_nr; i++)
- {
+ for (i = 0; i < scr->exports_nr; i++) {
/* We are forced to use an ugly heuristic here to distinguish function
exports from object/class exports. The former kind points into the
script resource, the latter into the heap resource. */
location = getUInt16((byte *)(scr->export_table + i));
- if (getUInt16(scr->heap_start + location) == SCRIPT_OBJECT_MAGIC_NUMBER)
- {
- putInt16((byte *)(scr->export_table + i), location+scr->heap_start-scr->buf);
- } else
- {
+ if (getUInt16(scr->heap_start + location) == SCRIPT_OBJECT_MAGIC_NUMBER) {
+ putInt16((byte *)(scr->export_table + i), location + scr->heap_start - scr->buf);
+ } else {
/* Otherwise it's probably a function export,
and we don't need to do anything. */
}
@@ -1249,31 +1206,28 @@ sm_script_relocate_exports_sci11(seg_manager_t *self, int seg)
}
void
-sm_script_initialise_objects_sci11(seg_manager_t *self, state_t *s, int seg)
-{
+sm_script_initialise_objects_sci11(seg_manager_t *self, state_t *s, int seg) {
mem_obj_t *mobj = self->heap[seg];
script_t *scr;
byte *seeker;
- VERIFY( !(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to relocate exports in non-script\n" );
+ VERIFY(!(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to relocate exports in non-script\n");
scr = &(mobj->data.script);
seeker = scr->heap_start + 4 + getUInt16(scr->heap_start + 2) * 2;
- while (getUInt16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER)
- {
+ while (getUInt16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER) {
- if (getUInt16(seeker + 14) & SCRIPT_INFO_CLASS)
- {
- int classpos = seeker-scr->buf;
+ if (getUInt16(seeker + 14) & SCRIPT_INFO_CLASS) {
+ int classpos = seeker - scr->buf;
int species = getUInt16(seeker + 10);
if (species < 0 || species >= s->classtable_size) {
sciprintf("Invalid species %d(0x%x) not in interval "
- "[0,%d) while instantiating script %d\n",
- species, species, s->classtable_size,
- scr->nr);
+ "[0,%d) while instantiating script %d\n",
+ species, species, s->classtable_size,
+ scr->nr);
script_debug_flag = script_error_flag = 1;
return;
}
@@ -1286,20 +1240,18 @@ sm_script_initialise_objects_sci11(seg_manager_t *self, state_t *s, int seg)
}
seeker = scr->heap_start + 4 + getUInt16(scr->heap_start + 2) * 2;
- while (getUInt16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER)
- {
+ while (getUInt16(seeker) == SCRIPT_OBJECT_MAGIC_NUMBER) {
reg_t reg;
object_t *obj;
reg.segment = seg;
- reg.offset = seeker-scr->buf;
+ reg.offset = seeker - scr->buf;
obj = sm_script_obj_init(&s->seg_manager, s, reg);
#if 0
- if (obj->variables[5].offset != 0xffff)
- {
+ if (obj->variables[5].offset != 0xffff) {
obj->variables[5] =
- INST_LOOKUP_CLASS(obj->variables[5].offset);
+ INST_LOOKUP_CLASS(obj->variables[5].offset);
base_obj = obj_get(s, obj->variables[5]);
@@ -1308,29 +1260,28 @@ sm_script_initialise_objects_sci11(seg_manager_t *self, state_t *s, int seg)
}
#endif
- /* Copy base from species class, as we need its selector IDs */
+ /* Copy base from species class, as we need its selector IDs */
obj->variables[6] =
- INST_LOOKUP_CLASS(obj->variables[6].offset);
-
+ INST_LOOKUP_CLASS(obj->variables[6].offset);
+
seeker += getUInt16(seeker + 2) * 2;
}
}
void
-sm_script_free_unused_objects(seg_manager_t *self, seg_id_t seg)
-{
+sm_script_free_unused_objects(seg_manager_t *self, seg_id_t seg) {
mem_obj_t *mobj = self->heap[seg];
script_t *scr;
- VERIFY( !(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
- "Attempt to free unused objects in non-script\n" );
+ VERIFY(!(seg >= self->heap_size || mobj->type != MEM_OBJ_SCRIPT),
+ "Attempt to free unused objects in non-script\n");
scr = &(mobj->data.script);
if (scr->objects_allocated > scr->objects_nr) {
if (scr->objects_nr)
scr->objects = (object_t*)sci_realloc(scr->objects, sizeof(object_t)
- * scr->objects_nr);
+ * scr->objects_nr);
else {
if (scr->objects_allocated)
sci_free(scr->objects);
@@ -1340,8 +1291,7 @@ sm_script_free_unused_objects(seg_manager_t *self, seg_id_t seg)
}
}
-static inline char *dynprintf(char *msg, ...)
-{
+static inline char *dynprintf(char *msg, ...) {
va_list argp;
char *buf = (char*)sci_malloc(strlen(msg) + 100);
@@ -1354,8 +1304,7 @@ static inline char *dynprintf(char *msg, ...)
dstack_t *
-sm_allocate_stack(seg_manager_t *self, int size, seg_id_t *segid)
-{
+sm_allocate_stack(seg_manager_t *self, int size, seg_id_t *segid) {
mem_obj_t *memobj = alloc_nonscript_segment(self, MEM_OBJ_STACK, segid);
dstack_t *retval = &(memobj->data.stack);
@@ -1366,8 +1315,7 @@ sm_allocate_stack(seg_manager_t *self, int size, seg_id_t *segid)
}
sys_strings_t *
-sm_allocate_sys_strings(seg_manager_t *self, seg_id_t *segid)
-{
+sm_allocate_sys_strings(seg_manager_t *self, seg_id_t *segid) {
mem_obj_t *memobj = alloc_nonscript_segment(self, MEM_OBJ_SYS_STRINGS, segid);
sys_strings_t *retval = &(memobj->data.sys_strings);
@@ -1377,8 +1325,7 @@ sm_allocate_sys_strings(seg_manager_t *self, seg_id_t *segid)
}
seg_id_t
-sm_allocate_reserved_segment(seg_manager_t *self, char *src_name)
-{
+sm_allocate_reserved_segment(seg_manager_t *self, char *src_name) {
seg_id_t segid;
mem_obj_t *memobj = alloc_nonscript_segment(self, MEM_OBJ_RESERVED, &segid);
char *name = sci_strdup(src_name);
@@ -1389,36 +1336,34 @@ sm_allocate_reserved_segment(seg_manager_t *self, char *src_name)
}
guint16
-sm_validate_export_func(struct _seg_manager_t* self, int pubfunct, int seg ) {
- script_t* script;
+sm_validate_export_func(struct _seg_manager_t* self, int pubfunct, int seg) {
+ script_t* script;
guint16 offset;
- VERIFY ( sm_check (self, seg), "invalid seg id" );
- VERIFY (self->heap[seg]->type == MEM_OBJ_SCRIPT, "Can only validate exports on scripts");
+ VERIFY(sm_check(self, seg), "invalid seg id");
+ VERIFY(self->heap[seg]->type == MEM_OBJ_SCRIPT, "Can only validate exports on scripts");
script = &self->heap[seg]->data.script;
- if( script->exports_nr <= pubfunct ) {
- sciprintf( "pubfunct is invalid" );
+ if (script->exports_nr <= pubfunct) {
+ sciprintf("pubfunct is invalid");
return 0;
}
if (self->exports_wide) pubfunct *= 2;
- offset = getUInt16( (byte*)(script->export_table + pubfunct) );
- VERIFY ( offset < script->buf_size, "invalid export function pointer" );
+ offset = getUInt16((byte*)(script->export_table + pubfunct));
+ VERIFY(offset < script->buf_size, "invalid export function pointer");
return offset;
}
void
-sm_free_hunk_entry(seg_manager_t *self, reg_t addr)
-{
+sm_free_hunk_entry(seg_manager_t *self, reg_t addr) {
sm_free_hunk(self, addr);
}
hunk_t *
-sm_alloc_hunk_entry(seg_manager_t *self, const char *hunk_type, int size, reg_t *reg)
-{
+sm_alloc_hunk_entry(seg_manager_t *self, const char *hunk_type, int size, reg_t *reg) {
hunk_t *h = sm_alloc_hunk(self, reg);
if (!h)
@@ -1432,17 +1377,15 @@ sm_alloc_hunk_entry(seg_manager_t *self, const char *hunk_type, int size, reg_t
}
static void
-_clone_cleanup(clone_t *clone)
-{
+_clone_cleanup(clone_t *clone) {
if (clone->variables)
sci_free(clone->variables); /* Free the dynamically allocated memory part */
}
static void
-_hunk_cleanup(hunk_t *hunk)
-{
+_hunk_cleanup(hunk_t *hunk) {
if (hunk->mem)
- free (hunk->mem);
+ free(hunk->mem);
}
DEFINE_HEAPENTRY(list, 8, 4)
@@ -1494,17 +1437,16 @@ DEFINE_ALLOC_DEALLOC(static, hunk, MEM_OBJ_HUNK, hunks)
byte *
-sm_dereference(seg_manager_t *self, reg_t pointer, int *size)
-{
+sm_dereference(seg_manager_t *self, reg_t pointer, int *size) {
mem_obj_t *mobj;
byte *base = NULL;
int count;
if (!pointer.segment
- || (pointer.segment >= self->heap_size)
- || !self->heap[pointer.segment]) {
+ || (pointer.segment >= self->heap_size)
+ || !self->heap[pointer.segment]) {
sciprintf("Error: Attempt to dereference invalid pointer "PREG"!\n",
- PRINT_REG(pointer));
+ PRINT_REG(pointer));
return NULL; /* Invalid */
}
@@ -1516,13 +1458,13 @@ sm_dereference(seg_manager_t *self, reg_t pointer, int *size)
case MEM_OBJ_SCRIPT:
if (pointer.offset > mobj->data.script.buf_size) {
sciprintf("Error: Attempt to dereference invalid pointer "PREG
- " into script segment (script size=%d)\n",
- PRINT_REG(pointer), mobj->data.script.buf_size);
+ " into script segment (script size=%d)\n",
+ PRINT_REG(pointer), mobj->data.script.buf_size);
return NULL;
}
if (size)
*size = mobj->data.script.buf_size - pointer.offset;
- return (byte *) (mobj->data.script.buf + pointer.offset);
+ return (byte *)(mobj->data.script.buf + pointer.offset);
break;
case MEM_OBJ_LOCALS:
@@ -1544,24 +1486,24 @@ sm_dereference(seg_manager_t *self, reg_t pointer, int *size)
if (size)
*size = mobj->data.sys_strings.strings[pointer.offset].max_size;
if (pointer.offset < SYS_STRINGS_MAX
- && mobj->data.sys_strings.strings[pointer.offset].name)
- return (byte *) (mobj->data.sys_strings.strings[pointer.offset].value);
+ && mobj->data.sys_strings.strings[pointer.offset].name)
+ return (byte *)(mobj->data.sys_strings.strings[pointer.offset].value);
else {
sciprintf("Error: Attempt to dereference invalid pointer "PREG"!\n",
- PRINT_REG(pointer));
+ PRINT_REG(pointer));
return NULL;
}
case MEM_OBJ_RESERVED:
sciprintf("Error: Trying to dereference pointer "PREG" to reserved segment `%s'!\n",
- mobj->data.reserved);
+ mobj->data.reserved);
return NULL;
break;
default:
sciprintf("Error: Trying to dereference pointer "PREG" to inappropriate"
- " segment!\n",
- PRINT_REG(pointer));
+ " segment!\n",
+ PRINT_REG(pointer));
return NULL;
}
@@ -1569,13 +1511,12 @@ sm_dereference(seg_manager_t *self, reg_t pointer, int *size)
*size = count;
return
- base + pointer.offset;
+ base + pointer.offset;
}
unsigned char *
-sm_alloc_dynmem(seg_manager_t *self, int size, const char *descr, reg_t *addr)
-{
+sm_alloc_dynmem(seg_manager_t *self, int size, const char *descr, reg_t *addr) {
seg_id_t seg;
mem_obj_t *mobj = alloc_nonscript_segment(self, MEM_OBJ_DYNMEM, &seg);
*addr = make_reg(seg, 0);
@@ -1589,19 +1530,17 @@ sm_alloc_dynmem(seg_manager_t *self, int size, const char *descr, reg_t *addr)
mobj->data.dynmem.description = descr;
- return (unsigned char *) (mobj->data.dynmem.buf);
+ return (unsigned char *)(mobj->data.dynmem.buf);
}
const char *
-sm_get_description(seg_manager_t *self, reg_t addr)
-{
+sm_get_description(seg_manager_t *self, reg_t addr) {
mem_obj_t *mobj = self->heap[addr.segment];
if (addr.segment >= self->heap_size)
- return "";
+ return "";
- switch (mobj->type)
- {
+ switch (mobj->type) {
case MEM_OBJ_DYNMEM:
return mobj->data.dynmem.description;
default:
@@ -1610,13 +1549,12 @@ sm_get_description(seg_manager_t *self, reg_t addr)
}
int
-sm_free_dynmem(seg_manager_t *self, reg_t addr)
-{
-
+sm_free_dynmem(seg_manager_t *self, reg_t addr) {
+
if (addr.segment <= 0
- || addr.segment >= self->heap_size
- || !self->heap[addr.segment]
- || self->heap[addr.segment]->type != MEM_OBJ_DYNMEM)
+ || addr.segment >= self->heap_size
+ || !self->heap[addr.segment]
+ || self->heap[addr.segment]->type != MEM_OBJ_DYNMEM)
return 1; /* error */
_sm_deallocate(self, addr.segment, 1);
@@ -1630,8 +1568,7 @@ sm_free_dynmem(seg_manager_t *self, reg_t addr)
static void
-free_at_address_stub (seg_interface_t *self, reg_t sub_addr)
-{
+free_at_address_stub(seg_interface_t *self, reg_t sub_addr) {
// sciprintf(" Request to free "PREG"\n", PRINT_REG(sub_addr));
/* STUB */
}
@@ -1639,87 +1576,78 @@ free_at_address_stub (seg_interface_t *self, reg_t sub_addr)
static reg_t
-find_canonic_address_base (seg_interface_t *self, reg_t addr)
-{
+find_canonic_address_base(seg_interface_t *self, reg_t addr) {
addr.offset = 0;
return addr;
}
static reg_t
-find_canonic_address_id (seg_interface_t *self, reg_t addr)
-{
+find_canonic_address_id(seg_interface_t *self, reg_t addr) {
return addr;
}
static void
-free_at_address_nop (seg_interface_t *self, reg_t sub_addr)
-{
+free_at_address_nop(seg_interface_t *self, reg_t sub_addr) {
}
static void
-list_all_deallocatable_nop (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_deallocatable_nop(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
}
static void
-list_all_deallocatable_base (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
- (*note) (param, make_reg (self->seg_id, 0));
+list_all_deallocatable_base(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
+ (*note)(param, make_reg(self->seg_id, 0));
}
static void
-list_all_outgoing_references_nop (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_nop(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
}
static void
-deallocate_self (seg_interface_t *self)
-{
- sci_free (self);
+deallocate_self(seg_interface_t *self) {
+ sci_free(self);
}
static void
-free_at_address_script (seg_interface_t *self, reg_t addr)
-{
+free_at_address_script(seg_interface_t *self, reg_t addr) {
script_t *script;
VERIFY(self->mobj->type == MEM_OBJ_SCRIPT, "Trying to free a non-script!");
script = &(self->mobj->data.script);
-/*
- sciprintf("[GC] Freeing script "PREG"\n", PRINT_REG(addr));
- if (script->locals_segment)
- sciprintf("[GC] Freeing locals %04x:0000\n", script->locals_segment);
-*/
+ /*
+ sciprintf("[GC] Freeing script "PREG"\n", PRINT_REG(addr));
+ if (script->locals_segment)
+ sciprintf("[GC] Freeing locals %04x:0000\n", script->locals_segment);
+ */
if (script->marked_as_deleted)
sm_deallocate_script(self->segmgr, script->nr);
}
static void
-list_all_outgoing_references_script (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_script(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
script_t *script = &(self->mobj->data.script);
if (addr.offset <= script->buf_size
- && addr.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
- && RAW_IS_OBJECT(script->buf + addr.offset)) {
+ && addr.offset >= -SCRIPT_OBJECT_MAGIC_OFFSET
+ && RAW_IS_OBJECT(script->buf + addr.offset)) {
int idx = RAW_GET_CLASS_INDEX(script, addr);
if (idx >= 0 && idx < script->objects_nr) {
object_t *obj = script->objects + idx;
int i;
-
+
/* Note all local variables, if we have a local variable environment */
if (script->locals_segment)
- (*note) (param, make_reg(script->locals_segment, 0));
+ (*note)(param, make_reg(script->locals_segment, 0));
for (i = 0; i < obj->variables_nr; i++)
- (*note) (param, obj->variables[i]);
+ (*note)(param, obj->variables[i]);
} else {
fprintf(stderr, "Request for outgoing script-object reference at "PREG" yielded invalid index %d\n", PRINT_REG(addr), idx);
}
} else {
-/* fprintf(stderr, "Unexpected request for outgoing script-object references at "PREG"\n", PRINT_REG(addr));*/
- /* Happens e.g. when we're looking into strings */
+ /* fprintf(stderr, "Unexpected request for outgoing script-object references at "PREG"\n", PRINT_REG(addr));*/
+ /* Happens e.g. when we're looking into strings */
}
}
@@ -1748,21 +1676,19 @@ static seg_interface_t seg_interface_script = {
(*note) (param, make_reg(self->seg_id, i));
static void
-list_all_deallocatable_clones (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_deallocatable_clones(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
LIST_ALL_DEALLOCATABLE(clone, clones);
}
static void
-list_all_outgoing_references_clones (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_clones(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
mem_obj_t *mobj = self->mobj;
clone_table_t *clone_table = &(mobj->data.clones);
clone_t *clone;
int i;
- assert (addr.segment == self->seg_id);
-
+ assert(addr.segment == self->seg_id);
+
if (!(ENTRY_IS_VALID(clone_table, addr.offset))) {
fprintf(stderr, "Unexpected request for outgoing references from clone at "PREG"\n", PRINT_REG(addr));
// BREAKPOINT();
@@ -1773,37 +1699,36 @@ list_all_outgoing_references_clones (seg_interface_t *self, state_t *s, reg_t ad
/* Emit all member variables (including references to the 'super' delegate) */
for (i = 0; i < clone->variables_nr; i++)
- (*note) (param, clone->variables[i]);
+ (*note)(param, clone->variables[i]);
/* Note that this also includes the 'base' object, which is part of the script and therefore also
** emits the locals. */
- (*note) (param, clone->pos);
+ (*note)(param, clone->pos);
// sciprintf("[GC] Reporting clone-pos "PREG"\n", PRINT_REG(clone->pos));
}
void
-free_at_address_clones(seg_interface_t *self, reg_t addr)
-{
+free_at_address_clones(seg_interface_t *self, reg_t addr) {
object_t *victim_obj;
- assert (addr.segment == self->seg_id);
+ assert(addr.segment == self->seg_id);
victim_obj = &(self->mobj->data.clones.table[addr.offset].entry);
#ifdef GC_DEBUG
if (!(victim_obj->flags & OBJECT_FLAG_FREED))
sciprintf("[GC] Warning: Clone "PREG" not reachable and not freed (freeing now)\n",
- PRINT_REG(addr));
+ PRINT_REG(addr));
# ifdef GC_DEBUG_VERBOSE
else
sciprintf("[GC-DEBUG] Clone "PREG": Freeing\n", PRINT_REG(addr));
# endif
#endif
-/*
- sciprintf("[GC] Clone "PREG": Freeing\n", PRINT_REG(addr));
- sciprintf("[GC] Clone had pos "PREG"\n", PRINT_REG(victim_obj->pos));
-*/
+ /*
+ sciprintf("[GC] Clone "PREG": Freeing\n", PRINT_REG(addr));
+ sciprintf("[GC] Clone had pos "PREG"\n", PRINT_REG(victim_obj->pos));
+ */
sci_free(victim_obj->variables);
victim_obj->variables = NULL;
sm_free_clone(self->segmgr, addr);
@@ -1825,27 +1750,25 @@ static seg_interface_t seg_interface_clones = {
static reg_t
-find_canonic_address_locals (seg_interface_t *self, reg_t addr)
-{
+find_canonic_address_locals(seg_interface_t *self, reg_t addr) {
local_variables_t *locals = &(self->mobj->data.locals);
/* Reference the owning script */
seg_id_t owner_seg = sm_seg_get(self->segmgr, locals->script_id);
- assert (owner_seg >= 0);
+ assert(owner_seg >= 0);
return make_reg(owner_seg, 0);
}
static void
-list_all_outgoing_references_locals (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_locals(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
local_variables_t *locals = &(self->mobj->data.locals);
int i;
- assert (addr.segment == self->seg_id);
+ assert(addr.segment == self->seg_id);
for (i = 0; i < locals->nr; i++)
- (*note) (param, locals->locals[i]);
+ (*note)(param, locals->locals[i]);
}
/*-------------------- locals --------------------*/
@@ -1864,13 +1787,12 @@ static seg_interface_t seg_interface_locals = {
static void
-list_all_outgoing_references_stack (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_stack(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
int i;
-fprintf(stderr, "Emitting %d stack entries\n", self->mobj->data.stack.nr);
- for (i = 0; i < self->mobj->data.stack.nr; i++)
- (*note) (param, self->mobj->data.stack.entries[i]);
-fprintf(stderr, "DONE");
+ fprintf(stderr, "Emitting %d stack entries\n", self->mobj->data.stack.nr);
+ for (i = 0; i < self->mobj->data.stack.nr; i++)
+ (*note)(param, self->mobj->data.stack.entries[i]);
+ fprintf(stderr, "DONE");
}
/*-------------------- stack --------------------*/
@@ -1902,14 +1824,12 @@ static seg_interface_t seg_interface_sys_strings = {
};
static void
-list_all_deallocatable_list (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_deallocatable_list(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
LIST_ALL_DEALLOCATABLE(list, lists);
}
static void
-list_all_outgoing_references_list (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_list(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
list_table_t *table = &(self->mobj->data.lists);
list_t *list = &(table->table[addr.offset].entry);
@@ -1918,16 +1838,15 @@ list_all_outgoing_references_list (seg_interface_t *self, state_t *s, reg_t addr
return;
}
- note (param, list->first);
- note (param, list->last);
+ note(param, list->first);
+ note(param, list->last);
/* We could probably get away with just one of them, but
** let's be conservative here. */
}
static void
-free_at_address_lists (seg_interface_t *self, reg_t sub_addr)
-{
- sm_free_list (self->segmgr, sub_addr);
+free_at_address_lists(seg_interface_t *self, reg_t sub_addr) {
+ sm_free_list(self->segmgr, sub_addr);
}
/*-------------------- lists --------------------*/
@@ -1945,14 +1864,12 @@ static seg_interface_t seg_interface_lists = {
};
static void
-list_all_deallocatable_nodes (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_deallocatable_nodes(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
LIST_ALL_DEALLOCATABLE(node, nodes);
}
static void
-list_all_outgoing_references_nodes (seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_outgoing_references_nodes(seg_interface_t *self, state_t *s, reg_t addr, void *param, void (*note)(void*param, reg_t addr)) {
node_table_t *table = &(self->mobj->data.nodes);
node_t *node = &(table->table[addr.offset].entry);
@@ -1963,16 +1880,15 @@ list_all_outgoing_references_nodes (seg_interface_t *self, state_t *s, reg_t add
/* We need all four here. Can't just stick with 'pred' OR 'succ' because node operations allow us
** to walk around from any given node */
- note (param, node->pred);
- note (param, node->succ);
- note (param, node->key);
- note (param, node->value);
+ note(param, node->pred);
+ note(param, node->succ);
+ note(param, node->key);
+ note(param, node->value);
}
static void
-free_at_address_nodes (seg_interface_t *self, reg_t sub_addr)
-{
- sm_free_node (self->segmgr, sub_addr);
+free_at_address_nodes(seg_interface_t *self, reg_t sub_addr) {
+ sm_free_node(self->segmgr, sub_addr);
}
/*-------------------- nodes --------------------*/
@@ -1990,8 +1906,7 @@ static seg_interface_t seg_interface_nodes = {
};
static void
-list_all_deallocatable_hunk (seg_interface_t *self, void *param, void (*note) (void*param, reg_t addr))
-{
+list_all_deallocatable_hunk(seg_interface_t *self, void *param, void (*note)(void*param, reg_t addr)) {
LIST_ALL_DEALLOCATABLE(hunk, hunks);
}
@@ -2055,8 +1970,7 @@ static seg_interface_t* seg_interfaces[MEM_OBJ_MAX] = {
seg_interface_t *
-get_seg_interface(seg_manager_t *self, seg_id_t segid)
-{
+get_seg_interface(seg_manager_t *self, seg_id_t segid) {
mem_obj_t *mobj;
seg_interface_t *retval;
@@ -2065,10 +1979,10 @@ get_seg_interface(seg_manager_t *self, seg_id_t segid)
mobj = self->heap[segid];
retval = (seg_interface_t*)sci_malloc(sizeof(seg_interface_t));
- memcpy(retval, seg_interfaces[mobj->type - 1], sizeof (seg_interface_t));
+ memcpy(retval, seg_interfaces[mobj->type - 1], sizeof(seg_interface_t));
if (mobj->type != retval->type_id) {
- fprintf(stderr, "Improper segment interface for %d", mobj->type );
+ fprintf(stderr, "Improper segment interface for %d", mobj->type);
exit(1);
}