#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1
// 2 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 3
// 4 %constintegerarray fred(0:2) = ;
const int FRED[3] = {1, 2, 3};
struct _imp_dv FRED_dv = {FRED, sizeof(int) /*, dims, <bounds> */};
// 5+ 1,2,
// 6+
// 7+ 3
// 8
// 9 %routine jim(%integer p,
void JIM(int P, int Q) {
// 10+ %integer q)
// 11 %end
return;
} /* end of JIM */
// ?Q unused
// ?P unused
// 12
// 13
// 14
// 15
// 16 %constc
// 17+
// 18+
// 19+ %integerarray sheila(0:2) =
const int SHEILA[3] = {1, 2, 3};
struct _imp_dv SHEILA_dv = {SHEILA, sizeof(int) /*, dims, <bounds> */};
// 20+
// 21+
// 22+ 1,2,
// 23+
// 24+ 3
// 25
// 26
// 27 %switch lab(1:4)
int LAB_index;
int LAB_line;
char *LAB_file;
static const void *LAB[4] = {&&case_LAB_default, &&case_LAB_2, &&case_LAB_3, &&case_LAB_default};
// 28 %integer i
int I;
// 29 %constinteger one=1, two=2, three=3
// 30
// 31 i = sheila(2)
I = SHEILA[2];
// 32
// 33 lab(':'+one+two-':'):
case_LAB_3:;
// 34 ;! %commc
// 35
// 36 print string("test 0"); newline
_imp_PRINTSTRING(_imp_str_literal("test 0"));
_imp_NEWLINE();
// 37 print string("If there is output mentioning test 0 above, test 0 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("If there is output mentioning test 0 above, test 0 passed"));
_imp_NEWLINE();
// 38
// 39 %comment %c
// 40 print string("test 1"); newline ;
_imp_PRINTSTRING(_imp_str_literal("test 1"));
_imp_NEWLINE();
// 41 print string("If there is output mentioning test 1 above, test 1 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("If there is output mentioning test 1 above, test 1 passed"));
_imp_NEWLINE();
// 42
// 43 %comment %c
// 44+ print string("test 2a failed - this is part of the comment above") %and newline; print string("test 2b failed - semicolons should not be honoured in %comments"); newline
// 45 print string("If there is no output mentioning test 2 above, test2 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("If there is no output mentioning test 2 above, test2 passed"));
_imp_NEWLINE();
// 46
// 47 %comment %c
// 48 print string("test 3"); newline
_imp_PRINTSTRING(_imp_str_literal("test 3"));
_imp_NEWLINE();
// 49 print string("If there is output mentioning test 3 above, test 3 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("If there is output mentioning test 3 above, test 3 passed"));
_imp_NEWLINE();
// 50
// 51
// 52 %comment %c
// 53 print string("test 4"); newline
_imp_PRINTSTRING(_imp_str_literal("test 4"));
_imp_NEWLINE();
// 54 print string("If there is output mentioning test 4 above, test 4 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("If there is output mentioning test 4 above, test 4 passed"));
_imp_NEWLINE();
// 55
// 56
// 57 lab(':'+two+two*':'-':'*3): i=10
case_LAB_2:;
I = 10;
// 58
// 59 %comment ' { again
// 60 %comment { 'again
// 61 %comment '
// 62
// 63 %comment %c
// 64+
// 65+ This this part of the comment in Imp77!
// 66
// 67 ! %c
// 68 print string("Note that %c is not honoured within a '!' comment..."); newline
_imp_PRINTSTRING(_imp_str_literal("Note that %c is not honoured within a '!' comment..."));
_imp_NEWLINE();
// 69
// 70 ! a comment with an unbalanced ' is a problem
// 71 print string("test 5 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("test 5 passed"));
_imp_NEWLINE();
// 72
// 73
// 74 print string("test 6 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("test 6 passed"));
_imp_NEWLINE();
// 75
// 76
// 77 print string("test 7 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("test 7 passed"));
_imp_NEWLINE();
// 78
// 79 %comment a comment with an unbalanced ' is a problem
// 80 print string("test 8 passed"); newline
_imp_PRINTSTRING(_imp_str_literal("test 8 passed"));
_imp_NEWLINE();
// 81
// 82 lab(*):
case_LAB_default:;
// 83 !}
// 84
// 85 %end{}%of%pro %gram
_imp_stop(0);
return 0;
case_LAB_dispatch:
if (LAB_index < 1 || LAB_index > 4)
_imp_signalf(6, 3, LAB_index, "->LAB(%d) out of bounds at %s line %d", LAB_index, LAB_file, LAB_line);
goto *LAB[LAB_index - 1];
end_0:;
}