]> Creatis software - CreaPhase.git/blob - octave_packages/m/general/celldisp.m
update packages
[CreaPhase.git] / octave_packages / m / general / celldisp.m
1 ## Copyright (C) 2007-2012 David Bateman
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 {Function File} {} celldisp (@var{c}, @var{name})
21 ## Recursively display the contents of a cell array.  By default the values
22 ## are displayed with the name of the variable @var{c}.  However, this name
23 ## can be replaced with the variable @var{name}.  For example:
24 ##
25 ## @example
26 ## @group
27 ## c = @{1, 2, @{31, 32@}@};
28 ## celldisp (c, "b")
29 ##    @result{}
30 ##       b@{1@} =
31 ##        1
32 ##       b@{2@} =
33 ##        2
34 ##       b@{3@}@{1@} =
35 ##        31
36 ##       b@{3@}@{2@} =
37 ##        32
38 ## @end group
39 ## @end example
40 ##
41 ## @seealso{disp}
42 ## @end deftypefn
43
44 ## This is ugly, but seems to be what matlab does..
45
46 function celldisp (c, name)
47   if (nargin < 1 || nargin > 2)
48     print_usage ();
49   endif
50
51   if (! iscell (c))
52     error ("celldisp: argument must be a cell array");
53   endif
54
55   if (nargin == 1)
56     name = inputname (1);
57   endif
58
59   for i = 1: numel (c)
60     if (iscell (c{i}))
61       celldisp (c{i}, sprintf ("%s{%s}", name, indices (size (c), i)));
62     else
63       disp (sprintf ("%s{%s} = \n", name, indices (size (c), i)));
64       disp (c{i});
65       disp ("");
66     endif
67   endfor
68 endfunction
69
70 function s = indices (dv, i)
71   if (sum (dv != 1) > 1)
72     c = cell (size (dv));
73     [c{:}] = ind2sub (dv, i);
74     s = sprintf("%i,", c{:});
75     s(end) = [];
76   else
77     s = sprintf("%i", i);
78   endif
79 endfunction
80
81 %!demo
82 %! c = {1, 2, {31, 32}};
83 %! celldisp(c, "b")
84
85 %!error celldisp ();
86 %!error celldisp ({}, "name", 1);
87 %!error celldisp (1);