!747 !image classes m { static volatile long beatCount; static volatile int delay = 1000; static long booted; //static volatile boolean loud = true; static int jumpEvery = 10; static boolean loud = false; // We alternate between two machines as a test. static S machine1 = "teubizvjbppd"; static S machine2 = "dhtvkmknsjym"; static ShowBigText sbt; static int delay = 1000; static int gfxDelay = 100; !include #1001425 // ShowBigText p { booted = now(); readLocally("beatCount"); makeAndroid3("Heart."); print("Beat count " + beatCount + ". Beating at 1/" + delay + " ms..."); sbt = new ShowBigText; sbt.title = "Jumping Heart"; sbt.showText("" + beatCount); awt { moveDown(getFrame(sbt.is), 100); } while (true) { if (loud) print("beep!"); ++beatCount; saveLocally("beatCount"); for (float i = 1.0f; i >= 0; i -= gfxDelay/(float) delay) { sbt.foreground = Color.white; sbt.background = new Color(0f, i*0.8f, 0f); sbt.showText("" + beatCount); sleep(gfxDelay); } if ((beatCount % jumpEvery) == 0) { print("Now I should be moved!"); hyperMove(machine1, machine2); System.exit(0); } } } static synchronized S answer(S s, L history) { if (match3("get beat count", s)) return "" + beatCount; if (match3("get delay", s)) return "" + delay; if (match3("booted when", s)) return "" + booted; return null; } }