#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 ! PASSES A RECORD BY VALUE
// 3 %recordformat fm((%integer i %or %byte b1,b2,b3,b4))
struct FM {
union {
struct {
union {
struct {
int I;
};
struct {
unsigned char B1;
unsigned char B2;
unsigned char B3;
unsigned char B4;
};
};
};
};
};
// 4 %record(fm) a,b
struct FM A;
struct FM B;
// 5
// 6 %routine fred(%record(fm) x,%integer y, %record(fm) z)
void FRED(struct FM X, int Y, struct FM Z) {
// 7 write(x_b1,1)
_imp_WRITE(X.B1, 1);
// 8 write(x_b2,1)
_imp_WRITE(X.B2, 1);
// 9 write(x_b3,1)
_imp_WRITE(X.B3, 1);
// 10 write(x_b4,1)
_imp_WRITE(X.B4, 1);
// 11 write(z_b1,1)
_imp_WRITE(Z.B1, 1);
// 12 write(z_b2,1)
_imp_WRITE(Z.B2, 1);
// 13 write(z_b3,1)
_imp_WRITE(Z.B3, 1);
// 14 write(z_b4,1)
_imp_WRITE(Z.B4, 1);
// 15 %end
return;
} /* end of FRED */
// ?Y unused
// 16
// 17 a_i=x'01020304'
A.I = 16909060;
// 18 b_i=x'05060708'
B.I = 84281096;
// 19 fred(a,9,b)
FRED(A, 9, B);
// 20 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}