#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 fn(%integerfn fred(%integer i))
void DOFN(int (*FRED)(int I)) {
// 3 %integer x
int X;
// 4 x = fred(1)
X = FRED(1);
// 5 %end
return;
} /* end of DOFN */
// 6 %routine do proc(%routine fred(%integer i))
void DOPROC(void (*FRED)(int I)) {
// 7 fred(1)
FRED(1);
// 8 %end
return;
} /* end of DOPROC */
// 9 %routine do map(%integermap fred(%integer i))
void DOMAP(int *(*FRED)(int I)) {
// 10 fred(1) = 1
*FRED(1) = 1;
// 11 %end
return;
} /* end of DOMAP */
// 12 %routine do pred(%predicate fred(%integer i))
void DOPRED(int (*FRED)(int I)) {
// 13 %return %if fred(1)
if (!(FRED(1))) goto L_0001;
return;
L_0001:;
// 14 %end
return;
} /* end of DOPRED */
// 15 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}