1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
/*
* Copyright � 2006-2013 SplinterGU (Fenix/Bennugd)
*
* 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 _DLVARACC_H
#define _DLVARACC_H
/* --------------------------------------------------------------------------- */
#include <stdint.h>
/* --------------------------------------------------------------------------- */
#undef LOCDWORD
#undef LOCWORD
#undef LOCBYTE
#undef LOCINT32
#undef LOCINT16
#undef LOCINT8
#undef LOCUINT32
#undef LOCUINT16
#undef LOCUINT8
#undef GLODWORD
#undef GLOWORD
#undef GLOBYTE
#undef GLOINT32
#undef GLOINT16
#undef GLOINT8
#undef GLOUINT32
#undef GLOUINT16
#undef GLOUINT8
/* --------------------------------------------------------------------------- */
/* Macros para acceder a datos locales de una instancia */
#define LOCEXISTS(m,a) (m##_locals_fixup[a].size != -1)
#define GLOEXISTS(m,a) (m##_globals_fixup[a].data_offset)
#define LOCADDR(m,a,b) ((uint8_t *)((a)->locdata) + (uint32_t)m##_locals_fixup[b].data_offset)
#define GLOADDR(m,a) (m##_globals_fixup[a].data_offset)
#define LOCDWORD(m,a,b) (*(uint32_t *)LOCADDR(m,a,b))
#define LOCWORD(m,a,b) (*(uint16_t *)LOCADDR(m,a,b))
#define LOCBYTE(m,a,b) (*(uint8_t *)LOCADDR(m,a,b))
#define LOCINT32(m,a,b) (*(int32_t *)LOCADDR(m,a,b))
#define LOCINT16(m,a,b) (*(int16_t *)LOCADDR(m,a,b))
#define LOCINT8(m,a,b) (*(int8_t *)LOCADDR(m,a,b))
#define LOCUINT32(m,a,b) (*(uint32_t *)LOCADDR(m,a,b))
#define LOCUINT16(m,a,b) (*(uint16_t *)LOCADDR(m,a,b))
#define LOCUINT8(m,a,b) (*(uint8_t *)LOCADDR(m,a,b))
#define GLODWORD(m,a) (*(uint32_t *)GLOADDR(m,a))
#define GLOWORD(m,a) (*(uint16_t *)GLOADDR(m,a))
#define GLOBYTE(m,a) (*(uint8_t *)GLOADDR(m,a))
#define GLOINT32(m,a) (*(int32_t *)GLOADDR(m,a))
#define GLOINT16(m,a) (*(int16_t *)GLOADDR(m,a))
#define GLOINT8(m,a) (*(int8_t *)GLOADDR(m,a))
#define GLOUINT32(m,b) (*(uint32_t *)GLOADDR(m,b))
#define GLOUINT16(m,b) (*(uint16_t *)GLOADDR(m,b))
#define GLOUINT8(m,b) (*(uint8_t *)GLOADDR(m,b))
/* --------------------------------------------------------------------------- */
#endif
|