let update_pointer (lev: level) (p: pointer) (ie:input_event) 
: pointer = 
match (p lev) with 
   | Running rw -> raise WrongStateInUpdate      
   | Waiting sw ->   
       match (pi lev ie) with 
         | Suppress -> p
         | Event (ie') ->  
              let (s2, oes2) = receive ie' sw in 
              (fun lev' -> if lev'=lev then s2
                           else p lev')