lib/iec_std_lib.h
changeset 43 37dd4e2fd2ec
parent 42 b45c7f34dec1
child 48 3d24cc85bb3c
--- a/lib/iec_std_lib.h	Tue Jul 17 12:19:59 2007 +0200
+++ b/lib/iec_std_lib.h	Wed Jul 18 11:57:36 2007 +0200
@@ -15,6 +15,35 @@
 
 #include "iec_std_lib_generated.h"
 
+#define __print_BOOL(name) printf("  %s = (BOOL) %s\n",#name, name?"TRUE":"FALSE");
+#define __print_SINT(name) printf("  %s = (SINT) %d\n",#name, name);
+#define __print_INT(name) printf("  %s = (INT) %d\n",#name, name);
+#define __print_DINT(name) printf("  %s = (DINT) %d\n",#name, name);
+#define __print_LINT(name) printf("  %s = (LINT) %d\n",#name, name);
+#define __print_USINT(name) printf("  %s = (USINT) %u\n",#name, name);
+#define __print_UINT(name) printf("  %s = (UINT) %u\n",#name, name);
+#define __print_UDINT(name) printf("  %s = (UDINT) %u\n",#name, name);
+#define __print_ULINT(name) printf("  %s = (ULINT) %lu\n",#name, name);
+#define __print_REAL(name) printf("  %s = (REAL) %f\n",#name, (double)name);
+#define __print_LREAL(name) printf("  %s = (LREAL) %f\n",#name, (double)name);
+#define __print_TIME(name) {STRING __tmp = __time_to_string(name);__tmp.body[__tmp.len] = 0; printf("  %s = (TIME) %*s\n",#name, __tmp.len, &__tmp.body);}
+#define __print_DATE(name) {STRING __tmp = __date_to_string(name);__tmp.body[__tmp.len] = 0; printf("  %s = (DATE) %*s\n",#name, __tmp.len, &__tmp.body);}
+#define __print_TOD(name) {STRING __tmp = __tod_to_string(name);__tmp.body[__tmp.len] = 0; printf("  %s = (TOD) %*s\n",#name, __tmp.len, &__tmp.body);}
+#define __print_DT(name) {STRING __tmp = __dt_to_string(name);__tmp.body[__tmp.len] = 0; printf("  %s = (DT) %*s\n",#name, __tmp.len, &__tmp.body);}
+#define __print_STRING(name) printf("  %s = (STRING) {%d, \"%*s\"}\n",#name, name.len, name.len, &name.body);
+#define __print_BYTE(name) printf("  %s = (BYTE) 0x%2.2x\n",#name, name);
+#define __print_WORD(name) printf("  %s = (WORD) 0x%4.4x\n",#name, name);
+#define __print_DWORD(name) printf("  %s = (DWORD) 0x%8.8x\n",#name, name);
+#define __print_LWORD(name) printf("  %s = (LWORD) 0x%16.16lx\n",#name, name);
+
+#ifdef DEBUG_IEC
+#define DBG(...) printf(__VA_ARGS__);
+#define DBG_TYPE(TYPENAME, name) __print_##TYPENAME(name);
+#else
+#define DBG(...)
+#define DBG_TYPE(TYPENAME, name)
+#endif
+
 /*****************/
 /*  Types defs   */
 /*****************/
@@ -403,7 +432,7 @@
 }
 static inline STRING __real_to_string(LREAL IN){
     STRING res = __INIT_STRING;
-    res.len = snprintf(res.body, STR_MAX_LEN, "%g", IN);
+    res.len = snprintf(res.body, STR_MAX_LEN, "%.10g", IN);
     if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN;
     return res;
 }
@@ -453,19 +482,19 @@
                 shift += 3;
             }
         }
-    }else if(IN->body[0]=='1' && IN->body[1]=='6' && IN->body[1]=='#'){
+    }else if(IN->body[0]=='1' && IN->body[1]=='6' && IN->body[2]=='#'){
         /* 16#1234_5678_9abc_DEFG */
         for(l = IN->len - 1; l >= 3 && shift < 64; l--)
         {
             char c = IN->body[l];
             if( c >= '0' && c <= '9'){
-                res |= ( c - '0') << shift;
+                res |= (LWORD)( c - '0') << shift;
                 shift += 4;
             }else if( c >= 'a' && c <= 'f'){
-                res |= ( c - 'a' + 10 ) << shift;
+                res |= (LWORD)( c - 'a' + 10 ) << shift;
                 shift += 4;
             }else if( c >= 'A' && c <= 'F'){
-                res |= ( c - 'A' + 10 ) << shift;
+                res |= (LWORD)( c - 'A' + 10 ) << shift;
                 shift += 4;
             }
         }
@@ -840,9 +869,12 @@
   UINT i;\
   \
   va_start (ap, op1);         /* Initialize the argument list.  */\
+  DBG(#fname #TYPENAME "\n")\
+  DBG_TYPE(TYPENAME, op1)\
   \
-  for (i = 0; i < param_count; i++){\
+  for (i = 0; i < param_count - 1; i++){\
     TYPENAME tmp = va_arg (ap, VA_ARGS_##TYPENAME);\
+    DBG_TYPE(TYPENAME, tmp)\
     if(COND){\
         op1 = tmp;\
     }else{\
@@ -878,7 +910,7 @@
     /**************/
 
 #define __ge_num(TYPENAME) __compare_num(__ge_, TYPENAME, >= )
-ANY_NBIT(__ge_num)
+ANY_BIT(__ge_num)
 ANY_NUM(__ge_num)
 
 #define __ge_time(TYPENAME) __compare_time(__ge_, TYPENAME, >= )
@@ -892,7 +924,7 @@
     /**************/
 
 #define __eq_num(TYPENAME) __compare_num(__eq_, TYPENAME, == )
-ANY_NBIT(__eq_num)
+ANY_BIT(__eq_num)
 ANY_NUM(__eq_num)
 
 #define __eq_time(TYPENAME) __compare_time(__eq_, TYPENAME, == )
@@ -906,7 +938,7 @@
     /**************/
 
 #define __lt_num(TYPENAME) __compare_num(__lt_, TYPENAME, < )
-ANY_NBIT(__lt_num)
+ANY_BIT(__lt_num)
 ANY_NUM(__lt_num)
 
 #define __lt_time(TYPENAME) __compare_time(__lt_, TYPENAME, < )
@@ -920,7 +952,7 @@
     /**************/
 
 #define __le_num(TYPENAME) __compare_num(__le_, TYPENAME, <= )
-ANY_NBIT(__le_num)
+ANY_BIT(__le_num)
 ANY_NUM(__le_num)
 
 #define __le_time(TYPENAME) __compare_time(__le_, TYPENAME, <= )
@@ -934,7 +966,7 @@
     /**************/
 
 #define __ne_num(TYPENAME) __compare_num(__ne_, TYPENAME, != )
-ANY_NBIT(__ne_num)
+ANY_BIT(__ne_num)
 ANY_NUM(__ne_num)
 
 #define __ne_time(TYPENAME) __compare_time(__ne_, TYPENAME, != )