#include <perms.h>

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

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

  //     2    %integer inum

  int INUM;

  //     3    %real rnum

  float RNUM;

  //     4    %string (255) str = "improperly initialised?"

  _imp_string255 STR;

  /* clang-format off */
_imp_strncpy(/*?*/&STR, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("improperly initialised?"); (void *)&tmp;}), /*max:*/255);

  /* clang-format on */

  //     5
  //     6    inum = 0123

  INUM = 123;

  //     7    inum = 123

  INUM = 123;

  //     8    inum = X'AA'

  INUM = 170;

  //     9    inum = X'aa'

  INUM = 170;

  //    10    inum = K'77'

  INUM = 63;

  //    11    inum = B'1101'

  INUM = 13;

  //    12    inum = 10_0123

  INUM = 123;

  //    13    inum = 16_aa

  INUM = 170;

  //    14    inum = 16_AA

  INUM = 170;

  //    15    inum = M'FRED'

  INUM = 1179796804;

  //    16    inum = M'fred'

  INUM = 1718773092;

  //    17    !! NOT IMP77: inum = 'FRED'
  //    18    !! NOT IMP77: inum = 'fred'
  //    19    inum = 8_77

  INUM = 63;

  //    20    inum = 2_1101

  INUM = 13;

  //    21
  //    22    rnum = 0123

  RNUM = 123;

  //    23    rnum = 0123.234

  RNUM = 0123.234;

  //    24    rnum = 0123.0234

  RNUM = 0123.0234;

  //    25    rnum = 0123.4@2

  RNUM = 0123.4E2;

  //    26    rnum = 0123.4@-2

  RNUM = 0123.4E-2;

  //    27    rnum = 0123@2

  RNUM = 0123E2;

  //    28    rnum = 0123@+2

  RNUM = 0123 + 2;

  //    29    rnum = 0123@-2

  RNUM = 0123E-2;

  //    30    rnum = 123

  RNUM = 123;

  //    31    rnum = .234

  RNUM = .234;

  //    32    rnum = .234@3

  RNUM = .234E3;

  //    33    rnum = 0123.

  RNUM = 0123.;

  //    34    rnum = 0123.@4

  RNUM = 0123.E4;

  //    35    rnum = 0.@3

  RNUM = 0.E3;

  //    36    !rnum = 0.@      ;! rejected forms:
  //    37    !rnum = .@3
  //    38
  //    39    str = "improperly assigned?"


  /* clang-format off */
_imp_strncpy(/*?*/&STR, ({__typeof__(_imp_string255) tmp;/*B*/ tmp = _imp_str_literal("improperly assigned?"); (void *)&tmp;}), /*max:*/255);

  /* clang-format on */

  //    40    !! NOT IMP77: str = 'ditto, old style'
  //    41
  //    42  %endofprogram

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