#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 %string(255) x, s
_imp_string255 X;
_imp_string255 S;
// 4
// 5 %integer i
int I;
// 6 %string(255)%name sn
_imp_string255 *SN;
// 7 %string(255)%array sra(0:9)
_imp_string255 SRA[10];
struct _imp_dv SRA_dv = {SRA, sizeof(_imp_string) /*, dims, <bounds> */};
// 8 %string(255)%namearray sna(0:9)
_imp_string255 *SNA[10];
struct _imp_dv SNA_dv = {SNA, sizeof(_imp_string *) /*, dims, <bounds> */};
// 9 %string(255)%namearrayname snan
_imp_string255 **SNAN;
struct _imp_dv SNAN_dv = {0}; // assignment of an array to an arrayname must copy bounds info too...
// 10 %string(255)%map sm(%integer i); %result == s; %end
_imp_string255 *SM(int I) { return /*?*/ &S; } /* end of SM */
// ?I unused
// 11 sn == s
SN = (_imp_string255 *)/*?*/ &S;
// 12 x = s
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = S; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 13 x = sn
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *SN; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 14 sn = x
*SN = X;
// 15 x = sra(i)
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = SRA[I]; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 16 sn == sra(i)
SN = (_imp_string255 *)/*?*/ &SRA[I];
// 17 x = sra(i)
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = SRA[I]; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 18 sra(i) = x
/* clang-format off */
_imp_strncpy(/*?*/&SRA[I], ({__typeof__(_imp_string255) tmp;/*B*/ tmp = X; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 19 sn == sna(i)
SN = (_imp_string255 *)SNA[I];
// 20 x = sna(i)
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *SNA[I]; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 21 sna(i) = x
*SNA[I] = X;
// 22 snan == sna
SNAN = (_imp_string255 *)SNA;
// 23 sn == snan(i)
SN = (_imp_string255 *)SNAN[/*BUG*/ I];
// 24 x = snan(i)
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *SNAN[/*BUG*/I]; (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 25 snan(i) = x
*SNAN[/*BUG*/ I] = X;
// 26 x = sm(i)
/* clang-format off */
_imp_strncpy(/*?*/&X, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = *SM(I); (void *)&tmp;}), /*max:*/255);
/* clang-format on */
// 27 sn == sm(i)
SN = (_imp_string255 *)SM(I);
// 28 sm(i) = x
*SM(I) = X;
// 29 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}