#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %integer i, a,b,c, q
int I;
int A;
int B;
int C;
int Q;
// 3
// 4 q = 0;
Q = 0;
// 5
// 6 %for i = 3,1,5 %cycle
// %for I = 3, 1, 5 %cycle
{
I = 2;
L_0001:
if (I == 5) goto L_0002;
I += 1;
// 7 q = q+i
Q = Q + I;
// 8 %repeat
goto L_0001;
}
L_0002:;
// 9
// 10 %for i = 3,2,5 %cycle
// %for I = 3, 2, 5 %cycle
{
I = 1;
L_0004:
if (I == 5) goto L_0005;
I += 2;
// 11 q = q+i
Q = Q + I;
// 12 %repeat
goto L_0004;
}
L_0005:;
// 13
// 14 %for i = 5,-1,3 %cycle
// %for I = 5, -1, 3 %cycle
{
I = 6;
L_0006:
if (I == 3) goto L_0007;
I -= 1;
// 15 q = q+i
Q = Q + I;
// 16 %repeat
goto L_0006;
}
L_0007:;
// 17
// 18 %for i = 5,-2,3 %cycle
// %for I = 5, -2, 3 %cycle
{
I = 7;
L_0008:
if (I == 3) goto L_0009;
I -= 2;
// 19 q = q+i
Q = Q + I;
// 20 %repeat
goto L_0008;
}
L_0009:;
// 21
// 22 a = 3; b = 1; c = 5
A = 3;
B = 1;
C = 5;
// 23
// 24 %for i = a, b, c %cycle
// %for I = A, B, C %cycle
{
int _initial = A, _increment = B, _final = C;
if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
I = _initial - _increment;
L_000A:
if (I == _final) goto L_000B;
I += _increment;
// 25 q = q+i+a
Q = Q + I + A;
// 26 %repeat
goto L_000A;
}
L_000B:;
// 27
// 28 a = 3; b = 2; c = 5
A = 3;
B = 2;
C = 5;
// 29
// 30 %for i = a, b, c %cycle
// %for I = A, B, C %cycle
{
int _initial = A, _increment = B, _final = C;
if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
I = _initial - _increment;
L_000C:
if (I == _final) goto L_000D;
I += _increment;
// 31 q = q+i+a
Q = Q + I + A;
// 32 %repeat
goto L_000C;
}
L_000D:;
// 33
// 34 a = 5; b = -1; c = 3
A = 5;
B = -1;
C = 3;
// 35
// 36 %for i = a, b, c %cycle
// %for I = A, B, C %cycle
{
int _initial = A, _increment = B, _final = C;
if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
I = _initial - _increment;
L_000E:
if (I == _final) goto L_000F;
I += _increment;
// 37 q = q+i+a
Q = Q + I + A;
// 38 %repeat
goto L_000E;
}
L_000F:;
// 39
// 40 a = 5; b = -2; c = 3
A = 5;
B = -2;
C = 3;
// 41
// 42 %for i = a, b, c %cycle
// %for I = A, B, C %cycle
{
int _initial = A, _increment = B, _final = C;
if (invalid_for_loop(_initial, _increment, _final)) _imp_signal(5, 1, 0, "Illegal cycle I = A, B, C");
I = _initial - _increment;
L_0010:
if (I == _final) goto L_0011;
I += _increment;
// 43 q = q+i+a
Q = Q + I + A;
// 44 %repeat
goto L_0010;
}
L_0011:;
// 45
// 46 %if q = 120 %then printstring("Pass!") %else printstring("Fail!")
if (Q != 120) goto L_0012;
_imp_PRINTSTRING(_imp_str_literal("Pass!"));
goto L_0013;
L_0012:;
_imp_PRINTSTRING(_imp_str_literal("Fail!"));
L_0013:;
// 47 newline
_imp_NEWLINE();
// 48
// 49 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}