targets/var_access.c
changeset 2632 534387caf43d
child 2710 aaa1dc426213
equal deleted inserted replaced
2631:b5402859dfad 2632:534387caf43d
       
     1 
       
     2 #define __Unpack_case_t(TYPENAME) \
       
     3         case TYPENAME##_ENUM :\
       
     4             *flags = ((__IEC_##TYPENAME##_t *)varp)->flags;\
       
     5             forced_value_p = *real_value_p = &((__IEC_##TYPENAME##_t *)varp)->value;\
       
     6             break;
       
     7 
       
     8 #define __Unpack_case_p(TYPENAME)\
       
     9         case TYPENAME##_O_ENUM :\
       
    10             *flags = __IEC_OUTPUT_FLAG;\
       
    11         case TYPENAME##_P_ENUM :\
       
    12             *flags |= ((__IEC_##TYPENAME##_p *)varp)->flags;\
       
    13             *real_value_p = ((__IEC_##TYPENAME##_p *)varp)->value;\
       
    14             forced_value_p = &((__IEC_##TYPENAME##_p *)varp)->fvalue;\
       
    15             break;
       
    16 
       
    17 static void* UnpackVar(__Unpack_desc_type *dsc, void **real_value_p, char *flags)
       
    18 {
       
    19     void *varp = dsc->ptr;
       
    20     void *forced_value_p = NULL;
       
    21     *flags = 0;
       
    22     /* find data to copy*/
       
    23     switch(dsc->type){
       
    24         __ANY(__Unpack_case_t)
       
    25         __ANY(__Unpack_case_p)
       
    26     default:
       
    27         break;
       
    28     }
       
    29     if (*flags & __IEC_FORCE_FLAG)
       
    30         return forced_value_p;
       
    31     return *real_value_p;
       
    32 }
       
    33