#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %BEGIN
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 {%LONG} %INTEGER L
int L;
// 3 %SWITCH SW(0:5)
int SW_index;
int SW_line;
char *SW_file;
static const void *SW[6] = {&&case_SW_default, &&case_SW_default, &&case_SW_default,
&&case_SW_3, &&case_SW_default, &&case_SW_default};
// 4 %switch sparse(1:3)
int SPARSE_index;
int SPARSE_line;
char *SPARSE_file;
static const void *SPARSE[3] = {&&case_SPARSE_1, &&case_SPARSE_default, &&case_SPARSE_3};
// 5 L=3
L = 3;
// 6 ->SW(L)
SW_line = __LINE__;
SW_file = __FILE__;
SW_index = L;
goto case_SW_dispatch;
// 7 SW(*):
case_SW_default:;
// 8 sparse(1):sparse(*):
case_SPARSE_1:;
case_SPARSE_default:;
// 9 PRINTSTRING("WRONG PLACE"); %STOP
_imp_PRINTSTRING(_imp_str_literal("WRONG PLACE"));
_imp_stop(0);
// 10 SW(3):
case_SW_3:;
// 11 ->sparse(L)
SPARSE_line = __LINE__;
SPARSE_file = __FILE__;
SPARSE_index = L;
goto case_SPARSE_dispatch;
// 12 sparse(3):
case_SPARSE_3:;
// 13 PRINTSTRING("TEST OK
_imp_PRINTSTRING(_imp_str_literal("TEST OK\n"));
// 14+ ")
// 15 %STOP
_imp_stop(0);
// 16 %ENDOFPROGRAM
case_SW_dispatch:
if (SW_index < 0 || SW_index > 5)
_imp_signalf(6, 3, SW_index, "->SW(%d) out of bounds at %s line %d", SW_index, SW_file, SW_line);
goto *SW[SW_index - 0];
case_SPARSE_dispatch:
if (SPARSE_index < 1 || SPARSE_index > 3)
_imp_signalf(6, 3, SPARSE_index, "->SPARSE(%d) out of bounds at %s line %d", SPARSE_index, SPARSE_file,
SPARSE_line);
goto *SPARSE[SPARSE_index - 1];
end_0:;
}