#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 %on %event 15 %start
if (!_imp_on_event(15)) goto L_0001;
// 4 print string("END OF DIAGNOSTICS"); newline
_imp_PRINTSTRING(_imp_str_literal("END OF DIAGNOSTICS"));
_imp_NEWLINE();
// 5 %stop
_imp_stop(0);
// 6 %finish
L_0001:;
// 7
// 8 %routine the procedure(%integer i)
void THEPROCEDURE(int I) {
// 9 %integer local variable
int LOCALVARIABLE;
// 10 local variable = i
LOCALVARIABLE = I;
// 11
// 12 %on %event 15 %start
if (!_imp_on_event(15)) goto L_0002;
// 13 print string("Entered from THEPROCEDURE "); write(i, -1); newlines(2)
_imp_PRINTSTRING(_imp_str_literal("Entered from THEPROCEDURE "));
_imp_WRITE(I, -1);
_imp_NEWLINES(2);
// 14 print string("LOCALVARIABLE = "); write(local variable, 0); newline
_imp_PRINTSTRING(_imp_str_literal("LOCALVARIABLE = "));
_imp_WRITE(LOCALVARIABLE, 0);
_imp_NEWLINE();
// 15 ! For comparative testing: Vax compiler needs event_extra not event_info
// 16 %signal 15, event_sub, event_info { pass up one level to caller }
_imp_signal(15, _imp_EVENT().SUB, _imp_EVENT().INFO, "");
// 17 %finish
L_0002:;
// 18
// 19 %signal 15, 1 %if i >= 10
if (I < 10) goto L_0003;
_imp_signal(15, 1, 0, "");
L_0003:;
// 20 the procedure(i+3)
THEPROCEDURE(I + 3);
// 21 %end
return;
} /* end of THEPROCEDURE */
// 22
// 23 the procedure(1)
THEPROCEDURE(1);
// 24
// 25 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}