#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 !%permroutinespec write(%integer v,p);
// 2 !%permroutinespec newline
// 3 !%primintegerfnspec addr(%name p)
// 4 !%primintegerfnspec typeof(%name n)
// 5 !%primintegerfnspec sizeof(%name n)
// 6
// 7 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 8 %routine test(%name param)
void TEST(_imp_name * PARAM) {
// 9 write(addr(param),0) ; newline
_imp_WRITE(_imp_ADDR(PARAM), 0);
_imp_NEWLINE();
// 10 write(sizeof(param),0); newline
_imp_WRITE(_imp_SIZEOF(PARAM), 0);
_imp_NEWLINE();
// 11 write(typeof(param),0); newline
_imp_WRITE(_imp_TYPEOF(PARAM), 0);
_imp_NEWLINE();
// 12 %end
return;
} /* end of TEST */
// 13
// 14 %integerarray ia1(3:5)
int IA1[3];
// 15
// 16 %integerarray ia2(2:4,3:6)
int IA2[3][4];
// 17
// 18
// 19 write(addr(ia1),0) ; newline
_imp_WRITE(_imp_ADDR(IA1), 0);
_imp_NEWLINE();
// 20 write(addr(ia1(3)),0) ; newline
_imp_WRITE(_imp_ADDR(/*?*/ &IA1[0]), 0);
_imp_NEWLINE();
// 21 write(sizeof(ia1),0); newline
_imp_WRITE(_imp_SIZEOF(IA1), 0);
_imp_NEWLINE();
// 22 write(typeof(ia1),0); newline
_imp_WRITE(_imp_TYPEOF(IA1), 0);
_imp_NEWLINE();
// 23 test(ia1)
TEST(IA1);
// 24
// 25 write(addr(ia2),0) ; newline
_imp_WRITE(_imp_ADDR(IA2), 0);
_imp_NEWLINE();
// 26 write(addr(ia2(2,3)),0) ; newline
_imp_WRITE(_imp_ADDR(/*?*/ &IA2[0][0]), 0);
_imp_NEWLINE();
// 27 write(sizeof(ia2),0); newline
_imp_WRITE(_imp_SIZEOF(IA2), 0);
_imp_NEWLINE();
// 28 write(typeof(ia2),0); newline
_imp_WRITE(_imp_TYPEOF(IA2), 0);
_imp_NEWLINE();
// 29 test(ia2)
TEST(IA2);
// 30
// 31 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}