#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1
//     2  %BEGIN

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

  //     3  %ROUTINE TEST(%ROUTINE PARAM(%INTEGER I))

  void TEST(void (*PARAM)(int I)) {
    //     4        PARAM(10)

    PARAM(10);

    //     5  %END

    return;
  } /* end of TEST */

  //     6  %ROUTINE A

  void A(void) {
    //     7  %INTEGER P,Q,R

    int P;
    int Q;
    int R;

    //     8        P='P'; Q='Q'; R='R'

    P = 80;
    Q = 81;
    R = 82;

    //     9  %ROUTINE B(%INTEGER A)

    void B(int A) {
      //    10        %UNLESS P='P' %AND Q='Q' %AND R='R' %and a=10 %THEN %c

      if (P != 80) goto L_0001;
      if (Q != 81) goto L_0001;
      if (R != 82) goto L_0001;
      if (A == 10) goto L_0002;
    L_0001:;
      _imp_PRINTSTRING(_imp_str_literal("FAILED"));
      goto L_0003;
    L_0002:;
      _imp_PRINTSTRING(_imp_str_literal("TEST OK"));
    L_0003:;

    //    11+         PRINTSTRING("FAILED") %else printstring("TEST OK")
    //    12  %END

      return;
    } /* end of B */

    //    13  TEST(B)

    TEST(B);

    //    14  %END

    return;
  } /* end of A */

  //    15  A

  A();

  //    16  %ENDOFPROGRAM

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