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 } |