The Imp maps nicely to C as long as the new C11 anonymous unions and structs are supported...
- otherwise you have to name all the intermediate unions and structs (structs are necessary
if there is more than one element in a union)

                                            $ DEF V_0074 ID=OBJINFO a=68 b=116 c=0  
                                            { START (                               
                                            $ DEF S_1ffb ID=FLAGS a=17 b=3 c=0      
                                            $ DEF S_1ffa ID=TYPE a=17 b=3 c=0       
                                            ~A ALTBEG                               
                                            $ DEF S_1ff9 ID=LINK a=17 b=3 c=0       
                                            ~C ALT                                  
                                            $ DEF S_1ff8 ID=XTYPE a=17 b=3 c=0      
                                            ~C ALT                                  
                                            $ DEF S_1ff7 ID=SIZE a=17 b=3 c=0       
                                            ~C ALT                                  
                                            $ DEF S_1ff6 ID=ACT a=17 b=3 c=0        
                                            ~B ALTEND                               
                                            $ DEF S_1ff5 ID=REG a=17 b=2 c=0        
                                            $ DEF S_1ff4 ID=MODE a=17 b=2 c=0       
                                            $ DEF S_1ff3 ID=VAL a=17 b=1 c=0        
                                            } FINISH )                              


%recordformat OBJINFO (        %c                                 | typedef struct OBJINFO {
  %short FLAGS,TYPE,                                              |   short int FLAGS,TYPE;
  (                            %c                                 |   union {
     %short LINK %or           %c                                 |     short int LINK;
     %short XTYPE %or          %c                                 |     short int XTYPE;
     %short SIZE %or           %c                                 |     short int SIZE;
     %short ACT                %c                                 |     short int ACT;
  ),                                                              |   };
  %byte REG,MODE,                                                 |   unsigned char REG,MODE;
  %integer VAL                 %c                                 |   int VAL;
)                                                                 | } OBJINFO;

                                            $ DEF V_0075 ID=IDENTINFO a=68 b=117 c=0
                                            { START (
                                            ~A ALTBEG
                                            $ DEF S_1ff2 ID=FLAGS a=17 b=3 c=0
                                            $ DEF S_1ff1 ID=TYPE a=17 b=3 c=0
                                            ~A ALTBEG
                                            $ DEF S_1ff0 ID=LINK a=17 b=3 c=0
                                            ~C ALT
                                            $ DEF S_1fef ID=XTYPE a=17 b=3 c=0
                                            ~C ALT
                                            $ DEF S_1fee ID=SIZE a=17 b=3 c=0
                                            ~C ALT
                                            $ DEF S_1fed ID=ACT a=17 b=3 c=0
                                            ~B ALTEND
                                            $ DEF S_1fec ID=REG a=17 b=2 c=0
                                            $ DEF S_1feb ID=MODE a=17 b=2 c=0
                                            $ DEF S_1fea ID=VAL a=17 b=1 c=0
                                            ~C ALT
                                            $ DEF S_1fe9 ID=DETAILS a=65 b=116 c=0
                                            ~B ALTEND
                                            ~A ALTBEG
                                            $ DEF S_1fe8 ID=TEXT a=17 b=3 c=0
                                            $ DEF S_1fe7 ID=HLINK a=17 b=3 c=0
                                            ~C ALT
                                            $ DEF S_1fe6 ID=X a=17 b=3 c=0
                                            $ DEF S_1fe5 ID=Y a=17 b=3 c=0
                                            ~B ALTEND
                                            } FINISH )


%recordformat IDENTINFO (      %c                                 | typedef struct IDENTINFO {
                               %c                                 |   union {
                               %c                                 |     struct {
  (  %short FLAGS,TYPE,                                           |       short int FLAGS,TYPE;
     ( %c                                                         |       union {
        %short LINK %or        %c                                 |         short int LINK;
        %short XTYPE %or       %c                                 |         short int XTYPE;
        %short SIZE %or        %c                                 |         short int SIZE;
        %short ACT             %c                                 |         short int ACT;
     ),                                                           |       };
     %byte REG,MODE,                                              |       unsigned char REG,MODE;
     %integer VAL              %c                                 |       int VAL;
   %or                         %c                                 |     };
     %record(objinfo) DETAILS  %c                                 |     OBJINFO DETAILS;
  ),                                                              |   };
                               %c                                 |   union {
  (                            %c                                 |     struct {
     %short TEXT,HLINK         %c                                 |       short int TEXT,HLINK;
   %or                         %c                                 |     };
     %short X,Y                %c                                 |     struct {
  )                            %c                                 |       short int X,Y;
)                                                                 |     };
                                                                  |   };
                                                                  | } IDENTINFO;
                                                                  | 
%begin                                                            | int main(int argc, char **argv) {
  %record (IDENTINFO) id                                          |   IDENTINFO id;
                                                                  | 
  id_FLAGS = 1                                                    |   id.FLAGS = 1;
  id_LINK  = 2                                                    |   id.LINK  = 2;
  id_REG   = 3                                                    |   id.REG   = 3;
  id_VAL   = 4                                                    |   id.VAL   = 4;
                                                                  | 
  id_DETAILS_FLAGS = 11                                           |   id.DETAILS.FLAGS = 11;
  id_DETAILS_LINK  = 12                                           |   id.DETAILS.LINK  = 12;
  id_DETAILS_REG   = 13                                           |   id.DETAILS.REG   = 13;
  id_DETAILS_VAL   = 14                                           |   id.DETAILS.VAL   = 14;
                                                                  | 
  id_TEXT  = 5                                                    |   id.TEXT  = 5;
  id_X     = 6                                                    |   id.X     = 6;
%endofprogram                                                     |   return 0;
                                                                  | }
