Mercurial > octave-nkf
diff scripts/general/celldisp.m @ 6869:f9c893831e68
[project @ 2007-09-06 16:38:44 by dbateman]
author | dbateman |
---|---|
date | Thu, 06 Sep 2007 16:38:44 +0000 |
parents | |
children | 93c65f2a5668 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/scripts/general/celldisp.m Thu Sep 06 16:38:44 2007 +0000 @@ -0,0 +1,63 @@ +## Copyright (C) 2007 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 2, 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, write to the Free +## Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301, USA. + +## -*- texinfo -*- +## @deftypefn {Function File} {} celldisp (@var{c}, @var{name}) +## Recursively display the contents of a cell array. By default the values +## are displayed with the name of the variable @var{c}. However, this name +## can be replaced with the variable @var{name}. +## @seealso{disp} +## @end deftypefn + +## This is ugly, but seems to be what matlab does.. + +function celldisp (c, name) + if (nargin < 1 || nargin > 2) + print_usage (); + endif + + if (! iscell (c)) + error ("celldisp: argument must be a cell array"); + endif + + if (nargin == 1) + name = inputname (1); + endif + + for i = 1: numel (c) + if (iscell (c{i})) + celldisp (c{i}, sprintf ("%s{%s}", name, indices (size (c), i))); + else + disp (sprintf ("%s{%s} = \n", name, indices (size (c), i))); + disp (c{i}); + disp (""); + endif + endfor +endfunction + +function s = indices (dv, i) + if (sum (dv != 1) > 1) + c = cell (size (dv)); + [c{:}] = ind2sub (dv, i); + s = sprintf("%i,", c{:}); + s(end) = []; + else + s = sprintf("%i", i); + endif +endfunction