#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 %real x, r
float X;
float R;
// 4
// 5 %integer i
int I;
// 6 %realname rn
float *RN;
// 7 %realarray rra(0:9)
float RRA[10];
struct _imp_dv RRA_dv = {RRA, sizeof(float) /*, dims, <bounds> */};
// 8 %realnamearray rna(0:9)
float *RNA[10];
struct _imp_dv RNA_dv = {RNA, sizeof(float *) /*, dims, <bounds> */};
// 9 %realnamearrayname rnan
float **RNAN;
struct _imp_dv RNAN_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 10 %realmap rm(%integer i); %result == r; %end
float *RM(int I) { return /*?*/ &R; } /* end of RM */
// ?I unused
// 11 %realmap rm2(%integer i); %result == rn; %end
float *RM2(int I) { return RN; } /* end of RM2 */
// ?I unused
// 12 %realmap rm3(%integer i); %result == rra(i); %end
float *RM3(int I) { return /*?*/ &RRA[I]; } /* end of RM3 */
// 13 %realmap rm4(%integer i); %result == rna(i); %end
float *RM4(int I) { return RNA[I]; } /* end of RM4 */
// 14 %realmap rm5(%integer i); %result == rnan(i); %end
float *RM5(int I) { return RNAN[/*BUG*/ I]; } /* end of RM5 */
// 15 rn == r
RN = (float *)/*?*/ &R;
// 16 x = r
X = R;
// 17 r = x
R = X;
// 18 x = rn
X = *RN;
// 19 rn = x
*RN = X;
// 20 x = rra(i)
X = RRA[I];
// 21 rra(i) = x
RRA[I] = X;
// 22 rn == rra(i)
RN = (float *)/*?*/ &RRA[I];
// 23 x = rra(i)
X = RRA[I];
// 24 rn == rna(i)
RN = (float *)RNA[I];
// 25 rna(i) = x
*RNA[I] = X;
// 26 x = rna(i)
X = *RNA[I];
// 27 rnan == rna
RNAN = (float *)RNA;
// 28 rn == rnan(i)
RN = (float *)RNAN[/*BUG*/ I];
// 29 rnan(i) = x
*RNAN[/*BUG*/ I] = X;
// 30 x = rnan(i)
X = *RNAN[/*BUG*/ I];
// 31 x = rm(i)
X = *RM(I);
// 32 rn == rm(i)
RN = (float *)RM(I);
// 33 rm(i) = x
*RM(I) = X;
// 34 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}