#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:;
}