#include <perms.h>

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

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

  //     2  %externalroutinespec phex %alias "s_phex" (%integer x)

  extern void PHEX(int X) __asm__("s_phex");

  //     3  %integer i,j,k,corr,fail

  int I;
  int J;
  int K;
  int CORR;
  int FAIL;

  //     4  %integerfn div(%integer x,y)

  int DIV(int X, int Y) {
    //     5  %result=x//y

    return ((long)X / (long)Y);

    //     6  %end

  } /* end of DIV */

  //     7  fail=0

  FAIL = 0;

  //     8  %for k=20,-1,-20%cycle

  // %for K = 20,  -1,  -20 %cycle
  {
    K = 21;
  L_0001:
    if (K == -20) goto L_0002;
    K -= 1;

    //     9        %if k//2#div(k,2) %then fail=1

    if (((long)K / (long)2) == DIV(K, 2)) goto L_0004;
    FAIL = 1;
  L_0004:;

  //    10        %if k//4#div(k,4) %then fail=1

    if (((long)K / (long)4) == DIV(K, 4)) goto L_0005;
    FAIL = 1;
  L_0005:;

  //    11        %if k//8#div(k,8) %then fail=1

    if (((long)K / (long)8) == DIV(K, 8)) goto L_0006;
    FAIL = 1;
  L_0006:;

  //    12        %if k//16#div(k,16) %then fail=1

    if (((long)K / (long)16) == DIV(K, 16)) goto L_0007;
    FAIL = 1;
  L_0007:;

  //    13        %if k//1#div(k,1) %then fail=1

    if (((long)K / (long)1) == DIV(K, 1)) goto L_0008;
    FAIL = 1;
  L_0008:;

  //    14  %repeat

    goto L_0001;
  }

L_0002:;

//    15  %if fail=0 %then printstring("TEST OK") %else printstring("Divide in error")

  if (FAIL != 0) goto L_0009;
  _imp_PRINTSTRING(_imp_str_literal("TEST OK"));
  goto L_000A;
L_0009:;
  _imp_PRINTSTRING(_imp_str_literal("Divide in error"));
L_000A:;

//    16  newline

  _imp_NEWLINE();

  //    17  %endofprogram

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