%%%% ========================================================================
%%%%  @MP-file{
%%%%     author              = "Ulrik Vieth",
%%%%     version             = "1.04",
%%%%     date                = "02 May 1995",
%%%%     time                = "11:24:17 MET",
%%%%     filename            = "closefrm.mp",
%%%%     checksum            = "08512 44 231 2198",
%%%%     email               = "vieth@thphy.uni-duesseldorf.de",
%%%%     codetable           = "ISO/ASCII",
%%%%     keywords            = "MetaPost, data files, file closing",
%%%%     supported           = "yes",
%%%%     abstract            = "This file defines a `closefrom' macro
%%%%                            to complement the `readfrom' primitive.
%%%%                            It operates by repeatedly reading from
%%%%                            a file until reaching EOF, which has
%%%%                            the side-effect of closing the file.
%%%%                            (See do_read_from in mp.web for details!)
%%%%
%%%%                            This macro might be useful to avoid running
%%%%                            out of read files when using the MetaPost
%%%%                            graph package to process many data files
%%%%                            containing extra junk at the end, causing
%%%%                            data reading from the files to stop early
%%%%                            without closing the files.
%%%%                            ",
%%%%     docstring           = "The checksum field above contains a CRC-16
%%%%                            checksum as the first value, followed by
%%%%                            the equivalent of the standard UNIX wc
%%%%                            (word count) utility output of lines,
%%%%                            words, and characters.  This is produced
%%%%                            by Robert Solovay's checksum utility.",
%%%%  }
%%%% ========================================================================

% Read lines from file f (and throw away the contents) until reaching EOF.
vardef closefrom(expr f) =
  save s_;
  forever:
    string s_;
    s_ = readfrom f;
    exitif s_=EOF;
  endfor
enddef;