#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2
  //     3    %begin

  { /*%begin*/

    //     4      %recordformat RIGHT(%longreal K, J, I)

    struct RIGHT {
      union {
        struct {
          double K;
          double J;
          double I;
        };
      };
    };

    //     5    %end

    goto end_1000;
  end_1000:;
  }

  // ?RIGHT unused
  //     6
  //     7    %recordformatspec RIGHT
  //     8
  //     9    %recordformat OTHER(%record (RIGHT) %name MISTAKE)

  struct OTHER {
    union {
      struct {
        struct RIGHT *MISTAKE;
      };
    };
  };

  //    10
  //    11    %recordformat RIGHT(%integer I, J, K)

  struct RIGHT {
    union {
      struct {
        int I;
        int J;
        int K;
      };
    };
  };

  //    12
  //    13    %record (RIGHT) TEST

  struct RIGHT TEST;

  //    14
  //    15    %record (RIGHT) %map TESTMAP

  struct RIGHT *TESTMAP(void) {
    //    16      %result == TEST

    return /*?*/ &TEST;

    //    17    %end

  } /* end of TESTMAP */

  //    18
  //    19  %endofprogram

  _imp_stop(0);
  return 0;
end_0:;
}