#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[3];
};
};
};
// 7+ %LONGREALARRAY A(0:2))
// 8 %RECORD(F)%ARRAY ONE(1:100)
struct F ONE[100];
struct _imp_dv ONE_dv = {ONE, sizeof(struct F) /*, dims, <bounds> */};
// 9 %RECORD(F)%ARRAY TWO(1:2)
struct F TWO[2];
struct _imp_dv TWO_dv = {TWO, sizeof(struct F) /*, dims, <bounds> */};
// 10 TWO(1)_NAME="PETE"
/* clang-format off */
_imp_strncpy(/*?*/&TWO[0].NAME, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("PETE"); (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 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
/* clang-format off */
if (_imp_strcmp((_imp_string *)/*?*/&TWO[0].NAME, (_imp_string *)/*?*/_imp_str_literal_ptr("PETE")) == 0) goto L_0004;
/* clang-format on */
_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:;
}