#include <perms.h>

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

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

  //     2    %routine do(%real before, %integerfn fn(%integer p,q), %byteinteger after)

  void DO(float BEFORE, int (*FN)(int P, int Q), unsigned char AFTER) {
    //     3      %integer i

    int I;

    //     4      i = fn(1,2)

    I = FN(1, 2);

    //     5    %end

    return;
  } /* end of DO */

  // ?AFTER unused
  // ?BEFORE unused
  //     6
  //     7    %integerfn average(%integer a,b)

  int AVERAGE(int A, int B) {
    //     8      %result = (a+b)//2

    return ((long)(A + B) / (long)2);

    //     9    %end

  } /* end of AVERAGE */

  //    10
  //    11    do(3.14, average, 240)

  DO(3.14, AVERAGE, 240);

  //    12
  //    13  %endofprogram

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