let scrute = fun ic oc ->
 let c = ref ' ' in
  try
   while true do
    c := input_char ic ;
    match !c with
    | 'a' ->
     begin
      output_byte oc mode ;
      output_byte oc 123 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'z' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_boucle ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'e' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_debut ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'r' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_rembobine ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 't' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_avance_rapide ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'y' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_fin ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'u' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_arret ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'i' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_lecture ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'o' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_enregistrement ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '&' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_1 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_2 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '"' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_3 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '\'' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_4 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '(' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_5 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '-' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_6 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_7 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '_' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_8 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_9 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_10 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | ')' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_11 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '=' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_12 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '1' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad1 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '2' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad2 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '3' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad3 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '4' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad4 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '5' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad5 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '6' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad6 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '7' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad7 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '8' ->
     begin
      output_byte oc notepad ;
      output_byte oc Omega.pad8 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'q' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_12 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'k' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_rembobine ;
      output_byte oc 127 ;
      output_byte oc touche_appuyee ;
      output_byte oc 60 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'l' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_rembobine ;
      output_byte oc 127 ;
      output_byte oc touche_appuyee ;
      output_byte oc 61 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'm' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_rembobine ;
      output_byte oc 127 ;
      output_byte oc touche_appuyee ;
      output_byte oc 62 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'v' ->
     begin
      output_byte oc mode ;
      output_byte oc Omega.poussoir_4 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'n' ->
     begin
      output_byte oc 0x99 ;
      output_byte oc Omega.pad3 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'h' ->
     begin
      output_byte oc 0x99 ;
      output_byte oc Omega.pad1 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'b' ->
     begin
      output_byte oc 0x99 ;
      output_byte oc Omega.pad2 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'N' ->
     begin
      output_byte oc 0x99 ;
      output_byte oc Omega.pad4 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | _ -> flush_all ()
   done
  with _ ->
   begin
    close_in_noerr ic ;
    close_out_noerr oc ;
   end