Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] native-code and byte-code compiler differences
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Attila Kondacs <attila@z...>
Subject: [Caml-list] native-code and byte-code compiler differences
the following is a code segment that opens a window and if 'q' is
pressed  on the keyboard it closes it. It works with the byte code
compiler fine but does not react to pressed keys when compiled with the
native code compiler (using ocaml 3.04 for debian - from the unstable
distribution).

According to the ocaml manual this may happen if there is devision by 0
caught as an exception, or stack overflow, or if signal handling is
involved. The first two cases are out of question here, and as far as I
know reading mouse and keyboard events do not involve signals. So what's
wrong here? and how can it be put right?

here is the code:


open Graphics;;
let rec find_char_action_pair = fun pairlist (a:char) ->
  match pairlist with
    | hd::tl -> if (fst hd) = a then (snd hd) else find_char_action_pair
tl a
    | [] -> (fun () -> ());;
	
let map_keyboard = fun  ?(mouse_action = (fun () -> ())) charactionlist ->
  let st = ref true in
    while !st = true do
      if mouse_action != (fun () -> ())
      then (if (try button_down() with Graphic_failure _
	      -> (open_graph ""; button_down ()))
	    then mouse_action ());
      if key_pressed()
      then (match read_key() with
	      | 'q' -> 
		  begin
		    ((find_char_action_pair charactionlist 'q' )());
		    st := false 
		  end
	      | a -> ((find_char_action_pair charactionlist a )()));
    done;;

open_graph "";;

map_keyboard
  [ ' ' , (fun () -> print_string "\n yes, it works!!")];;

close_graph();;	

 
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners