#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %comment %begin
// 3 %recordformat rf ( %integer i, %real r, %integer i2)
struct RF {
union {
struct {
int I;
float R;
int I2;
};
};
};
// 4 %comment %recordformat rf ( %integer i, %real r, %integer i2)
// 5
// 6 %comment
// 7 %record (rf) rec1, rec2
struct RF REC1;
struct RF REC2;
// 8 %comment %record (rf) rec1, rec2
// 9
// 10 %record (rf) %name %array recna1(2:3)
struct RF *RECNA1[2];
struct _imp_dv RECNA1_dv = {RECNA1, sizeof(struct RF *) /*, dims, <bounds> */};
// 11 %comment %record (rf) %name %array recna1(2:3)
// 12
// 13 %record (rf) %name %array %name recnan1
struct RF **RECNAN1;
struct _imp_dv RECNAN1_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 14 %comment %record (rf) %name %array %name recnan1
// 15
// 16 %comment
// 17
// 18 ! SETUP
// 19
// 20 rec1 = rec2
REC1 = REC2;
// 21 %comment rec1 = rec2
// 22
// 23 recnan1 == recna1
RECNAN1 = (struct RF *)RECNA1;
// 24 %comment recnan1 == recna1
// 25
// 26 ! TEST
// 27
// 28 recnan1(2) == rec1
RECNAN1[/*BUG*/ 2] = (struct RF *)/*?*/ &REC1;
// 29 %comment recnan1(2) == rec1 ... the (2) is missing
// 30
// 31 rec2 = recnan1(2)
REC2 = *RECNAN1[/*BUG*/ 2];
// 32 %comment rec2 = recnan1(2) ... the (2) is missing
// 33
// 34 %comment
// 35 %comment %endofprogram
// 36 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}