#include <perms.h>

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

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

  //     2    %string (255) s, a, b

  _imp_string255 S;
  _imp_string255 A;
  _imp_string255 B;

  //     3
  //     4    s = "A string with xxx in the middle"

  _imp_strncpy(/*?*/ &S, ({
                 __typeof__(_imp_string255) tmp; /*B*/
                 tmp = _imp_str_literal("A string with xxx in the middle");
                 (void *)&tmp;
               }),
               /*max:*/ 255);

  //     5
  //     6    s -> a.("xxx").b

  if (!_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                    (_imp_string255 *)/*?*/ &A, *({
                      _imp_string tmp = _imp_str_literal("xxx");
                      (_imp_string255 *)&tmp;
                    }),
                    (_imp_string255 *)/*?*/ &B))
    _imp_signal(7, 1, 0, "string resolution fails");
    //     7
    //     8    newline

  _imp_NEWLINE();

  //     9
  //    10    %if s -> a.("xxx").b %start

  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     (_imp_string255 *)/*?*/ &A, *({
                       _imp_string tmp = _imp_str_literal("xxx");
                       (_imp_string255 *)&tmp;
                     }),
                     (_imp_string255 *)/*?*/ &B)))
    goto L_0001;

    //    11      newline

  _imp_NEWLINE();

  //    12    %finish

L_0001:;

//    13
//    14    s -> ("xxx").b

  if (!_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                    0 /*NULL*/, *({
                      _imp_string tmp = _imp_str_literal("xxx");
                      (_imp_string255 *)&tmp;
                    }),
                    (_imp_string255 *)/*?*/ &B))
    _imp_signal(7, 1, 0, "string resolution fails");
    //    15
    //    16    newline

  _imp_NEWLINE();

  //    17
  //    18    %if s -> ("xxx").b %start

  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     0 /*NULL*/, *({
                       _imp_string tmp = _imp_str_literal("xxx");
                       (_imp_string255 *)&tmp;
                     }),
                     (_imp_string255 *)/*?*/ &B)))
    goto L_0002;

    //    19      newline

  _imp_NEWLINE();

  //    20    %finish

L_0002:;

//    21
//    22    s -> a.("xxx")

  if (!_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                    (_imp_string255 *)/*?*/ &A, *({
                      _imp_string tmp = _imp_str_literal("xxx");
                      (_imp_string255 *)&tmp;
                    }),
                    0 /*NULL*/))
    _imp_signal(7, 1, 0, "string resolution fails");
    //    23
    //    24    newline

  _imp_NEWLINE();

  //    25
  //    26    %if s -> a.("xxx") %start

  if (!(_imp_resolve(*({
        _imp_string255 tmp = S;
        (_imp_string255 *)&tmp;
      }),
                     (_imp_string255 *)/*?*/ &A, *({
                       _imp_string tmp = _imp_str_literal("xxx");
                       (_imp_string255 *)&tmp;
                     }),
                     0 /*NULL*/)))
    goto L_0003;

    //    27      newline

  _imp_NEWLINE();

  //    28    %finish

L_0003:;

//    29
//    30  %endofprogram

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