#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 !***********************************************************************
// 3 !* TESTS CLEARING RECORDARRAY FOR OVERWRITING OFF END *
// 4 !***********************************************************************
// 5 %INTEGER I
int I;
// 6 %RECORDFORMAT F(%STRING(15)NAME,%INTEGER I,J,K,%LONGREAL X,Y, %C
struct F {
union {
struct {
_imp_string15 NAME;
int I;
int J;
int K;
double X;
double Y;
double A[21];
};
};
};
// 7+ %LONGREALARRAY A(0:20))
// 8 %RECORD(F)%ARRAY ONE(1:100)
struct F ONE[100];
// 9 %RECORD(F)%ARRAY TWO(1:2)
struct F TWO[2];
// 10 TWO(1)_NAME="PETE"
_imp_strncpy(/*?*/ &TWO[0].NAME, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("PETE");
(void *)&tmp;
}),
/*max:*/ 255);
// 11 %CYCLE I=1,1,100
// %for I = 1, 1, 100 %cycle
{
I = 0;
L_0001:
if (I == 100) goto L_0002;
I += 1;
// 12 ONE(I)=0
ONE[I - 1] = (struct F){0};
// 13 %REPEAT
goto L_0001;
}
L_0002:;
// 14 %IF TWO(1)_NAME#"PETE" %THEN PRINTSTRING("***ERROR***")%else %c
if (_imp_strcmp((_imp_string *)/*?*/ &TWO[0].NAME, (_imp_string *)/*?*/ _imp_str_literal_ptr("PETE")) == 0)
goto L_0004;
_imp_PRINTSTRING(_imp_str_literal("***ERROR***"));
goto L_0005;
L_0004:;
_imp_PRINTSTRING(_imp_str_literal("TEST OK"));
L_0005:;
// 15+ printstring("TEST OK")
// 16
// 17 %ENDOFPROGRAM
_imp_stop(0);
return 0;
end_0:;
}