let define_glibb program =
  
  (** @param types type, by reference *)

  let new_func_stub name rett types =
    (name, new_function name
       (List.map (fun (t, var) ->
                    {
                      def_name = "";
                      def_type = t;
                      def_nature = Varb;
                      def_value = Variable;
                      def_pos = (-1, -1);
                      def_coord = [];
                      def_asm = Asm_none;
                      def_pass_by_ref = var;
                    }
                 ) types) rett
       {
         block_env = create_environment ();
         block_stts = [];
       }
       (-1, -1)
       true)
  in
  let glibb_env =
    [
      new_func_stub "writeInt" Unit [Integerfalse];
      new_func_stub "writeBool" Unit [Booleanfalse];
      new_func_stub "readInt" Integer [];
    ]
  in
    (snd program).block_env <- concat_env false glibb_env (snd program).block_env