lib/iec_types_all.h
changeset 221 c6aed7e5f070
parent 199 b075f28ec081
child 222 8b1757417a54
--- a/lib/iec_types_all.h	Tue Dec 01 09:03:33 2009 +0100
+++ b/lib/iec_types_all.h	Wed Dec 02 16:11:01 2009 +0100
@@ -10,13 +10,54 @@
 /* Include non windows.h clashing typedefs */
 #include "iec_types.h"
 
+#define TRUE 1
+#define FALSE 0
+
+#define __DECLARE_IEC_TYPE(type)\
+typedef IEC_##type type;\
+\
+typedef struct {\
+  IEC_##type value;\
+  IEC_BYTE flags;\
+} __IEC_##type##_t;\
+\
+typedef struct {\
+  IEC_##type *value;\
+  IEC_BYTE flags;\
+  IEC_##type fvalue;\
+} __IEC_##type##_p;
+
+#define __DECLARE_DERIVED_TYPE(base, type)\
+typedef base type;\
+typedef __IEC_##base##_t __IEC_##type##_t;
+
+#define __DECLARE_COMPLEX_STRUCT(type)\
+typedef struct {\
+  type value;\
+  IEC_BYTE flags;\
+} __IEC_##type##_t;\
+\
+typedef struct {\
+  type *value;\
+  IEC_BYTE flags;\
+} __IEC_##type##_p;
+
+#define __DECLARE_ARRAY_TYPE(base, type, size)\
+typedef base type size;\
+__DECLARE_COMPLEX_STRUCT(type);
+
+#define __DECLARE_STRUCT_TYPE(elements, type)\
+typedef elements type;\
+__DECLARE_COMPLEX_STRUCT(type);
+
 /* Those typdefs clash with windows.h */
 /* i.e. this file cannot be included aside windows.h */
+ANY(__DECLARE_IEC_TYPE)
+
+
+/*
 typedef IEC_BOOL  BOOL;
 
-#define TRUE 1
-#define FALSE 0
-
 typedef IEC_SINT    SINT;
 typedef IEC_INT   INT;
 typedef IEC_DINT   DINT;
@@ -41,9 +82,10 @@
 typedef IEC_TOD TOD;
 
 typedef IEC_STRING STRING;
+*/
 
 typedef struct {
-  BOOL state;     // current step state. 0 : inative, 1: active
+  __IEC_BOOL_t state;     // current step state. 0 : inative, 1: active
   BOOL prev_state;  // previous step state. 0 : inative, 1: active
   TIME elapsed_time;  // time since step is active
 } STEP;