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