struct

(**

Aucun appareil testé

Copyright Stéphane Grognet
IREM des Pays de la Loire - Université de Nantes
Laboratoire de mathématiques Jean Leray UMR 6629 CNRS
version 1.1
@version 1.1 @author Stéphane Grognet @since 2014, 2015 *)




(**

Données universelles

*)



let masque_entete = 0xF0 ;;
let numero_de_canal = 0x0F ;;

(** Note off event *)

let touche_relachee = 0x80 ;;

(** Note on event *)

let touche_appuyee = 0x90 ;;

(** Controle change *)

let mode = 0xB0 ;;

(** Program change *)

let instru = 0xC0 ;;

(** Pitch bend change. La molette de pitch est centrée sur la valeur 64. *)

let pitch = 0xE0 ;;

(** System messages *)

let sys = 0xF0 ;;


(**

Numéros de controleurs

*)



let bank_select = 0x00 ;;
let modulation = 0x01 ;;
let swell = 0x0B ;;
let sustain_pedal = 0x40 ;;


(**

Données locales

*)




let notepad = touche_appuyee + 9 ;;



(**

Traduction

*)




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 _ ->
   begin
    close_in_noerr ic ;
    close_out_noerr oc ;
   end ;;

scrute stdin stdout ;;



end