Graphics.draw_rect (x - 5) (y - 5) 200 20;
List.iteri (fun i -> draw_text (-i - 1)) (List.map f below);
Graphics.synchronize ();
- match Graphics.read_key () with
- | 'z' -> (
- match above with
- | [] -> aux [] curr below
- | c :: cs -> aux cs c (curr :: below))
- | 's' -> (
- match below with
- | [] -> aux above curr []
- | c :: cs -> aux (curr :: above) c cs)
- | ' ' -> curr
- | _ -> aux above curr below
+ if Graphics.key_pressed ()
+ then
+ match Graphics.read_key () with
+ | 'z' -> (
+ match above with
+ | [] -> aux [] curr below
+ | c :: cs -> aux cs c (curr :: below))
+ | 's' -> (
+ match below with
+ | [] -> aux above curr []
+ | c :: cs -> aux (curr :: above) c cs)
+ | ' ' -> curr
+ | _ -> aux above curr below
+ else aux above curr below
in
match cs with
| c :: cs -> aux [] c cs
Graphics.open_graph "";
Graphics.set_window_title "Automaton";
Graphics.auto_synchronize false;
- let m =
- pick
- (fun m ->
- let module M = (val m : Automata.Automaton) in
- M.name)
- Automata.automata
- in
- let module M = (val m) in
- run (module M)
+ try
+ let m =
+ pick
+ (fun m ->
+ let module M = (val m : Automata.Automaton) in
+ M.name)
+ Automata.automata
+ in
+ let module M = (val m) in
+ run (module M)
+ with Graphics.Graphic_failure _ -> ()