X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=octave_packages%2Fm%2Fmiscellaneous%2Flicense.m;fp=octave_packages%2Fm%2Fmiscellaneous%2Flicense.m;h=a18c9291a7777e4e5358ed43c059e3aef1353378;hb=1c0469ada9531828709108a4882a751d2816994a;hp=0000000000000000000000000000000000000000;hpb=63de9f36673d49121015e3695f2c336ea92bc278;p=CreaPhase.git diff --git a/octave_packages/m/miscellaneous/license.m b/octave_packages/m/miscellaneous/license.m new file mode 100644 index 0000000..a18c929 --- /dev/null +++ b/octave_packages/m/miscellaneous/license.m @@ -0,0 +1,187 @@ +## Copyright (C) 2005-2012 William Poetra Yoga Hadisoeseno +## +## 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 +## . + +## -*- texinfo -*- +## @deftypefn {Function File} {} license +## Display the license of Octave. +## +## @deftypefnx {Function File} {} license ("inuse") +## Display a list of packages currently being used. +## +## @deftypefnx {Function File} {@var{retval} =} license ("inuse") +## Return a structure containing the fields @code{feature} and @code{user}. +## +## @deftypefnx {Function File} {@var{retval} =} license ("test", @var{feature}) +## Return 1 if a license exists for the product identified by the string +## @var{feature} and 0 otherwise. The argument @var{feature} is case +## insensitive and only the first 27 characters are checked. +## +## @deftypefnx {Function File} {} license ("test", @var{feature}, @var{toggle}) +## Enable or disable license testing for @var{feature}, depending on +## @var{toggle}, which may be one of: +## +## @table @asis +## @item "enable" +## Future tests for the specified license of @var{feature} are conducted +## as usual. +## +## @item "disable" +## Future tests for the specified license of @var{feature} return 0. +## @end table +## +## @deftypefnx {Function File} {@var{retval} =} license ("checkout", @var{feature}) +## Check out a license for @var{feature}, returning 1 on success and 0 +## on failure. +## +## This function is provided for compatibility with @sc{matlab}. +## @seealso{ver, version} +## @end deftypefn + +## Author: William Poetra Yoga Hadisoeseno + +function retval = license (varargin) + + persistent __octave_licenses__; + + if (isempty (__octave_licenses__)) + __octave_licenses__ = cell (); + __octave_licenses__{1,1} = "Octave"; + __octave_licenses__{1,2} = "GNU General Public License"; + __octave_licenses__{1,3} = true; + if (exist ("OCTAVE_FORGE_VERSION")) + __octave_licenses__{2,1} = "octave-forge"; + __octave_licenses__{2,2} = ""; + __octave_licenses__{2,3} = true; + endif + endif + + nout = nargout; + nin = nargin; + nr_licenses = rows (__octave_licenses__); + + if (nout > 1 || nin > 3) + print_usage (); + endif + + if (nin == 0) + + found = find (strcmp (__octave_licenses__(:,1), "Octave"), 1); + + if (! isempty (found)) + result = __octave_licenses__{found,2}; + else + result = "unknown"; + endif + + if (nout == 0) + printf ("%s\n", result); + else + retval = result; + endif + + elseif (nin == 1) + + if (nout == 0) + + if (! strcmp (varargin{1}, "inuse")) + usage ('license ("inuse")'); + endif + + printf ("%s\n", __octave_licenses__{:,1}); + + else + + if (! strcmp (varargin{1}, "inuse")) + usage ('retval = license ("inuse")'); + endif + + pw = getpwuid (getuid ()); + if (isstruct (pw)) + username = pw.name; + else + username = "octave_user"; + endif + + retval = struct ("feature", __octave_licenses__(:,1), "user", username); + + endif + + else + + feature = varargin{2}(1:(min ([(length (varargin{2})), 27]))); + + if (strcmp (varargin{1}, "test")) + + found = find (strcmpi (__octave_licenses__(:,1), feature), 1); + + if (nin == 2) + retval = ! isempty (found) && __octave_licenses__{found,3}; + else + if (! isempty (found)) + if (strcmp (varargin{3}, "enable")) + __octave_licenses__{found,3} = true; + elseif (strcmp (varargin{3}, "disable")) + __octave_licenses__{found,3} = false; + else + error ("license: TOGGLE must be either `enable' or `disable'"); + endif + else + error ("license: FEATURE `%s' not found", feature); + endif + endif + + elseif (strcmp (varargin{1}, "checkout")) + + if (nin != 2) + usage ('retval = license ("checkout", feature)'); + endif + + found = find (strcmpi (__octave_licenses__(:,1), feature), 1); + + retval = ! isempty (found) && __octave_licenses__{found,3}; + + else + print_usage (); + endif + + endif + +endfunction + + +%!assert (license(), "GNU General Public License") +%!assert ((license ("inuse")).feature, "Octave") + +%!test +%! lstate = license ("test", "Octave"); +%! license ("test", "Octave", "disable"); +%! assert (license ("test", "Octave"), false); +%! license ("test", "Octave", "enable"); +%! assert (license ("test", "Octave"), true); +%! if (lstate == false) +%! license ("test", "Octave", "disable"); +%! endif + +%!assert (license ("checkout", "Octave"), true) + +%% Test input validation +%!error license ("not_inuse") +%!error license ("test", "Octave", "not_enable") +%!error license ("test", "INVALID", "enable") +%!error license ("not_test", "Octave", "enable") +