view scripts/miscellaneous/what.m @ 19658:17e6c770e6ac gui-release

check existence of uncompressed or compressed info files for doc viewer * parser.cc (set_info_path): return type changed to bool, checking existence of info file uncompressed and with all known compressed file extensions, returns false if no file was found and true after parsing the found file; * parser.h: return type of set_info_path changed to bool * webinfo.cc (ctor): do not check existence of info file since this is done via set_info_path; (set_info_path): return type changed to bool, load Top-node if parser::set_info_path returns true and return the related return value * webinfo.h: return type of set_info_path changed to bool
author Torsten <ttl@justmail.de>
date Fri, 02 Jan 2015 18:47:29 +0100
parents 889e2c083253
children 2217bc116aa9
line wrap: on
line source

## Copyright (C) 2007-2013 David Bateman
##
## This file is part of Octave.
##
## Octave 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.
##
## Octave 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 Octave; see the file COPYING.  If not, see
## <http://www.gnu.org/licenses/>.

## -*- texinfo -*-
## @deftypefn  {Command} {} what
## @deftypefnx {Command} {} what @var{dir}
## @deftypefnx {Function File} {w =} what (@var{dir})
## List the Octave specific files in directory @var{dir}.  If @var{dir} is
## not specified then the current directory is used.  If a return argument is
## requested, the files found are returned in the structure @var{w}.
## @seealso{which}
## @end deftypefn

function ret = what (d)

  if (nargin == 0)
    d = pwd ();
  else
    dtmp = canonicalize_file_name (d);
    if (isempty (dtmp))
      ## Search for directory name in path
      if (d(end) == '/' || d(end) == '\')
        d(end) = [];
      endif
      dtmp = find_dir_in_path (d);
      if (isempty (dtmp))
        error ("what: could not find the directory %s", d);
      endif
    endif
    d = dtmp;
  endif

  files = dir (d);
  w.path = d;
  w.m = cell (0, 1);
  w.mex = cell (0, 1);
  w.oct = cell (0, 1);
  w.mat = cell (0, 1);
  w.mdl = cell (0, 1);
  w.p = cell (0, 1);
  w.classes = cell (0, 1);

  for i = 1 : length (files)
    n = files(i).name;
    ## Ignore . and ..
    if (strcmp (n, ".") || strcmp (n, ".."))
      continue;
    else
      ## Ignore mdl and p files
      [~, f, e] = fileparts (n);
      if (strcmp (e, ".m"))
        w.m{end+1} = n;
      elseif (strcmp (e, ".oct"))
        w.oct{end+1} = n;
      elseif (strcmp (e, mexext ()))
        w.mex{end+1} = n;
      elseif (strcmp (e, ".mat"))
        w.mat{end+1} = n;
      elseif (strcmp (n(1), "@"))
        w.classes{end+1} = n;
      endif
    endif
  endfor

  if (nargout == 0)
    __display_filenames__ ("M-files in directory", w.path, w.m);
    __display_filenames__ ("\nMEX-files in directory", w.path, w.mex);
    __display_filenames__ ("\nOCT-files in directory", w.path, w.oct);
    __display_filenames__ ("\nMAT-files in directory", w.path, w.mat);
    __display_filenames__ ("\nClasses in directory", w.path, w.classes);
  else
    ret = w;
  endif
endfunction

function __display_filenames__ (msg, p, f)
  if (length (f) > 0)
    printf ("%s %s:\n\n", msg, p);

    maxlen = max (cellfun ("length", f));
    ncols = max (1, floor (terminal_size ()(2) / (maxlen + 3)));
    fmt = "";
    for i = 1: ncols
      fmt = sprintf ("%s   %%-%ds", fmt, maxlen);
    endfor
    fmt = [fmt, "\n"];

    nrows = ceil (length (f) / ncols);
    for i = 1 : nrows
      args  = f(i:nrows:end);
      if (length (args) < ncols)
        args(end + 1 : ncols) = {""};
      endif
      printf (fmt, args{:});
    endfor
  endif
endfunction