#include <perms.h>

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

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

  //     2     printstring("Hello!"); newline

  _imp_PRINTSTRING(_imp_str_literal("Hello!"));
  _imp_NEWLINE();

  //     3     %begin

  { /*%begin*/

    //     4       printstring("In a %begin block..."); newline

    _imp_PRINTSTRING(_imp_str_literal("In a %begin block..."));
    _imp_NEWLINE();

    //     5       %return ;! in i2c this erroneously returns from main program :-(

    goto end_1000;

    //     6       printstring("I guess %return in a %begin/%end block really does mean that it is an anonymous routine...");

    _imp_PRINTSTRING(
        _imp_str_literal("I guess %return in a %begin/%end block really does mean that it is an anonymous routine..."));
    _imp_NEWLINE();

    // ?access
    //     7                                                                                                                 ; newline

  end_1000:;
  }

  //     7     %end
  //     8     printstring("Goodbye!"); newline

  _imp_PRINTSTRING(_imp_str_literal("Goodbye!"));
  _imp_NEWLINE();

  //     9  %endofprogram

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