#include <perms.h>

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

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

  //     2    %switch middle,right,left(1:3)

  int MIDDLE_index;
  int MIDDLE_line;
  char *MIDDLE_file;
  static const void *MIDDLE[3] = {&&case_MIDDLE_1, &&case_MIDDLE_2, &&case_MIDDLE_missing};

  int RIGHT_index;
  int RIGHT_line;
  char *RIGHT_file;
  static const void *RIGHT[3] = {&&case_RIGHT_1, &&case_RIGHT_2, &&case_RIGHT_3};

  int LEFT_index;
  int LEFT_line;
  char *LEFT_file;
  static const void *LEFT[3] = {&&case_LEFT_1, &&case_LEFT_default, &&case_LEFT_default};

  //     3
  //     4    ->middle(3)

  MIDDLE_line = __LINE__;
  MIDDLE_file = __FILE__;
  MIDDLE_index = 3;
  goto case_MIDDLE_dispatch;

  //     5
  //     6  left(1):

case_LEFT_1:;

//     7  middle(1):

case_MIDDLE_1:;

//     8  middle(2):

case_MIDDLE_2:;

//     9  right(1):

case_RIGHT_1:;

//    10  right(2):

case_RIGHT_2:;

//    11  right(3):

case_RIGHT_3:;

//    12  left(*):

case_LEFT_default:;

//    13
//    14  %endofprogram

  _imp_stop(0);
  return 0;

case_MIDDLE_dispatch:
  if (MIDDLE_index < 1 || MIDDLE_index > 3)
    _imp_signalf(6, 3, MIDDLE_index, "->MIDDLE(%d) out of bounds at %s line %d", MIDDLE_index, MIDDLE_file,
                 MIDDLE_line);
  goto *MIDDLE[MIDDLE_index - 1];

case_MIDDLE_missing:
  _imp_signalf(8, 2, MIDDLE_index, "switch jump to undefined label MIDDLE(%d): at %s line %d", MIDDLE_index,
               MIDDLE_file, MIDDLE_line);

case_RIGHT_dispatch:
  if (RIGHT_index < 1 || RIGHT_index > 3)
    _imp_signalf(6, 3, RIGHT_index, "->RIGHT(%d) out of bounds at %s line %d", RIGHT_index, RIGHT_file, RIGHT_line);
  goto *RIGHT[RIGHT_index - 1];

case_LEFT_dispatch:
  if (LEFT_index < 1 || LEFT_index > 3)
    _imp_signalf(6, 3, LEFT_index, "->LEFT(%d) out of bounds at %s line %d", LEFT_index, LEFT_file, LEFT_line);
  goto *LEFT[LEFT_index - 1];
end_0:;
}