#include <perms.h>

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

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

  //     2  %owninteger nextsym=4

  static int NEXTSYM = 4;

  //     3  %integer opd

  int OPD;

  //     4  opd=23

  OPD = 23;

  //     5  %unless 20<=opd<=nextsym+20 %then printstring(" bug1

  {
    // Double-sided test on OPD (Part I)
    int tmp;
    if (20 > (tmp = OPD)) goto L_0001;
    // Double-sided test on OPD (Part II)
    if (tmp <= NEXTSYM + 20) goto L_0002;
  }
L_0001:;
  _imp_PRINTSTRING(_imp_str_literal(" bug1 \n"));
L_0002:;

//     6+ ")
//     7  %if 20<=opd<=nextsym+20 %then opd=opd %else printstring(" bug2

  {
    // Double-sided test on OPD (Part I)
    int tmp;
    if (20 > (tmp = OPD)) goto L_0003;
    // Double-sided test on OPD (Part II)
    if (tmp > NEXTSYM + 20) goto L_0003;
  }
  OPD = OPD;
  goto L_0004;
L_0003:;
  _imp_PRINTSTRING(_imp_str_literal(" bug2 \n"));
L_0004:;

//     8+ ")
//     9  %unless opd>=20  %and opd<=nextsym+20 %then printstring(" bug3

  if (OPD < 20) goto L_0005;
  if (OPD <= NEXTSYM + 20) goto L_0006;
L_0005:;
  _imp_PRINTSTRING(_imp_str_literal(" bug3 \n"));
L_0006:;

//    10+ ")
//    11
//    12  %endofprogram

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