src/Pure/Thy/file.ML
author wenzelm
Tue, 19 May 1998 17:15:30 +0200
changeset 4945 d8c809afafb8
parent 4943 a1b5d156ec33
permissions -rw-r--r--
fixed handle_error: cat_lines;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Thy/file.ML
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     3
    Author:     Markus Wenzel, TU Muenchen
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     4
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     5
File system operations.
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     6
*)
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     7
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     8
signature FILE =
419113535e48 File system operations.
wenzelm
parents:
diff changeset
     9
sig
4341
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    10
  val tmp_name: string -> string
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    11
  val exists: string -> bool
4341
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    12
  val info: string -> string
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    13
  val read: string -> string
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    14
  val write: string -> string -> unit
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    15
  val append: string -> string -> unit
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    16
  val copy: string -> string -> unit
4943
a1b5d156ec33 added source: string -> (string, string list) Source.source;
wenzelm
parents: 4437
diff changeset
    17
  val source: string -> (string, string list) Source.source
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    18
end;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    19
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    20
structure File: FILE =
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    21
struct
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    22
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    23
4341
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    24
(* tmp_name *)
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    25
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    26
fun tmp_name name =
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    27
  Path.pack (Path.evaluate (Path.unpack o getenv)
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    28
    (Path.append (Path.variable "ISABELLE_TMP") (Path.unpack name)));
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    29
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    30
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    31
(* exists / info *)
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    32
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    33
fun exists name = (file_info name <> "");
4341
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    34
val info = file_info;
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    35
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    36
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    37
(* read / write files *)
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    38
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    39
fun read name =
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    40
  let
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    41
    val instream  = TextIO.openIn name;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    42
    val intext = TextIO.inputAll instream;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    43
  in
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    44
    TextIO.closeIn instream;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    45
    intext
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    46
  end;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    47
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    48
fun write name txt =
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    49
  let val outstream = TextIO.openOut name in
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    50
    TextIO.output (outstream, txt);
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    51
    TextIO.closeOut outstream
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    52
  end;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    53
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    54
fun append name txt =
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    55
  let val outstream = TextIO.openAppend name in
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    56
    TextIO.output (outstream, txt);
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    57
    TextIO.closeOut outstream
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    58
  end;
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    59
4341
4adf0b093275 added tmp_name;
wenzelm
parents: 4216
diff changeset
    60
fun copy infile outfile =
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    61
  if not (exists infile) then error ("File not found: " ^ quote infile)
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    62
  else write outfile (read infile);
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    63
4943
a1b5d156ec33 added source: string -> (string, string list) Source.source;
wenzelm
parents: 4437
diff changeset
    64
val source = Source.of_string o read;
a1b5d156ec33 added source: string -> (string, string list) Source.source;
wenzelm
parents: 4437
diff changeset
    65
4216
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    66
419113535e48 File system operations.
wenzelm
parents:
diff changeset
    67
end;