#include <perms.h>

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

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

  //     2    %routine outer(%integer i)

  void OUTER(int I) {
    //     3      printstring("Outer-level version was called"); newline

    _imp_PRINTSTRING(_imp_str_literal("Outer-level version was called"));
    _imp_NEWLINE();

    //     4    %end

    return;
  } /* end of OUTER */

  // ?I unused
  //     5    %routine inner

  void INNER(void) {
    //     6      %routine test1

    void TEST1(void) {
      //     7      %end

      return;
    } /* end of TEST1 */

    //     8
    //     9      outer(10)

    OUTER(10);

    //    10
    //    11      %routine outer(%integer i)

    void OUTER(int I) {
      //    12        printstring("Inner-level version was called.  Probably should not have been!"); newline

      _imp_PRINTSTRING(_imp_str_literal("Inner-level version was called.  Probably should not have been!"));
      _imp_NEWLINE();

      //    13        printstring("This is only likely to have happened if nested procedures were badly"); newline

      _imp_PRINTSTRING(_imp_str_literal("This is only likely to have happened if nested procedures were badly"));
      _imp_NEWLINE();

      //    14        printstring("exbedded in the conversion to C ..."); newline

      _imp_PRINTSTRING(_imp_str_literal("exbedded in the conversion to C ..."));
      _imp_NEWLINE();

      //    15      %end

      return;
    } /* end of OUTER */

    // ?I unused
    //    16
    //    17      test1

    TEST1();

    //    18    %end

    return;
  } /* end of INNER */

  // ?OUTER unused
  //    19    inner

  INNER();

  //    20  %endofprogram

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