]> Creatis software - CreaPhase.git/blobdiff - octave_packages/m/miscellaneous/inputname.m
update packages
[CreaPhase.git] / octave_packages / m / miscellaneous / inputname.m
diff --git a/octave_packages/m/miscellaneous/inputname.m b/octave_packages/m/miscellaneous/inputname.m
new file mode 100644 (file)
index 0000000..7d9770b
--- /dev/null
@@ -0,0 +1,56 @@
+## Copyright (C) 2004-2012 Paul Kienzle
+##
+## 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/>.
+##
+## Original version by Paul Kienzle distributed as free software in the
+## public domain.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} inputname (@var{n})
+## Return the name of the @var{n}-th argument to the calling function.
+## If the argument is not a simple variable name, return an empty string.
+## @end deftypefn
+
+function s = inputname (n)
+
+  if (nargin == 1)
+    s = evalin ("caller", sprintf ("__varval__ (\".argn.\"){%d};", n));
+    ## For compatibility with Matlab, return empty string if argument
+    ## name is not a valid identifier.
+    if (! isvarname (s))
+      s = "";
+    endif
+  else
+    print_usage ();
+  endif
+
+endfunction
+
+## Warning: heap big magic in the following tests!!!
+## The test function builds a private context for each
+## test, with only the specified values shared between
+## them.  It does this using the following template:
+##
+##     function [<shared>] = testfn(<shared>)
+##        <test>
+##
+## To test inputname, I need a function context invoked
+## with known parameter names.  So define a couple of
+## shared parameters, et voila!, the test is trivial.
+%!shared hello,worldly
+%!assert(inputname(1),'hello');
+%!assert(inputname(2),'worldly');