#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 %integer x, i
int X;
int I;
// 4
// 5 %integername in
int *IN;
// 6 %integerarray ira(0:9)
int IRA[10];
// 7 %integernamearray ina(0:9)
int *INA[10];
// 8 %integernamearrayname inan
int **INAN;
// 9 %integermap im(%integer i); %result == i; %end
int *IM(int I)
{
return /*?*/ &I;
} /* end of IM */
// 10 %integermap im2(%integer i); %result == in; %end
int *IM2(int I)
{
return IN;
} /* end of IM2 */
// ?I unused
// 11 %integermap im3(%integer i); %result == ira(i); %end
int *IM3(int I)
{
return /*?*/ &IRA[I];
} /* end of IM3 */
// 12 %integermap im4(%integer i); %result == ina(i); %end
int *IM4(int I)
{
return INA[I];
} /* end of IM4 */
// 13 %integermap im5(%integer i); %result == inan(i); %end
int *IM5(int I)
{
return [/*BUG*/ 0];
} /* end of IM5 */
// 14 in == i
IN = (int *)/*?*/ &I;
// 15 x = i
X = I;
// 16 x = in
X = *IN;
// 17 x = ira(i)
X = IRA[I];
// 18 in == ira(i)
IN = (int *)/*?*/ &IRA[I];
// 19 x = ira(i)
X = IRA[I];
// 20 ira(i) = i
IRA[I] = I;
// 21 in == ina(i)
IN = (int *)INA[I];
// 22 x = ina(i)
X = *INA[I];
// 23 ina(x) = i
*INA[X] = I;
// 24 inan == ina
INAN = (int *)INA;
// 25 in == inan(i)
IN = (int *)[/*BUG*/ 0];
// 26 inan(i) = x
*[/*BUG*/ 0] = X;
// 27 x = inan(i)
X = *[/*BUG*/ 0];
// 28 in == im(i)
IN = (int *)IM(I);
// 29 x = im(i)
X = *IM(I);
// 30 im(i) = x
*IM(I) = X;
// 31 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}