lib/iec_std_lib.h
changeset 625 c0bda77b37a0
parent 593 412780374bd3
child 638 049748e9410a
child 696 7530eae6786d
equal deleted inserted replaced
412:aad38592bdde 625:c0bda77b37a0
    79  */
    79  */
    80 #define __64b_sufix L   
    80 #define __64b_sufix L   
    81 #endif
    81 #endif
    82 
    82 
    83 
    83 
    84 #define __lit(type,value,sfx) (type)value##sfx
    84 #define __lit(type,value,...) (type)value##__VA_ARGS__
    85 // Keep this macro expention step to let sfx change into L or LL
    85 // Keep this macro expention step to let sfx(__VA_ARGS__) change into L or LL
    86 #define __literal(type,value,sfx) __lit(type,value,sfx)
    86 #define __literal(type,value,...) __lit(type,value,##__VA_ARGS__)
    87 
    87 
    88 #define __BOOL_LITERAL(value) __literal(BOOL,value,)
    88 #define __BOOL_LITERAL(value) __literal(BOOL,value)
    89 #define __SINT_LITERAL(value) __literal(SINT,value,)
    89 #define __SINT_LITERAL(value) __literal(SINT,value)
    90 #define __INT_LITERAL(value) __literal(INT,value,)
    90 #define __INT_LITERAL(value) __literal(INT,value)
    91 #define __DINT_LITERAL(value) __literal(DINT,value,__32b_sufix)
    91 #define __DINT_LITERAL(value) __literal(DINT,value,__32b_sufix)
    92 #define __LINT_LITERAL(value) __literal(LINT,value,__64b_sufix)
    92 #define __LINT_LITERAL(value) __literal(LINT,value,__64b_sufix)
    93 #define __USINT_LITERAL(value) __literal(USINT,value,)
    93 #define __USINT_LITERAL(value) __literal(USINT,value)
    94 #define __UINT_LITERAL(value) __literal(UINT,value,)
    94 #define __UINT_LITERAL(value) __literal(UINT,value)
    95 #define __UDINT_LITERAL(value) __literal(UDINT,value,__32b_sufix)
    95 #define __UDINT_LITERAL(value) __literal(UDINT,value,__32b_sufix)
    96 #define __ULINT_LITERAL(value) __literal(ULINT,value,__64b_sufix)
    96 #define __ULINT_LITERAL(value) __literal(ULINT,value,__64b_sufix)
    97 #define __REAL_LITERAL(value) __literal(REAL,value,__32b_sufix)
    97 #define __REAL_LITERAL(value) __literal(REAL,value,__32b_sufix)
    98 #define __LREAL_LITERAL(value) __literal(LREAL,value,__64b_sufix)
    98 #define __LREAL_LITERAL(value) __literal(LREAL,value,__64b_sufix)
    99 #define __TIME_LITERAL(value) __literal(TIME,value,)
    99 #define __TIME_LITERAL(value) __literal(TIME,value)
   100 #define __DATE_LITERAL(value) __literal(DATE,value,)
   100 #define __DATE_LITERAL(value) __literal(DATE,value)
   101 #define __TOD_LITERAL(value) __literal(TOD,value,)
   101 #define __TOD_LITERAL(value) __literal(TOD,value)
   102 #define __DT_LITERAL(value) __literal(DT,value,)
   102 #define __DT_LITERAL(value) __literal(DT,value)
   103 #define __STRING_LITERAL(count,value) (STRING){count,value}
   103 #define __STRING_LITERAL(count,value) (STRING){count,value}
   104 #define __BYTE_LITERAL(value) __literal(BYTE,value,)
   104 #define __BYTE_LITERAL(value) __literal(BYTE,value)
   105 #define __WORD_LITERAL(value) __literal(WORD,value,)
   105 #define __WORD_LITERAL(value) __literal(WORD,value)
   106 #define __DWORD_LITERAL(value) __literal(DWORD,value,__32b_sufix)
   106 #define __DWORD_LITERAL(value) __literal(DWORD,value,__32b_sufix)
   107 #define __LWORD_LITERAL(value) __literal(LWORD,value,__64b_sufix)
   107 #define __LWORD_LITERAL(value) __literal(LWORD,value,__64b_sufix)
   108 
   108 
   109 
   109 
   110 
   110 
   259   broken_down_time.tm_min = 0;
   259   broken_down_time.tm_min = 0;
   260   broken_down_time.tm_hour = 0;
   260   broken_down_time.tm_hour = 0;
   261   broken_down_time.tm_mday = day;  /* day of month, from 1 to 31 */
   261   broken_down_time.tm_mday = day;  /* day of month, from 1 to 31 */
   262   broken_down_time.tm_mon = month - 1;   /* month since January, in the range 0 to 11 */
   262   broken_down_time.tm_mon = month - 1;   /* month since January, in the range 0 to 11 */
   263   broken_down_time.tm_year = year - 1900;  /* number of years since 1900 */
   263   broken_down_time.tm_year = year - 1900;  /* number of years since 1900 */
       
   264   broken_down_time.tm_isdst = 0; /* disable daylight savings time */
   264 
   265 
   265   epoch_seconds = mktime(&broken_down_time); /* determine number of seconds since the epoch, i.e. Jan 1st 1970 */
   266   epoch_seconds = mktime(&broken_down_time); /* determine number of seconds since the epoch, i.e. Jan 1st 1970 */
   266   if ((time_t)(-1) == epoch_seconds)
   267   if ((time_t)(-1) == epoch_seconds)
   267     __iec_error();
   268     __iec_error();
   268 
   269 
   566         __iec_error();
   567         __iec_error();
   567         return (STRING){8,"DT#ERROR"};
   568         return (STRING){8,"DT#ERROR"};
   568     }
   569     }
   569     if(IN.tv_nsec == 0){
   570     if(IN.tv_nsec == 0){
   570         res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%d",
   571         res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%d",
   571                  broken_down_time->tm_year,
   572                  broken_down_time->tm_year + 1900,
   572                  broken_down_time->tm_mon,
   573                  broken_down_time->tm_mon  + 1,
   573                  broken_down_time->tm_mday,
   574                  broken_down_time->tm_mday,
   574                  broken_down_time->tm_hour,
   575                  broken_down_time->tm_hour,
   575                  broken_down_time->tm_min,
   576                  broken_down_time->tm_min,
   576                  broken_down_time->tm_sec);
   577                  broken_down_time->tm_sec);
   577     }else{
   578     }else{
   578         res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%g",
   579         res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%g",
   579                  broken_down_time->tm_year,
   580                  broken_down_time->tm_year + 1900,
   580                  broken_down_time->tm_mon,
   581                  broken_down_time->tm_mon  + 1,
   581                  broken_down_time->tm_mday,
   582                  broken_down_time->tm_mday,
   582                  broken_down_time->tm_hour,
   583                  broken_down_time->tm_hour,
   583                  broken_down_time->tm_min,
   584                  broken_down_time->tm_min,
   584                  (LREAL)broken_down_time->tm_sec + ((LREAL)IN.tv_nsec / 1e9));
   585                  (LREAL)broken_down_time->tm_sec + ((LREAL)IN.tv_nsec / 1e9));
   585     }
   586     }
  1750 
  1751 
  1751 
  1752 
  1752     /**************/
  1753     /**************/
  1753     /*     NE     */
  1754     /*     NE     */
  1754     /**************/
  1755     /**************/
  1755 
       
  1756 #define __ne_num(fname, TYPENAME) \
  1756 #define __ne_num(fname, TYPENAME) \
  1757 static inline BOOL fname(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\
  1757 static inline BOOL fname(EN_ENO_PARAMS, TYPENAME op1, TYPENAME op2){\
  1758   TEST_EN(BOOL)\
  1758   TEST_EN(BOOL)\
  1759   return op1 != op2 ? 1 : 0;\
  1759   return op1 != op2 ? 1 : 0;\
  1760 }
  1760 }