diff options
Diffstat (limited to 'core/include/instance_st.h')
-rw-r--r-- | core/include/instance_st.h | 158 |
1 files changed, 158 insertions, 0 deletions
diff --git a/core/include/instance_st.h b/core/include/instance_st.h new file mode 100644 index 0000000..9f732c1 --- /dev/null +++ b/core/include/instance_st.h @@ -0,0 +1,158 @@ +/* + * Copyright © 2006-2013 SplinterGU (Fenix/Bennugd) + * Copyright © 2002-2006 Fenix Team (Fenix) + * Copyright © 1999-2002 José Luis Cebrián Pagüe (Fenix) + * + * This file is part of Bennu - Game Development + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. + * + */ + +#ifndef __INSTANCE_ST_H +#define __INSTANCE_ST_H + +#define FIRST_INSTANCE_ID 0x00010000 +#define LAST_INSTANCE_ID 0x0001ffff + +#define STACK_RETURN_VALUE 0x8000 +#define STACK_SIZE_MASK 0x7FFF +#define STACK_SIZE 2048 + +/* Instancias. Una instancia se crea a partir de un proceso, pero en + * realidad es independiente del proceso original */ + +typedef struct _instance +{ + void * locdata ; + void * pridata ; + void * pubdata ; + + int * code ; + int * codeptr ; + + int exitcode ; + int errorcode ; + + int call_level ; + + struct _procdef * proc ; + + int private_size ; + int public_size ; + + int first_run ; + + /* General list - unsorted */ + + struct _instance * next ; + struct _instance * prev ; + + /* Linked list by priority */ + + struct _instance * next_by_priority ; + struct _instance * prev_by_priority ; + int last_priority ; + + /* Linked list by process_type */ + + struct _instance * next_by_type ; + struct _instance * prev_by_type ; + + /* Linked list by INSTANCE * */ + + struct _instance * next_by_instance ; + struct _instance * prev_by_instance ; + + /* Function support */ + + struct _instance * called_by ; + + /* The first integer at the stack is the stack size, + with optional NO_RETURN_VALUE mask. The stack contents follows */ + + int * stack ; + int * stack_ptr ; + + /* For debugging */ + + int switchval; + int switchval_string; + int cased; + + int breakpoint; + +} +INSTANCE ; + +/* Macros para acceder a datos locales o privados de una instancia */ + +#define LOCDWORD(a,b) ( *(uint32_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCWORD(a,b) ( *(uint16_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCBYTE(a,b) ( *(uint8_t *) ((uint8_t *)(a->locdata)+b) ) + +#define LOCINT32(a,b) ( *(int32_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCINT16(a,b) ( *(int16_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCINT8(a,b) ( *(int8_t *) ((uint8_t *)(a->locdata)+b) ) + +#define LOCUINT32(a,b) ( *(uint32_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCUINT16(a,b) ( *(uint16_t *) ((uint8_t *)(a->locdata)+b) ) +#define LOCUINT8(a,b) ( *(uint8_t *) ((uint8_t *)(a->locdata)+b) ) + + +#define PRIDWORD(a,b) ( *(uint32_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIWORD(a,b) ( *(uint16_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIBYTE(a,b) ( *(uint8_t *) ((uint8_t *)(a->pridata)+b) ) + +#define PRIINT32(a,b) ( *(int32_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIINT16(a,b) ( *(int16_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIINT8(a,b) ( *(int8_t *) ((uint8_t *)(a->pridata)+b) ) + +#define PRIUINT32(a,b) ( *(uint32_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIUINT16(a,b) ( *(uint16_t *) ((uint8_t *)(a->pridata)+b) ) +#define PRIUINT8(a,b) ( *(uint8_t *) ((uint8_t *)(a->pridata)+b) ) + + +#define PUBDWORD(a,b) ( *(uint32_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBWORD(a,b) ( *(uint16_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBBYTE(a,b) ( *(uint8_t *) ((uint8_t *)(a->pubdata)+b) ) + +#define PUBINT32(a,b) ( *(int32_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBINT16(a,b) ( *(int16_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBINT8(a,b) ( *(int8_t *) ((uint8_t *)(a->pubdata)+b) ) + +#define PUBUINT32(a,b) ( *(uint32_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBUINT16(a,b) ( *(uint16_t *) ((uint8_t *)(a->pubdata)+b) ) +#define PUBUINT8(a,b) ( *(uint8_t *) ((uint8_t *)(a->pubdata)+b) ) + + +#define GLODWORD(b) ( *(uint32_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOWORD(b) ( *(uint16_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOBYTE(b) ( *(uint8_t *) ((uint8_t *)(globaldata)+b) ) + +#define GLOINT32(b) ( *(int32_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOINT16(b) ( *(int16_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOINT8(b) ( *(int8_t *) ((uint8_t *)(globaldata)+b) ) + +#define GLOUINT32(b) ( *(uint32_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOUINT16(b) ( *(uint16_t *) ((uint8_t *)(globaldata)+b) ) +#define GLOUINT8(b) ( *(uint8_t *) ((uint8_t *)(globaldata)+b) ) + +#endif |