#include <perms.h>
int _imp_mainep(int _imp_argc, char **_imp_argv) {
  //  %begin
  typedef struct Rf {
    int I;
    float R;
    int I2;
  } Rf;  //    %recordformat rf ( %integer i, %real r, %integer i2)
         //
  Rf Rec1;
  Rf Rec2;  //    %record (rf) rec1, rec2
  Rf *Recn1;
  Rf *Recn2;  //    %record (rf) %name recn1, recn2
  Rf Reca1[2 /*2:3*/];
  Rf Reca2[2 /*2:3*/];
  Rf Reca3[2 /*4:5*/][2 /*1:2*/];
  //    %record (rf) %array reca1,reca2(2:3),reca3(4:5,1:2)
  Rf Recan1;
  Rf Recan2;  //    %record (rf) %array %name recan1,recan2
  Rf Recna1[2 /*2:3*/];
  Rf Recna2[2 /*2:3*/];
  Rf Recna3[2 /*1:2*/];
  //    %record (rf) %name %array recna1,recna2(2:3),recna3(1:2)
  Rf *Recnan1;
  Rf *Recnan2;     //    %record (rf) %name %array %name recnan1,recnan2
  Rf Rfn1(void) {  //    %record(rf)%fn rfn1
    return (Rec2);
    //      %result = rec2
  }
  //    %end
  Rf *Rmap1(void) {  //    %record(rf)%map rmap1
    return (&Rec2);
    //      %result == rec2
  }
  //    %end
  //
  Rec1 = Rec2;          //    rec1 = rec2
  Recn1 = &Rec2;        //    recn1 == rec2
  Rec1 = *Recn1;        //    rec1 = recn1
  Reca1[2] = Rec2;      //    reca1(2) = rec2
  Rec1 = Reca1[2];      //    rec1 = reca1(2)
  Reca3[4][2] = Rec2;   //    reca3(4,2) = rec2
  Rec1 = Reca3[4][2];   //    rec1 = reca3(4,2)
  Recnan1 = &Recna1;    //    recnan1 == recna1
  *Recnan1(2) = &Rec1;  //    recnan1(2) == rec1
  Rec1 = *Recnan1(2);   //    rec1 = recnan1(2)
  Rec1 = Rfn1();        //    rec1 = rfn1
  *Rmap1() = Rec1;      //    rmap1 = rec1
  Rec1 = *Rmap1();      //    rec1 = rmap1
                        //
                        //  %endofprogram
  exit(0);
  return (1);
}
