#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %string(100) s
_imp_string100 S;
// 3 %string(25) left = "left"
_imp_string25 LEFT;
_imp_strncpy(/*?*/ &LEFT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("left");
(void *)&tmp;
}),
/*max:*/ 25);
// 4 %string(20) middle = "middle"
_imp_string20 MIDDLE;
_imp_strncpy(/*?*/ &MIDDLE, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("middle");
(void *)&tmp;
}),
/*max:*/ 20);
// 5 %string(15) right = "right"
_imp_string15 RIGHT;
_imp_strncpy(/*?*/ &RIGHT, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("right");
(void *)&tmp;
}),
/*max:*/ 15);
// 6 s = left . right
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &LEFT, (_imp_string *)/*?*/ &RIGHT);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 100);
// 7 printstring(s); newline
_imp_PRINTSTRING(
*({
__typeof__(_imp_string100) tmp = S /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_NEWLINE();
// 8 s = left . middle . right
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &LEFT,
(_imp_string *)/*?*/ &MIDDLE);
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ &RIGHT);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 100);
// 9 printstring(s); newline
_imp_PRINTSTRING(
*({
__typeof__(_imp_string100) tmp = S /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_NEWLINE();
// 10 s <- left . right
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &LEFT, (_imp_string *)/*?*/ &RIGHT);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 100);
/* truncated copy of no more than 100 chars */
if (*_imp_LENGTH((_imp_string *)/*?*/ &S) > 100) *_imp_LENGTH((_imp_string *)/*?*/ &S) = 100;
// 11 printstring(s); newline
_imp_PRINTSTRING(
*({
__typeof__(_imp_string100) tmp = S /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_NEWLINE();
// 12 s <- left . middle . right
_imp_strncpy(/*?*/ &S, ({
__typeof__(_imp_string255) tmp; /*C*/
tmp = *({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &*({
_imp_string255 tmp = _imp_join((_imp_string *)/*?*/ &LEFT,
(_imp_string *)/*?*/ &MIDDLE);
(_imp_string255 *)&tmp;
}),
(_imp_string *)/*?*/ &RIGHT);
(_imp_string255 *)&tmp;
});
(void *)&tmp;
}),
/*max:*/ 100);
/* truncated copy of no more than 100 chars */
if (*_imp_LENGTH((_imp_string *)/*?*/ &S) > 100) *_imp_LENGTH((_imp_string *)/*?*/ &S) = 100;
// 13 printstring(s); newline
_imp_PRINTSTRING(
*({
__typeof__(_imp_string100) tmp = S /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_NEWLINE();
// 14 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}