#include <perms.h>

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

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

  //     2    ! Complete list of formal parameter types:
  //     3
  //     4    %recordformat record fm ( %integer field1, %real field2, %string (255) field3 )

  struct RECORDFM {
    union {
      struct {
        int FIELD1;
        float FIELD2;
        _imp_string255 FIELD3;
      };
    };
  };

  //     5    %comment %recordformat record fm ( %integer field1, %real field2, %string (255) field3 )
  //     6
  //     7    %routine fancy

  void FANCY(void) {
    //     8      %comment   %routine fancy
    //     9    %end

    return;
  } /* end of FANCY */

  //    10
  //    11    %routine fancy1(%integer param, p2, p3)

  void FANCY1(int PARAM, int P2, int P3) {
    //    12      %comment   %routine fancy1(%integer param, p2, p3)
    //    13    %end

    return;
  } /* end of FANCY1 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    14
  //    15    %routine fancy2(%real param, p2, p3)

  void FANCY2(float PARAM, float P2, float P3) {
    //    16      %comment   %routine fancy2(%real param, p2, p3)
    //    17    %end

    return;
  } /* end of FANCY2 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    18
  //    19    %routine fancy3(%string(255) param, p2, p3)

  void FANCY3(_imp_string255 PARAM, _imp_string255 P2, _imp_string255 P3) {
    //    20      %comment   %routine fancy3(%string(255) param, p2, p3)
    //    21    %end

    return;
  } /* end of FANCY3 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    22
  //    23    %routine fancy4(%integer %name param, p2, p3)

  void FANCY4(int *PARAM, int *P2, int *P3) {
    //    24      %comment   %routine fancy4(%integer %name param, p2, p3)
    //    25    %end

    return;
  } /* end of FANCY4 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    26
  //    27    %routine fancy5(%real %name param, p2, p3)

  void FANCY5(float *PARAM, float *P2, float *P3) {
    //    28      %comment   %routine fancy5(%real %name param, p2, p3)
    //    29    %end

    return;
  } /* end of FANCY5 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    30
  //    31    %routine fancy6(%string(255)%name param, p2, p3)

  void FANCY6(_imp_string255 * PARAM, _imp_string255 * P2, _imp_string255 * P3) {
    //    32      %comment   %routine fancy6(%string(255)%name param, p2, p3)
    //    33    %end

    return;
  } /* end of FANCY6 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    34
  //    35    %routine fancy7(%integer %array %name param, p2, p3)

  void FANCY7(int *PARAM, int *P2, int *P3) {
    //    36      %comment   %routine fancy7(%integer %array %name param, p2, p3)
    //    37    %end

    return;
  } /* end of FANCY7 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    38
  //    39    %routine fancy8(%real %array %name param, p2, p3)

  void FANCY8(float *PARAM, float *P2, float *P3) {
    //    40      %comment   %routine fancy8(%real %array %name param, p2, p3)
    //    41    %end

    return;
  } /* end of FANCY8 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    42
  //    43    %routine fancy9(%string(255)%array %name param, p2, p3)

  void FANCY9(_imp_string255 * PARAM, _imp_string255 * P2, _imp_string255 * P3) {
    //    44      %comment   %routine fancy9(%string(255)%array %name param, p2, p3)
    //    45    %end

    return;
  } /* end of FANCY9 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    46
  //    47    %routine fancy10A(%integer %fn param)

  void FANCY10A(int (*PARAM)(void)) {
    //    48      ! name list silently accepted here. Should be an error. Not output in C however.  Add to rejection tests later.
    //    49      %comment   %routine fancy10A(%integer %fn param)
    //    50    %end

    return;
  } /* end of FANCY10A */

  // ?PARAM unused
  //    51
  //    52    %routine fancy10B(%integer %fn param(%routine subparam(%realfn subsubparam(%real subsubsubparam))))

  void FANCY10B(int (*PARAM)(void (*SUBPARAM)(void))) {
    //    53      %comment   %routine fancy10B(%integer %fn param(%routine subparam(%realfn subsubparam(%real subsubsubparam))))
    //    54    %end

    return;
  } /* end of FANCY10B */

  // ?PARAM unused
  //    55
  //    56    %routine fancy11(%real %fn param)

  void FANCY11(float (*PARAM)(void)) {
    //    57      %comment   %routine fancy11(%real %fn param)
    //    58    %end

    return;
  } /* end of FANCY11 */

  // ?PARAM unused
  //    59
  //    60    %routine fancy12(%string(255)%fn param)

  void FANCY12(_imp_string255(*PARAM)(void)) {
    //    61      %comment   %routine fancy12(%string(255)%fn param)
    //    62    %end

    return;
  } /* end of FANCY12 */

  // ?PARAM unused
  //    63
  //    64    %routine fancy13(%integer %function param)

  void FANCY13(int (*PARAM)(void)) {
    //    65      %comment   %routine fancy13(%integer %function param)
    //    66    %end

    return;
  } /* end of FANCY13 */

  // ?PARAM unused
  //    67
  //    68    %routine fancy14(%real %function param)

  void FANCY14(float (*PARAM)(void)) {
    //    69      %comment   %routine fancy14(%real %function param)
    //    70    %end

    return;
  } /* end of FANCY14 */

  // ?PARAM unused
  //    71
  //    72    %routine fancy15(%string(255)%function param)

  void FANCY15(_imp_string255(*PARAM)(void)) {
    //    73      %comment   %routine fancy15(%string(255)%function param)
    //    74    %end

    return;
  } /* end of FANCY15 */

  // ?PARAM unused
  //    75
  //    76    %routine fancy16(%integer %map param)

  void FANCY16(int *(*PARAM)(void)) {
    //    77      %comment   %routine fancy16(%integer %map param)
    //    78    %end

    return;
  } /* end of FANCY16 */

  // ?PARAM unused
  //    79
  //    80    %routine fancy17(%real %map param)

  void FANCY17(float *(*PARAM)(void)) {
    //    81      %comment   %routine fancy17(%real %map param)
    //    82    %end

    return;
  } /* end of FANCY17 */

  // ?PARAM unused
  //    83
  //    84    %routine fancy18(%string(255)%map param)

  void FANCY18(_imp_string255 * (*PARAM)(void)) {
    //    85      %comment   %routine fancy18(%string(255)%map param)
    //    86    %end

    return;
  } /* end of FANCY18 */

  // ?PARAM unused
  //    87
  //    88    %routine fancy19(%integer %name %array %name param, p2, p3)

  void FANCY19(int **PARAM, int **P2, int **P3) {
    //    89      %comment   %routine fancy19(%integer %name %array %name param, p2, p3)
    //    90    %end

    return;
  } /* end of FANCY19 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    91
  //    92    %routine fancy20(%real %name %array %name param, p2, p3)

  void FANCY20(float **PARAM, float **P2, float **P3) {
    //    93      %comment   %routine fancy20(%real %name %array %name param, p2, p3)
    //    94    %end

    return;
  } /* end of FANCY20 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    95
  //    96    %routine fancy21(%string(255) %name %array %name param, p2, p3)

  void FANCY21(_imp_string255 * *PARAM, _imp_string255 * *P2, _imp_string255 * *P3) {
    //    97      %comment   %routine fancy21(%string(255) %name %array %name param, p2, p3)
    //    98    %end

    return;
  } /* end of FANCY21 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //    99
  //   100    %routine fancy22(%record(record fm) param, p2, p3)

  void FANCY22(struct RECORDFM PARAM, struct RECORDFM P2, struct RECORDFM P3) {
    //   101      %comment   %routine fancy22(%record(record fm) param, p2, p3)
    //   102    %end

    return;
  } /* end of FANCY22 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //   103
  //   104    %routine fancy23(%record(record fm)%name param, p2, p3)

  void FANCY23(struct RECORDFM * PARAM, struct RECORDFM * P2, struct RECORDFM * P3) {
    //   105      %comment   %routine fancy23(%record(record fm)%name param, p2, p3)
    //   106    %end

    return;
  } /* end of FANCY23 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //   107
  //   108    %routine fancy24(%record(record fm)%array %name param, p2, p3)

  void FANCY24(struct RECORDFM * PARAM, struct RECORDFM * P2, struct RECORDFM * P3) {
    //   109      %comment   %routine fancy24(%record(record fm)%array %name param, p2, p3)
    //   110    %end

    return;
  } /* end of FANCY24 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //   111
  //   112    %routine fancy25(%record(record fm) %name %array %name param, p2, p3)

  void FANCY25(struct RECORDFM * *PARAM, struct RECORDFM * *P2, struct RECORDFM * *P3) {
    //   113      %comment   %routine fancy25(%record(record fm) %name %array %name param, p2, p3)
    //   114    %end

    return;
  } /* end of FANCY25 */

  // ?P3 unused
  // ?P2 unused
  // ?PARAM unused
  //   115
  //   116    %routine fancy26(%record(record fm)%fn param)

  void FANCY26(struct RECORDFM(*PARAM)(void)) {
    //   117      %comment   %routine fancy26(%record(record fm)%fn param)
    //   118    %end

    return;
  } /* end of FANCY26 */

  // ?PARAM unused
  //   119
  //   120    %routine fancy27(%record(record fm)%function param)

  void FANCY27(struct RECORDFM(*PARAM)(void)) {
    //   121      %comment   %routine fancy27(%record(record fm)%function param)
    //   122    %end

    return;
  } /* end of FANCY27 */

  // ?PARAM unused
  //   123
  //   124    %routine fancy28(%record(record fm)%map param)

  void FANCY28(struct RECORDFM * (*PARAM)(void)) {
    //   125      %comment   %routine fancy28(%record(record fm)%map param)
    //   126    %end

    return;
  } /* end of FANCY28 */

  // ?PARAM unused
  //   127
  //   128    %routine fancy29(%routine param)

  void FANCY29(void (*PARAM)(void)) {
    //   129      %comment   %routine fancy29(%routine param)
    //   130    %end

    return;
  } /* end of FANCY29 */

  // ?PARAM unused
  //   131
  //   132    %routine fancy30(%predicate param)

  void FANCY30(int (*PARAM)(void)) {
    //   133      %comment   %routine fancy30(%predicate param)
    //   134    %end

    return;
  } /* end of FANCY30 */

  // ?PARAM unused
  //   135
  //   136    %routine fancy31(%name param)

  void FANCY31(_imp_name * PARAM) {
    //   137      %comment   %routine fancy31(%name param)
    //   138    %end

    return;
  } /* end of FANCY31 */

  // ?PARAM unused
  //   139
  //   140    %routine fancy32(%name param1, param2, param3)

  void FANCY32(_imp_name * PARAM1, _imp_name * PARAM2, _imp_name * PARAM3) {
    //   141      %comment   %routine fancy32(%name param1, param2, param3)
    //   142    %end

    return;
  } /* end of FANCY32 */

  // ?PARAM3 unused
  // ?PARAM2 unused
  // ?PARAM1 unused
  //   143
  //   144  %endofprogram

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