]> Creatis software - CreaPhase.git/blob - octave_packages/m/miscellaneous/ls.m
update packages
[CreaPhase.git] / octave_packages / m / miscellaneous / ls.m
1 ## Copyright (C) 2006-2012 John W. Eaton
2 ##
3 ## This file is part of Octave.
4 ##
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.
9 ##
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.
14 ##
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/>.
18
19 ## -*- texinfo -*-
20 ## @deftypefn {Command} {} ls options
21 ## List directory contents.  For example:
22 ##
23 ## @example
24 ## @group
25 ## ls -l
26 ##      @print{} total 12
27 ##      @print{} -rw-r--r--   1 jwe  users  4488 Aug 19 04:02 foo.m
28 ##      @print{} -rw-r--r--   1 jwe  users  1315 Aug 17 23:14 bar.m
29 ## @end group
30 ## @end example
31 ##
32 ## The @code{dir} and @code{ls} commands are implemented by calling your
33 ## system's directory listing command, so the available options may vary
34 ## from system to system.
35 ## @seealso{dir, stat, readdir, glob, filesep, ls_command}
36 ## @end deftypefn
37
38 ## Author: jwe
39
40 function retval = ls (varargin)
41
42   global __ls_command__;
43
44   if (isempty (__ls_command__) || ! ischar (__ls_command__))
45     ## Initialize value for __ls_command__.
46     ls_command ();
47   endif
48
49   if (! iscellstr (varargin))
50     error ("ls: all arguments must be character strings");
51   endif
52
53   if (nargin > 0)
54     args = tilde_expand (varargin);
55     if (ispc () && ! isunix ())
56       ## shell (cmd.exe) on MinGW uses '^' as escape character
57       args = regexprep (args, '([^\w.*? -])', '^$1');
58     else
59       args = regexprep (args, '([^\w.*? -])', '\$1');
60     endif
61     args = sprintf ("%s ", args{:});
62   else
63     args = "";
64   endif
65
66   cmd = sprintf ("%s %s", __ls_command__, args);
67
68   if (page_screen_output () || nargout > 0)
69     [status, output] = system (cmd);
70
71     if (status != 0)
72       error ("ls: command exited abnormally with status %d\n", status);
73     elseif (nargout == 0)
74       puts (output);
75     else
76       retval = strvcat (regexp (output, '\S+', 'match'){:});
77     endif
78   else
79     ## Just let the output flow if the pager is off.  That way the
80     ## output from things like "ls -R /" will show up immediately and
81     ## we won't have to buffer all the output.
82     system (cmd);
83   endif
84
85 endfunction
86
87
88 %!test
89 %! list = ls ();
90 %! assert (ischar (list));
91 %! assert (! isempty (list));
92
93 %!error ls (1);
94