# HG changeset patch # User Rik # Date 1412100504 25200 # Node ID 7bc6fa304f67f6ed2858a82b1ef1484ecdd1a9e6 # Parent d70b1cec774331bb69fb05ee6675a908211860ed computer.m: Overhaul function. * computer.m: Redo docstring. Put input validation first. Don't bother to calculate unwanted outputs. Add BIST tests for input validation. diff -r d70b1cec7743 -r 7bc6fa304f67 scripts/miscellaneous/computer.m --- a/scripts/miscellaneous/computer.m Tue Sep 30 11:00:30 2014 -0700 +++ b/scripts/miscellaneous/computer.m Tue Sep 30 11:08:24 2014 -0700 @@ -17,45 +17,49 @@ ## . ## -*- texinfo -*- -## @deftypefn {Function File} {[@var{c}, @var{maxsize}, @var{endian}] =} computer () +## @deftypefn {Function File} {} computer () +## @deftypefnx {Function File} {@var{c} =} computer () +## @deftypefnx {Function File} {[@var{c}, @var{maxsize}] =} computer () +## @deftypefnx {Function File} {[@var{c}, @var{maxsize}, @var{endian}] =} computer () ## @deftypefnx {Function File} {@var{arch} =} computer ("arch") ## Print or return a string of the form @var{cpu}-@var{vendor}-@var{os} -## that identifies the kind of computer Octave is running on. If invoked -## with an output argument, the value is returned instead of printed. For -## example: +## that identifies the type of computer that Octave is running on. +## +## If invoked with an output argument, the value is returned instead of +## printed. For example: ## ## @example ## @group ## computer () ## @print{} i586-pc-linux-gnu ## -## x = computer () -## @result{} x = "i586-pc-linux-gnu" +## mycomp = computer () +## @result{} mycomp = "i586-pc-linux-gnu" ## @end group ## @end example ## ## If two output arguments are requested, also return the maximum number -## of elements for an array. +## of elements for an array. This will depend on whether Octave has been +## compiled with 32-bit or 64-bit index vectors. ## ## If three output arguments are requested, also return the byte order ## of the current system as a character (@qcode{"B"} for big-endian or ## @qcode{"L"} for little-endian). ## -## If the argument @qcode{"arch"} is specified, return a string -## indicating the architecture of the computer on which Octave is -## running. +## If the argument @qcode{"arch"} is specified, return a string indicating the +## architecture of the computer on which Octave is running. +## @seealso{isunix, ismac, ispc} ## @end deftypefn function [c, maxsize, endian] = computer (a) - if (nargin == 1 && ischar (a) && strcmpi (a, "arch")) - tmp = ostrsplit (octave_config_info ("canonical_host_type"), "-"); - if (numel (tmp) == 4) - c = sprintf ("%s-%s-%s", tmp{4}, tmp{3}, tmp{1}); - else - c = sprintf ("%s-%s", tmp{3}, tmp{1}); - endif - elseif (nargin == 0) + if (nargin > 1) + print_usage (); + elseif (nargin == 1 && ! strcmpi (a, "arch")) + error ('computer: "arch" is only valid argument'); + endif + + if (nargin == 0) msg = octave_config_info ("canonical_host_type"); if (strcmp (msg, "unknown")) @@ -63,24 +67,35 @@ endif if (nargout == 0) - printf ("%s\n", msg); + disp (msg); else c = msg; - if (strcmp (octave_config_info ("USE_64_BIT_IDX_T"), "true")) - maxsize = 2^63-1; - else - maxsize = 2^31-1; + if (isargout (2)) + if (strcmp (octave_config_info ("USE_64_BIT_IDX_T"), "true")) + maxsize = 2^63-1; + else + maxsize = 2^31-1; + endif endif - if (octave_config_info ("words_big_endian")) - endian = "B"; - elseif (octave_config_info ("words_little_endian")) - endian = "L"; - else - endian = "?"; + if (isargout (3)) + if (octave_config_info ("words_big_endian")) + endian = "B"; + elseif (octave_config_info ("words_little_endian")) + endian = "L"; + else + endian = "?"; + endif endif endif else - print_usage (); + ## "arch" argument asked for + tmp = ostrsplit (octave_config_info ("canonical_host_type"), "-"); + if (numel (tmp) == 4) + c = sprintf ("%s-%s-%s", tmp{4}, tmp{3}, tmp{1}); + else + c = sprintf ("%s-%s", tmp{3}, tmp{1}); + endif + endif endfunction @@ -90,5 +105,6 @@ %!assert (computer (), octave_config_info ("canonical_host_type")) %!assert (ischar (computer ("arch"))) -%!error computer (2) +%!error computer (1,2) +%!error <"arch" is only valid argument> computer ("xyz")