(*
 * Simple terminfo interface.
 * Copyright (C) 2002 Justin David Smith, Caltech
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation,
 * version 2.1 of the License.
 * 
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 * 
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 * 
 * Additional permission is given to link this library with the
 * OpenSSL project's "OpenSSL" library, and with the OCaml runtime,
 * and you may distribute the linked executables.  See the file
 * LICENSE.libmojave for more details.
 *)


(* The C function takes a string ID, and returns the escape sequence
   (or an empty string if the ID is not defined for this terminal).  *)
external caml_tgetstr_enabled : unit -> bool = "caml_tgetstr_enabled"
external caml_tgetstr : string -> string = "caml_tgetstr"
external get_number_of_cores : unit -> int = "caml_get_number_of_cores"

(* Tgetstr is enabled only if the terminal is defined *)
let tgetstr_enabled = caml_tgetstr_enabled ()

(* tgetstr id
   Lookup the terminal capability with indicated id.  This assumes the
   terminfo to lookup is given in the TERM environment variable.  This
   function returns None if the terminal capability is not defined.  *)
let tgetstr id =
   if tgetstr_enabled then
      let result = caml_tgetstr id in
         if result = "" then
            None
         else
            Some result
   else
      None


(* Various terminfo identifier names for use with tgetstr *)
let enter_bold_mode = "bold"
let exit_attribute_mode = "sgr0"


(* xterm_ok ()
   Check for an XTerm-compatible terminal, for the XTerm escapes.  *)

(* XXX: strictly speaking, we should be using the "tsl"/"fsl" capabilities here, but those are often missing *)
let xterm_ok () =
   try
      match Sys.getenv "TERM" with
         "xterm" | "color_xterm" | "xterm-color" | "konsole" | "rxvt" ->
            true
       | _ ->
            false
   with
      Not_found ->
         false


(* xterm_escape_begin ()
   Display XTerm title begin escape, if available.  *)
let xterm_escape_begin () =
   if xterm_ok () then
      Some "\027]0;"
   else
      None


(* xterm_escape_begin ()
   Display XTerm title end escape, if available.  *)
let xterm_escape_end () =
   if xterm_ok () then
      Some "\007"
   else
      None
