#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1
// 2
// 3 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 4
// 5 %on %event 15 %start
if (!_imp_on_event(15)) goto L_0001;
// 6 print string("END OF DIAGNOSTICS") %and newline
_imp_PRINTSTRING(_imp_str_literal("END OF DIAGNOSTICS"));
_imp_NEWLINE();
// 7 %stop
_imp_stop(0);
// 8 %finish
L_0001:;
// 9
// 10 %routine the procedure(%integer i)
void THEPROCEDURE(int I) {
// 11 %integer local variable
int LOCALVARIABLE;
// 12 local variable = i
LOCALVARIABLE = I;
// 13
// 14 %on %event 15 %start
if (!_imp_on_event(15)) goto L_0002;
// 15 print string("Entered from THEPROCEDURE ") %and write(i,-1) %and newline ; newline
_imp_PRINTSTRING(_imp_str_literal("Entered from THEPROCEDURE "));
_imp_WRITE(I, -1);
_imp_NEWLINE();
_imp_NEWLINE();
// 16 print string("LOCALVARIABLE = ") %and write(local variable,-1) %and newline
_imp_PRINTSTRING(_imp_str_literal("LOCALVARIABLE = "));
_imp_WRITE(LOCALVARIABLE, -1);
_imp_NEWLINE();
// 17
// 18 %signal 15, event_sub, event_info
_imp_signal(15, _imp_EVENT().SUB, _imp_EVENT().INFO, "");
// 19 %finish
L_0002:;
// 20
// 21 %signal 15, 1 %if i >= 10
if (I < 10) goto L_0003;
_imp_signal(15, 1, 0, "");
L_0003:;
// 22 the procedure(i+3)
THEPROCEDURE(I + 3);
// 23 %end
return;
} /* end of THEPROCEDURE */
// 24
// 25
// 26
// 27
// 28
// 29
// 30
// 31 print string("portable version") %and newline
_imp_PRINTSTRING(_imp_str_literal("portable version"));
_imp_NEWLINE();
// 32
// 33
// 34 the procedure(1)
THEPROCEDURE(1);
// 35
// 36 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}