#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1    %externalroutine nested for backtrace test

void NESTEDFORBACKTRACETEST(void) {
  //     2      %owninteger anything = 1234

  static int ANYTHING = 1234;

  //     3
  //     4      %routine fred(%integer n)

  void FRED(int N) {
    //     5        %integer x, y

    int X;
    int Y;

    //     6        x = y + n

    X = Y + N;

    //     7      %end

    return;
  } /* end of FRED */

  //     8
  //     9      %integerfn jim

  int JIM(void) {
    //    10        fred(3)

    FRED(3);

    //    11        %result = 42

    return 42;

    //    12      %end

  } /* end of JIM */

  //    13
  //    14      %integer q

  int Q;

  //    15
  //    16      q = jim

  Q = JIM();

  //    17    %end

  return;
} /* end of NESTEDFORBACKTRACETEST */

// ?ANYTHING unused
//    18
//    19  %externalroutine top level(%integer random number)

void TOPLEVEL(int RANDOMNUMBER) {
  //    20    %integer blech

  int BLECH;

  //    21
  //    22    blech = 42 + random number

  BLECH = 42 + RANDOMNUMBER;

  //    23
  //    24    nested for backtrace test

  NESTEDFORBACKTRACETEST();

  //    25  %end

  return;
} /* end of TOPLEVEL */

//    26
//    27  %begin

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

  //    28
  //    29  top level(17)

  TOPLEVEL(17);

  //    30
  //    31  %endofprogram

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