1995-08-09 08:06:35 -07:00
|
|
|
(***********************************************************************)
|
|
|
|
(* *)
|
|
|
|
(* Caml Special Light *)
|
|
|
|
(* *)
|
|
|
|
(* Xavier Leroy, projet Cristal, INRIA Rocquencourt *)
|
|
|
|
(* *)
|
|
|
|
(* Copyright 1995 Institut National de Recherche en Informatique et *)
|
|
|
|
(* Automatique. Distributed only by permission. *)
|
|
|
|
(* *)
|
|
|
|
(***********************************************************************)
|
|
|
|
|
|
|
|
(* $Id$ *)
|
|
|
|
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Module [Sys]: system interface *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
|
|
|
val argv: string array
|
1995-08-09 06:15:01 -07:00
|
|
|
(* The command line arguments given to the process.
|
|
|
|
The first element is the command name used to invoke the program.
|
|
|
|
The following elements are the arguments given to the program. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
external file_exists: string -> bool = "sys_file_exists"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Test if a file with the given name exists. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
external remove: string -> unit = "sys_remove"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Remove the given file name from the file system. *)
|
1995-12-06 07:46:34 -08:00
|
|
|
external rename : string -> string -> unit = "sys_rename"
|
|
|
|
(* Rename a file. The first argument is the old name and the
|
|
|
|
second is the new name. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
external getenv: string -> string = "sys_getenv"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Return the value associated to a variable in the process
|
|
|
|
environment. Raise [Not_found] if the variable is unbound. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
external command: string -> int = "sys_system_command"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Execute the given shell command and return its exit code. *)
|
1995-05-05 03:05:18 -07:00
|
|
|
external chdir: string -> unit = "sys_chdir"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Change the current working directory of the process. *)
|
1995-08-23 04:55:32 -07:00
|
|
|
external getcwd: unit -> string = "sys_getcwd"
|
|
|
|
(* Return the current working directory of the process. *)
|
1995-10-26 09:25:03 -07:00
|
|
|
val interactive: bool ref
|
|
|
|
(* This reference is initially set to [false] in standalone
|
|
|
|
programs and to [true] if the code is being executed under
|
|
|
|
the interactive toplevel [csltop]. *)
|
1995-08-09 06:15:01 -07:00
|
|
|
|
|
|
|
(*** Signal handling *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
|
|
|
type signal_behavior =
|
|
|
|
Signal_default
|
|
|
|
| Signal_ignore
|
|
|
|
| Signal_handle of (int -> unit)
|
1995-08-09 06:15:01 -07:00
|
|
|
(* What to do when receiving a signal:
|
|
|
|
- [Signal_default]: take the default behavior
|
|
|
|
- [Signal_ignore]: ignore the signal
|
|
|
|
- [Signal_handle f]: call function [f], giving it the signal
|
|
|
|
number as argument. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
1995-05-05 03:05:18 -07:00
|
|
|
external signal: int -> signal_behavior -> unit = "install_signal_handler"
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Set the behavior of the system on receipt of a given signal.
|
|
|
|
The first argument is the signal number. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
1995-08-09 06:15:01 -07:00
|
|
|
val sigabrt: int (* Abnormal termination *)
|
|
|
|
val sigalrm: int (* Timeout *)
|
|
|
|
val sigfpe: int (* Arithmetic exception *)
|
|
|
|
val sighup: int (* Hangup on controlling terminal *)
|
|
|
|
val sigill: int (* Invalid hardware instruction *)
|
|
|
|
val sigint: int (* Interactive interrupt (ctrl-C) *)
|
|
|
|
val sigkill: int (* Termination (cannot be ignored) *)
|
|
|
|
val sigpipe: int (* Broken pipe *)
|
|
|
|
val sigquit: int (* Interactive termination *)
|
|
|
|
val sigsegv: int (* Invalid memory reference *)
|
|
|
|
val sigterm: int (* Termination *)
|
|
|
|
val sigusr1: int (* Application-defined signal 1 *)
|
|
|
|
val sigusr2: int (* Application-defined signal 2 *)
|
|
|
|
val sigchld: int (* Child process terminated *)
|
|
|
|
val sigcont: int (* Continue *)
|
|
|
|
val sigstop: int (* Stop *)
|
|
|
|
val sigtstp: int (* Interactive stop *)
|
|
|
|
val sigttin: int (* Terminal read from background process *)
|
|
|
|
val sigttou: int (* Terminal write from background process *)
|
1995-10-30 02:22:12 -08:00
|
|
|
val sigvtalrm: int (* Timeout in virtual time *)
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Signal numbers for the standard POSIX signals. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
|
|
|
exception Break
|
1995-08-09 06:15:01 -07:00
|
|
|
(* Exception raised on interactive interrupt if [catch_break]
|
|
|
|
is on. *)
|
1995-05-04 03:15:53 -07:00
|
|
|
|
|
|
|
val catch_break: bool -> unit
|
1995-08-09 06:15:01 -07:00
|
|
|
(* [catch_break] governs whether interactive interrupt (ctrl-C)
|
|
|
|
terminates the program or raises the [Break] exception.
|
|
|
|
Call [catch_break true] to enable raising [Break],
|
|
|
|
and [catch_break false] to let the system
|
|
|
|
terminate the program on user interrupt. *)
|