Edouard@2632: Edouard@2632: #define __Unpack_case_t(TYPENAME) \ Edouard@2632: case TYPENAME##_ENUM :\ Edouard@2632: *flags = ((__IEC_##TYPENAME##_t *)varp)->flags;\ Edouard@2632: forced_value_p = *real_value_p = &((__IEC_##TYPENAME##_t *)varp)->value;\ Edouard@2632: break; Edouard@2632: Edouard@2632: #define __Unpack_case_p(TYPENAME)\ Edouard@2632: case TYPENAME##_O_ENUM :\ Edouard@2632: *flags = __IEC_OUTPUT_FLAG;\ Edouard@2632: case TYPENAME##_P_ENUM :\ Edouard@2632: *flags |= ((__IEC_##TYPENAME##_p *)varp)->flags;\ Edouard@2632: *real_value_p = ((__IEC_##TYPENAME##_p *)varp)->value;\ Edouard@2632: forced_value_p = &((__IEC_##TYPENAME##_p *)varp)->fvalue;\ Edouard@2632: break; Edouard@2632: edouard@2710: #define __Is_a_string(dsc) (dsc->type == STRING_ENUM) ||\ edouard@2710: (dsc->type == STRING_P_ENUM) ||\ edouard@2710: (dsc->type == STRING_O_ENUM) edouard@2710: Edouard@2632: static void* UnpackVar(__Unpack_desc_type *dsc, void **real_value_p, char *flags) Edouard@2632: { Edouard@2632: void *varp = dsc->ptr; Edouard@2632: void *forced_value_p = NULL; Edouard@2632: *flags = 0; Edouard@2632: /* find data to copy*/ Edouard@2632: switch(dsc->type){ Edouard@2632: __ANY(__Unpack_case_t) Edouard@2632: __ANY(__Unpack_case_p) Edouard@2632: default: Edouard@2632: break; Edouard@2632: } Edouard@2632: if (*flags & __IEC_FORCE_FLAG) Edouard@2632: return forced_value_p; Edouard@2632: return *real_value_p; Edouard@2632: } Edouard@2632: