MODULE Anim2; PROC an := New(bg, perm, ephem) IS an := [1, bg, perm, ephem] END; PROC Play(an) IS IF VAR t = 0, t0 = 0, start, dur, bg, perm, ephem IN an = [dur, bg, perm, ephem] -> IF bg # NIL -> APPLY(bg) | SKIP FI; PS.SavePage(); start := Time.Now(); DO t < dur -> PS.RestorePage(); IF perm # NIL -> APPLY(perm, t, t0); PS.SavePage() | SKIP FI; IF ephem # NIL -> APPLY(ephem, t) | SKIP FI; t0, t := t, Time.Now() - start; PS.ShowPage() OD; PS.RestorePage(); IF perm # NIL -> APPLY(perm, t, t0) | SKIP FI; IF ephem # NIL -> APPLY(ephem, t) | SKIP FI END FI END; PRIVATE PROC SeqBg(a1, a2, d1) IS SKIP END; PROC an := Seq(a1, a2) IS IF VAR d1, bg1, perm1, ephem1, d2, bg2, perm2, ephem2 IN a1 = [d1, bg1, perm1, ephem1] AND a2 = [d2, bg2, perm2, ephem2] -> SKIP END FI END; PROC an := Co(a1, a2) IS SKIP END; PROC an := Scale(a, dur) IS SKIP END;