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
    | '<' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 60 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '>' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 60 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'q' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 61 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'Q' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 61 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'w' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 62 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'W' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 62 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 's' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 63 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'S' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 63 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'x' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 64 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'X' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 64 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'c' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 65 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'C' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 65 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'f' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 66 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'F' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 66 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'v' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 67 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'V' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 67 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'g' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 68 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'G' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 68 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'b' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 69 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'B' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 69 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'h' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 70 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'H' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 70 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'n' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 71 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'N' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 71 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | ',' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 72 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '?' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 72 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'k' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 73 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'K' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 73 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | ';' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 74 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '.' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 74 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | 'l' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 75 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | 'L' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 75 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | ':' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 76 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '/' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 76 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | '!' ->
     begin
      output_byte oc touche_appuyee ;
      output_byte oc 77 ;
      output_byte oc 127 ;
      flush_all () ;
     end
    | '' ->
     begin
      output_byte oc touche_relachee ;
      output_byte oc 77 ;
      output_byte oc 0 ;
      flush_all () ;
     end
    | _ -> flush_all ()
   done
  with _ ->
   close_out_noerr oc