#include <perms.h>

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

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

  //     2    %integer value, value2

  int VALUE;
  int VALUE2;

  //     3    %integername ptr, ptr2

  int *PTR;
  int *PTR2;

  //     4
  //     5    %integermap intmap

  int *INTMAP(void)
  {

    //     6      %result == value2

    return /*?*/ &VALUE2;

    //     7    %end

  } /* end of INTMAP */

  //     8
  //     9    %integermap intmap2(%integer i)

  int *INTMAP2(int I)
  {

    //    10      %result == ptr

    return PTR;

    //    11    %end

  } /* end of INTMAP2 */

  // ?I unused
  //    12
  //    13    ptr == value

  PTR = (int *)/*?*/ &VALUE;

  //    14    ptr == intmap

  PTR = (int *)INTMAP();

  //    15    ptr == intmap2(55)

  PTR = (int *)INTMAP2(55);

  //    16    ptr == ptr

  PTR = (int *)PTR;

  //    17    ptr = 42

  *PTR = 42;

  //    18
  //    19    value = 21

  VALUE = 21;

  //    20    value = ptr

  VALUE = *PTR;

  //    21    value = intmap

  VALUE = *INTMAP();

  //    22    value = intmap2(44)

  VALUE = *INTMAP2(44);

  //    23
  //    24    intmap = 63

  *INTMAP() = 63;

  //    25    intmap2(88) = 63

  *INTMAP2(88) = 63;

  //    26
  //    27    %if value2 = value %then %stop

  if (VALUE2 != VALUE) goto L_0001;
  _imp_stop(0);
L_0001:;

//    28    %if intmap = value %then %stop

  if (*INTMAP() != VALUE) goto L_0002;
  _imp_stop(0);
L_0002:;

//    29    %if intmap2(99) = value %then %stop

  if (*INTMAP2(99) != VALUE) goto L_0003;
  _imp_stop(0);
L_0003:;

//    30    %if ptr = value %then %stop

  if (*PTR != VALUE) goto L_0004;
  _imp_stop(0);
L_0004:;

//    31    %if intmap == ptr %then %stop

  if (_imp_ADDR((void *)(INTMAP())) != _imp_ADDR((void *)(PTR))) goto L_0005;

  _imp_stop(0);
L_0005:;

//    32    %if intmap2(11) == ptr %then %stop

  if (_imp_ADDR((void *)(INTMAP2(11))) != _imp_ADDR((void *)(PTR))) goto L_0006;

  _imp_stop(0);
L_0006:;

//    33    %if ptr == ptr2 %then %stop

  if (_imp_ADDR((void *)(PTR)) != _imp_ADDR((void *)(PTR2))) goto L_0007;

  _imp_stop(0);
L_0007:;

//    34
//    35  %endofprogram

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