## Copyright (C) 2014 Eugenio Gianniti <eugenio.gianniti@mail.polimi.it>
##
## This program is free software; you can redistribute it and/or modify it under
## the terms of the GNU General Public License as published by the Free Software
## Foundation; either version 3 of the License, or (at your option) any later
## version.
##
## This program 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 General Public License for more
## details.
##
## You should have received a copy of the GNU General Public License along with
## this program; if not, see <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @deftypefn {Function File} ufl [command] line
##
## Writes the given line to a ufl file. Optional commands are:
## @itemize @bullet
## @item start: opens an ufl file. It is possible to specify a name for it,
## otherwise 'default.ufl' will be used.
## @item end: closes an ufl file.
## @end itemize
##
## @end deftypefn

function ufl (varargin)

  persistent fid = -1;
  filename = "default.ufl";

  if (numel (varargin) < 1)
    if (! is_valid_file_id (fid))
      print_usage ();
    endif
  elseif (! all (cellfun ("ischar", varargin)))
    error ("ufl: all arguments should be strings");
  elseif (strcmpi (varargin{1}, "start"))
    if (is_valid_file_id (fid))
      error ("ufl: a file is already open");
    else
      if (numel (varargin) > 1)
        filename = varargin{2};
        if (isempty (regexpi (filename, ".ufl$", "match")))
          filename = [filename, ".ufl"];
        endif
      endif
      fid = fopen (filename, "w");
    endif
    if (! is_valid_file_id (fid))
      error (["ufl: could not open file ", filename]);
    endif
  elseif (strcmpi (varargin{1}, "end"))
    if (! is_valid_file_id (fid))
      error ("ufl: no open file");
    else
      fclose (fid);
      fid = -1;
    endif
  elseif (! is_valid_file_id (fid))
    error ("ufl: no open file");
  else
    if (is_valid_file_id (fid))
      fprintf (fid, "%s ", varargin{:});
      fprintf (fid, "\n");
    else
      error ("ufl: no open file");
    endif
  endif

endfunction
