(**************************************************************************)
(*                                                                        *)
(*                                 OCaml                                  *)
(*                                                                        *)
              , projet Cristal , INRIA Rocquencourt          
            OCaml port by   and                    
(*                                                                        *)
    Copyright 1996 Institut National de Recherche en Informatique et     
(*     en Automatique.                                                    *)
(*                                                                        *)
(*   All rights reserved.  This file is distributed under the terms of    *)
    the GNU Lesser General Public License version 2.1 , with the          
(*   special exception on linking described in the file LICENSE.          *)
(*                                                                        *)
(**************************************************************************)

(***************************** Checkpoints *****************************)

open Primitives
open Debugcom

(*** A type for checkpoints. ***)

type checkpoint_state =
    C_stopped
  | C_running of int64

  ` c_valid ' is true if and only if the corresponding 
  * process is connected to the debugger . 
  * ` c_parent ' is the checkpoint whose process is parent 
  * of the checkpoint one ( ` root ' if no parent ) . 
  * c_pid =   2 for root pseudo - checkpoint . 
  * c_pid =   0 for ghost checkpoints . 
  * c_pid = -1 for kill checkpoints . 
 
 * process is connected to the debugger.
 * `c_parent' is the checkpoint whose process is parent
 * of the checkpoint one (`root' if no parent).
 * c_pid =  2 for root pseudo-checkpoint.
 * c_pid =  0 for ghost checkpoints.
 * c_pid = -1 for kill checkpoints.
 *)
type checkpoint =
  {mutable c_time : int64;
   mutable c_pid : int;
   mutable c_fd : io_channel;
   mutable c_valid : bool;
   mutable c_report : report option;
   mutable c_state : checkpoint_state;
   mutable c_parent : checkpoint;
   mutable c_breakpoint_version : int;
   mutable c_breakpoints : (pc * int ref) list;
   mutable c_trap_barrier : Sp.t;
   mutable c_code_fragments : int list}

(*** Pseudo-checkpoint `root'. ***)
(* --- Parents of all checkpoints which have no parent. *)
val root : checkpoint

(*** Current state ***)
val checkpoints : checkpoint list ref
val current_checkpoint : checkpoint ref

val current_time : unit -> int64
val current_report : unit -> report option
val current_pc : unit -> pc option
val current_pc_sp : unit -> (pc * Sp.t) option

************************************************************************
                                                                        
                                 OCaml                                  
                                                                        
                                                                        
     en Automatique.                                                    
                                                                        
   All rights reserved.  This file is distributed under the terms of    
   special exception on linking described in the file LICENSE.          
                                                                        
************************************************************************
**************************** Checkpoints ****************************
** A type for checkpoints. **
** Pseudo-checkpoint `root'. **
 --- Parents of all checkpoints which have no parent. 
** Current state **
              , projet Cristal , INRIA Rocquencourt          
            OCaml port by   and                    
    Copyright 1996 Institut National de Recherche en Informatique et     
    the GNU Lesser General Public License version 2.1 , with the          


open Primitives
open Debugcom


type checkpoint_state =
    C_stopped
  | C_running of int64

  ` c_valid ' is true if and only if the corresponding 
  * process is connected to the debugger . 
  * ` c_parent ' is the checkpoint whose process is parent 
  * of the checkpoint one ( ` root ' if no parent ) . 
  * c_pid =   2 for root pseudo - checkpoint . 
  * c_pid =   0 for ghost checkpoints . 
  * c_pid = -1 for kill checkpoints . 
 
 * process is connected to the debugger.
 * `c_parent' is the checkpoint whose process is parent
 * of the checkpoint one (`root' if no parent).
 * c_pid =  2 for root pseudo-checkpoint.
 * c_pid =  0 for ghost checkpoints.
 * c_pid = -1 for kill checkpoints.
 *)
type checkpoint =
  {mutable c_time : int64;
   mutable c_pid : int;
   mutable c_fd : io_channel;
   mutable c_valid : bool;
   mutable c_report : report option;
   mutable c_state : checkpoint_state;
   mutable c_parent : checkpoint;
   mutable c_breakpoint_version : int;
   mutable c_breakpoints : (pc * int ref) list;
   mutable c_trap_barrier : Sp.t;
   mutable c_code_fragments : int list}

val root : checkpoint

val checkpoints : checkpoint list ref
val current_checkpoint : checkpoint ref

val current_time : unit -> int64
val current_report : unit -> report option
val current_pc : unit -> pc option
val current_pc_sp : unit -> (pc * Sp.t) option
