#include <perms.h>

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

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

  //     2    %integer data

  int DATA;

  //     3    %integername pointer

  int *POINTER;

  //     4    %integermap mapresult

  int *MAPRESULT(void) {
    //     5      %owninteger data2

    static int DATA2;

    //     6      %result == data2

    return /*?*/ &DATA2;

    //     7    %end

  } /* end of MAPRESULT */

  //     8
  //     9    %integermap test(%integer n)

  int *TEST(int N) {
    //    10       %result == data %if n = 1

    if (N != 1) goto L_0001;
    return /*?*/ &DATA;
  L_0001:;

  //    11       %result == pointer %if n = 2

    if (N != 2) goto L_0002;
    return POINTER;
  L_0002:;

  //    12       %result == mapresult

    return MAPRESULT();

    //    13    %end

  } /* end of TEST */

  //    14
  //    15    %integer q

  int Q;

  //    16
  //    17    q = test(4)

  Q = *TEST(4);

  //    18
  //    19  %endofprogram

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