1 ## Copyright (C) 2007-2012 David Bateman
3 ## This file is part of Octave.
5 ## Octave is free software; you can redistribute it and/or modify it
6 ## under the terms of the GNU General Public License as published by
7 ## the Free Software Foundation; either version 3 of the License, or (at
8 ## your option) any later version.
10 ## Octave is distributed in the hope that it will be useful, but
11 ## WITHOUT ANY WARRANTY; without even the implied warranty of
12 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 ## General Public License for more details.
15 ## You should have received a copy of the GNU General Public License
16 ## along with Octave; see the file COPYING. If not, see
17 ## <http://www.gnu.org/licenses/>.
20 ## @deftypefn {Command} {} what
21 ## @deftypefnx {Command} {} what @var{dir}
22 ## @deftypefnx {Function File} {w =} what (@var{dir})
23 ## List the Octave specific files in directory @var{dir}. If @var{dir} is
24 ## not specified then the current directory is used. If a return argument is
25 ## requested, the files found are returned in the structure @var{w}.
29 function ret = what (d)
33 elseif (isempty (strfind (d, filesep ())))
34 ## Find the appropriate directory on the path.
35 p = strtrim (strsplit (path (), pathsep()));
36 d = p{find (cellfun (@(x) ! isempty (strfind (x, d)), p))(end)};
38 [status, msg, msgid] = fileattrib (d);
40 error ("what: could not find the file or path %s", d);
54 w.classes = cell (0, 1);
56 for i = 1 : length (files)
59 if (strcmp (n, ".") || strcmp (n, ".."))
62 ## Ignore mdl and p files
63 [dummy, f, e] = fileparts (n);
66 elseif (strcmp (e, mexext ()))
68 elseif (strcmp (e, ".oct"))
70 elseif (strcmp (e, ".mat"))
72 elseif(strcmp (n(1), "@"))
79 __display_filenames__ ("M-files in directory", w.path, w.m);
80 __display_filenames__ ("\nMEX-files in directory", w.path, w.mex);
81 __display_filenames__ ("\nOCT-files in directory", w.path, w.oct);
82 __display_filenames__ ("\nMAT-files in directory", w.path, w.mat);
83 __display_filenames__ ("\nClasses in directory", w.path, w.classes);
89 function __display_filenames__ (msg, p, f)
91 printf ("%s %s:\n\n", msg, p);
93 maxlen = max (cellfun ("length", f));
94 ncols = max (1, floor (terminal_size()(2) / (maxlen + 3)));
97 fmt = sprintf ("%s %%-%ds", fmt, maxlen);
101 nrows = ceil (length (f) / ncols);
103 args = f(i:nrows:end);
104 if (length (args) < ncols)
105 args(end + 1 : ncols) = {""};
107 printf (fmt, args{:});