#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 !%control x'11111111'
// 2 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 3 %INTEGER COUNT
int COUNT;
// 4 %INTEGER I
int I;
// 5 %ROUTINE FRED(%INTEGERNAME I,%INTEGER FIRST,STEP,LAST)
void FRED(int *I, int FIRST, int STEP, int LAST) {
// 6 %CYCLE I=FIRST,STEP,LAST
// %for *I = FIRST, STEP, LAST %cycle
{
int _initial = FIRST, _increment = STEP, _final = LAST;
if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle *I = FIRST, STEP, LAST");
*I = _initial - _increment;
L_0001:
if (*I == _final) goto L_0002;
*I += _increment;
// 7 COUNT=COUNT+1
COUNT = COUNT + 1;
// 8 %REPEAT
goto L_0001;
}
L_0002:;
// 9 %END
return;
} /* end of FRED */
// 10 COUNT=0
COUNT = 0;
// 11 FRED(I,X'9000',16,X'A000')
FRED(/*?*/ &I, 36864, 16, 40960);
// 12 %IF COUNT=257 %AND I=X'A000' %THEN PRINTSTRING("TEST OK") %C
if (COUNT != 257) goto L_0004;
if (I != 40960) goto L_0004;
_imp_PRINTSTRING(_imp_str_literal("TEST OK"));
goto L_0005;
L_0004:;
_imp_PRINTSTRING(_imp_str_literal("WRONG"));
/*_imp_monitor(__LINE__, __FILE__, PRETTY_FUNCTION);*/
L_0005:;
// 13+ %ELSE PRINTSTRING("WRONG") %AND %MONITOR
// 14 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}