#include <perms.h>

//          Edinburgh IMP77 Compiler - Version 8.4
//
//     1  %begin

int main(int argc, char **argv) { /*%begin*/
  _imp_initialise(argc, argv);

  //     2    %routine test(%name param)         ;! ia1         ia2

  void TEST(_imp_name * PARAM) {
    //     3      write(addr(param),0)  ; newline  ;! 2145833816  2145833816    are these the same because it's the address of the

    _imp_WRITE(_imp_ADDR(PARAM), 0);
    _imp_NEWLINE();

    //     4                                        !                           %name param rather than the array it points to?
    //     5      write(sizeof(param),0); newline  ;! 4           4

    _imp_WRITE(_imp_SIZEOF(PARAM), 0);
    _imp_NEWLINE();

    //     6      write(typeof(param),0); newline  ;! 1           1

    _imp_WRITE(_imp_TYPEOF(PARAM), 0);
    _imp_NEWLINE();

    //     7    %end

    return;
  } /* end of TEST */

  //     8
  //     9    %integerarray ia1(3:5)

  int IA1[3];

  //    10    %integerarray ia2(2:4,3:6)

  int IA2[3][4];

  //    11
  //    12    test(ia1)

  TEST(IA1);

  //    13    test(ia2)

  TEST(IA2);

  //    14
  //    15  %endofprogram

  _imp_stop(0);
  return 0;
end_0:;
}