#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %on %event 3,4,9 %start
if (!_imp_on_event(3, 4, 9)) goto L_0001;
// 3 printstring("EM CHAR IN STMNT - DISASTER"); newline
_imp_PRINTSTRING(_imp_str_literal("EM CHAR IN STMNT - DISASTER"));
_imp_NEWLINE();
// 4 %stop
_imp_stop(0);
// 5 %finish
L_0001:;
// 6 %integerfn x
int X(void) {
// 7 %integer j,k
int J;
int K;
// 8 %if j=k %then j=j %else %if k=j %then k=k %else %if j=k %then k=j %else %start
if (J != K) goto L_0002;
J = J;
goto L_0003;
L_0002:;
if (K != J) goto L_0004;
K = K;
goto L_0003;
L_0004:;
if (J != K) goto L_0005;
K = J;
goto L_0003;
L_0005:;
// 9 %begin
{ /*%begin*/
// 10 k=j
K = J;
// 11 %return ;! NOT HANDLED PROPERLY. In some version of Imp77 this is a return from the begin/end block.
goto end_1000;
// 12 %end
end_1000:;
}
// 13 %finish
L_0003:;
// 14 %result=1
return 1;
// 15 %end
} /* end of X */
// 16 %integer y
int Y;
// 17 %cycle
L_0006:;
// 18 y=x
Y = X();
// 19 %repeat %until x=y
if (X() == Y) goto L_0007;
goto L_0006;
L_0007:;
// 20 %endofprogramm
_imp_stop(0);
return 0;
end_0:;
}