method init = (
            (this)#destroy;
          f <- Frame.create frame_root;
        f_left <- Frame.create f;
        f_left_top <- Frame.create f_left;
        f_left_down <- Frame.create f_left;
        f_center <- Frame.create f;
        f_center_top <- Frame.create f_center;
        f_center_down <- Frame.create f_center;
        l <- Label.create ~text:"" f_left_top;
        entry_1 <- Entry.create ~width:12 f_center_top ~background:selcol ;
        center_lst <- Listbox.create ~width:10 ~background:selcol  ~selectmode:`Single f_center_down;
        center_lst_v <- Scrollbar.create ~background:blue_light ~orient:`Vertical  ~borderwidth:1 f_center_down;
        
        pack ~side:`Left ~fill:`Both ~expand:true [f];
        pack ~side:`Left ~fill:`Y ~expand:true [f_left];
        if(intruder_name<>"" && agent_name<>"" && intruder_state<>"")
        then
          decomp_message <- (decompose message);

          knowledge <- (let tmp = decompose(get_value_of_var "x" "set_knowledge"in
                          if(tmp<>[]) 
                          then (cdr tmp)
                          else []);

          let rec aux e l res =
            match l with [] -> List.rev res
              |(x::ls) -> if(match_message intruder_name intruder_state x agent_name intruder_state e)
                        then aux e ls (x::res)
                        else aux e ls res;
          in
            l0 <- (aux message knowledge []);
            
            if(decomp_message <> []) then is_an_atom <- false
            else  if((is_a_var message) || (is_a_value message)) then (is_an_atom <- true);
            
            if(l0<>[])
            then(
                    let label_1 = Label.create ~text:(transcript_receiver_for_intruder agent_name message) f_center_top in
                      let f_center_button = Frame.create f_center in
                let button_unrefinment = Button.create ~text:"<" ~command:(fun () ->
                              l0_rec := "" ; 
                        (*update_entry intruder_name intruder_state agent_name message ";*)
                        del_entry message entry_1;
                              (match parent with None -> ()
                              |Some p -> p#init);
                              ) f_center_button 
                in
                 (match parent with None -> ()
                              |Some _ -> pack ~side:`Left ~fill:`X [button_unrefinment]);
              let button_clear = Button.create ~text:"Clear" ~command:(fun () -> l0_rec := "" ; update_entry intruder_name intruder_state agent_name message "") f_center_button in
              let button_refinment = Button.create ~text:">" ~command:(fun () -> 
                      l0_rec := "" ; 
                update_entry intruder_name intruder_state agent_name message "";
                destroy label_1;
                destroy button_unrefinment;
                destroy button_clear;
                destroy f_center_button;
                del_entry message entry_1;
                destroy entry_1;
                destroy f_center_top;
                destroy f_center_down;
                destroy center_lst_v;
                destroy center_lst;
                destroy f_center_button;
                destroy l;
                destroy f_left_top;
                destroy f_left_down;
                
                f_left_top <- Frame.create f_left;
                f_left_down <- Frame.create f_left;
                f_center_top <- Frame.create f_center;
                f_center_down <- Frame.create f_center;
                l <- Label.create ~text:"" f_left_top;
                entry_1 <- Entry.create ~width:12 f_center_top ~background:selcol ;
                center_lst <- Listbox.create ~width:10 ~background:selcol  ~selectmode:`Single f_center_down;
                center_lst_v <- Scrollbar.create ~background:blue_light ~orient:`Vertical  ~borderwidth:1 f_center_down;
                (this)#message_refinment (Some (this :> box));                      
              ) f_center_button in
              scroll_link center_lst_v center_lst "vertical";
              pack ~side:`Left ~fill:`Y ~expand:true [f_center];
              pack ~side:`Top ~fill:`Y ~expand:false [f_center_top];
              pack ~side:`Top ~fill:`Y ~expand:false [label_1];
              pack ~side:`Top ~fill:`X ~expand:true [entry_1];
              pack ~side:`Top ~fill:`Both ~expand:true [f_center_down];
              pack ~side:`Right ~fill:`Y [center_lst_v];
              pack ~side:`Top ~fill:`Both ~expand:true [center_lst];
              pack ~side:`Bottom ~fill:`X [f_center_button];
              pack ~side:`Left ~fill:`X [button_clear];
              if not(is_an_atom) then pack ~side:`Left ~fill:`X [button_refinment];
            
              Listbox.insert center_lst ~index:(`Num 0)~texts:(List.map (fun m -> transcript_receiver_for_intruder agent_name m) l0);
              Entry.configure entry_1 ~width:(max 12 (3+(max_length_string(Listbox.get_range center_lst ~first:(`Num 0) ~last:`End))));
              add_entry intruder_name intruder_state agent_name message entry_1 l0_rec center_lst l0;
              
              bind center_lst
              ~events:[(`ButtonPressDetail 1)]
              ~fields:[`MouseY]
              ~action:(function x -> 
                                  let result = 
                                    Listbox.nearest 
                                      center_lst
                                    ~y:x.ev_MouseY
                                  in
                                  let select = (* obtain the integer from the [`Num of int] *)
                                    match result with
                                      | `Num num -> num
                                  in
                                    if(click_i=select)
                                    then(
                                        l0_rec := transcript_receiver_for_intruder agent_name (Listbox.get center_lst ~index:(`Num select));
                                        update_entry intruder_name intruder_state agent_name message (!l0_rec);
                                        click_i <- (-1)
                                    )
                                    else click_i <- select;
                               );
              
            )
            else (this)#message_refinment None
        );            
  )