#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %recordformat rf(%short h0,%byte b2,b3)
struct RF {
union {
struct {
short int H0;
unsigned char B2;
unsigned char B3;
};
};
};
// 3 %ownrecord(rf) x1,x2
static struct RF X1;
static struct RF X2;
// 4 %integerfn fred
int FRED(void) {
// 5 %integer k
int K;
// 6 %record(rf)r0,r1,r2
struct RF R0;
struct RF R1;
struct RF R2;
// 7 k=13
K = 13;
// 8 r0_h0=12
R0.H0 = 12;
// 9 x1_h0=17
X1.H0 = 17;
// 10 x2=x1
X2 = X1;
// 11 r1=r0
R1 = R0;
// 12 r2=r1
R2 = R1;
// 13 %result=r2_h0
return R2.H0;
// 14 %end
} /* end of FRED */
// 15 %if fred=12 %and x2_H0=17 %then printstring("Test OK")
if (FRED() != 12) goto L_0001;
if (X2.H0 != 17) goto L_0001;
_imp_PRINTSTRING(_imp_str_literal("Test OK"));
L_0001:;
// 16 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}