#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

  int X;

  //     4  %integername xp

  int *XP;

  //     5  %integerarray ra(0:9)

  int RA[10];

  //     6
  //     7  %routine test1(%integer xi1)

  void TEST1(int XI1) {
    //     8    x = xi1

    X = XI1;

    //     9    xi1 = x

    XI1 = X;

    //    10  %end

    return;
  } /* end of TEST1 */

  //    11
  //    12  %routine test2(%integername xin1)

  void TEST2(int *XIN1) {
    //    13    xin1 == x

    XIN1 = (int *)/*?*/ &X;

    //    14    xin1 == xp

    XIN1 = (int *)XP;

    //    15    xin1 = x

    *XIN1 = X;

    //    16    xin1 = xp

    *XIN1 = *XP;

    //    17  %end

    return;
  } /* end of TEST2 */

  //    18
  //    19  %routine test4(%integer xi2,xi3)

  void TEST4(int XI2, int XI3) {
    //    20    xi2 = xi3

    XI2 = XI3;

    //    21    xi3 = xi2

    XI3 = XI2;

    //    22  %end

    return;
  } /* end of TEST4 */

  //    23
  //    24  %routine test7(%integerarrayname xran1)

  void TEST7(int *XRAN1) {
    //    25    xran1 == ra

    XRAN1 = (int *)RA;

    //    26    xran1(4) = x

    [/*BUG*/ 0] = X;

    //    27    x = xran1(4)

    X = [/*BUG*/ 0];

    //    28  %end

    return;
  } /* end of TEST7 */

  //    29
  //    30  %routine test12(%integernamearrayname xinan1)

  void TEST12(int **XINAN1) {
    //    31    xinan1(4) == xp

    [/*BUG*/ 0] = (int *)XP;

    //    32    xp == xinan1(4)

    XP = (int *)[/*BUG*/ 0];

    //    33    xinan1(4) = x

    *[/*BUG*/ 0] = X;

    //    34    x = xinan1(4)

    X = *[/*BUG*/ 0];

    //    35  %end

    return;
  } /* end of TEST12 */

  //    36
  //    37  %endofprogram

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