diff -r 6e87bbc2abe9 -r db9cadaab2ea lib/iec_std_lib.h --- a/lib/iec_std_lib.h Wed Aug 29 11:19:44 2007 +0200 +++ b/lib/iec_std_lib.h Thu Aug 30 16:40:20 2007 +0200 @@ -6,7 +6,7 @@ #include #include #include -#include +#include #include #include @@ -48,7 +48,7 @@ /* Types defs */ /*****************/ -typedef u_int8_t BOOL; +typedef uint8_t BOOL; #define TRUE 1 #define FALSE 0 @@ -58,19 +58,31 @@ typedef int32_t DINT; typedef int64_t LINT; -typedef u_int8_t USINT; -typedef u_int16_t UINT; -typedef u_int32_t UDINT; -typedef u_int64_t ULINT; - -typedef u_int8_t BYTE; -typedef u_int16_t WORD; -typedef u_int32_t DWORD; -typedef u_int64_t LWORD; +typedef uint8_t USINT; +typedef uint16_t UINT; +typedef uint32_t UDINT; +typedef uint64_t ULINT; + +typedef uint8_t BYTE; +typedef uint16_t WORD; +typedef uint32_t DWORD; +typedef uint64_t LWORD; typedef float REAL; typedef double LREAL; + +#if !defined __timespec_defined +# define __timespec_defined 1 + +struct timespec + { + long int tv_sec; /* Seconds. */ + long int tv_nsec; /* Nanoseconds. */ + }; + +#endif + typedef struct timespec TIME; typedef struct timespec DATE; typedef struct timespec DT; @@ -83,7 +95,7 @@ typedef int8_t __strlen_t; typedef struct { __strlen_t len; - u_int8_t body[STR_MAX_LEN]; + uint8_t body[STR_MAX_LEN]; } STRING; #define __STR_CMP(str1, str2) memcmp((char*)&str1.body,(char*)&str2.body, str1.len < str2.len ? str1.len : str2.len) @@ -95,26 +107,38 @@ } WSTRING; */ -#define __BOOL_literal(value) (BOOL)value -#define __SINT_literal(value) (SINT)value -#define __INT_literal(value) (INT)value -#define __DINT_literal(value) (DINT)value -#define __LINT_literal(value) (LINT)value -#define __USINT_literal(value) (USINT)value -#define __UINT_literal(value) (UINT)value -#define __UDINT_literal(value) (UDINT)value -#define __ULINT_literal(value) (ULINT)value -#define __REAL_literal(value) (REAL)value -#define __LREAL_literal(value) (LREAL)value -#define __TIME_literal(value) (TIME)value -#define __DATE_literal(value) (DATE)value -#define __TOD_literal(value) (TOD)value -#define __DT_literal(value) (DT)value -#define __STRING_literal(value) (STRING)value -#define __BYTE_literal(value) (BYTE)value -#define __WORD_literal(value) (WORD)value -#define __DWORD_literal(value) (DWORD)value -#define __LWORD_literal(value) (LWORD)value +# if __WORDSIZE == 64 +#define __32b_sufix +#define __64b_sufix L +#else +#define __32b_sufix L +#define __64b_sufix LL +#endif + +#define __lit(type,value,sfx) (type)value##sfx +// Keep this macro expention step to let sfx change into L or LL +#define __literal(type,value,sfx) __lit(type,value,sfx) + +#define __BOOL_LITERAL(value) __literal(BOOL,value,) +#define __SINT_LITERAL(value) __literal(SINT,value,) +#define __INT_LITERAL(value) __literal(INT,value,) +#define __DINT_LITERAL(value) __literal(DINT,value,__32b_sufix) +#define __LINT_LITERAL(value) __literal(LINT,value,__64b_sufix) +#define __USINT_LITERAL(value) __literal(USINT,value,) +#define __UINT_LITERAL(value) __literal(UINT,value,) +#define __UDINT_LITERAL(value) __literal(UDINT,value,__32b_sufix) +#define __ULINT_LITERAL(value) __literal(ULINT,value,__64b_sufix) +#define __REAL_LITERAL(value) __literal(REAL,value,__32b_sufix) +#define __LREAL_LITERAL(value) __literal(LREAL,value,__64b_sufix) +#define __TIME_LITERAL(value) __literal(TIME,value,) +#define __DATE_LITERAL(value) __literal(DATE,value,) +#define __TOD_LITERAL(value) __literal(TOD,value,) +#define __DT_LITERAL(value) __literal(DT,value,) +#define __STRING_LITERAL(value) __literal(STRING,value,) +#define __BYTE_LITERAL(value) __literal(BYTE,value,) +#define __WORD_LITERAL(value) __literal(WORD,value,) +#define __DWORD_LITERAL(value) __literal(DWORD,value,__32b_sufix) +#define __LWORD_LITERAL(value) __literal(LWORD,value,__32b_sufix) @@ -642,29 +666,29 @@ static inline STRING __date_to_string(DATE IN){ /* D#1984-06-25 */ STRING res = __INIT_STRING; - struct tm broken_down_time; + struct tm* broken_down_time; time_t seconds = IN.tv_sec; - if (NULL == localtime_r(&seconds, &broken_down_time)){ /* get the UTC (GMT) broken down time */ + if (NULL == (broken_down_time = localtime(&seconds))){ /* get the UTC (GMT) broken down time */ IEC_error(); return (STRING){7,"D#ERROR"}; } - res.len = snprintf((char*)&res.body, STR_MAX_LEN, "D#%d-%2.2d-%2.2d", broken_down_time.tm_year + 1900, broken_down_time.tm_mon + 1, broken_down_time.tm_mday); + res.len = snprintf((char*)&res.body, STR_MAX_LEN, "D#%d-%2.2d-%2.2d", broken_down_time->tm_year + 1900, broken_down_time->tm_mon + 1, broken_down_time->tm_mday); if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN; return res; } static inline STRING __tod_to_string(TOD IN){ /* TOD#15:36:55.36 */ STRING res = __INIT_STRING; - struct tm broken_down_time; + struct tm* broken_down_time; time_t seconds = IN.tv_sec; - if (NULL == localtime_r(&seconds, &broken_down_time)){ /* get the UTC (GMT) broken down time */ + if (NULL == (broken_down_time = localtime(&seconds))){ /* get the UTC (GMT) broken down time */ IEC_error(); return (STRING){9,"TOD#ERROR"}; } if(IN.tv_nsec == 0){ - res.len = snprintf((char*)&res.body, STR_MAX_LEN, "TOD#%2.2d:%2.2d:%d", broken_down_time.tm_hour, broken_down_time.tm_min, broken_down_time.tm_sec); + res.len = snprintf((char*)&res.body, STR_MAX_LEN, "TOD#%2.2d:%2.2d:%d", broken_down_time->tm_hour, broken_down_time->tm_min, broken_down_time->tm_sec); }else{ - res.len = snprintf((char*)&res.body, STR_MAX_LEN, "TOD#%2.2d:%2.2d:%g", broken_down_time.tm_hour, broken_down_time.tm_min, (LREAL)broken_down_time.tm_sec + (LREAL)IN.tv_nsec / 1e9); + res.len = snprintf((char*)&res.body, STR_MAX_LEN, "TOD#%2.2d:%2.2d:%g", broken_down_time->tm_hour, broken_down_time->tm_min, (LREAL)broken_down_time->tm_sec + (LREAL)IN.tv_nsec / 1e9); } if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN; return res; @@ -672,28 +696,28 @@ static inline STRING __dt_to_string(DT IN){ /* DT#1984-06-25-15:36:55.36 */ STRING res; - struct tm broken_down_time; + struct tm* broken_down_time; time_t seconds = IN.tv_sec; - if (NULL == localtime_r(&seconds, &broken_down_time)){ /* get the UTC (GMT) broken down time */ + if (NULL == (broken_down_time = localtime(&seconds))){ /* get the UTC (GMT) broken down time */ IEC_error(); return (STRING){8,"DT#ERROR"}; } if(IN.tv_nsec == 0){ res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%d", - broken_down_time.tm_year, - broken_down_time.tm_mon, - broken_down_time.tm_mday, - broken_down_time.tm_hour, - broken_down_time.tm_min, - broken_down_time.tm_sec); + broken_down_time->tm_year, + broken_down_time->tm_mon, + broken_down_time->tm_mday, + broken_down_time->tm_hour, + broken_down_time->tm_min, + broken_down_time->tm_sec); }else{ res.len = snprintf((char*)&res.body, STR_MAX_LEN, "DT#%d-%2.2d-%2.2d-%2.2d:%2.2d:%g", - broken_down_time.tm_year, - broken_down_time.tm_mon, - broken_down_time.tm_mday, - broken_down_time.tm_hour, - broken_down_time.tm_min, - (LREAL)broken_down_time.tm_sec + ((LREAL)IN.tv_nsec / 1e9)); + broken_down_time->tm_year, + broken_down_time->tm_mon, + broken_down_time->tm_mday, + broken_down_time->tm_hour, + broken_down_time->tm_min, + (LREAL)broken_down_time->tm_sec + ((LREAL)IN.tv_nsec / 1e9)); } if(res.len > STR_MAX_LEN) res.len = STR_MAX_LEN; return res;