
class X0
{
  Bulb {
  }
}

class X
{
  Status {
    A {    }
    B {    }
    C {    }
  }
}

class X2
{
  Status {
    On {
    e -> Off;
    }
    Off {    }
  }
}

class X4
{
  Status {
    On {
    press -> Off;
    }
    Off {
    exit / { if (doActivityStatusOffThread != null) { doActivityStatusOffThread.interrupt(); } }
    entry / { doActivityStatusOffThread = new DoActivityThread(this,"doActivityStatusOff"); }
    do { keepDoing };
    }
  }
}

class X5
{
  Bulb {
    On {
    push -> / { blabla } On;
    }
  }
}

class X7
{
  Bulb {
    On {
    entry / { doOn }
    exit / { "a"; }
    }
  }

  public void doOn() {
  }
}

class X8
{
  Integer dimmer = 0;
  Integer brightness = 0;
  Bulb {
    Off {
    turnDimmer(Integer lightval) -> / { setBrightness(lightval) } Off;
    flipSwitch -> Dimmed;
    }
    Dimmed {
    [getDimmer()>99] entry -> On;
    flipSwitch -> Off;
    turnDimmer(Integer lightval) -> / { setBrightness(lightval) } Dimmed;
    }
    On {
    flipSwitch -> Off;
    turnDimmer(Integer lightval) -> / { setBrightness(lightval) } Dimmed;
    }
  }
}

class X9
{
  Integer brightness = 0;
  Bulb {
    On {
    [getBrightness()<1] push -> Off;
    }
    Off {    }
  }
}

class X10
{
  Integer brightness = 0;
  Bulb {
    On {
    [getBrightness()<1] push -> Off;
    }
    Off {    }
  }
}

class X11
{
  Status {
    On {
    press -> Off;
    }
    Off {
    exit / { if (doActivityStatusOffThread != null) { doActivityStatusOffThread.interrupt(); } }
    entry / { doActivityStatusOffThread = new DoActivityThread(this,"doActivityStatusOff"); }
    do { keepDoing; } -> On;
    }
  }
}

class X12
{
  Bulb {
    On {
    entry / { blahblah }
    entry / { blahblah2 }
    exit / { blahblahexit }
    }
  }
}

class X14
{
  Bulb {
    On {
    flip -> Off;
    }
    Off {
    flip -> On;
    }
  }
  AnotherBulb {
    On {
    flip -> Off;
    }
    Off {
    flip -> On;
    }
  }
}

class X15
{
  Integer brightness = 0;
  Bulb {
    On {
    [getBrightness()<1] push -> / { blabla } Off;
    }
    Off {    }
  }
}

class X3
{
  Status {
    On {
    exit / { exitStatusOn(); }
    entry / { if (statusOn == StatusOn.Null) { setStatusOn(StatusOn.Play); } }
    off -> Off;
        Play {
        exit / { setStatusOn(StatusOn.Null); }
        p -> Pause;
        }
        Pause {
        exit / { setStatusOn(StatusOn.Null); }
        p -> Play;
        }
    }
    Off {    }
  }
}

class X16
{
  Fixture {
    On {
    push -> Off;
    }
    Off {
    push -> On;
    }
  }
}

class X17
{
  Status {
    S1 {
    exit / { exitStatusS1(); }
    entry / { if (statusS1 == StatusS1.Null) { setStatusS1(StatusS1.S1A); } }
    e1 -> S1A;
        S1A {
        exit / { setStatusS1(StatusS1.Null); }
        }
    }
  }
}

class X18
{
  Status {
    Off {
    turnOn -> On;
    }
    On {
    exit / { exitStatusOnMotorIdle(); }
    exit / { exitStatusOnFanIdle(); }
    entry / { if (statusOnMotorIdle == StatusOnMotorIdle.Null) { setStatusOnMotorIdle(StatusOnMotorIdle.MotorIdle); } }
    entry / { if (statusOnFanIdle == StatusOnFanIdle.Null) { setStatusOnFanIdle(StatusOnFanIdle.FanIdle); } }
        MotorIdle {
        exit / { setStatusOnMotorIdle(StatusOnMotorIdle.Null); }
        flip -> MotorRunning;
        }
        MotorRunning {
        exit / { setStatusOnMotorIdle(StatusOnMotorIdle.Null); }
        flip -> MotorIdle;
        }
    ||
        FanIdle {
        exit / { setStatusOnFanIdle(StatusOnFanIdle.Null); }
        flop -> FanRunning;
        }
        FanRunning {
        exit / { setStatusOnFanIdle(StatusOnFanIdle.Null); }
        flop -> FanIdle;
        }
    }
  }
}
