#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %integer i
int I;
// 3 %integerarray ia1(3:5)
int IA1[3];
struct _imp_dv IA1_dv = {IA1, sizeof(int) /*, dims, <bounds> */};
// 4 %integerarrayname ian1
int *IAN1;
struct _imp_dv IAN1_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 5 %integerarray ia2(2:4,3:6)
int IA2[3][4];
struct _imp_dv IA2_dv = {IA2, sizeof(int) /*, dims, <bounds> */};
// 6 %integerarray(2)%name ian2
int *IAN2;
struct _imp_dv IAN2_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 7
// 8 ia1(3) = i
IA1[0] = I;
// 9 i = ia1(3)
I = IA1[0];
// 10
// 11 ia2(2,3) = i
IA2[0][0] = I;
// 12 i = ia2(2,3)
I = IA2[0][0];
// 13
// 14 ian1 == ia1
IAN1 = (int *)IA1;
// 15 ian1(3) = i
IAN1[/*BUG*/ 3] = I;
// 16 i = ian1(3)
I = IAN1[/*BUG*/ 3];
// 17
// 18 ian2 == ia2
IAN2 = (int *)IA2;
// 19 ian2(2,3) = i
IAN2[/*BUG*/ 3] = I;
// 20 i = ian2(2,3)
I = IAN2[/*BUG*/ 3];
// 21
// 22 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}