#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2
// 3 ! %prim %byte %integer %map %spec charno( %string(255) s,%integer n )
// 4
// 5 %byteintegermap my charno(%string(255) s, %integer n)
unsigned char *MYCHARNO(_imp_string255 S, int N)
{
// 6 %result == BYTEINTEGER(ADDR(s)+n)
return _imp_BYTEINTEGER(_imp_ADDR(/*?*/ &S) + N);
// 7 %end
} /* end of MYCHARNO */
// 8
// 9 %string(255) string = "00"
_imp_string255 STRING;
_imp_strncpy(/*?*/ &STRING, ({
__typeof__(_imp_string255) tmp; /*B*/
tmp = _imp_str_literal("00");
(void *)&tmp;
}),
/*max:*/ 255);
// 10
// 11 my charno(string,1) = '1' ;! <-- does not affect string
*MYCHARNO(
*({
__typeof__(_imp_string255) tmp = STRING /*q*/;
(_imp_string255 *)&tmp;
})
,
1) = 49;
// 12 charno(string, 2) = '2' ;! <-- *does* modify string even though the prim
*_imp_CHARNO((_imp_string255 *)/*p*/ /*?*/ &STRING, 2) = 50;
// 13 ! declaration is the same as my local one.
// 14
// 15 printstring(string); newline ;! This outputs: 02
_imp_PRINTSTRING(
*({
__typeof__(_imp_string255) tmp = STRING /*q*/;
(_imp_string255 *)&tmp;
})
);
_imp_NEWLINE();
// 16
// 17 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}