(***********************************************************************)
(*                                                                     *)
(*                               Galax                                 *)
(*                   The Intergalactic XQuery Engine                   *)
(*                                                                     *)
(*  Copyright 2000, Lucent Technologies.                               *)
(*  Distributed only by permission.                                    *)
(*                                                                     *)
(***********************************************************************)

(* $Id: toputils.mli,v 1.22 2003/01/21 19:22:54 simeon Exp $ *)

(*********************)
(* Global parameters *)
(*********************)

(* Context file *)

val context_file : string option ref

(* Output files *)

val pretty_print        : bool ref

val pretty_print_output    : Pervasives.out_channel ref
val pretty_print_formatter : Format.formatter ref

(**********************)
(* Printing functions *)
(**********************)

val separator : string ref

val fprint_query_env : Format.formatter -> Xquery_ast.cquery_module -> unit

(*********************)
(* Loading functions *)
(*********************)

(* Loading library *)

val load_pervasive : unit -> Xquery_ast.query_module

(* Loading query from a file *)

val load_query_file : string -> (Xquery_ast.query_module option * (Namespace.nsenv * Schema.schema * Xquery_ast.cquery_module))

(* Loading query from a string *)

val load_query_string : string -> (Xquery_ast.query_module option * (Namespace.nsenv * Schema.schema * Xquery_ast.cquery_module))

(* Loading query from a string *)

val load_context_default : unit   -> Namespace.nsenv * Xatenv.tenv * Xquery_ast.cquery_module
val load_context_file    : string -> Namespace.nsenv * Xatenv.tenv * Xquery_ast.cquery_module
val load_context_string  : string -> Namespace.nsenv * Xatenv.tenv * Xquery_ast.cquery_module

(*********)
(* Setup *)
(*********)

val setup : int -> int -> unit

(*********************)
(* Schema operations *)
(*********************)

val convert_schema : string -> Namespace.prefix -> (Namespace.nsenv * Xquery_ast.sort_decl list)

val convert_xquery_context : string -> (Namespace.nsenv * Xquery_ast.sort_decl list)

val load_schema : (Namespace.nsenv * Xquery_ast.sort_decl list) -> Schema.schema

val print_schema_types : Format.formatter -> Xquery_ast.sort_decl list -> unit

type additional_context =
    (Xquery_ast.vname * Datamodel._Value) list

val add_global_variables : (Xatenv.tenv * Xaeenv.eenv) -> additional_context -> (Xatenv.tenv * Xaeenv.eenv)

val init_query_env : Schema.schema -> Namespace.nsenv -> Xquery_ast.cquery_module -> (Xatenv.tenv * Xaeenv.eenv)
val init_query_env_add : Schema.schema -> Namespace.nsenv -> additional_context -> Xquery_ast.cquery_module -> (Xatenv.tenv * Xaeenv.eenv)

(************************)
(* Type/Eval/Print Loop *)
(************************)

val loop_step_cexpr : Xatenv.tenv -> Xaeenv.eenv -> Namespace.nsenv -> Xquery_ast.cexpr -> unit
val loop_step_cstatement : Xatenv.tenv -> Xaeenv.eenv -> Namespace.nsenv -> Xquery_ast.cstatement -> unit

val loop : Xatenv.tenv -> Xaeenv.eenv -> Namespace.nsenv -> Xquery_ast.cquery_module -> unit

(*************)
(* Toplevels *)
(*************)

(* setup/load/loop from a file *)

val eval_query_file : string -> unit

(* setup/load/loop from a string *)

val eval_query_string : string -> unit


(* pure evaluation from a file *)

val pure_eval_query_file   : string -> (string * string)

(* pure evaluation from a string *)

val pure_eval_query_string : string -> (string * string)

