16 return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\ |
16 return (*GLOBAL__##name).flags & __IEC_FORCE_FLAG;\ |
17 }\ |
17 }\ |
18 type* __GET_GLOBAL_##name(void) {\ |
18 type* __GET_GLOBAL_##name(void) {\ |
19 return &((*GLOBAL__##name).value);\ |
19 return &((*GLOBAL__##name).value);\ |
20 } |
20 } |
|
21 #define __DECLARE_GLOBAL_FB(type, domain, name)\ |
|
22 type domain##__##name;\ |
|
23 static type *GLOBAL__##name = &(domain##__##name);\ |
|
24 type* __GET_GLOBAL_##name(void) {\ |
|
25 return &(*GLOBAL__##name);\ |
|
26 }\ |
|
27 extern void type##_init__(type* data__, BOOL retain); |
21 #define __DECLARE_GLOBAL_LOCATION(type, location)\ |
28 #define __DECLARE_GLOBAL_LOCATION(type, location)\ |
22 extern type *location; |
29 extern type *location; |
23 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\ |
30 #define __DECLARE_GLOBAL_LOCATED(type, resource, name)\ |
24 __IEC_##type##_p resource##__##name;\ |
31 __IEC_##type##_p resource##__##name;\ |
25 static __IEC_##type##_p *GLOBAL__##name = &(resource##__##name);\ |
32 static __IEC_##type##_p *GLOBAL__##name = &(resource##__##name);\ |
31 }\ |
38 }\ |
32 type* __GET_GLOBAL_##name(void) {\ |
39 type* __GET_GLOBAL_##name(void) {\ |
33 return (*GLOBAL__##name).value;\ |
40 return (*GLOBAL__##name).value;\ |
34 } |
41 } |
35 #define __DECLARE_GLOBAL_PROTOTYPE(type, name)\ |
42 #define __DECLARE_GLOBAL_PROTOTYPE(type, name)\ |
36 extern type* __GET_GLOBAL_##name(); |
43 extern type* __GET_GLOBAL_##name(void); |
37 #define __DECLARE_EXTERNAL(type, name)\ |
44 #define __DECLARE_EXTERNAL(type, name)\ |
38 __IEC_##type##_p name; |
45 __IEC_##type##_p name; |
|
46 #define __DECLARE_EXTERNAL_FB(type, name)\ |
|
47 type* name; |
39 #define __DECLARE_LOCATED(type, name)\ |
48 #define __DECLARE_LOCATED(type, name)\ |
40 __IEC_##type##_p name; |
49 __IEC_##type##_p name; |
41 |
50 |
42 |
51 |
43 // variable initialization macros |
52 // variable initialization macros |
50 {\ |
59 {\ |
51 static const type temp = initial;\ |
60 static const type temp = initial;\ |
52 __INIT_GLOBAL_##name(temp);\ |
61 __INIT_GLOBAL_##name(temp);\ |
53 __INIT_RETAIN((*GLOBAL__##name), retained)\ |
62 __INIT_RETAIN((*GLOBAL__##name), retained)\ |
54 } |
63 } |
|
64 #define __INIT_GLOBAL_FB(type, name, retained)\ |
|
65 type##_init__(&(*GLOBAL__##name), retained); |
55 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\ |
66 #define __INIT_GLOBAL_LOCATED(domain, name, location, retained)\ |
56 domain##__##name.value = location;\ |
67 domain##__##name.value = location;\ |
57 __INIT_RETAIN(domain##__##name, retained) |
68 __INIT_RETAIN(domain##__##name, retained) |
58 #define __INIT_EXTERNAL(type, global, name, retained)\ |
69 #define __INIT_EXTERNAL(type, global, name, retained)\ |
59 {\ |
70 {\ |
60 name.value = __GET_GLOBAL_##global();\ |
71 name.value = __GET_GLOBAL_##global();\ |
61 __INIT_RETAIN(name, retained)\ |
72 __INIT_RETAIN(name, retained)\ |
62 } |
73 } |
|
74 #define __INIT_EXTERNAL_FB(type, global, name, retained)\ |
|
75 name = __GET_GLOBAL_##global(); |
63 #define __INIT_LOCATED(type, location, name, retained)\ |
76 #define __INIT_LOCATED(type, location, name, retained)\ |
64 {\ |
77 {\ |
65 extern type *location;\ |
78 extern type *location;\ |
66 name.value = location;\ |
79 name.value = location;\ |
67 __INIT_RETAIN(name, retained)\ |
80 __INIT_RETAIN(name, retained)\ |
73 // variable getting macros |
86 // variable getting macros |
74 #define __GET_VAR(name, ...)\ |
87 #define __GET_VAR(name, ...)\ |
75 name.value __VA_ARGS__ |
88 name.value __VA_ARGS__ |
76 #define __GET_EXTERNAL(name, ...)\ |
89 #define __GET_EXTERNAL(name, ...)\ |
77 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
90 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
|
91 #define __GET_EXTERNAL_FB(name, ...)\ |
|
92 __GET_VAR(((*name) __VA_ARGS__)) |
78 #define __GET_LOCATED(name, ...)\ |
93 #define __GET_LOCATED(name, ...)\ |
79 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
94 ((name.flags & __IEC_FORCE_FLAG) ? name.fvalue __VA_ARGS__ : (*(name.value)) __VA_ARGS__) |
80 #define __GET_VAR_BY_REF(name, ...)\ |
95 #define __GET_VAR_BY_REF(name, ...)\ |
81 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__)) |
96 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &(name.value __VA_ARGS__)) |
82 #define __GET_EXTERNAL_BY_REF(name, ...)\ |
97 #define __GET_EXTERNAL_BY_REF(name, ...)\ |
83 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
98 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
|
99 #define __GET_EXTERNAL_FB_BY_REF(name, ...)\ |
|
100 __GET_EXTERNAL_BY_REF(((*name) __VA_ARGS__)) |
84 #define __GET_LOCATED_BY_REF(name, ...)\ |
101 #define __GET_LOCATED_BY_REF(name, ...)\ |
85 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
102 ((name.flags & __IEC_FORCE_FLAG) ? &(name.fvalue __VA_ARGS__) : &((*(name.value)) __VA_ARGS__)) |
86 |
103 |
87 // variable setting macros |
104 // variable setting macros |
88 #define __SET_VAR(prefix, name, new_value, ...)\ |
105 #define __SET_VAR(prefix, name, new_value, ...)\ |
89 if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value |
106 if (!(prefix name.flags & __IEC_FORCE_FLAG)) prefix name.value __VA_ARGS__ = new_value |
90 #define __SET_EXTERNAL(prefix, name, new_value, ...)\ |
107 #define __SET_EXTERNAL(prefix, name, new_value, ...)\ |
91 if (!(prefix name.flags & __IEC_FORCE_FLAG || __IS_GLOBAL_##name##_FORCED()))\ |
108 if (!(prefix name.flags & __IEC_FORCE_FLAG || __IS_GLOBAL_##name##_FORCED()))\ |
92 (*(prefix name.value)) __VA_ARGS__ = new_value |
109 (*(prefix name.value)) __VA_ARGS__ = new_value |
|
110 #define __SET_EXTERNAL_FB(prefix, name, new_value, ...)\ |
|
111 __SET_VAR((*(prefix name)), __VA_ARGS__, new_value) |
93 #define __SET_LOCATED(prefix, name, new_value, ...)\ |
112 #define __SET_LOCATED(prefix, name, new_value, ...)\ |
94 if (!(prefix name.flags & __IEC_FORCE_FLAG)) *(prefix name.value) __VA_ARGS__ = new_value |
113 if (!(prefix name.flags & __IEC_FORCE_FLAG)) *(prefix name.value) __VA_ARGS__ = new_value |
95 |
114 |
96 #endif //__ACCESSOR_H |
115 #endif //__ACCESSOR_H |