changeset 30577:fa2a4ce2099c stable

NEWS: Remove ".md" extension from files that don't use markdown. * etc/NEWS.1, etc/NEWS.2, etc/NEWS.3, etc/NEWS.4: Remove file extension ".md" from files that aren't formatted with markdown syntax.
author Markus Mützel <markus.muetzel@gmx.de>
date Fri, 31 Dec 2021 17:03:44 +0100
parents 796f54d4ddbf
children 9002e595f219 d00ae0ad8f89
files etc/NEWS.1 etc/NEWS.1.md etc/NEWS.2 etc/NEWS.2.md etc/NEWS.3 etc/NEWS.3.md etc/NEWS.4 etc/NEWS.4.md
diffstat 8 files changed, 5709 insertions(+), 5709 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/NEWS.1	Fri Dec 31 17:03:44 2021 +0100
@@ -0,0 +1,1602 @@
+Summary of changes for version 1.1.1 (1995-02-23):
+-------------------------------------------------
+
+  * New built-in variables, default_return_value and
+    define_all_return_values.
+
+    If define_all_return_values is set to "false", Octave does not do
+    anything special for return values that are left undefined, and
+    you will get an error message if you try to use them.  For
+    example, if the function
+
+      function [x, y] = f ()
+        y = 1;
+      endfunction
+
+    is called as
+
+      octave:13> [a, b] = f ()
+
+    Octave will print an error message for the attempt to assign an
+    undefined value to `a'.
+
+    This is incompatible with Matlab, which will define the return
+    variable `x' to be the empty matrix.  To get the Matlab-like
+    behavior, you can set the variable define_all_return_values to
+    "true" (the default is "false") and default_return_value to `[]'
+    (the default).  Then, any return values that remain undefined when
+    the function returns will be initialized to `[]'.
+
+    If the function is called without explicitly asking for an output,
+    it will succeed.  This behavior is compatible and unchanged from
+    previous versions of Octave.
+
+  * New built-in variable suppress_verbose_help_message.  If set to
+    "true", Octave will not add additional help information to the end
+    of the output from the help command and usage messages for
+    built-in commands.  The default value is "false".
+
+  * New built-in variable PS4 is used as the prefix of echoed input
+    (enabled with the --echo-input (-x) option).
+
+  * The function size() now accepts an optional second argument.
+
+  * Output from `save - ...' now goes through the pager.
+
+  * The break statement may also be used to exit a function, for
+    compatibility with Matlab.
+
+  * The directory tree for installing Octave is now closer to
+    conforming with the current GNU standards.
+
+  * More bug fixes.
+
+Summary of changes for version 1.1.0 (1995-01-12):
+-------------------------------------------------
+
+  * Octave now requires g++ 2.6.3 or later.  This change is necessary
+    to make template instantiations cleaner, and to avoid having to
+    have special cases in the code for earlier versions of gcc.
+
+  * A new data structure type has been added.  The implementation uses
+    an associative array with indices limited to strings, but the
+    syntax is more like C-style structures.  here are some examples of
+    using it.
+
+    Elements of structures can be of any type, including structures:
+
+      octave:1> x.a = 1;
+      octave:2> x.b = [1, 2; 3, 4];
+      octave:3> x.c = "string";
+      octave:4> x
+      x =
+
+      <structure: a b c>
+
+      octave:5> x.a
+      x.a = 1
+      octave:6> x.b
+      x.b =
+
+        1  2
+        3  4
+
+      octave:7> x.c
+      x.c = string
+      octave:8> x.b.d = 3
+      x.b.d = 3
+      octave:9> x.b
+      x.b =
+
+      <structure: d>
+
+      octave:10> x.b.d
+      x.b.d = 3
+
+    Functions can return structures:
+
+      octave:1> a = rand (3) + rand (3) * I;
+      octave:2> function y = f (x)
+      > y.re = real (x);
+      > y.im = imag (x);
+      > endfunction
+      octave:3> f (a)
+      ans =
+
+      <structure: im re>
+
+      octave:4> ans.im
+      ans.im =
+
+        0.093411  0.229690  0.627585
+        0.415128  0.221706  0.850341
+        0.894990  0.343265  0.384018
+
+      octave:5> ans.re
+      ans.re =
+
+        0.56234  0.14797  0.26416
+        0.72120  0.62691  0.20910
+        0.89211  0.25175  0.21081
+
+    Return lists can include structure elements:
+
+      octave:1> [x.u, x.s, x.v] = svd ([1, 2; 3, 4])
+      x.u =
+
+        -0.40455  -0.91451
+        -0.91451   0.40455
+
+      x.s =
+
+        5.46499  0.00000
+        0.00000  0.36597
+
+      x.v =
+
+        -0.57605   0.81742
+        -0.81742  -0.57605
+
+      octave:8> x
+      x =
+
+      <structure: s u v>
+
+    This feature should be considered experimental, but it seems to
+    work OK.  Suggestions for ways to improve it are welcome.
+
+  * Octave now supports a limited form of exception handling modeled
+    after the unwind-protect form of Lisp:
+
+      unwind_protect
+        BODY
+      unwind_protect_cleanup
+        CLEANUP
+      end_unwind_protect
+
+    Where BODY and CLEANUP are both optional and may contain any
+    Octave expressions or commands.  The statements in CLEANUP are
+    guaranteed to be executed regardless of how control exits BODY.
+
+    This is useful to protect temporary changes to global variables
+    from possible errors.  For example, the following code will always
+    restore the original value of the built-in variable
+    do_fortran_indexing even if an error occurs while performing the
+    indexing operation.
+
+      save_do_fortran_indexing = do_fortran_indexing;
+      unwind_protect
+        do_fortran_indexing = "true";
+        elt = a (idx)
+      unwind_protect_cleanup
+        do_fortran_indexing = save_do_fortran_indexing;
+      end_unwind_protect
+
+    Without unwind_protect, the value of do_fortran_indexing would not
+    be restored if an error occurs while performing the indexing
+    operation because evaluation would stop at the point of the error
+    and the statement to restore the value would not be executed.
+
+  * Recursive directory searching has been implemented using Karl
+    Berry's kpathsea library.  Directories below path elements that
+    end in // are searched recursively for .m files.
+
+  * Octave now waits for additional input when a pair of parentheses
+    is `open' instead of giving an error.  This allows one to write
+    statements like this
+
+      if (big_long_variable_name == other_long_variable_name
+          || not_so_short_variable_name > 4
+          && y > x)
+        some (code, here);
+
+    without having to clutter up the if statement with continuation
+    characters.
+
+  * Continuation lines are now allowed in string constants and are
+    handled correctly inside matrix constants.
+
+  * Both `...{whitespace}\n' and `\{whitespace}\n' can be used to
+    introduce continuation lines, where {whitespace} may include
+    spaces, tabs and comments.
+
+  * The script directory has been split up by topic.
+
+  * Dynamic linking mostly works with dld.  The following limitations
+    are known problems:
+
+    -- Clearing dynamically linked functions doesn't work.
+
+    -- Dynamic linking only works with dld, which has not been ported
+       to very many systems yet.
+
+    -- Configuring with --enable-lite-kernel seems to mostly work to
+       make nonessential built-in functions dynamically loaded, but
+       there also seem to be some problems.  For example, fsolve seems
+       to always return info == 3.  This is difficult to debug since
+       GDB doesn't appear to allow breakpoints to be set inside
+       dynamically loaded functions.
+
+    -- Octave uses a lot of memory if the dynamically linked functions
+       are compiled with -g.  This appears to be a limitation with
+       dld, and can be avoided by not using -g to compile functions
+       that will be linked dynamically.
+
+  * fft2 and ifft2 are now built-in functions.
+
+  * The `&&' and `||' logical operators are now evaluated in a
+    short-circuit fashion and work differently than the element by
+    element operators `&' and `|'.  See the Octave manual for more
+    details.
+
+  * Expressions like 1./m are now parsed as 1 ./ m, not 1. / m.
+
+  * The replot command now takes the same arguments as gplot or
+    gsplot (except ranges, which cannot be respecified with replot
+    (yet)) so you can add additional lines to existing plots.
+
+  * The hold command has been implemented.
+
+  * New function `clearplot' clears the plot window.  The name `clg'
+    is aliased to `clearplot' for compatibility with Matlab.
+
+  * The commands `gplot clear' and `gsplot clear' are equivalent to
+    `clearplot'.  (Previously, `gplot clear' would evaluate `clear' as
+    an ordinary expression and clear all the visible variables.)
+
+  * The Matlab-style plotting commands have been improved.  They now
+    accept line-style arguments, multiple x-y pairs, and other plot
+    option flags.  For example,
+
+      plot (x, y, "@12", x, y2, x, y3, "4", x, y4, "+")
+
+    results in a plot with
+
+      y  plotted with points of type 2 ("+") and color 1 (red).
+      y2 plotted with lines.
+      y3 plotted with lines of color 4.
+      y4 plotted with points which are "+"s.
+
+    the help message for `plot' and `plot_opt' provide full
+    descriptions of the options.
+
+  * NaN is now dropped from plot data, and Inf is converted to a
+    very large value before calling gnuplot.
+
+  * Improved load and save commands:
+
+    -- The save and load commands can now read and write a new binary
+       file format.  Conversion to and from IEEE big and little endian
+       formats is handled automatically.  Conversion for other formats
+       has not yet been implemented.
+
+    -- The load command can now read Matlab .mat files, though it is
+       not yet able to read sparse matrices or handle conversion for
+       all data formats.
+
+    -- The save command can write Matlab .mat files.
+
+    -- The load command automatically determines the save format
+       (binary, ascii, or Matlab binary).
+
+    -- The default format for the save command is taken from the
+       built-in variable `default_save_format'.
+
+    -- The save and load commands now both accept a list of globbing
+       patterns so you can easily load a list of variables from a
+       file.
+
+    -- The load command now accepts the option -list, for listing the
+       variable names without actually loading the data.  With
+       -verbose, it prints a long listing.
+
+    -- The load command now accepts the option -float-binary, for
+       saving floating point data in binary files in single precision.
+
+  * who and whos now accept a list of globbing patterns so you can
+    limit the lists of variables and functions to those that match a
+    given set of patterns.
+
+  * New functions for manipulating polynomials
+
+      compan     -- companion matrix corresponding to polynomial coefficients
+      conv       -- convolve two vectors
+      deconv     -- deconvolve two vectors
+      roots      -- find the roots of a polynomial
+      poly       -- characteristic polynomial of a matrix
+      polyderiv  -- differentiate a polynomial
+      polyinteg  -- integrate a polynomial
+      polyreduce -- reduce a polynomial to minimum number of terms
+      polyval    -- evaluate a polynomial at a point
+      polyvalm   -- evaluate a polynomial in the matrix sense
+      residue    -- partial fraction expansion corresponding to the ratio
+                    of two polynomials
+
+  * New functions for manipulating sets
+
+      create_set   -- create a set of unique values
+      complement   -- find the complement of two sets
+      intersection -- find the intersection of two sets
+      union        -- find the union of two sets
+
+  * New elementary functions:
+
+      acot   acoth   acsc   acsch
+      asec   asech   cot    coth
+      csc    csch    log2   sec
+      sech
+
+  * New special functions:
+
+      beta   -- beta function
+      betai  -- incomplete beta function
+      gammai -- incomplete gamma function
+
+  * New image processing functions:
+
+      colormap  -- set and return current colormap
+      gray      -- set a gray colormap
+      gray2ind  -- image format conversion
+      image     -- display an image
+      imagesc   -- scale and display an image
+      imshow    -- display images
+      ind2gray  -- image format conversion
+      ind2rgb   -- image format conversion
+      loadimage -- load an image from a file
+      ntsc2rgb  -- image format conversion
+      ocean     -- set a color colormap
+      rgb2ind   -- image format conversion
+      rgb2ntsc  -- image format conversion
+      saveimage -- save an image to a file
+
+  * New time and date functions:
+
+      tic          -- set wall-clock timer
+      toc          -- get elapsed wall-clock time, since timer last set
+      etime        -- another way to get elapsed wall-clock time
+      cputime      -- get CPU time used since Octave started
+      is_leap_year -- is the given year a leap year?
+
+  * Other new functions:
+
+      bug_report -- submit a bug report to the bug-octave mailing list
+
+      toascii -- convert a string to a matrix of ASCII character codes
+
+      octave_tmp_file -- generate a unique temporary file name
+
+      undo_string_escapes -- replace special characters in a string by
+                             their backslash forms
+
+      is_struct -- determine whether something is a structure data type
+
+      feof   -- check EOF condition for a specified file
+      ferror -- check error state for a specified file
+      fread  -- read binary data from a file
+      fwrite -- write binary data to a file
+
+      file_in_path -- check to see if named file exists in given path
+
+      kbhit  -- get a single character from the terminal
+
+      axis   -- change plot ranges
+      hist   -- plot histograms
+
+      diary  -- save commands and output to a file
+
+      type   -- show the definition of a function
+      which  -- print the type of an identifier or the location of a
+                function file
+
+      isieee  -- Returns 1 if host uses IEEE floating point
+      realmax -- Returns largest floating point number
+      realmin -- Returns smallest floating point number
+
+      gcd     -- greatest common divisor
+      lcm     -- least common multiple
+
+      null    -- orthonormal basis of the null space of a matrix
+      orth    -- orthonormal basis of the range space of a matrix
+
+      fft2    -- two-dimensional fast fourier transform
+      ifft2   -- two-dimensional inverse fast fourier transform
+      filter  -- digital filter
+      fftfilt -- filter using fft
+      fftconv -- convolve to vectors using fft
+      sinc    -- returns sin(pi*x)/(pi*x)
+      freqz   -- compute the frequency response of a filter
+
+  * The meaning of nargin (== args.length ()) in built-in functions
+    has been changed to match the meaning of nargin in user-defined
+    functions.
+
+  * Variable return lists.  Octave now has a real mechanism for
+    handling functions that return an unspecified number of values,
+    so it is no longer necessary to place an upper bound on the number
+    of outputs that a function can produce.
+
+    Here is an example of a function that uses the new syntax to
+    produce n values:
+
+      function [...] = foo (n)
+        for i = 1:n
+          vr_val (i * x);
+        endfor
+      endfunction
+
+  * New keyword, all_va_args, that allows the entire list of va_args
+    to be passed to another function.  For example, given the functions
+
+      function f (...)
+        while (nargin--)
+          disp (va_arg ())
+        endwhile
+      endfunction
+      function g (...)
+        f ("begin", all_va_args, "end")
+      endfunction
+
+    the statement
+
+      g (1, 2, 3)
+
+    prints
+
+      begin
+      1
+      2
+      3
+      end
+
+    all_va_args may be used more than once, but can only be used
+    within functions that take a variable number of arguments.
+
+  * If given a second argument, svd now returns an economy-sized
+    decomposition, eliminating the unnecessary rows or columns of U or
+    V.
+
+  * The max and min functions correctly handle complex matrices in
+    which some columns contain real values only.
+
+  * The find function now handles 2 and 3 output arguments.
+
+  * The qr function now allows computation of QR with pivoting.
+
+  * hilb() is much faster for large matrices.
+
+  * computer() is now a built-in function.
+
+  * pinv() is now a built-in function.
+
+  * The output from the history command now goes through the pager.
+
+  * If a function is called without assigning the result, nargout is
+    now correctly set to 0.
+
+  * It is now possible to write functions that only set some return
+    values.  For example, calling the function
+
+      function [x, y, z] = f () x = 1; z = 2; endfunction
+
+    as
+
+      [a, b, c] = f ()
+
+    produces:
+
+      a = 1
+
+      b = [](0x0)
+
+      c = 2
+
+  * The shell_cmd function has been renamed to system (the name
+    shell_cmd remains for compatibility).  It now returns [output, status].
+
+  * New built-in variable `OCTAVE_VERSION'.  Also a new function,
+    version, for compatibility with Matlab.
+
+  * New built-in variable `automatic_replot'.  If it is "true", Octave
+    will automatically send a replot command to gnuplot each time the
+    plot changes.  Since this is fairly inefficient, the default value
+    is "false".
+
+  * New built-in variable `whitespace_in_literal_matrix' allows some
+    control over how Octave decides to convert spaces to commas in
+    matrix expressions like `[m (1)]'.
+
+    If the value of `whitespace_in_literal_matrix' is "ignore", Octave
+    will never insert a comma or a semicolon in a literal matrix list.
+    For example, the expression `[1 2]' will result in an error
+    instead of being treated the same as `[1, 2]', and the expression
+
+      [ 1, 2,
+        3, 4 ]
+
+    will result in the vector [1 2 3 4] instead of a matrix.
+
+    If the value of `whitespace_in_literal_matrix' is "traditional",
+    Octave will convert spaces to a comma between identifiers and `('.
+    For example, given the matrix
+
+      m = [3 2]
+
+    the expression
+
+      [m (1)]
+
+    will be parsed as
+
+      [m, (1)]
+
+    and will result in
+
+      [3 2 1]
+
+    and the expression
+
+      [ 1, 2,
+        3, 4 ]
+
+    will result in a matrix because the newline character is converted
+    to a semicolon (row separator) even though there is a comma at the
+    end of the first line (trailing commas or semicolons are ignored).
+    This is apparently how Matlab behaves.
+
+    Any other value for `whitespace_in_literal_matrix' results in
+    behavior that is the same as traditional, except that Octave does
+    not convert spaces to a comma between identifiers and `('.
+    For example, the expression
+
+      [m (1)]
+
+    will produce 3.  This is the way Octave has always behaved.
+
+  * Line numbers in error messages for functions defined in files and
+    for script files now correspond to the file line number, not the
+    number of lines after the function keyword appeared.
+
+  * Octave now extracts help from script files.  The comments must
+    come before any other statements in the file.
+
+  * In function files, the first block of comments in the file will
+    now be interpreted as the help text if it doesn't look like the
+    Octave copyright notice.  Otherwise, Octave extracts the first set
+    of comments after the function keyword.
+
+  * The function clock is more accurate on systems that have the
+    gettimeofday() function.
+
+  * The standard output stream is now automatically flushed before
+    reading from stdin with any of the *scanf() functions.
+
+  * Expanded reference card.
+
+  * The Octave distribution now includes a frequently asked questions
+    file, with answers.  Better answers and more questions (with
+    answers!) are welcome.
+
+  * New option --verbose.  If Octave is invoked with --verbose and not
+    --silent, a message is printed if an octaverc file is read while
+    Octave is starting.
+
+  * An improved configure script generated by Autoconf 2.0.
+
+  * Lots of bug fixes.
+
+Summary of changes for version 1.0 (1994-02-17):
+-----------------------------------------------
+
+  * C-style I/O functions now handle files referenced by name or by
+    number more consistently.
+
+Summary of changes for version 0.83 (1994-02-13):
+------------------------------------------------
+
+  * Loading global symbols should work now.
+
+  * Clearing the screen doesn't reprint the prompt unnecessarily.
+
+  * The operations <complex scalar> OP <real matrix> for OP == +, -,
+    *, or ./ no longer crash Octave.
+
+  * More portability and configuration fixes.
+
+Summary of changes for version 0.82 (1994-02-08):
+------------------------------------------------
+
+  * Octave now comes with a reference card.
+
+  * The manual has been improved, but more work remains to be done.
+
+  * The atanh function now works for complex arguments.
+
+  * The asin, acos, acosh, and atanh functions now work properly when
+    given real-valued arguments that produce complex results.
+
+  * SEEK_SET, SEEK_CUR, and SEEK_END are now constants.
+
+  * The `using' qualifier now works with gplot and gsplot when the
+    data to plot is coming directly from a file.
+
+  * The strcmp function now works correctly for empty strings.
+
+  * Eliminated bogus parse error for M-files that don't end with `end'
+    or `endfunction'.
+
+  * For empty matrices with one nonzero dimension, the +, -, .*, and
+    ./ operators now correctly preserve the dimension.
+
+  * Octave no longer crashes if you type ^D at the beginning of a line
+    in the middle of defining a loop or if statement.
+
+  * On AIX systems, Back off on indexing DiagArray via Proxy class to
+    avoid gcc (or possibly AIX assembler?) bug.
+
+  * Various other bug and portability fixes.
+
+Summary of changes for version 0.81 (1994-01-28):
+------------------------------------------------
+
+  * Octave no longer dumps core if you try to define a function in
+    your .octaverc file.
+
+  * Fixed bug in Array class that resulted in bogus off-diagonal
+    elements when computing eigenvalue and singular value
+    decompositions.
+
+  * Fixed bug that prevented lsode from working on the SPARCstation,
+    at least with some versions of Sun's f77.  This bug was introduced
+    in 0.80, when I changed LSODE to allow the user to abort the
+    integration from within the RHS function.
+
+  * Fixed bug that prevented global attribute of variables from being
+    saved with save(), and another that prevented load() from working
+    at all.
+
+Summary of changes for version 0.80 (1994-01-18):
+------------------------------------------------
+
+  * I have started working on a manual for the C++ classes.  At this
+    point, it is little more than a list of function names.  If you
+    would like to volunteer to help work on this, please contact
+    maintainers@octave.org.
+
+  * The patterns accepted by the save and clear commands now work like
+    file name globbing patterns instead of regular expressions.  I
+    apologize for any inconvenience this change may cause, but file
+    name globbing seems like a more reasonable style of pattern
+    matching for this purpose.
+
+  * It is now possible to specify tolerances and other optional inputs
+    for dassl, fsolve, lsode, npsol, qpsol, and quad.  For each of
+    these functions, there is a corresponding function X_options,
+    which takes a keyword and value arguments.  If invoked without any
+    arguments, the X_options functions print a list of possible
+    keywords and current values.  For example,
+
+      npsol_options ()
+
+    prints a list of possible options with values, and
+
+      npsol_options ("major print level", 10)
+
+    sets the major print level to 10.
+
+    The keyword match is not case sensitive, and the keywords may be
+    abbreviated to the shortest unique match.  For example,
+
+      npsol_options ("ma p", 10)
+
+    is equivalent to the statement shown above.
+
+  * The new built-in variable save_precision can be used to set the
+    number of digits preserved by the ASCII save command.
+
+  * Assignment of [] now works in most cases to allow you to delete
+    rows or columns of matrices and vectors.  For example, given a
+    4x5 matrix A, the assignment
+
+      A (3, :) = []
+
+    deletes the third row of A, and the assignment
+
+      A (:, 1:2:5) = []
+
+    deletes the first, third, and fifth columns.
+
+  * Variable argument lists.  Octave now has a real mechanism for
+    handling functions that take an unspecified number of arguments,
+    so it is no longer necessary to place an upper bound on the number
+    of optional arguments that a function can accept.
+
+    Here is an example of a function that uses the new syntax to print
+    a header followed by an unspecified number of values:
+
+      function foo (heading, ...)
+        disp (heading);
+        va_start ();
+        while (--nargin)
+          disp (va_arg ());
+        endwhile
+      endfunction
+
+    Note that the argument list must contain at least one named
+    argument (this restriction may eventually be removed), and the
+    ellipsis must appear as the last element of the argument list.
+
+    Calling va_start() positions an internal pointer to the first
+    unnamed argument and allows you to cycle through the arguments
+    more than once.  It is not necessary to call va_start() if you
+    do not plan to cycle through the arguments more than once.
+
+  * Recursive functions should work now.
+
+  * The environment variable OCTAVE_PATH is now handled in the same
+    way as TeX handles TEXINPUTS.  If the path starts with `:', the
+    standard path is prepended to the value obtained from the
+    environment.  If it ends with `:' the standard path is appended to
+    the value obtained from the environment.
+
+  * New functions, from Kurt Hornik (hornik@neuro.tuwien.ac.at) and
+    the Department of Probability Theory and Statistics TU Wien,
+    Austria:
+
+     corrcoef    -- corrcoef (X, Y) is the correlation between the i-th
+                    variable in X and the j-th variable in Y
+                    corrcoef (X) is corrcoef (X, X)
+     cov         -- cov (X, Y) is the covariance between the i-th
+                    variable in X and the j-th variable in Y
+                    cov (X) is cov (X, X)
+     gls         -- generalized least squares estimation
+     kurtosis    -- kurtosis(x) = N^(-1) std(x)^(-4) SUM_i (x(i)-mean(x))^4 - 3
+                    If x is a matrix, return the row vector containing
+                    the kurtosis of each column
+     mahalanobis -- returns Mahalanobis' D-square distance between the
+                    multivariate samples X and Y, which must have the
+                    same number of components (columns), but may have
+                    a different number of observations (rows)
+     ols         -- ordinary least squares estimation
+     pinv        -- returns the pseudoinverse of X; singular values
+                    less than tol are ignored
+     skewness    -- skewness (x) = N^(-1) std(x)^(-3) SUM_i (x(i)-mean(x))^3
+                    if x is a matrix, return the row vector containing
+                    the skewness of each column
+
+  * Errors in user-supplied functions called from dassl, fsolve,
+    lsode, npsol, and quad are handled more gracefully.
+
+  * Programming errors in the use of the C++ classes within Octave
+    should no longer cause Octave to abort.  Instead, Octave's error
+    handler function is called and execution continues as best as is
+    possible.  This should result in eventually returning control to
+    the top-level Octave prompt.  (It would be nice to have a real
+    exception handling mechanism...)
+
+  * A number of memory leaks have been eliminated.  Thanks to
+    Fong Kin Fui <fui@ee.nus.sg> for reporting them.
+
+  * The C++ matrix classes are now derived from a generic
+    template-based array class.
+
+  * The readline function operate-and-get-next (from bash) is now
+    available and bound to C-O by default.
+
+  * Octave now uses the version of readline currently distributed with
+    bash-1.13.  On some systems, interactive invocations of Octave
+    will now blink the cursor to show matching parens.
+
+  * By default, include files are now installed in
+    $prefix/include/octave instead of $prefix/include.
+
+  * Octave now uses a config.h file instead of putting all defines on
+    the compiler command line.
+
+Summary of changes for version 0.79 (1993-11-08):
+------------------------------------------------
+
+  * New control systems functions:
+
+     dgram -- Returns the discrete controllability and observability gramian.
+     dlqr  -- Discrete linear quadratic regulator design.
+     dlqe  -- Discrete linear quadratic estimator (Kalman Filter) design.
+     c2d   -- Convert continuous system description to discrete time
+              description assuming zero-order hold and given sample time.
+
+  * The max (min) functions can now return the index of the max (min)
+    value as a second return value.
+
+Summary of changes for version 0.78 (1993-11-05):
+------------------------------------------------
+
+  * Octave's handling of global variables has been completely
+    rewritten.  To access global variables inside a function, you must
+    now declare them to be global within the function body.  Likewise,
+    if you do not declare a variable as global at the command line,
+    you will not have access to it within a function, even if it is
+    declared global there.  For example, given the function
+
+      function f ()
+        global x = 1;
+        y = 2;
+      endfunction
+
+    the global variable `x' is not visible at the top level until the
+    command
+
+      octave:13> global x
+
+    has been evaluated, and the variable `y' remains local to the
+    function f() even if it is declared global at the top level.
+
+    Clearing a global variable at the top level will remove its global
+    scope and leave it undefined.  For example,
+
+      octave:1> function f ()   # Define a function that accesses
+      >  global x;              #   the global variable `x'.
+      >  x
+      > endfunction
+      octave:2> global x = 1    # Give the variable `x' a value.
+      octave:3> f ()            # Evaluating the function accesses the
+      x = 1                     #   global `x'.
+      octave:4> clear x         # Remove `x' from global scope, clear value.
+      octave:5> x = 2           # Define new local `x' at the top level
+      x = 2
+      octave:6> f               # The global `x' is no longer defined.
+      error: `x' undefined near line 1 column 25
+      error: evaluating expression near line 1, column 25
+      error: called from `f'
+      octave:7> x               # But the local one is.
+      x = 2
+
+  * The new function, `is_global (string)' returns 1 if the variable
+    named by string is globally visible.  Otherwise, returns 0.
+
+  * The implementation of `who' has changed.  It now accepts the
+    following options:
+
+      -b -builtins   -- display info for built-in variables and functions
+      -f -functions  -- display info for currently compiled functions
+      -v -variables  -- display info for user variables
+      -l -long       -- display long info
+
+    The long output looks like this:
+
+      octave:5> who -l
+
+      *** currently compiled functions:
+
+      prot  type               rows   cols  name
+      ====  ====               ====   ====  ====
+       wd   user function         -      -  f
+
+      *** local user variables:
+
+      prot  type               rows   cols  name
+      ====  ====               ====   ====  ====
+       wd   real scalar           1      1  y
+
+      *** globally visible user variables:
+
+      prot  type               rows   cols  name
+      ====  ====               ====   ====  ====
+       wd   complex matrix       13     13  x
+
+    where the first character of the `protection' field is `w' if the
+    symbol can be redefined, and `-' if it has read-only access.  The
+    second character may be `d' if the symbol can be deleted, or `-'
+    if the symbol cannot be cleared.
+
+  * The new built-in variable ignore_function_time_stamp can be used
+    to prevent Octave from calling stat() each time it looks up
+    functions defined in M-files.  If set to "system", Octave will not
+    automatically recompile M-files in subdirectories of
+    $OCTAVE_HOME/lib/VERSION if they have changed since they were last
+    compiled, but will recompile other M-files in the LOADPATH if they
+    change.  If set to "all", Octave will not recompile any M-files
+    unless their definitions are removed with clear.  For any other
+    value of ignore_function_time_stamp, Octave will always check to
+    see if functions defined in M-files need to recompiled.  The
+    default value of ignore_function_time_stamp is "system".
+
+  * The new built-in variable EDITOR can be used to specify the editor
+    for the edit_history command.  It is set to the value of the
+    environment variable EDITOR, or `vi' if EDITOR is not set, or is
+    empty.
+
+  * There is a new built-in variable, INFO_FILE, which is used as the
+    location of the info file.  Its initial value is
+    $OCTAVE_HOME/info/octave.info, so `help -i' should now work
+    provided that OCTAVE_HOME is set correctly, even if Octave is
+    installed in a directory different from that specified at compile
+    time.
+
+  * There is a new command line option, --info-file FILE, that may be
+    used to set Octave's idea of the location of the info file.  It
+    will override any value of OCTAVE_INFO_FILE found in the
+    environment, but not any INFO_FILE="filename" commands found in
+    the system or user startup files.
+
+  * Octave's Info reader will now recognize gzipped files that have
+    names ending in `.gz'.
+
+  * The save command now accepts regular expressions as arguments.
+    Note that these patterns are regular expressions, and do not work
+    like filename globbing.  For example, given the variables `a',
+    `aa', and `a1', the command `save a*' saves `a' and `aa' but not
+    `a1'.  To match all variables beginning with `a', you must use an
+    expression like `a.*' (match all sequences beginning with `a'
+    followed by zero or more characters).
+
+  * Line and column information is included in more error messages.
+
+Summary of changes for version 0.77 (1993-10-23):
+------------------------------------------------
+
+  * Improved help.  The command `help -i topic' now uses the GNU Info
+    browser to display help for the given topic directly from the
+    Texinfo documentation.
+
+  * New function: chol -- Cholesky factorization.
+
+Summary of changes for version 0.76 (1993-10-05):
+------------------------------------------------
+
+  * Better run-time error messages.  Many now include line and column
+    information indicating where the error occurred.  Octave will also
+    print a traceback for errors occurring inside functions. If you
+    find error messages that could use improvement, or errors that
+    Octave fails to catch, please send a bug report to
+    bug@octave.org.
+
+  * If gplot (or gsplot) is given a string to plot, and the string
+    does not name a file, Octave will pass the string along to gnuplot
+    directly.  This allows commands like
+
+      gplot "sin (x)" w l, data w p
+
+    to work (assuming that data is a variable containing a matrix of
+    values).
+
+  * Long options (--help, --version, etc.) are supported.
+
+Summary of changes for version 0.75 (1993-09-15):
+------------------------------------------------
+
+  * The documentation is much more complete, but still could use a lot
+    of work.
+
+  * The history function now prints line numbers by default.  The
+    command `history -q' will  omit them.
+
+  * The clear function now accepts regular expressions.
+
+  * If gplot (or gsplot) is given a string to plot, and the string
+    names a file, Octave attempts to plot the contents of the file.
+
+  * New functions:
+
+    history:
+
+      run_history  -- run commands from the history list.
+      edit_history -- edit commands from the history list with your
+                      favorite editor.
+
+    linear algebra:
+
+      balance         -- Balancing for algebraic and generalized
+                         eigenvalue problems.
+      givens          -- Givens rotation.
+      is_square       -- Check to see if a matrix is square.
+      qzhess          -- QZ decomposition of the matrix pencil (a - lambda b).
+      qzval           -- Generalized eigenvalues for real matrices.
+      syl             -- Sylvester equation solver.
+
+    control systems:
+
+      is_symmetric    -- Check to see if a matrix is symmetric.
+      abcddim         -- Check dimensions of linear dynamic system [A,B,C,D].
+      is_controllable -- Check to see if [A,B,C,D] is controllable.
+      is_observable   -- Check to see if [A,B,C,D] is observable.
+      are             -- Solve algebraic Ricatti equation.
+      dare            -- Solve discrete-time algebraic Ricatti equation.
+      lqe             -- Kalman filter design for continuous linear system.
+      lqr             -- Linear Quadratic Regulator design.
+      lyap            -- Solve Lyapunov equation.
+      dlyap           -- Solve discrete Lyapunov equation.
+      tzero           -- Compute the transmission zeros of [A,B,C,D].
+
+Summary of changes for version 0.74 (1993-07-20):
+------------------------------------------------
+
+  * Formal parameters to functions are now always considered to be
+    local variables, so things like
+
+      global x = 0
+      global y = 0
+      function y = f (x) x = 1; y = x; end
+      f (x)
+
+    result in the function returning 1, with the global values of x
+    and y unchanged.
+
+  * Multiple assignment expressions are now allowed to take indices,
+    so things like
+
+      octave:13> [a([1,2],[3,4]), b([5,6],[7,8])] = lu ([1,2;3,4])
+
+    will work correctly.
+
+Summary of changes for version 0.73 (1993-07-10):
+------------------------------------------------
+
+  * Saving and loading global variables works correctly now.
+
+  * The save command no longer saves built-in variables.
+
+  * Global variables are more reliable.
+
+  * Matrices may now have one or both dimensions zero, so that
+    operations on empty matrices are now handled more consistently.
+
+    By default, dimensions of the empty matrix are now printed along
+    with the empty matrix symbol, `[]'.  For example:
+
+      octave:13> zeros (3, 0)
+      ans =
+
+      [](3x0)
+
+    The new variable `print_empty_dimensions' controls this behavior.
+
+    See also Carl de Boor, An Empty Exercise, SIGNUM, Volume 25,
+    pages 2--6, 1990, or C. N. Nett and W. M. Haddad, A
+    System-Theoretic Appropriate Realization of the Empty Matrix
+    Concept, IEEE Transactions on Automatic Control, Volume 38,
+    Number 5, May 1993.
+
+  * The right and left division operators `/' and `\' will now find a
+    minimum norm solution if the system is not square, or if the
+    coefficient matrix is singular.
+
+  * New functions:
+
+      hess   -- Hessenberg decomposition
+      schur  -- Ordered Schur factorization
+      perror -- print error messages corresponding to error codes
+                returned from the functions fsolve, npsol, and qpsol
+                (with others to possibly be added later).
+
+  * Octave now prints a warning if it finds anything other than
+    whitespace or comments after the final `end' or `endfunction'
+    statement.
+
+  * The bodies of functions, and the for, while, and if commands are
+    now allowed to be empty.
+
+  * Support for Gill and Murray's QPSOL has been added.  Like NPSOL,
+    QPSOL is not freely redistributable either, so you must obtain
+    your own copy to be able to use this feature.  More information
+    about where to find QPSOL and NPSOL are in the file README.NLP.
+
+Summary of changes for version 0.72 (1993-06-10):
+------------------------------------------------
+
+  * For numeric output, columns are now lined up on the decimal point.
+    (This requires libg++-2.3.1 or later to work correctly).
+
+  * If octave is running interactively and the output intended for the
+    screen is longer than one page and a pager is available, it is
+    sent to the pager through a pipe.  You may specify the program to
+    use as the pager by setting the variable PAGER.  PAGER may also
+    specify a command pipeline.
+
+  * Spaces are not always significant inside square brackets now, so
+    commands like
+
+      [ linspace (1, 2) ]
+
+    will work.  However, some possible sources of confusion remain
+    because Octave tries (possibly too hard) to determine exactly what
+    operation is intended from the context surrounding an operator.
+    For example:
+
+    -- In the command
+
+         [ 1 - 1 ]
+
+       the `-' is treated as a binary operator and the result is the
+       scalar 0, but in the command
+
+         [ 1 -1 ]
+
+       the `-' is treated as a unary operator and the result is the
+       vector [ 1 -1 ].
+
+    -- In the command
+
+         a = 1; [ 1 a' ]
+
+       the single quote character `'' is treated as a transpose operator
+       and the result is the vector [ 1 1 ], but in the command
+
+         a = 1; [ 1 a ' ]
+
+       an error message indicating an unterminated string constant is
+       printed.
+
+  * Assignments are just expressions now, so they are valid anywhere
+    other expressions are.  This means that things like
+
+      if (a = n < m) ... endif
+
+    are valid.  This is parsed as:  compare `n < m', assign the result
+    to the variable `a', and use it as the test expression in the if
+    statement.
+
+    To help avoid errors where `=' has been used but `==' was
+    intended, Octave issues a warning suggesting parenthesis around
+    assignments used as truth values.  You can suppress this warning
+    by adding parenthesis, or by setting the value of the new built-in
+    variable `warn_assign_as_truth_value' to 'false' (the default
+    value is 'true').
+
+    This is also true for multiple assignments, so expressions like
+
+      [a, b, c] = [u, s, v] = expression
+
+    are now possible.  If the expression is a function, nargout is set
+    to the number of arguments for the right-most assignment.  The
+    other assignments need not contain the same number of elements.
+    Extra left hand side variables in an assignment become undefined.
+
+  * The default line style for plots is now `lines' instead of
+    `points'.  To change it, use the `set data style STYLE' command.
+
+  * New file handling and I/O functions:
+
+      fopen    -- open a file for reading or writing
+      fclose   -- close a file
+      fflush   -- flush output to a file
+      fgets    -- read characters from a file
+      frewind  -- set file position to the beginning of a file
+      fseek    -- set file position
+      ftell    -- tell file position
+      freport  -- print a report for all open files
+      fscanf   -- read from a file
+      sscanf   -- read from a string
+      scanf    -- read from the standard input
+
+  * New built-in variables for file and I/O functions:
+
+      stdin    -- file number corresponding to the standard input stream.
+      stdout   -- file number corresponding to the standard output stream.
+      stderr   -- file number corresponding to the standard error stream.
+
+    The following may be used as the final (optional) argument for
+    fseek:
+
+      SEEK_SET -- set position relative to the beginning of the file.
+      SEEK_CUR -- set position relative to the current position.
+      SEEK_END -- set position relative to the end of the file.
+
+  * New function: setstr -- convert vectors or scalars to strings
+    (doesn't work for matrices yet).
+
+  * If possible, computer now prints the system type instead of
+    always printing `Hi Dave, I'm a HAL-9000'.
+
+  * Octave now properly saves and restores its internal state
+    correctly in more places.  Interrupting Octave while it is
+    executing a script file no longer causes it to exit.
+
+  * Octave now does tilde expansion on each element of the LOADPATH.
+
+  * A number of memory leaks have been plugged.
+
+  * Dependencies for C++ source files are now generated automatically
+    by g++.
+
+  * There is a new command line option, -p PATH, that may be used to
+    set Octave's loadpath from the command line.  It will override any
+    value of OCTAVE_PATH found in the environment, but not any
+    LOADPATH="path" commands found in the system or user startup files.
+
+  * It is now possible to override Octave's default idea of the
+    location of the system-wide startup file (usually stored in
+    $(prefix)/lib/octave/octaverc) using the environment variable
+    OCTAVE_HOME.  If OCTAVE_HOME has a value, Octave will look for
+    octaverc and its M-files in the directory $OCTAVE_HOME/lib/octave.
+
+    This allows people who are using binary distributions (as is
+    common with systems like Linux) to install the real octave binary
+    in any directory (using a name like octave.bin) and then install
+    a simple script like this
+
+      #!/bin/sh
+      OCTAVE_HOME=/foo/bar/baz
+      export OCTAVE_HOME
+      exec octave.bin
+
+    to be invoked as octave.
+
+
+Summary of changes for version 0.71 (1993-04-15):
+------------------------------------------------
+
+  * Much improved plotting facility.  With this release, Octave does
+    not require a specially modified version of gnuplot, so gnuplot
+    sources are no longer distributed with Octave.  For a more
+    detailed description of the new plotting features, see the file
+    PLOTTING.
+
+  * New plotting commands:
+
+      plot            -- 2D plots
+      semilogx        -- 2D semilog plot with logscale on the x axis
+      semilogy        -- 2D semilog plot with logscale on the y axis
+      loglog          -- 2D log-log plot
+      mesh            -- 3D mesh plot
+      meshdom         -- create matrices for 3D plotting from two vectors
+      contour         -- contour plots of 3D data
+      bar             -- create bar graphs
+      stairs          -- create stairstep plots
+      polar           -- 2D plots from theta-R data
+      grid            -- turn plot grid lines on or off
+      xlabel, ylabel  -- place labels on the x and y axes of 2D plots
+      sombrero        -- demonstrate 3D plotting
+      gplot           -- 2D plot command with gnuplot-like syntax
+      gsplot          -- 3D plot command with gnuplot-like syntax
+      set             -- set plot options with gnuplot syntax
+      show            -- show plot options with gnuplot syntax
+      closeplot       -- close stream to gnuplot process
+      purge_tmp_files -- delete temporary files created by plot command
+
+  * Other new commands:
+
+      ls, dir         -- print a directory listing
+      shell_cmd       -- execute shell commands
+      keyboard        -- get input from keyboard, useful for debugging
+      menu            -- display a menu of options and ask for input
+      fft             -- fast fourier transform
+      ifft            -- inverse fast fourier transform
+
+  * Strings may be enclosed in either single or double quote
+    characters.  Double quote characters are not special within single
+    quote strings, and single quotes are not special within double
+    quote strings.
+
+  * Command name completion now works for M-file names too.
+
+  * Better help and usage messages for many functions.
+
+  * Help is now available for functions defined in M-files.  The first
+    block of comments is taken as the text of the help message.
+
+  * Numerous changes in preparation to support dynamic loading of
+    object files with dld.
+
+  * Bug fixes to make solving DAEs with dassl actually work.
+
+  * The command `save file' now saves all variables in the named file.
+
+  * If do_fortran_indexing is 'true', indexing a scalar with
+    [1,1,1,...] (n times) replicates its value n times.  The
+    orientation of the resulting vector depends on the value of
+    prefer_column_vectors.
+
+  * Things like [[1,2][3,4]] no longer cause core dumps, and invalid
+    input like [1,2;3,4,[5,6]] now produces a diagnostic message.
+
+  * The cd, save, and load commands now do tilde expansion.
+
+  * It's now possible to clear global variables and functions by name.
+
+  * Use of clear inside functions is now a parse error.
+
+Summary of changes for version 0.70 (1993-03-08):
+------------------------------------------------
+
+  * Better parse error diagnostics.  For interactive input, you get
+    messages like
+
+      octave:1> a = 3 + * 4;
+
+      parse error:
+
+          a = 3 + * 4;
+                  ^
+
+    and for script files, the message includes the file name and input
+    line number:
+
+      octave:1> foo
+
+      parse error near line 4 of file foo.m:
+
+          a = 3 + * 4;
+                  ^
+
+  * New built-in variable PS2 which is used as the secondary prompt.
+    The default value is '> '.
+
+  * New file, octave-mode.el, for editing Octave code with GNU Emacs.
+    This is a modified version of Matthew R. Wette's matlab-mode.el.
+
+  * Better support for missing math functions.
+
+  * User preferences are now cached in a global struct so we don't
+    have to do a symbol table lookup each time we need to know what
+    they are.  This should mean slightly improved performance for
+    evaluating expressions.
+
+Summary of changes for version 0.69 (1993-02-23):
+------------------------------------------------
+
+  * Multiple assignments are now possible, so statements like
+
+      a = b = c = 3;
+      a = b = c = [1,2;3,4];
+
+    or
+
+      c = (a = (b = 2) * 3 + 4) * 5
+
+    are legal, as are things that have even more bizarre effects, like
+
+      a(4:6,4:6) = b(2:3,2:3) = [1,2;3,4];
+
+    (try it).
+
+  * Improved parsing of strings (but they still don't work as matrix
+    elements).
+
+  * An M-file may now either define a function or be a list of
+    commands to execute.
+
+  * Better detection and conditional compilation of IEEE functions
+    isinf, finite, and isnan.
+
+  * Replacements for acosh, asinh, atanh, and gamma from the BSD math
+    library for those systems that don't have them.
+
+Summary of changes for version 0.68 (1993-02-16):
+------------------------------------------------
+
+  * New functions:
+
+      eval  -- evaluate a string as a sequence of Octave commands.
+      input -- print a prompt and get user input.
+
+Summary of changes for version 0.67 (1993-02-09):
+------------------------------------------------
+
+  * New functions:
+
+      find -- return the indices of nonzero elements.
+
+  * Zero-one style indexing now works.  For example,
+
+      a = [1,2,3,4];
+      b = a([1,0,0,1])
+
+    sets b to the first and fourth elements of a.
+
+    Zero-one style indexing also works for indexing the left hand side
+    of an assignment.  For example,
+
+      a = rand (1,2;3,4);
+      a([0,1],:) = [-1,-2]
+
+    sets the second row of a to [-1 -2]
+
+    The behavior for the ambiguous case
+
+      a = [1,2,3,4];
+      b = a([1,1,1,1]);
+
+    is controlled by the new global variable `prefer_zero_one_indexing'.
+    If this variable is equal to 'true', b will be set to [1 2 3 4].
+    If it is false, b will be set to [1 1 1 1].  The default value is
+    'false'.
+
+  * Using the new global variable `propagate_empty_matrices', it is
+    possible to have unary and binary operations on empty matrices
+    return an empty matrix.  The default value of this variable is
+    'warn', so that empty matrices are propagated but you get a
+    warning.  Some functions, like eig and svd have also been changed
+    to handle this.
+
+  * Empty matrices can be used in conditionals, but they always
+    evaluate to `false'.  With propagate_empty_matrices = 'true', both
+    of the following expressions print 0:
+
+      if  [], 1, else 0, end
+      if ~[], 1, else 0, end
+
+  * Octave no longer converts input like `3.2 i' or `3 I' to complex
+    constants directly because that causes problems inside square
+    brackets, where spaces are important.  This abbreviated notation
+    *does* work if there isn't a space between the number and the i,
+    I, j, or J.
+
+Summary of changes for version 0.66 (1993-01-28):
+------------------------------------------------
+
+  * Logical unary not operator (~ or !) now works for complex.
+
+  * Left division works.
+
+  * Right and left element by element division should work correctly
+    now.
+
+  * Numbers like .3e+2 are no longer errors.
+
+  * Indexing a matrix with a complex value doesn't cause a core dump.
+
+  * The min and max functions should work correctly for two arguments.
+
+  * Improved (I hope!) configuration checks.
+
+  * Octave is now installed as octave-M.N, where M and N are version
+    numbers, and octave is a link to that file.  This makes it
+    possible to have more than one version of the interpreter installed.
+
+Summary of changes for version 0.63 (1993-01-14):
+------------------------------------------------
+
+  * The reshape function works again.
+
+  * Octave now converts input like `3.2i' or `3 I' or `2.3e5 j' to be
+    complex constants directly, rather than requiring an expression
+    like `3.3 * i' to be evaluated.
+
+Summary of changes for version 0.61 (1993-01-10):
+------------------------------------------------
+
+  * Octave has been successfully compiled using gcc 2.3.3 and libg++ 2.3.
+    on a 486 system running Linux.
+
+  * The win_texas_lotto function is now called texas_lotto (it's a
+    script file, and win_texas_lotto.m is too long for some Linux and
+    System V systems).
+
+Summary of changes for version 0.57:
+------------------------------------
+
+  * The C-like formatted print functions printf, fprintf, and sprintf
+    finally work.
+
+Summary of changes for version 0.56:
+------------------------------------
+
+  * By default, octave prints a short disclaimer when it starts.
+    (You can suppress it by invoking octave with -q).
+
+  * You can keep octave from reading your ~/.octaverc and .octaverc
+    files by invoking it with -f.
+
+  * When returning two values, eig now returns [v, d] instead of
+    [lambda, v], where d is a diagonal matrix made from lambda.
+
+  * The win_texas_lotto function now produces a sorted list.
+
+  * New functions:
+
+      expm -- matrix exponential.
+      logm -- matrix logarithm.
+
+Summary of changes for version 0.55:
+------------------------------------
+
+  * The following (C-style) backslash escape sequences work in quoted
+    strings (useful(?) with printf()):
+
+      \a  bell         \r  carriage return
+      \b  backspace    \t  horizontal tab
+      \f  formfeed     \v  vertical tab
+      \n  newline      \\  backslash
+
+  * Use of `...' at the end of a line will allow a statement to
+    continue over more than one line.
+
+  * The names `inf' and `nan' are now aliases for `Inf' and `NaN',
+    respectively.
+
+  * New functions:
+
+      casesen -- print a warning if the luser tries to turn off case
+                 sensitivity.
+      median  -- find median value.
+      norm    -- compute the norm of a matrix.
+      sort    -- sort columns.
+
+  * New variable, `silent_functions'.  If silent_functions == 'true',
+    the results of expressions are not printed even if they are not
+    followed by a semicolon.  The disp() and printf() functions still
+    result in output.  The default value for this variable is 'false'.
+
+  * New variable `return_last_value_computed'.  If it is 'true',
+    functions defined in script files return the last value computed
+    if a return value has not been explicitly declared.  The default
+    value for this variable is 'false'.
+
+Summary of changes for version 0.52:
+------------------------------------
+
+  * Name completion works for function and variable names currently in
+    the symbol tables.  Coming soon: completion for names of functions
+    defined in script files but not yet compiled.
+
+  * The initial value of do_fortran_indexing is now false, and the
+    initial value of prefer_column_vectors is now true.  Swap the
+    values of these variables if you want behavior that is more like
+    Matlab.
+
+  * All script files check the number of input arguments before doing
+    much real work.
+
+  * The identifiers `i' and `j' are now also names for sqrt(-1).
+    These symbols may be used for other purposes, but their original
+    definition will reappear if they are cleared.
+
+  * The symbol tables are now implemented with hash tables for faster
+    searching.
+
+  * A small amount of help is now available for most built-in
+    operators, keywords and functions.  Coming soon: help for script
+    files.
+
+  * Without any arguments, the help command now lists all known
+    built-in operators, keywords and functions.
+
+  * Generic parse errors are now signalled by `Eh, what's up doc?',
+    which is closer to what Bugs actually says.
+
+  * The who command now only prints variable names by default.
+    Use the -fcn (or -fcns, or -functions) switch to print the names of
+    built-in or currently compiled functions.
+
+Summary of changes for version 0.51:
+------------------------------------
+
+  * Major overhaul of array indexing.
+
+  * The colloc function actually works now.
+
+Summary of changes for version 0.50:
+------------------------------------
+
+  * The lsode and dassl functions now return the states only,
+    instead of the time and the states, so you must keep track of
+    the corresponding times (this is easy though, because you have
+    to specify a vector of desired output times anyway).
+
+  * Solution of NLPs with NPSOL now works on the SPARC.
+
+  * New keywords `endif', `endfor', `endfunction', `endif', and
+    `endwhile', which allow for better diagnostics.  The `end' keyword
+    is still recognized.  All script files have been changed to use
+    these new keywords in place of `end'.
+
+  * It is now possible to uninstall Octave by doing a `make uninstall'
+    in the top level directory.
+
+  * The Makefiles are much closer to conforming with GNU coding standards.
+
+  * New functions:
+
+      win_texas_lotto  -- produce six unique random numbers between 1 and 50.
+      quad             -- numerical integration.
+      lu               -- LU factorization
+      qr               -- QR factorization
+      dassl            -- Solution of DAEs using DASSL.
+
+  * New files:
+
+      THANKS -- A list of people and organizations who have supported
+                the development of Octave.
+
+      NEWS   -- This file, listing recent changes.
+
+  * Help is now available at the gnuplot prompt.
--- a/etc/NEWS.1.md	Tue Dec 28 18:22:40 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1602 +0,0 @@
-Summary of changes for version 1.1.1 (1995-02-23):
--------------------------------------------------
-
-  * New built-in variables, default_return_value and
-    define_all_return_values.
-
-    If define_all_return_values is set to "false", Octave does not do
-    anything special for return values that are left undefined, and
-    you will get an error message if you try to use them.  For
-    example, if the function
-
-      function [x, y] = f ()
-        y = 1;
-      endfunction
-
-    is called as
-
-      octave:13> [a, b] = f ()
-
-    Octave will print an error message for the attempt to assign an
-    undefined value to `a'.
-
-    This is incompatible with Matlab, which will define the return
-    variable `x' to be the empty matrix.  To get the Matlab-like
-    behavior, you can set the variable define_all_return_values to
-    "true" (the default is "false") and default_return_value to `[]'
-    (the default).  Then, any return values that remain undefined when
-    the function returns will be initialized to `[]'.
-
-    If the function is called without explicitly asking for an output,
-    it will succeed.  This behavior is compatible and unchanged from
-    previous versions of Octave.
-
-  * New built-in variable suppress_verbose_help_message.  If set to
-    "true", Octave will not add additional help information to the end
-    of the output from the help command and usage messages for
-    built-in commands.  The default value is "false".
-
-  * New built-in variable PS4 is used as the prefix of echoed input
-    (enabled with the --echo-input (-x) option).
-
-  * The function size() now accepts an optional second argument.
-
-  * Output from `save - ...' now goes through the pager.
-
-  * The break statement may also be used to exit a function, for
-    compatibility with Matlab.
-
-  * The directory tree for installing Octave is now closer to
-    conforming with the current GNU standards.
-
-  * More bug fixes.
-
-Summary of changes for version 1.1.0 (1995-01-12):
--------------------------------------------------
-
-  * Octave now requires g++ 2.6.3 or later.  This change is necessary
-    to make template instantiations cleaner, and to avoid having to
-    have special cases in the code for earlier versions of gcc.
-
-  * A new data structure type has been added.  The implementation uses
-    an associative array with indices limited to strings, but the
-    syntax is more like C-style structures.  here are some examples of
-    using it.
-
-    Elements of structures can be of any type, including structures:
-
-      octave:1> x.a = 1;
-      octave:2> x.b = [1, 2; 3, 4];
-      octave:3> x.c = "string";
-      octave:4> x
-      x =
-
-      <structure: a b c>
-
-      octave:5> x.a
-      x.a = 1
-      octave:6> x.b
-      x.b =
-
-        1  2
-        3  4
-
-      octave:7> x.c
-      x.c = string
-      octave:8> x.b.d = 3
-      x.b.d = 3
-      octave:9> x.b
-      x.b =
-
-      <structure: d>
-
-      octave:10> x.b.d
-      x.b.d = 3
-
-    Functions can return structures:
-
-      octave:1> a = rand (3) + rand (3) * I;
-      octave:2> function y = f (x)
-      > y.re = real (x);
-      > y.im = imag (x);
-      > endfunction
-      octave:3> f (a)
-      ans =
-
-      <structure: im re>
-
-      octave:4> ans.im
-      ans.im =
-
-        0.093411  0.229690  0.627585
-        0.415128  0.221706  0.850341
-        0.894990  0.343265  0.384018
-
-      octave:5> ans.re
-      ans.re =
-
-        0.56234  0.14797  0.26416
-        0.72120  0.62691  0.20910
-        0.89211  0.25175  0.21081
-
-    Return lists can include structure elements:
-
-      octave:1> [x.u, x.s, x.v] = svd ([1, 2; 3, 4])
-      x.u =
-
-        -0.40455  -0.91451
-        -0.91451   0.40455
-
-      x.s =
-
-        5.46499  0.00000
-        0.00000  0.36597
-
-      x.v =
-
-        -0.57605   0.81742
-        -0.81742  -0.57605
-
-      octave:8> x
-      x =
-
-      <structure: s u v>
-
-    This feature should be considered experimental, but it seems to
-    work OK.  Suggestions for ways to improve it are welcome.
-
-  * Octave now supports a limited form of exception handling modeled
-    after the unwind-protect form of Lisp:
-
-      unwind_protect
-        BODY
-      unwind_protect_cleanup
-        CLEANUP
-      end_unwind_protect
-
-    Where BODY and CLEANUP are both optional and may contain any
-    Octave expressions or commands.  The statements in CLEANUP are
-    guaranteed to be executed regardless of how control exits BODY.
-
-    This is useful to protect temporary changes to global variables
-    from possible errors.  For example, the following code will always
-    restore the original value of the built-in variable
-    do_fortran_indexing even if an error occurs while performing the
-    indexing operation.
-
-      save_do_fortran_indexing = do_fortran_indexing;
-      unwind_protect
-        do_fortran_indexing = "true";
-        elt = a (idx)
-      unwind_protect_cleanup
-        do_fortran_indexing = save_do_fortran_indexing;
-      end_unwind_protect
-
-    Without unwind_protect, the value of do_fortran_indexing would not
-    be restored if an error occurs while performing the indexing
-    operation because evaluation would stop at the point of the error
-    and the statement to restore the value would not be executed.
-
-  * Recursive directory searching has been implemented using Karl
-    Berry's kpathsea library.  Directories below path elements that
-    end in // are searched recursively for .m files.
-
-  * Octave now waits for additional input when a pair of parentheses
-    is `open' instead of giving an error.  This allows one to write
-    statements like this
-
-      if (big_long_variable_name == other_long_variable_name
-          || not_so_short_variable_name > 4
-          && y > x)
-        some (code, here);
-
-    without having to clutter up the if statement with continuation
-    characters.
-
-  * Continuation lines are now allowed in string constants and are
-    handled correctly inside matrix constants.
-
-  * Both `...{whitespace}\n' and `\{whitespace}\n' can be used to
-    introduce continuation lines, where {whitespace} may include
-    spaces, tabs and comments.
-
-  * The script directory has been split up by topic.
-
-  * Dynamic linking mostly works with dld.  The following limitations
-    are known problems:
-
-    -- Clearing dynamically linked functions doesn't work.
-
-    -- Dynamic linking only works with dld, which has not been ported
-       to very many systems yet.
-
-    -- Configuring with --enable-lite-kernel seems to mostly work to
-       make nonessential built-in functions dynamically loaded, but
-       there also seem to be some problems.  For example, fsolve seems
-       to always return info == 3.  This is difficult to debug since
-       GDB doesn't appear to allow breakpoints to be set inside
-       dynamically loaded functions.
-
-    -- Octave uses a lot of memory if the dynamically linked functions
-       are compiled with -g.  This appears to be a limitation with
-       dld, and can be avoided by not using -g to compile functions
-       that will be linked dynamically.
-
-  * fft2 and ifft2 are now built-in functions.
-
-  * The `&&' and `||' logical operators are now evaluated in a
-    short-circuit fashion and work differently than the element by
-    element operators `&' and `|'.  See the Octave manual for more
-    details.
-
-  * Expressions like 1./m are now parsed as 1 ./ m, not 1. / m.
-
-  * The replot command now takes the same arguments as gplot or
-    gsplot (except ranges, which cannot be respecified with replot
-    (yet)) so you can add additional lines to existing plots.
-
-  * The hold command has been implemented.
-
-  * New function `clearplot' clears the plot window.  The name `clg'
-    is aliased to `clearplot' for compatibility with Matlab.
-
-  * The commands `gplot clear' and `gsplot clear' are equivalent to
-    `clearplot'.  (Previously, `gplot clear' would evaluate `clear' as
-    an ordinary expression and clear all the visible variables.)
-
-  * The Matlab-style plotting commands have been improved.  They now
-    accept line-style arguments, multiple x-y pairs, and other plot
-    option flags.  For example,
-
-      plot (x, y, "@12", x, y2, x, y3, "4", x, y4, "+")
-
-    results in a plot with
-
-      y  plotted with points of type 2 ("+") and color 1 (red).
-      y2 plotted with lines.
-      y3 plotted with lines of color 4.
-      y4 plotted with points which are "+"s.
-
-    the help message for `plot' and `plot_opt' provide full
-    descriptions of the options.
-
-  * NaN is now dropped from plot data, and Inf is converted to a
-    very large value before calling gnuplot.
-
-  * Improved load and save commands:
-
-    -- The save and load commands can now read and write a new binary
-       file format.  Conversion to and from IEEE big and little endian
-       formats is handled automatically.  Conversion for other formats
-       has not yet been implemented.
-
-    -- The load command can now read Matlab .mat files, though it is
-       not yet able to read sparse matrices or handle conversion for
-       all data formats.
-
-    -- The save command can write Matlab .mat files.
-
-    -- The load command automatically determines the save format
-       (binary, ascii, or Matlab binary).
-
-    -- The default format for the save command is taken from the
-       built-in variable `default_save_format'.
-
-    -- The save and load commands now both accept a list of globbing
-       patterns so you can easily load a list of variables from a
-       file.
-
-    -- The load command now accepts the option -list, for listing the
-       variable names without actually loading the data.  With
-       -verbose, it prints a long listing.
-
-    -- The load command now accepts the option -float-binary, for
-       saving floating point data in binary files in single precision.
-
-  * who and whos now accept a list of globbing patterns so you can
-    limit the lists of variables and functions to those that match a
-    given set of patterns.
-
-  * New functions for manipulating polynomials
-
-      compan     -- companion matrix corresponding to polynomial coefficients
-      conv       -- convolve two vectors
-      deconv     -- deconvolve two vectors
-      roots      -- find the roots of a polynomial
-      poly       -- characteristic polynomial of a matrix
-      polyderiv  -- differentiate a polynomial
-      polyinteg  -- integrate a polynomial
-      polyreduce -- reduce a polynomial to minimum number of terms
-      polyval    -- evaluate a polynomial at a point
-      polyvalm   -- evaluate a polynomial in the matrix sense
-      residue    -- partial fraction expansion corresponding to the ratio
-                    of two polynomials
-
-  * New functions for manipulating sets
-
-      create_set   -- create a set of unique values
-      complement   -- find the complement of two sets
-      intersection -- find the intersection of two sets
-      union        -- find the union of two sets
-
-  * New elementary functions:
-
-      acot   acoth   acsc   acsch
-      asec   asech   cot    coth
-      csc    csch    log2   sec
-      sech
-
-  * New special functions:
-
-      beta   -- beta function
-      betai  -- incomplete beta function
-      gammai -- incomplete gamma function
-
-  * New image processing functions:
-
-      colormap  -- set and return current colormap
-      gray      -- set a gray colormap
-      gray2ind  -- image format conversion
-      image     -- display an image
-      imagesc   -- scale and display an image
-      imshow    -- display images
-      ind2gray  -- image format conversion
-      ind2rgb   -- image format conversion
-      loadimage -- load an image from a file
-      ntsc2rgb  -- image format conversion
-      ocean     -- set a color colormap
-      rgb2ind   -- image format conversion
-      rgb2ntsc  -- image format conversion
-      saveimage -- save an image to a file
-
-  * New time and date functions:
-
-      tic          -- set wall-clock timer
-      toc          -- get elapsed wall-clock time, since timer last set
-      etime        -- another way to get elapsed wall-clock time
-      cputime      -- get CPU time used since Octave started
-      is_leap_year -- is the given year a leap year?
-
-  * Other new functions:
-
-      bug_report -- submit a bug report to the bug-octave mailing list
-
-      toascii -- convert a string to a matrix of ASCII character codes
-
-      octave_tmp_file -- generate a unique temporary file name
-
-      undo_string_escapes -- replace special characters in a string by
-                             their backslash forms
-
-      is_struct -- determine whether something is a structure data type
-
-      feof   -- check EOF condition for a specified file
-      ferror -- check error state for a specified file
-      fread  -- read binary data from a file
-      fwrite -- write binary data to a file
-
-      file_in_path -- check to see if named file exists in given path
-
-      kbhit  -- get a single character from the terminal
-
-      axis   -- change plot ranges
-      hist   -- plot histograms
-
-      diary  -- save commands and output to a file
-
-      type   -- show the definition of a function
-      which  -- print the type of an identifier or the location of a
-                function file
-
-      isieee  -- Returns 1 if host uses IEEE floating point
-      realmax -- Returns largest floating point number
-      realmin -- Returns smallest floating point number
-
-      gcd     -- greatest common divisor
-      lcm     -- least common multiple
-
-      null    -- orthonormal basis of the null space of a matrix
-      orth    -- orthonormal basis of the range space of a matrix
-
-      fft2    -- two-dimensional fast fourier transform
-      ifft2   -- two-dimensional inverse fast fourier transform
-      filter  -- digital filter
-      fftfilt -- filter using fft
-      fftconv -- convolve to vectors using fft
-      sinc    -- returns sin(pi*x)/(pi*x)
-      freqz   -- compute the frequency response of a filter
-
-  * The meaning of nargin (== args.length ()) in built-in functions
-    has been changed to match the meaning of nargin in user-defined
-    functions.
-
-  * Variable return lists.  Octave now has a real mechanism for
-    handling functions that return an unspecified number of values,
-    so it is no longer necessary to place an upper bound on the number
-    of outputs that a function can produce.
-
-    Here is an example of a function that uses the new syntax to
-    produce n values:
-
-      function [...] = foo (n)
-        for i = 1:n
-          vr_val (i * x);
-        endfor
-      endfunction
-
-  * New keyword, all_va_args, that allows the entire list of va_args
-    to be passed to another function.  For example, given the functions
-
-      function f (...)
-        while (nargin--)
-          disp (va_arg ())
-        endwhile
-      endfunction
-      function g (...)
-        f ("begin", all_va_args, "end")
-      endfunction
-
-    the statement
-
-      g (1, 2, 3)
-
-    prints
-
-      begin
-      1
-      2
-      3
-      end
-
-    all_va_args may be used more than once, but can only be used
-    within functions that take a variable number of arguments.
-
-  * If given a second argument, svd now returns an economy-sized
-    decomposition, eliminating the unnecessary rows or columns of U or
-    V.
-
-  * The max and min functions correctly handle complex matrices in
-    which some columns contain real values only.
-
-  * The find function now handles 2 and 3 output arguments.
-
-  * The qr function now allows computation of QR with pivoting.
-
-  * hilb() is much faster for large matrices.
-
-  * computer() is now a built-in function.
-
-  * pinv() is now a built-in function.
-
-  * The output from the history command now goes through the pager.
-
-  * If a function is called without assigning the result, nargout is
-    now correctly set to 0.
-
-  * It is now possible to write functions that only set some return
-    values.  For example, calling the function
-
-      function [x, y, z] = f () x = 1; z = 2; endfunction
-
-    as
-
-      [a, b, c] = f ()
-
-    produces:
-
-      a = 1
-
-      b = [](0x0)
-
-      c = 2
-
-  * The shell_cmd function has been renamed to system (the name
-    shell_cmd remains for compatibility).  It now returns [output, status].
-
-  * New built-in variable `OCTAVE_VERSION'.  Also a new function,
-    version, for compatibility with Matlab.
-
-  * New built-in variable `automatic_replot'.  If it is "true", Octave
-    will automatically send a replot command to gnuplot each time the
-    plot changes.  Since this is fairly inefficient, the default value
-    is "false".
-
-  * New built-in variable `whitespace_in_literal_matrix' allows some
-    control over how Octave decides to convert spaces to commas in
-    matrix expressions like `[m (1)]'.
-
-    If the value of `whitespace_in_literal_matrix' is "ignore", Octave
-    will never insert a comma or a semicolon in a literal matrix list.
-    For example, the expression `[1 2]' will result in an error
-    instead of being treated the same as `[1, 2]', and the expression
-
-      [ 1, 2,
-        3, 4 ]
-
-    will result in the vector [1 2 3 4] instead of a matrix.
-
-    If the value of `whitespace_in_literal_matrix' is "traditional",
-    Octave will convert spaces to a comma between identifiers and `('.
-    For example, given the matrix
-
-      m = [3 2]
-
-    the expression
-
-      [m (1)]
-
-    will be parsed as
-
-      [m, (1)]
-
-    and will result in
-
-      [3 2 1]
-
-    and the expression
-
-      [ 1, 2,
-        3, 4 ]
-
-    will result in a matrix because the newline character is converted
-    to a semicolon (row separator) even though there is a comma at the
-    end of the first line (trailing commas or semicolons are ignored).
-    This is apparently how Matlab behaves.
-
-    Any other value for `whitespace_in_literal_matrix' results in
-    behavior that is the same as traditional, except that Octave does
-    not convert spaces to a comma between identifiers and `('.
-    For example, the expression
-
-      [m (1)]
-
-    will produce 3.  This is the way Octave has always behaved.
-
-  * Line numbers in error messages for functions defined in files and
-    for script files now correspond to the file line number, not the
-    number of lines after the function keyword appeared.
-
-  * Octave now extracts help from script files.  The comments must
-    come before any other statements in the file.
-
-  * In function files, the first block of comments in the file will
-    now be interpreted as the help text if it doesn't look like the
-    Octave copyright notice.  Otherwise, Octave extracts the first set
-    of comments after the function keyword.
-
-  * The function clock is more accurate on systems that have the
-    gettimeofday() function.
-
-  * The standard output stream is now automatically flushed before
-    reading from stdin with any of the *scanf() functions.
-
-  * Expanded reference card.
-
-  * The Octave distribution now includes a frequently asked questions
-    file, with answers.  Better answers and more questions (with
-    answers!) are welcome.
-
-  * New option --verbose.  If Octave is invoked with --verbose and not
-    --silent, a message is printed if an octaverc file is read while
-    Octave is starting.
-
-  * An improved configure script generated by Autoconf 2.0.
-
-  * Lots of bug fixes.
-
-Summary of changes for version 1.0 (1994-02-17):
------------------------------------------------
-
-  * C-style I/O functions now handle files referenced by name or by
-    number more consistently.
-
-Summary of changes for version 0.83 (1994-02-13):
-------------------------------------------------
-
-  * Loading global symbols should work now.
-
-  * Clearing the screen doesn't reprint the prompt unnecessarily.
-
-  * The operations <complex scalar> OP <real matrix> for OP == +, -,
-    *, or ./ no longer crash Octave.
-
-  * More portability and configuration fixes.
-
-Summary of changes for version 0.82 (1994-02-08):
-------------------------------------------------
-
-  * Octave now comes with a reference card.
-
-  * The manual has been improved, but more work remains to be done.
-
-  * The atanh function now works for complex arguments.
-
-  * The asin, acos, acosh, and atanh functions now work properly when
-    given real-valued arguments that produce complex results.
-
-  * SEEK_SET, SEEK_CUR, and SEEK_END are now constants.
-
-  * The `using' qualifier now works with gplot and gsplot when the
-    data to plot is coming directly from a file.
-
-  * The strcmp function now works correctly for empty strings.
-
-  * Eliminated bogus parse error for M-files that don't end with `end'
-    or `endfunction'.
-
-  * For empty matrices with one nonzero dimension, the +, -, .*, and
-    ./ operators now correctly preserve the dimension.
-
-  * Octave no longer crashes if you type ^D at the beginning of a line
-    in the middle of defining a loop or if statement.
-
-  * On AIX systems, Back off on indexing DiagArray via Proxy class to
-    avoid gcc (or possibly AIX assembler?) bug.
-
-  * Various other bug and portability fixes.
-
-Summary of changes for version 0.81 (1994-01-28):
-------------------------------------------------
-
-  * Octave no longer dumps core if you try to define a function in
-    your .octaverc file.
-
-  * Fixed bug in Array class that resulted in bogus off-diagonal
-    elements when computing eigenvalue and singular value
-    decompositions.
-
-  * Fixed bug that prevented lsode from working on the SPARCstation,
-    at least with some versions of Sun's f77.  This bug was introduced
-    in 0.80, when I changed LSODE to allow the user to abort the
-    integration from within the RHS function.
-
-  * Fixed bug that prevented global attribute of variables from being
-    saved with save(), and another that prevented load() from working
-    at all.
-
-Summary of changes for version 0.80 (1994-01-18):
-------------------------------------------------
-
-  * I have started working on a manual for the C++ classes.  At this
-    point, it is little more than a list of function names.  If you
-    would like to volunteer to help work on this, please contact
-    maintainers@octave.org.
-
-  * The patterns accepted by the save and clear commands now work like
-    file name globbing patterns instead of regular expressions.  I
-    apologize for any inconvenience this change may cause, but file
-    name globbing seems like a more reasonable style of pattern
-    matching for this purpose.
-
-  * It is now possible to specify tolerances and other optional inputs
-    for dassl, fsolve, lsode, npsol, qpsol, and quad.  For each of
-    these functions, there is a corresponding function X_options,
-    which takes a keyword and value arguments.  If invoked without any
-    arguments, the X_options functions print a list of possible
-    keywords and current values.  For example,
-
-      npsol_options ()
-
-    prints a list of possible options with values, and
-
-      npsol_options ("major print level", 10)
-
-    sets the major print level to 10.
-
-    The keyword match is not case sensitive, and the keywords may be
-    abbreviated to the shortest unique match.  For example,
-
-      npsol_options ("ma p", 10)
-
-    is equivalent to the statement shown above.
-
-  * The new built-in variable save_precision can be used to set the
-    number of digits preserved by the ASCII save command.
-
-  * Assignment of [] now works in most cases to allow you to delete
-    rows or columns of matrices and vectors.  For example, given a
-    4x5 matrix A, the assignment
-
-      A (3, :) = []
-
-    deletes the third row of A, and the assignment
-
-      A (:, 1:2:5) = []
-
-    deletes the first, third, and fifth columns.
-
-  * Variable argument lists.  Octave now has a real mechanism for
-    handling functions that take an unspecified number of arguments,
-    so it is no longer necessary to place an upper bound on the number
-    of optional arguments that a function can accept.
-
-    Here is an example of a function that uses the new syntax to print
-    a header followed by an unspecified number of values:
-
-      function foo (heading, ...)
-        disp (heading);
-        va_start ();
-        while (--nargin)
-          disp (va_arg ());
-        endwhile
-      endfunction
-
-    Note that the argument list must contain at least one named
-    argument (this restriction may eventually be removed), and the
-    ellipsis must appear as the last element of the argument list.
-
-    Calling va_start() positions an internal pointer to the first
-    unnamed argument and allows you to cycle through the arguments
-    more than once.  It is not necessary to call va_start() if you
-    do not plan to cycle through the arguments more than once.
-
-  * Recursive functions should work now.
-
-  * The environment variable OCTAVE_PATH is now handled in the same
-    way as TeX handles TEXINPUTS.  If the path starts with `:', the
-    standard path is prepended to the value obtained from the
-    environment.  If it ends with `:' the standard path is appended to
-    the value obtained from the environment.
-
-  * New functions, from Kurt Hornik (hornik@neuro.tuwien.ac.at) and
-    the Department of Probability Theory and Statistics TU Wien,
-    Austria:
-
-     corrcoef    -- corrcoef (X, Y) is the correlation between the i-th
-                    variable in X and the j-th variable in Y
-                    corrcoef (X) is corrcoef (X, X)
-     cov         -- cov (X, Y) is the covariance between the i-th
-                    variable in X and the j-th variable in Y
-                    cov (X) is cov (X, X)
-     gls         -- generalized least squares estimation
-     kurtosis    -- kurtosis(x) = N^(-1) std(x)^(-4) SUM_i (x(i)-mean(x))^4 - 3
-                    If x is a matrix, return the row vector containing
-                    the kurtosis of each column
-     mahalanobis -- returns Mahalanobis' D-square distance between the
-                    multivariate samples X and Y, which must have the
-                    same number of components (columns), but may have
-                    a different number of observations (rows)
-     ols         -- ordinary least squares estimation
-     pinv        -- returns the pseudoinverse of X; singular values
-                    less than tol are ignored
-     skewness    -- skewness (x) = N^(-1) std(x)^(-3) SUM_i (x(i)-mean(x))^3
-                    if x is a matrix, return the row vector containing
-                    the skewness of each column
-
-  * Errors in user-supplied functions called from dassl, fsolve,
-    lsode, npsol, and quad are handled more gracefully.
-
-  * Programming errors in the use of the C++ classes within Octave
-    should no longer cause Octave to abort.  Instead, Octave's error
-    handler function is called and execution continues as best as is
-    possible.  This should result in eventually returning control to
-    the top-level Octave prompt.  (It would be nice to have a real
-    exception handling mechanism...)
-
-  * A number of memory leaks have been eliminated.  Thanks to
-    Fong Kin Fui <fui@ee.nus.sg> for reporting them.
-
-  * The C++ matrix classes are now derived from a generic
-    template-based array class.
-
-  * The readline function operate-and-get-next (from bash) is now
-    available and bound to C-O by default.
-
-  * Octave now uses the version of readline currently distributed with
-    bash-1.13.  On some systems, interactive invocations of Octave
-    will now blink the cursor to show matching parens.
-
-  * By default, include files are now installed in
-    $prefix/include/octave instead of $prefix/include.
-
-  * Octave now uses a config.h file instead of putting all defines on
-    the compiler command line.
-
-Summary of changes for version 0.79 (1993-11-08):
-------------------------------------------------
-
-  * New control systems functions:
-
-     dgram -- Returns the discrete controllability and observability gramian.
-     dlqr  -- Discrete linear quadratic regulator design.
-     dlqe  -- Discrete linear quadratic estimator (Kalman Filter) design.
-     c2d   -- Convert continuous system description to discrete time
-              description assuming zero-order hold and given sample time.
-
-  * The max (min) functions can now return the index of the max (min)
-    value as a second return value.
-
-Summary of changes for version 0.78 (1993-11-05):
-------------------------------------------------
-
-  * Octave's handling of global variables has been completely
-    rewritten.  To access global variables inside a function, you must
-    now declare them to be global within the function body.  Likewise,
-    if you do not declare a variable as global at the command line,
-    you will not have access to it within a function, even if it is
-    declared global there.  For example, given the function
-
-      function f ()
-        global x = 1;
-        y = 2;
-      endfunction
-
-    the global variable `x' is not visible at the top level until the
-    command
-
-      octave:13> global x
-
-    has been evaluated, and the variable `y' remains local to the
-    function f() even if it is declared global at the top level.
-
-    Clearing a global variable at the top level will remove its global
-    scope and leave it undefined.  For example,
-
-      octave:1> function f ()   # Define a function that accesses
-      >  global x;              #   the global variable `x'.
-      >  x
-      > endfunction
-      octave:2> global x = 1    # Give the variable `x' a value.
-      octave:3> f ()            # Evaluating the function accesses the
-      x = 1                     #   global `x'.
-      octave:4> clear x         # Remove `x' from global scope, clear value.
-      octave:5> x = 2           # Define new local `x' at the top level
-      x = 2
-      octave:6> f               # The global `x' is no longer defined.
-      error: `x' undefined near line 1 column 25
-      error: evaluating expression near line 1, column 25
-      error: called from `f'
-      octave:7> x               # But the local one is.
-      x = 2
-
-  * The new function, `is_global (string)' returns 1 if the variable
-    named by string is globally visible.  Otherwise, returns 0.
-
-  * The implementation of `who' has changed.  It now accepts the
-    following options:
-
-      -b -builtins   -- display info for built-in variables and functions
-      -f -functions  -- display info for currently compiled functions
-      -v -variables  -- display info for user variables
-      -l -long       -- display long info
-
-    The long output looks like this:
-
-      octave:5> who -l
-
-      *** currently compiled functions:
-
-      prot  type               rows   cols  name
-      ====  ====               ====   ====  ====
-       wd   user function         -      -  f
-
-      *** local user variables:
-
-      prot  type               rows   cols  name
-      ====  ====               ====   ====  ====
-       wd   real scalar           1      1  y
-
-      *** globally visible user variables:
-
-      prot  type               rows   cols  name
-      ====  ====               ====   ====  ====
-       wd   complex matrix       13     13  x
-
-    where the first character of the `protection' field is `w' if the
-    symbol can be redefined, and `-' if it has read-only access.  The
-    second character may be `d' if the symbol can be deleted, or `-'
-    if the symbol cannot be cleared.
-
-  * The new built-in variable ignore_function_time_stamp can be used
-    to prevent Octave from calling stat() each time it looks up
-    functions defined in M-files.  If set to "system", Octave will not
-    automatically recompile M-files in subdirectories of
-    $OCTAVE_HOME/lib/VERSION if they have changed since they were last
-    compiled, but will recompile other M-files in the LOADPATH if they
-    change.  If set to "all", Octave will not recompile any M-files
-    unless their definitions are removed with clear.  For any other
-    value of ignore_function_time_stamp, Octave will always check to
-    see if functions defined in M-files need to recompiled.  The
-    default value of ignore_function_time_stamp is "system".
-
-  * The new built-in variable EDITOR can be used to specify the editor
-    for the edit_history command.  It is set to the value of the
-    environment variable EDITOR, or `vi' if EDITOR is not set, or is
-    empty.
-
-  * There is a new built-in variable, INFO_FILE, which is used as the
-    location of the info file.  Its initial value is
-    $OCTAVE_HOME/info/octave.info, so `help -i' should now work
-    provided that OCTAVE_HOME is set correctly, even if Octave is
-    installed in a directory different from that specified at compile
-    time.
-
-  * There is a new command line option, --info-file FILE, that may be
-    used to set Octave's idea of the location of the info file.  It
-    will override any value of OCTAVE_INFO_FILE found in the
-    environment, but not any INFO_FILE="filename" commands found in
-    the system or user startup files.
-
-  * Octave's Info reader will now recognize gzipped files that have
-    names ending in `.gz'.
-
-  * The save command now accepts regular expressions as arguments.
-    Note that these patterns are regular expressions, and do not work
-    like filename globbing.  For example, given the variables `a',
-    `aa', and `a1', the command `save a*' saves `a' and `aa' but not
-    `a1'.  To match all variables beginning with `a', you must use an
-    expression like `a.*' (match all sequences beginning with `a'
-    followed by zero or more characters).
-
-  * Line and column information is included in more error messages.
-
-Summary of changes for version 0.77 (1993-10-23):
-------------------------------------------------
-
-  * Improved help.  The command `help -i topic' now uses the GNU Info
-    browser to display help for the given topic directly from the
-    Texinfo documentation.
-
-  * New function: chol -- Cholesky factorization.
-
-Summary of changes for version 0.76 (1993-10-05):
-------------------------------------------------
-
-  * Better run-time error messages.  Many now include line and column
-    information indicating where the error occurred.  Octave will also
-    print a traceback for errors occurring inside functions. If you
-    find error messages that could use improvement, or errors that
-    Octave fails to catch, please send a bug report to
-    bug@octave.org.
-
-  * If gplot (or gsplot) is given a string to plot, and the string
-    does not name a file, Octave will pass the string along to gnuplot
-    directly.  This allows commands like
-
-      gplot "sin (x)" w l, data w p
-
-    to work (assuming that data is a variable containing a matrix of
-    values).
-
-  * Long options (--help, --version, etc.) are supported.
-
-Summary of changes for version 0.75 (1993-09-15):
-------------------------------------------------
-
-  * The documentation is much more complete, but still could use a lot
-    of work.
-
-  * The history function now prints line numbers by default.  The
-    command `history -q' will  omit them.
-
-  * The clear function now accepts regular expressions.
-
-  * If gplot (or gsplot) is given a string to plot, and the string
-    names a file, Octave attempts to plot the contents of the file.
-
-  * New functions:
-
-    history:
-
-      run_history  -- run commands from the history list.
-      edit_history -- edit commands from the history list with your
-                      favorite editor.
-
-    linear algebra:
-
-      balance         -- Balancing for algebraic and generalized
-                         eigenvalue problems.
-      givens          -- Givens rotation.
-      is_square       -- Check to see if a matrix is square.
-      qzhess          -- QZ decomposition of the matrix pencil (a - lambda b).
-      qzval           -- Generalized eigenvalues for real matrices.
-      syl             -- Sylvester equation solver.
-
-    control systems:
-
-      is_symmetric    -- Check to see if a matrix is symmetric.
-      abcddim         -- Check dimensions of linear dynamic system [A,B,C,D].
-      is_controllable -- Check to see if [A,B,C,D] is controllable.
-      is_observable   -- Check to see if [A,B,C,D] is observable.
-      are             -- Solve algebraic Ricatti equation.
-      dare            -- Solve discrete-time algebraic Ricatti equation.
-      lqe             -- Kalman filter design for continuous linear system.
-      lqr             -- Linear Quadratic Regulator design.
-      lyap            -- Solve Lyapunov equation.
-      dlyap           -- Solve discrete Lyapunov equation.
-      tzero           -- Compute the transmission zeros of [A,B,C,D].
-
-Summary of changes for version 0.74 (1993-07-20):
-------------------------------------------------
-
-  * Formal parameters to functions are now always considered to be
-    local variables, so things like
-
-      global x = 0
-      global y = 0
-      function y = f (x) x = 1; y = x; end
-      f (x)
-
-    result in the function returning 1, with the global values of x
-    and y unchanged.
-
-  * Multiple assignment expressions are now allowed to take indices,
-    so things like
-
-      octave:13> [a([1,2],[3,4]), b([5,6],[7,8])] = lu ([1,2;3,4])
-
-    will work correctly.
-
-Summary of changes for version 0.73 (1993-07-10):
-------------------------------------------------
-
-  * Saving and loading global variables works correctly now.
-
-  * The save command no longer saves built-in variables.
-
-  * Global variables are more reliable.
-
-  * Matrices may now have one or both dimensions zero, so that
-    operations on empty matrices are now handled more consistently.
-
-    By default, dimensions of the empty matrix are now printed along
-    with the empty matrix symbol, `[]'.  For example:
-
-      octave:13> zeros (3, 0)
-      ans =
-
-      [](3x0)
-
-    The new variable `print_empty_dimensions' controls this behavior.
-
-    See also Carl de Boor, An Empty Exercise, SIGNUM, Volume 25,
-    pages 2--6, 1990, or C. N. Nett and W. M. Haddad, A
-    System-Theoretic Appropriate Realization of the Empty Matrix
-    Concept, IEEE Transactions on Automatic Control, Volume 38,
-    Number 5, May 1993.
-
-  * The right and left division operators `/' and `\' will now find a
-    minimum norm solution if the system is not square, or if the
-    coefficient matrix is singular.
-
-  * New functions:
-
-      hess   -- Hessenberg decomposition
-      schur  -- Ordered Schur factorization
-      perror -- print error messages corresponding to error codes
-                returned from the functions fsolve, npsol, and qpsol
-                (with others to possibly be added later).
-
-  * Octave now prints a warning if it finds anything other than
-    whitespace or comments after the final `end' or `endfunction'
-    statement.
-
-  * The bodies of functions, and the for, while, and if commands are
-    now allowed to be empty.
-
-  * Support for Gill and Murray's QPSOL has been added.  Like NPSOL,
-    QPSOL is not freely redistributable either, so you must obtain
-    your own copy to be able to use this feature.  More information
-    about where to find QPSOL and NPSOL are in the file README.NLP.
-
-Summary of changes for version 0.72 (1993-06-10):
-------------------------------------------------
-
-  * For numeric output, columns are now lined up on the decimal point.
-    (This requires libg++-2.3.1 or later to work correctly).
-
-  * If octave is running interactively and the output intended for the
-    screen is longer than one page and a pager is available, it is
-    sent to the pager through a pipe.  You may specify the program to
-    use as the pager by setting the variable PAGER.  PAGER may also
-    specify a command pipeline.
-
-  * Spaces are not always significant inside square brackets now, so
-    commands like
-
-      [ linspace (1, 2) ]
-
-    will work.  However, some possible sources of confusion remain
-    because Octave tries (possibly too hard) to determine exactly what
-    operation is intended from the context surrounding an operator.
-    For example:
-
-    -- In the command
-
-         [ 1 - 1 ]
-
-       the `-' is treated as a binary operator and the result is the
-       scalar 0, but in the command
-
-         [ 1 -1 ]
-
-       the `-' is treated as a unary operator and the result is the
-       vector [ 1 -1 ].
-
-    -- In the command
-
-         a = 1; [ 1 a' ]
-
-       the single quote character `'' is treated as a transpose operator
-       and the result is the vector [ 1 1 ], but in the command
-
-         a = 1; [ 1 a ' ]
-
-       an error message indicating an unterminated string constant is
-       printed.
-
-  * Assignments are just expressions now, so they are valid anywhere
-    other expressions are.  This means that things like
-
-      if (a = n < m) ... endif
-
-    are valid.  This is parsed as:  compare `n < m', assign the result
-    to the variable `a', and use it as the test expression in the if
-    statement.
-
-    To help avoid errors where `=' has been used but `==' was
-    intended, Octave issues a warning suggesting parenthesis around
-    assignments used as truth values.  You can suppress this warning
-    by adding parenthesis, or by setting the value of the new built-in
-    variable `warn_assign_as_truth_value' to 'false' (the default
-    value is 'true').
-
-    This is also true for multiple assignments, so expressions like
-
-      [a, b, c] = [u, s, v] = expression
-
-    are now possible.  If the expression is a function, nargout is set
-    to the number of arguments for the right-most assignment.  The
-    other assignments need not contain the same number of elements.
-    Extra left hand side variables in an assignment become undefined.
-
-  * The default line style for plots is now `lines' instead of
-    `points'.  To change it, use the `set data style STYLE' command.
-
-  * New file handling and I/O functions:
-
-      fopen    -- open a file for reading or writing
-      fclose   -- close a file
-      fflush   -- flush output to a file
-      fgets    -- read characters from a file
-      frewind  -- set file position to the beginning of a file
-      fseek    -- set file position
-      ftell    -- tell file position
-      freport  -- print a report for all open files
-      fscanf   -- read from a file
-      sscanf   -- read from a string
-      scanf    -- read from the standard input
-
-  * New built-in variables for file and I/O functions:
-
-      stdin    -- file number corresponding to the standard input stream.
-      stdout   -- file number corresponding to the standard output stream.
-      stderr   -- file number corresponding to the standard error stream.
-
-    The following may be used as the final (optional) argument for
-    fseek:
-
-      SEEK_SET -- set position relative to the beginning of the file.
-      SEEK_CUR -- set position relative to the current position.
-      SEEK_END -- set position relative to the end of the file.
-
-  * New function: setstr -- convert vectors or scalars to strings
-    (doesn't work for matrices yet).
-
-  * If possible, computer now prints the system type instead of
-    always printing `Hi Dave, I'm a HAL-9000'.
-
-  * Octave now properly saves and restores its internal state
-    correctly in more places.  Interrupting Octave while it is
-    executing a script file no longer causes it to exit.
-
-  * Octave now does tilde expansion on each element of the LOADPATH.
-
-  * A number of memory leaks have been plugged.
-
-  * Dependencies for C++ source files are now generated automatically
-    by g++.
-
-  * There is a new command line option, -p PATH, that may be used to
-    set Octave's loadpath from the command line.  It will override any
-    value of OCTAVE_PATH found in the environment, but not any
-    LOADPATH="path" commands found in the system or user startup files.
-
-  * It is now possible to override Octave's default idea of the
-    location of the system-wide startup file (usually stored in
-    $(prefix)/lib/octave/octaverc) using the environment variable
-    OCTAVE_HOME.  If OCTAVE_HOME has a value, Octave will look for
-    octaverc and its M-files in the directory $OCTAVE_HOME/lib/octave.
-
-    This allows people who are using binary distributions (as is
-    common with systems like Linux) to install the real octave binary
-    in any directory (using a name like octave.bin) and then install
-    a simple script like this
-
-      #!/bin/sh
-      OCTAVE_HOME=/foo/bar/baz
-      export OCTAVE_HOME
-      exec octave.bin
-
-    to be invoked as octave.
-
-
-Summary of changes for version 0.71 (1993-04-15):
-------------------------------------------------
-
-  * Much improved plotting facility.  With this release, Octave does
-    not require a specially modified version of gnuplot, so gnuplot
-    sources are no longer distributed with Octave.  For a more
-    detailed description of the new plotting features, see the file
-    PLOTTING.
-
-  * New plotting commands:
-
-      plot            -- 2D plots
-      semilogx        -- 2D semilog plot with logscale on the x axis
-      semilogy        -- 2D semilog plot with logscale on the y axis
-      loglog          -- 2D log-log plot
-      mesh            -- 3D mesh plot
-      meshdom         -- create matrices for 3D plotting from two vectors
-      contour         -- contour plots of 3D data
-      bar             -- create bar graphs
-      stairs          -- create stairstep plots
-      polar           -- 2D plots from theta-R data
-      grid            -- turn plot grid lines on or off
-      xlabel, ylabel  -- place labels on the x and y axes of 2D plots
-      sombrero        -- demonstrate 3D plotting
-      gplot           -- 2D plot command with gnuplot-like syntax
-      gsplot          -- 3D plot command with gnuplot-like syntax
-      set             -- set plot options with gnuplot syntax
-      show            -- show plot options with gnuplot syntax
-      closeplot       -- close stream to gnuplot process
-      purge_tmp_files -- delete temporary files created by plot command
-
-  * Other new commands:
-
-      ls, dir         -- print a directory listing
-      shell_cmd       -- execute shell commands
-      keyboard        -- get input from keyboard, useful for debugging
-      menu            -- display a menu of options and ask for input
-      fft             -- fast fourier transform
-      ifft            -- inverse fast fourier transform
-
-  * Strings may be enclosed in either single or double quote
-    characters.  Double quote characters are not special within single
-    quote strings, and single quotes are not special within double
-    quote strings.
-
-  * Command name completion now works for M-file names too.
-
-  * Better help and usage messages for many functions.
-
-  * Help is now available for functions defined in M-files.  The first
-    block of comments is taken as the text of the help message.
-
-  * Numerous changes in preparation to support dynamic loading of
-    object files with dld.
-
-  * Bug fixes to make solving DAEs with dassl actually work.
-
-  * The command `save file' now saves all variables in the named file.
-
-  * If do_fortran_indexing is 'true', indexing a scalar with
-    [1,1,1,...] (n times) replicates its value n times.  The
-    orientation of the resulting vector depends on the value of
-    prefer_column_vectors.
-
-  * Things like [[1,2][3,4]] no longer cause core dumps, and invalid
-    input like [1,2;3,4,[5,6]] now produces a diagnostic message.
-
-  * The cd, save, and load commands now do tilde expansion.
-
-  * It's now possible to clear global variables and functions by name.
-
-  * Use of clear inside functions is now a parse error.
-
-Summary of changes for version 0.70 (1993-03-08):
-------------------------------------------------
-
-  * Better parse error diagnostics.  For interactive input, you get
-    messages like
-
-      octave:1> a = 3 + * 4;
-
-      parse error:
-
-          a = 3 + * 4;
-                  ^
-
-    and for script files, the message includes the file name and input
-    line number:
-
-      octave:1> foo
-
-      parse error near line 4 of file foo.m:
-
-          a = 3 + * 4;
-                  ^
-
-  * New built-in variable PS2 which is used as the secondary prompt.
-    The default value is '> '.
-
-  * New file, octave-mode.el, for editing Octave code with GNU Emacs.
-    This is a modified version of Matthew R. Wette's matlab-mode.el.
-
-  * Better support for missing math functions.
-
-  * User preferences are now cached in a global struct so we don't
-    have to do a symbol table lookup each time we need to know what
-    they are.  This should mean slightly improved performance for
-    evaluating expressions.
-
-Summary of changes for version 0.69 (1993-02-23):
-------------------------------------------------
-
-  * Multiple assignments are now possible, so statements like
-
-      a = b = c = 3;
-      a = b = c = [1,2;3,4];
-
-    or
-
-      c = (a = (b = 2) * 3 + 4) * 5
-
-    are legal, as are things that have even more bizarre effects, like
-
-      a(4:6,4:6) = b(2:3,2:3) = [1,2;3,4];
-
-    (try it).
-
-  * Improved parsing of strings (but they still don't work as matrix
-    elements).
-
-  * An M-file may now either define a function or be a list of
-    commands to execute.
-
-  * Better detection and conditional compilation of IEEE functions
-    isinf, finite, and isnan.
-
-  * Replacements for acosh, asinh, atanh, and gamma from the BSD math
-    library for those systems that don't have them.
-
-Summary of changes for version 0.68 (1993-02-16):
-------------------------------------------------
-
-  * New functions:
-
-      eval  -- evaluate a string as a sequence of Octave commands.
-      input -- print a prompt and get user input.
-
-Summary of changes for version 0.67 (1993-02-09):
-------------------------------------------------
-
-  * New functions:
-
-      find -- return the indices of nonzero elements.
-
-  * Zero-one style indexing now works.  For example,
-
-      a = [1,2,3,4];
-      b = a([1,0,0,1])
-
-    sets b to the first and fourth elements of a.
-
-    Zero-one style indexing also works for indexing the left hand side
-    of an assignment.  For example,
-
-      a = rand (1,2;3,4);
-      a([0,1],:) = [-1,-2]
-
-    sets the second row of a to [-1 -2]
-
-    The behavior for the ambiguous case
-
-      a = [1,2,3,4];
-      b = a([1,1,1,1]);
-
-    is controlled by the new global variable `prefer_zero_one_indexing'.
-    If this variable is equal to 'true', b will be set to [1 2 3 4].
-    If it is false, b will be set to [1 1 1 1].  The default value is
-    'false'.
-
-  * Using the new global variable `propagate_empty_matrices', it is
-    possible to have unary and binary operations on empty matrices
-    return an empty matrix.  The default value of this variable is
-    'warn', so that empty matrices are propagated but you get a
-    warning.  Some functions, like eig and svd have also been changed
-    to handle this.
-
-  * Empty matrices can be used in conditionals, but they always
-    evaluate to `false'.  With propagate_empty_matrices = 'true', both
-    of the following expressions print 0:
-
-      if  [], 1, else 0, end
-      if ~[], 1, else 0, end
-
-  * Octave no longer converts input like `3.2 i' or `3 I' to complex
-    constants directly because that causes problems inside square
-    brackets, where spaces are important.  This abbreviated notation
-    *does* work if there isn't a space between the number and the i,
-    I, j, or J.
-
-Summary of changes for version 0.66 (1993-01-28):
-------------------------------------------------
-
-  * Logical unary not operator (~ or !) now works for complex.
-
-  * Left division works.
-
-  * Right and left element by element division should work correctly
-    now.
-
-  * Numbers like .3e+2 are no longer errors.
-
-  * Indexing a matrix with a complex value doesn't cause a core dump.
-
-  * The min and max functions should work correctly for two arguments.
-
-  * Improved (I hope!) configuration checks.
-
-  * Octave is now installed as octave-M.N, where M and N are version
-    numbers, and octave is a link to that file.  This makes it
-    possible to have more than one version of the interpreter installed.
-
-Summary of changes for version 0.63 (1993-01-14):
-------------------------------------------------
-
-  * The reshape function works again.
-
-  * Octave now converts input like `3.2i' or `3 I' or `2.3e5 j' to be
-    complex constants directly, rather than requiring an expression
-    like `3.3 * i' to be evaluated.
-
-Summary of changes for version 0.61 (1993-01-10):
-------------------------------------------------
-
-  * Octave has been successfully compiled using gcc 2.3.3 and libg++ 2.3.
-    on a 486 system running Linux.
-
-  * The win_texas_lotto function is now called texas_lotto (it's a
-    script file, and win_texas_lotto.m is too long for some Linux and
-    System V systems).
-
-Summary of changes for version 0.57:
-------------------------------------
-
-  * The C-like formatted print functions printf, fprintf, and sprintf
-    finally work.
-
-Summary of changes for version 0.56:
-------------------------------------
-
-  * By default, octave prints a short disclaimer when it starts.
-    (You can suppress it by invoking octave with -q).
-
-  * You can keep octave from reading your ~/.octaverc and .octaverc
-    files by invoking it with -f.
-
-  * When returning two values, eig now returns [v, d] instead of
-    [lambda, v], where d is a diagonal matrix made from lambda.
-
-  * The win_texas_lotto function now produces a sorted list.
-
-  * New functions:
-
-      expm -- matrix exponential.
-      logm -- matrix logarithm.
-
-Summary of changes for version 0.55:
-------------------------------------
-
-  * The following (C-style) backslash escape sequences work in quoted
-    strings (useful(?) with printf()):
-
-      \a  bell         \r  carriage return
-      \b  backspace    \t  horizontal tab
-      \f  formfeed     \v  vertical tab
-      \n  newline      \\  backslash
-
-  * Use of `...' at the end of a line will allow a statement to
-    continue over more than one line.
-
-  * The names `inf' and `nan' are now aliases for `Inf' and `NaN',
-    respectively.
-
-  * New functions:
-
-      casesen -- print a warning if the luser tries to turn off case
-                 sensitivity.
-      median  -- find median value.
-      norm    -- compute the norm of a matrix.
-      sort    -- sort columns.
-
-  * New variable, `silent_functions'.  If silent_functions == 'true',
-    the results of expressions are not printed even if they are not
-    followed by a semicolon.  The disp() and printf() functions still
-    result in output.  The default value for this variable is 'false'.
-
-  * New variable `return_last_value_computed'.  If it is 'true',
-    functions defined in script files return the last value computed
-    if a return value has not been explicitly declared.  The default
-    value for this variable is 'false'.
-
-Summary of changes for version 0.52:
-------------------------------------
-
-  * Name completion works for function and variable names currently in
-    the symbol tables.  Coming soon: completion for names of functions
-    defined in script files but not yet compiled.
-
-  * The initial value of do_fortran_indexing is now false, and the
-    initial value of prefer_column_vectors is now true.  Swap the
-    values of these variables if you want behavior that is more like
-    Matlab.
-
-  * All script files check the number of input arguments before doing
-    much real work.
-
-  * The identifiers `i' and `j' are now also names for sqrt(-1).
-    These symbols may be used for other purposes, but their original
-    definition will reappear if they are cleared.
-
-  * The symbol tables are now implemented with hash tables for faster
-    searching.
-
-  * A small amount of help is now available for most built-in
-    operators, keywords and functions.  Coming soon: help for script
-    files.
-
-  * Without any arguments, the help command now lists all known
-    built-in operators, keywords and functions.
-
-  * Generic parse errors are now signalled by `Eh, what's up doc?',
-    which is closer to what Bugs actually says.
-
-  * The who command now only prints variable names by default.
-    Use the -fcn (or -fcns, or -functions) switch to print the names of
-    built-in or currently compiled functions.
-
-Summary of changes for version 0.51:
-------------------------------------
-
-  * Major overhaul of array indexing.
-
-  * The colloc function actually works now.
-
-Summary of changes for version 0.50:
-------------------------------------
-
-  * The lsode and dassl functions now return the states only,
-    instead of the time and the states, so you must keep track of
-    the corresponding times (this is easy though, because you have
-    to specify a vector of desired output times anyway).
-
-  * Solution of NLPs with NPSOL now works on the SPARC.
-
-  * New keywords `endif', `endfor', `endfunction', `endif', and
-    `endwhile', which allow for better diagnostics.  The `end' keyword
-    is still recognized.  All script files have been changed to use
-    these new keywords in place of `end'.
-
-  * It is now possible to uninstall Octave by doing a `make uninstall'
-    in the top level directory.
-
-  * The Makefiles are much closer to conforming with GNU coding standards.
-
-  * New functions:
-
-      win_texas_lotto  -- produce six unique random numbers between 1 and 50.
-      quad             -- numerical integration.
-      lu               -- LU factorization
-      qr               -- QR factorization
-      dassl            -- Solution of DAEs using DASSL.
-
-  * New files:
-
-      THANKS -- A list of people and organizations who have supported
-                the development of Octave.
-
-      NEWS   -- This file, listing recent changes.
-
-  * Help is now available at the gnuplot prompt.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/NEWS.2	Fri Dec 31 17:03:44 2021 +0100
@@ -0,0 +1,1036 @@
+Summary of changes for version 2.1.x (1997-06-05 -- 2006-03-20):
+---------------------------------------------------------------
+
+  * Given a matrix, X, and a boolean index, idx, of the same shape as
+    X, X(idx) and X(idx) = RHS now work no matter what the value of
+    do_fortran_indexing is.
+
+  * If you are using GNU Emacs 19.34 or earlier, you will need to add
+    the following code to your ~/.emacs file in order to use Emacs
+    Octave mode:
+
+      ;; Set up the custom library.
+      ;; taken from http://www.dina.kvl.dk/~abraham/custom/
+      (eval-and-compile
+        (condition-case ()
+            (require 'custom)
+          (error nil))
+        (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
+            nil ;; We've got what we needed
+          ;; We have the old custom-library, hack around it!
+          (defmacro defgroup (&rest args)
+            nil)
+          (defmacro defcustom (var value doc &rest args)
+            (` (defvar (, var) (, value) (, doc))))))
+
+  * When `format +' is in effect, Octave uses the following symbols to
+    provide more information about the values in a matrix:
+
+      +      positive real
+      -      negative real
+      i      pure imaginary
+      c      complex
+      blank  zero
+
+  * The ++ and -- operators now work for indexed matrices, and the
+    following operators now work:
+
+      +=, -=, *=, /=, \=, <<=, >>=, .*=, ./=, .\=, &=, |=
+
+    These operators are currently implemented using a relatively
+    inefficient brute-force method but hey, they work.
+
+  * The built-in variable argv is now a list of strings instead of a
+    string vector.
+
+  * The value of LOADPATH set by the environment variable
+    OCTAVE_PATH, the -p or --path command line options, or on the
+    command line is no longer modified to include the default path.
+    Instead it is left as specified.  Its default value is now ":",
+    which tells Octave to search the default path, and the new
+    built-in variable DEFAULT_LOADPATH contains the default list of
+    directories to search.
+
+  * The function file_in_path no longer does any special processing of
+    its PATH argument.  To search LOADPATH for files, it is now
+    generally better to use the new function file_in_loadpath.
+
+  * If fread is given a skip parameter, the skip is performed after
+    the read instead of before (for compatibility with Matlab).
+
+  * The new built-in variable `crash_dumps_octave_core' controls
+    whether Octave writes user variables to the file `octave-core'
+    when it crashes or is killed by a signal.  The default value is 1
+    (0 if you use --traditional).
+
+  * If LOADPATH contains a doubled colon, the default path is inserted
+    in its place.  This is similar to the substitution that also takes
+    place for leading or trailing colons in the LOADPATH.
+
+  * Loops of the form `for i = STRING ... endfor' are now allowed.
+
+  * It is now possible to set the iteration limit for lsode using
+    lsode_options ("step limit", N).
+
+  * New functions:
+
+      is_complex  -- tell whether a variable is complex
+      rehash      -- re-initialize the cache of directories in LOADPATH
+      graw        -- send a string to the gnuplot subprocess
+
+  * New functions from Kurt Hornik's Octave-ci package:
+
+    In finance (new directory):
+
+      fv    -- future value of an investment
+      fvl   -- future value of an initial lump sum investment
+      irr   -- internal rate of return of an investment
+      nper  -- number of payments needed for amortizing a loan
+      npv   -- net present value of a series of payments
+      pmt   -- amount of periodic payment needed to amortize a loan
+      pv    -- present value of an investment
+      pvl   -- present value of an investment that pays off at the end
+      rate  -- rate of return of an investment
+      vol   -- volatility of financial time series data
+
+    In linear-algebra:
+
+      dmult -- rescale the rows of a matrix
+
+    In signal:
+
+      arch_fit       -- fit an ARCH regression model
+      arch_rnd       -- simulate an ARCH process
+      arch_test      -- test for conditional heteroscedascity
+      arma_rnd       -- simulate an ARMA process
+      autocor        -- compute autocorrelations
+      autocov        -- compute autocovariances
+      autoreg_matrix -- design matrix for autoregressions
+      bartlett       -- coefficients of the Bartlett (triangular) window
+      blackman       -- coefficients of the Blackman window
+      diffpara       -- estimate the fractional differencing parameter
+      durbinlevinson -- perform one step of the Durbin-Levinson algorithm
+      fractdiff      -- compute fractional differences
+      hamming        -- coefficients of the Hamming window
+      hanning        -- coefficients of the Hanning window
+      hurst          -- estimate the Hurst parameter
+      periodogram    -- compute the periodogram
+      rectangle_lw   -- rectangular lag window
+      rectangle_sw   -- rectangular spectral window
+      sinetone       -- compute a sine tone
+      sinewave       -- compute a sine wave
+      spectral_adf   -- spectral density estimation
+      spectral_xdf   -- spectral density estimation
+      spencer        -- apply Spencer's 15-point MA filter
+      stft           -- short-term Fourier transform
+      synthesis      -- recover a signal from its short-term Fourier transform
+      triangle_lw    -- triangular lag window
+      triangle_sw    -- triangular spectral window
+      yulewalker     -- fit AR model by Yule-Walker method
+
+    In statistics/base (new directory):
+
+      center     -- center by subtracting means
+      cloglog    -- complementary log-log function
+      cor        -- compute correlations
+      cov        -- compute covariances
+      cut        -- cut data into intervals
+      iqr        -- interquartile range
+      kendall    -- kendall's rank correlation tau
+      logit      -- logit transformation
+      mean       -- compute arithmetic, geometric, and harmonic mean
+      meansq     -- compute mean square
+      moment     -- compute moments
+      ppplot     -- perform a PP-plot (probability plot)
+      probit     -- probit transformation
+      qqplot     -- perform a QQ-plot (quantile plot)
+      range      -- compute range
+      ranks      -- compute ranks
+      run_count  -- count upward runs
+      spearman   -- spearman's rank correlation rho
+      statistics -- compute basic statistics
+      studentize -- subtract mean and divide by standard deviation
+      table      -- cross tabulation
+      values     -- extract unique elements
+      var        -- compute variance
+
+    In statistics/distributions (new directory):
+
+      beta_cdf           -- CDF of the Beta distribution
+      beta_inv           -- Quantile function of the Beta distribution
+      beta_pdf           -- PDF of the Beta distribution
+      beta_rnd           -- Random deviates from the Beta distribution
+
+      binomial_cdf       -- CDF of the binomial distribution
+      binomial_inv       -- Quantile function of the binomial distribution
+      binomial_pdf       -- PDF of the binomial distribution
+      binomial_rnd       -- Random deviates from the binomial distribution
+
+      cauchy_cdf         -- CDF of the Cauchy distribution
+      cauchy_inv         -- Quantile function of the Cauchy distribution
+      cauchy_pdf         -- PDF of the Cauchy distribution
+      cauchy_rnd         -- Random deviates from the Cauchy distribution
+
+      chisquare_cdf      -- CDF of the chi-square distribution
+      chisquare_inv      -- Quantile function of the chi-square distribution
+      chisquare_pdf      -- PDF of the chi-square distribution
+      chisquare_rnd      -- Random deviates from the chi-square distribution
+
+      discrete_cdf       -- CDF of a discrete distribution
+      discrete_inv       -- Quantile function of a discrete distribution
+      discrete_pdf       -- PDF of a discrete distribution
+      discrete_rnd       -- Random deviates from a discrete distribution
+
+      empirical_cdf      -- CDF of the empirical distribution
+      empirical_inv      -- Quantile function of the empirical distribution
+      empirical_pdf      -- PDF of the empirical distribution
+      empirical_rnd      -- Bootstrap samples from the empirical distribution
+
+      exponential_cdf    -- CDF of the exponential distribution
+      exponential_inv    -- Quantile function of the exponential distribution
+      exponential_pdf    -- PDF of the exponential distribution
+      exponential_rnd    -- Random deviates from the exponential distribution
+
+      f_cdf              -- CDF of the F distribution
+      f_inv              -- Quantile function of the F distribution
+      f_pdf              -- PDF of the F distribution
+      f_rnd              -- Random deviates from the F distribution
+
+      gamma_cdf          -- CDF of the Gamma distribution
+      gamma_inv          -- Quantile function of the Gamma distribution
+      gamma_pdf          -- PDF of the Gamma distribution
+      gamma_rnd          -- Random deviates from the Gamma distribution
+
+      geometric_cdf      -- CDF of the geometric distribution
+      geometric_inv      -- Quantile function of the geometric distribution
+      geometric_pdf      -- PDF of the geometric distribution
+      geometric_rnd      -- Random deviates from the geometric distribution
+
+      hypergeometric_cdf -- CDF of the hypergeometric distribution
+      hypergeometric_inv -- Random deviates from hypergeometric distribution
+      hypergeometric_pdf -- PDF of the hypergeometric distribution
+      hypergeometric_rnd -- Random deviates from hypergeometric distribution
+
+      kolmogorov_smirnov_cdf -- CDF of the Kolmogorov-Smirnov distribution
+
+      laplace_cdf        -- CDF of the Laplace distribution
+      laplace_inv        -- Quantile function of the Laplace distribution
+      laplace_pdf        -- PDF of the Laplace distribution
+      laplace_rnd        -- Random deviates from the Laplace distribution
+
+      logistic_cdf       -- CDF of the logistic distribution
+      logistic_inv       -- Quantile function of the logistic distribution
+      logistic_pdf       -- PDF of the logistic distribution
+      logistic_rnd       -- Random deviates from the logistic distribution
+
+      lognormal_cdf      -- CDF of the log normal distribution
+      lognormal_inv      -- Quantile function of the log normal distribution
+      lognormal_pdf      -- PDF of the log normal distribution
+      lognormal_rnd      -- Random deviates from the log normal distribution
+
+      normal_cdf         -- CDF of the normal distribution
+      normal_inv         -- Quantile function of the normal distribution
+      normal_pdf         -- PDF of the normal distribution
+      normal_rnd         -- Random deviates from the normal distribution
+
+      pascal_cdf         -- CDF of the Pascal (negative binomial) distribution
+      pascal_inv         -- Quantile function of the Pascal distribution
+      pascal_pdf         -- PDF of the Pascal (negative binomial) distribution
+      pascal_rnd         -- Random deviates from the Pascal distribution
+
+      poisson_cdf        -- CDF of the Poisson distribution
+      poisson_inv        -- Quantile function of the Poisson distribution
+      poisson_pdf        -- PDF of the Poisson distribution
+      poisson_rnd        -- Random deviates from the Poisson distribution
+
+      stdnormal_cdf      -- CDF of the standard normal distribution
+      stdnormal_inv      -- Quantile function of standard normal distribution
+      stdnormal_pdf      -- PDF of the standard normal distribution
+      stdnormal_rnd      -- Random deviates from standard normal distribution
+
+      t_cdf              -- CDF of the t distribution
+      t_inv              -- Quantile function of the t distribution
+      t_pdf              -- PDF of the t distribution
+      t_rnd              -- Random deviates from the t distribution
+
+      uniform_cdf        -- CDF of the uniform distribution
+      uniform_inv        -- Quantile function of the uniform distribution
+      uniform_pdf        -- PDF of the uniform distribution
+      uniform_rnd        -- Random deviates from the uniform distribution
+
+      weibull_cdf        -- CDF of the Weibull distribution
+      weibull_inv        -- Quantile function of the Weibull distribution
+      weibull_pdf        -- PDF of the Weibull distribution
+      weibull_rnd        -- Random deviates from the Weibull distribution
+
+      wiener_rnd         -- Simulate a Wiener process
+
+    In statistics/models (new directory):
+
+      logistic_regression             -- ordinal logistic regression
+      logistic_regression_derivatives -- derivates of log-likelihood
+                                         in logistic regression
+      logistic_regression_likelihood  -- likelihood in logistic regression
+
+    In statistics/tests (new directory):
+
+      anova                       -- one-way analysis of variance
+      bartlett_test               -- bartlett test for homogeneity of variances
+      chisquare_test_homogeneity  -- chi-square test for homogeneity
+      chisquare_test_independence -- chi-square test for independence
+      cor_test                    -- test for zero correlation
+      f_test_regression           -- test linear hypotheses in linear
+                                     regression model
+      hotelling_test              -- test for mean of a multivariate normal
+      hotelling_test_2            -- compare means of two multivariate normals
+      kolmogorov_smirnov_test     -- one-sample Kolmogorov-Smirnov test
+      kolmogorov_smirnov_test_2   -- two-sample Kolmogorov-Smirnov test
+      kruskal_wallis_test         -- kruskal-Wallis test
+      manova                      -- one-way multivariate analysis of variance
+      mcnemar_test                -- mcnemar's test for symmetry
+      prop_test_2                 -- compare two proportions
+      run_test                    -- run test for independence
+      sign_test                   -- sign test
+      t_test                      -- student's one-sample t test
+      t_test_2                    -- student's two-sample t test
+      t_test_regression           -- test one linear hypothesis in linear
+                                     regression model
+      u_test                      -- mann-Whitney U-test
+      var_test                    -- f test to compare two variances
+      welch_test                  -- welch two-sample t test
+      wilcoxon_test               -- wilcoxon signed-rank test
+      z_test                      -- test for mean of a normal sample with
+                                     known variance
+      z_test_2                    -- compare means of two normal samples with
+                                     known variances
+
+  * The save command now accepts the option -append to save the
+    variables at the end of the file, leaving the existing contents.
+
+  * New command-line option --no-history (also available using the
+    single character option -H) inhibits saving command history.
+
+  * The mkoctfile script now accepts -DDEF options and passes them on
+    to the C and C++ compilers.
+
+  * Running `make check' should work now before you run `make install',
+    even if you build a copy of Octave that depends on shared versions
+    of the Octave libraries.
+
+  * For matrices, x(:) now works and returns a column vector no matter
+    what the value of do_fortran_indexing is.
+
+  * New keywords __FILE__ and __LINE__ expand to the name of the file
+    that is being read and the current input line number, respectively.
+
+  * Octave's expression parser is more general and consistent.  It is
+    now possible to access structure elements and index arbitrary
+    values.  For example, expressions like
+
+      my_home_dir = getpwuid (getuid ()) . dir;
+
+    and
+
+      svd (x) (1:5)
+
+    now work.
+
+  * New built-in variable `print_rhs_assign_val' controls what is
+    printed when an assignment expression is evaluated.  If it is
+    zero, the value of the variable on the left hand side (after the
+    assignment) is printed.  If it is nonzero, the value of the right
+    hand side (i.e., the result of the expression) is printed.  The
+    default value of is zero, so the behavior is the same as in
+    previous versions of Octave.
+
+  * tmpnam now takes two optional arguments, DIR, and PREFIX.  For
+    example, tmpnam ("/foo", "bar-") returns a file name like
+    "/foo/bar-10773baa".  If DIR is omitted or empty, the value of the
+    environment variable TMPDIR, or /tmp is used.  If PREFIX is
+    omitted, "oct-" is used.
+
+  * The built-in variable `PWD' has been removed.  If you need to get
+    the value of the current working directory, use the pwd() function
+    instead.
+
+  * New operators.  Octave's parser now recognizes the following
+    operators:  << >> += -= *= /= .+= .-= .*= ./= &= |= <<= >>=.  So
+    far, there are only a few operations defined that actually use
+    them (this should change before 2.1 is released).
+
+  * New built-in data types:
+
+    logical:
+
+      A true value is represented by 1, and false value by 0.
+      Comparison operations like <, <=, ==, >, >=, and != now return
+      logical values.  Indexing operations that use zero-one style
+      indexing must now use logical values.  You can use the new
+      function logical() to convert a numeric value to a logical
+      value.  This avoids the need for the built-in variable
+      `prefer_zero_one_indexing', so it has been removed.  Logical
+      values are automatically converted to numeric values where
+      appropriate.
+
+    file:
+
+      A file object represents an open Octave stream object.  The
+      fopen function now returns a file object instead of an integer.
+      File objects can be converted to integers automatically, and the
+      other functions that work with file ids still work with
+      integers, so this change should be backward compatible.
+
+      The binary left-shift operator `<<' has been defined to work as
+      in C++ for file objects and built-in types.  For example,
+
+        my_stream = fopen ("foo", "w");
+        my_stream << "x = " << pi << " marks the spot\n";
+
+      writes `x = 3.1416 marks the spot' in the file foo.
+
+      The built-in variables stdin, stdout, and stderr are now also
+      file objects instead of integers.
+
+    list:
+
+      A list is an array of Octave objects.  It can be indexed using
+      the normal indexing operator.  For example,
+
+        x = list ([1,2;3,4], 1, "foo");
+        stdout << x(2) << "\n"
+        1
+        stdout << x;
+        (
+         [1] =
+
+           1  2
+           3  4
+
+          [2] = 1
+          [3] = foo
+        )
+
+      There is currently no special syntax for creating lists; you
+      must use the list function.
+
+  * Commas in global statements are no longer special.  They are now
+    treated as command separators.  This removes a conflict in the
+    grammar and is consistent with the way Matlab behaves.  The
+    variable `warn_comma_in_global_decl' has been eliminated.
+
+  * It is now possible to declare static variables that retain their
+    values across function calls.  For example,
+
+      function ncall = f () static n = 0; ncall = ++n; endfunction
+
+    defines a function that returns the number of times that it has
+    been called.
+
+  * Within user-defined functions, the new automatic variable `argn'
+    contains the names of the arguments that were passed to the
+    function.  For example,
+
+      function f (...)
+        for i = 1:nargin
+          stdout << "argn(" << i << ") = `" << deblank (argn(i,:)) \
+                 << "' and its value is " << va_arg () << "\n";
+        endfor
+      endfunction
+      f (1+2, "foo", sin (pi/2))
+
+    prints
+
+      argn(1) = `1 + 2' and its value is 3
+      argn(2) = `"foo"' and its value is foo
+      argn(3) = `sin (pi)' and its value is 1
+
+    on the standard output stream.  If nargin is zero, argn is not defined.
+  * Functions like quad, fsolve, and lsode can take either a function
+    name or a simple function body as a string.  For example,
+
+      quad ("sqrt (x)", 0, 1)
+
+    is equivalent to
+
+      function y = f (x) y = sqrt (x); endfunction
+      quad ("f", 0, 1)
+
+  * If the argument to eig() is symmetric, Octave uses the specialized
+    Lapack subroutine for symmetric matrices for a significant
+    increase in performance.
+
+  * If the argument to lsode that names the user-supplied function is
+    a 2-element string array, the second element is taken as the name
+    of the Jacobian function.  The named function should have the
+    following form:
+
+      JAC = f (X, T)
+
+    where JAC is the Jacobian matrix of partial derivatives of the
+    right-hand-side functions that define the set of differential
+    equations with respect to the state vector X.
+
+  * Global variables are now initialized to the empty matrix, for
+    compatibility with Matlab.
+
+  * Explicit initialization of global variables only happens once.
+    For example, after the following statements are evaluated, g still
+    has the value 1.
+
+      global g = 1
+      global g = 2
+
+    This is useful for initializing global variables that are used to
+    maintain state information that is shared among several functions.
+
+  * Structure elements completion on the command line actually works
+    now.
+
+  * The new built-in variable `fixed_point_format' controls whether
+    Octave uses a scaled fixed-point format for displaying matrices.
+    The default value is 0 unless you use --traditional.
+
+  * The function sumsq now computes sum (x .* conj (x)) for complex values.
+
+  * The new built-in variable max_recursion_depth allows you to
+    prevent Octave from attempting infinite recursion.  The default
+    value is 256.
+
+  * Octave now uses kpathsea 3.2.
+
+  * New configure option, --enable-readline.
+
+  * New configure option, --enable-static.
+
+Summary of changes for version 2.0.7 (1997-06-04):
+-------------------------------------------------
+
+  This is a bug-fixing release.  There are no new user-visible features.
+
+Summary of changes for version 2.0.6 (1997-05-27):
+-------------------------------------------------
+
+  This is primarily a bug-fixing release.  There are only a few new
+  user-visible features.
+
+  * The new built-in variable default_eval_print_flag controls whether
+    Octave prints the results of commands executed by eval() that do
+    not end with semicolons.  The default is 1.
+
+  * The new built-in constant OCTAVE_HOME specifies the top-level
+    directory where Octave is installed.
+
+  * Octave no longer includes functions to work with NPSOL or QPSOL,
+    because they are not free software.
+
+  * The new built-in variable called kluge_procbuf_delay specifies the
+    number of microseconds to delay in the parent process after
+    forking.  By default on gnu-win32 systems, it's set to 500000 (1/2
+    second).  On other systems, the default value is 0.  Delaying for
+    a short time in the parent after forking seems to avoid problems
+    in which communicating with subprocesses via pipes would sometimes
+    cause Octave to hang.  I doubt that the delay is really the right
+    solution.  If anyone has a better idea, I'd love to hear it.
+
+Summary of changes for version 2.0.5 (1997-03-01):
+-------------------------------------------------
+
+  * A `switch' statement is now available.  See the Statements chapter
+    in the manual for details.
+
+  * Commands like ls, save, and cd may now also be used as formal
+    parameters for functions.
+
+  * More tests.
+
+Summary of changes for version 2.0.4 (1997-02-20):
+-------------------------------------------------
+
+  * It is now possible to use commands like ls, save, and cd as simple
+    variable names.  They still cannot be used as formal parameters
+    for functions, or as the names of structure variables.  Failed
+    assignments leave them undefined (you can recover the original
+    function definition using clear).
+
+  * Is is now possible to invoke commands like ls, save, and cd as
+    normal functions (for example, load ("foo", "x", "y", "z")).
+
+Summary of changes for version 2.0.3 (1997-02-18):
+-------------------------------------------------
+
+  * The manual has been completely revised and now corresponds much
+    more closely to the features of the current version.
+
+  * The return value for assignment expressions is now the RHS since
+    that is more consistent with the way other programming languages
+    work.  However, Octave still prints the entire LHS value so that
+
+      x = zeros (1, 2);
+      x(2) = 1
+
+    still prints
+
+      x =
+
+        0  1
+
+    but an assignment like
+
+      z = x(2) = 1
+
+    sets z to 1 (not [ 0, 1 ] as in previous versions of Octave).
+
+  * It is now much easier to make binary distributions.  See the
+    Binary Distributions section of the manual for more details.
+
+Summary of changes for version 2.0.2 (1997-01-27):
+-------------------------------------------------
+
+  * Octave now stops executing commands from a script file if an error
+    is encountered.
+
+  * The return, and break commands now cause Octave to quit executing
+    commands from script files.  When used in invalid contexts, the
+    break, continue, and return commands are now simply ignored
+    instead of producing parse errors.
+
+  * size ("") is now [0, 0].
+
+  * New functions:
+
+      sleep   -- pause execution for a specified number of seconds
+      usleep  -- pause execution for a specified number of microseconds
+
+Summary of changes for version 2.0 (1996-12-10):
+-----------------------------------------------
+
+  * The set and show commands for setting and displaying gnuplot
+    parameters have been replaced by gset and gshow.  This change will
+    probably break lots of things, but it is necessary to allow for
+    compatibility with the Matlab graphics and GUI commands in a
+    future version of Octave.  (For now, the old set and show commands
+    do work, but they print an annoying warning message to try to get
+    people to switch to using gset.)
+
+  * Octave has been mostly ported to Windows NT and Windows 95 using
+    the beta 17 release of the Cygnus GNU-WIN32 tools.  Not everything
+    works, but it is usable.  See the file README.WINDOWS for more
+    information.
+
+  * Dynamic linking works on more systems using dlopen() and friends
+    (most modern Unix systems) or shl_load() and friends (HP/UX
+    systems).  A simple example is provided in examples/hello.cc.
+    For this feature to work, you must configure Octave with
+    --enable-shared.  You may also need to have a shared-library
+    version of libg++ and libstdc++.
+
+  * New data types can be added to Octave by writing a C++ class.  On
+    systems that support dynamic linking, new data types can be added
+    to an already running Octave binary.  A simple example appears in
+    the file examples/make_int.cc.  Other examples are the standard
+    Octave data types defined in the files src/ov*.{h,cc} and
+    src/op-*.cc.
+
+  * The configure option --enable-bounds-check turns on bounds
+    checking on element references for Octave's internal array and
+    matrix classes.  It's enabled by default.  To disable this
+    feature, configure Octave with --disable-bounds-check.
+
+  * The C-style I/O functions (fopen, fprintf, etc.) have been
+    rewritten to be more compatible with Matlab.  The fputs function
+    has also been added.  Usage of the *printf functions that was
+    allowed in previous versions of Octave should still work.
+    However, there is no way to make the new versions of the *scanf
+    functions compatible with Matlab *and* previous versions of
+    Octave.  An optional argument to the *scanf functions is now
+    available to make them behave in a way that is compatible with
+    previous versions of Octave.
+
+  * Octave can now read files that contain columns of numbers only,
+    with no header information.  The name of the loaded variable is
+    constructed from the file name.  Each line in the file must have
+    the same number of elements.
+
+  * The interface to the pager has changed.  The new built-in variable
+    `page_output_immediately' controls when Octave sends output to the
+    pager.  If it is nonzero, Octave sends output to the pager as soon
+    as it is available.  Otherwise, Octave buffers its output and
+    waits until just before the prompt is printed to flush it to the
+    pager.
+
+  * Expressions of the form
+
+      A(i,j) = x
+
+    where X is a scalar and the indices i and j define a matrix of
+    elements now work as you would expect rather than giving an error.
+    I am told that this is how Matlab 5.0 will behave when it is
+    released.
+
+  * Indexing of character strings now works.
+
+  * The echo command has been implemented.
+
+  * The document command is now a regular function.
+
+  * New method for handling errors:
+
+      try
+        BODY
+      catch
+        CLEANUP
+      end_try_catch
+
+    Where BODY and CLEANUP are both optional and may contain any
+    Octave expressions or commands.  The statements in CLEANUP are
+    only executed if an error occurs in BODY.
+
+    No warnings or error messages are printed while BODY is
+    executing.  If an error does occur during the execution of BODY,
+    CLEANUP can access the text of the message that would have been
+    printed in the builtin constant __error_text__.  This is the same
+    as eval (TRY, CATCH) (which may now also use __error_text__) but
+    it is more efficient since the commands do not need to be parsed
+    each time the TRY and CATCH statements are evaluated.
+
+  * Octave no longer parses the help command by grabbing everything
+    after the keyword `help' until a newline character is read.  To
+    get help for `;' or `,', now, you need to use the command
+    `help semicolon' or `help comma'.
+
+  * Octave's parser now does some simple constant folding.  This means
+    that expressions like 3*i are now evaluated only once, when a
+    function is compiled, and the right hand side of expressions like
+    a = [1,2;3,4] are treated as true matrix constants rather than
+    lists of elements which must be evaluated each time they are
+    needed.
+
+  * Built-in variables that can take values of "true" and "false" can
+    now also be set to any nonzero scalar value to indicate "true",
+    and 0 to indicate "false".
+
+  * New built-in variables `history_file', `history_size', and
+    `saving_history'.
+
+  * New built-in variable `string_fill_char' specifies the character
+    to fill with when creating arrays of strings.
+
+  * If the new built-in variable `gnuplot_has_frames' is nonzero,
+    Octave assumes that your copy of gnuplot includes support for
+    multiple plot windows when using X11.
+
+    If the new built-in variable `gnuplot_has_multiplot' is nonzero,
+    Octave assumes that your copy of gnuplot has the multiplot support
+    that is included in recent 3.6beta releases.
+
+    The initial values of these variables are determined by configure,
+    but can be changed in your startup script or at the command line
+    in case configure got it wrong, or if you upgrade your gnuplot
+    installation.
+
+  * The new plot function `figure' allows multiple plot windows when
+    using newer versions of gnuplot with X11.
+
+  * Octave now notices when the plotter has exited unexpectedly.
+
+  * New built-in variable `warn_missing_semicolon'.  If nonzero, Octave
+    will warn when statements in function definitions don't end in
+    semicolons.  The default value is 0.
+
+  * Octave now attempts to continue after floating point exceptions
+    or out-of-memory errors.
+
+  * If Octave crashes, it now attempts to save all user-defined
+    variables in a file named `octave-core' in the current directory
+    before exiting.
+
+  * It is now possible to get the values of individual option settings
+    for the dassl, fsolve, lsode, npsol, qpsol, and quad functions
+    using commands like
+
+      dassl_reltol = dassl_options ("relative tolerance");
+
+  * The svd() function no longer computes the left and right singular
+    matrices unnecessarily.  This can significantly improve
+    performance for large matrices if you are just looking for the
+    singular values.
+
+  * The filter() function is now a built-in function.
+
+  * New function randn() returns a pseudo-random number from a normal
+    distribution.  The rand() and randn() functions have separate
+    seeds and generators.
+
+  * Octave's command-line arguments are now available in the built-in
+    variable `argv'.  The program name is also available in the
+    variables `program_invocation_name' and `program_name'.  If
+    executing a script from the command line (e.g., octave foo.m) or
+    using the `#! /bin/octave' hack, the program name is set to the
+    name of the script.
+
+  * New built-in variable `completion_append_char' used as the
+    character to append to successful command-line completion
+    attempts.  The default is " " (a single space).
+
+  * Octave now uses a modified copy of the readline library from
+    version 1.14.5 of GNU bash.
+
+  * In prompt strings, `\H' expands to the whole host name.
+
+  * New built-in variable `beep_on_error'.  If nonzero, Octave will try
+    to ring your terminal's bell before printing an error message.
+    The default value is 0.
+
+  * For functions defined from files, the type command now prints the
+    text of the file.  You can still get the text reconstructed from
+    the parse tree by using the new option -t (-transformed).
+
+  * New command-line argument --traditional sets the following
+    preference variables for compatibility with Matlab:
+
+      PS1                           = ">> "
+      PS2                           = ""
+      beep_on_error                 = 1
+      default_save_format           = "mat-binary"
+      define_all_return_values      = 1
+      do_fortran_indexing           = 1
+      empty_list_elements_ok        = 1
+      implicit_str_to_num_ok        = 1
+      ok_to_lose_imaginary_part     = 1
+      page_screen_output            = 0
+      prefer_column_vectors         = 0
+      prefer_zero_one_indexing      = 1
+      print_empty_dimensions        = 0
+      treat_neg_dim_as_zero         = 1
+      warn_function_name_clash      = 0
+      whitespace_in_literal_matrix  = "traditional"
+
+  * New functions:
+
+      readdir  -- returns names of files in directory as array of strings
+      mkdir    -- create a directory
+      rmdir    -- remove a directory
+      rename   -- rename a file
+      unlink   -- delete a file
+      umask    -- set permission mask for file creation
+      stat     -- get information about a file
+      lstat    -- get information about a symbolic link
+      glob     -- perform filename globbing
+      fnmatch  -- match strings with filename globbing patterns
+      more     -- turn the pager on or off
+      gammaln  -- alias for lgamma
+
+  * New audio functions from Andreas Weingessel
+    <Andreas.Weingessel@ci.tuwien.ac.at>.
+
+      lin2mu     -- linear to mu-law encoding
+      loadaudio  -- load an audio file to a vector
+      mu2lin     -- mu-law to linear encoding
+      playaudio  -- play an audio file
+      record     -- record sound and store in vector
+      saveaudio  -- save a vector as an audio file
+      setaudio   -- executes mixer shell command
+
+  * New plotting functions from Vinayak Dutt.  Ones dealing with
+    multiple plots on one page require features from gnuplot 3.6beta
+    (or later).
+
+      bottom_title  -- put title at the bottom of the plot
+      mplot         -- multiplot version of plot
+      multiplot     -- switch multiple-plot mode on or off
+      oneplot       -- return to one plot per page
+      plot_border   -- put a border around plots
+      subplot       -- position multiple plots on a single page
+      subwindow     -- set subwindow position for next plot
+      top_title     -- put title at the top of the plot
+      zlabel        -- put a label on the z-axis
+
+  * New string functions
+
+      bin2dec  -- convert a string of ones and zeros to an integer
+      blanks   -- create a string of blanks
+      deblank  -- delete trailing blanks
+      dec2bin  -- convert an integer to a string of ones and zeros
+      dec2hex  -- convert an integer to a hexadecimal string
+      findstr  -- locate occurrences of one string in another
+      hex2dec  -- convert a hexadecimal string to an integer
+      index    -- return position of first occurrence a string in another
+      rindex   -- return position of last occurrence a string in another
+      split    -- divide one string into pieces separated by another
+      str2mat  -- create a string matrix from a list of strings
+      strrep   -- replace substrings in a string
+      substr   -- extract a substring
+
+    The following functions return a matrix of ones and zeros.
+    Elements that are nonzero indicate that the condition was true for
+    the corresponding character in the string array.
+
+      isalnum   -- letter or a digit
+      isalpha   -- letter
+      isascii   -- ascii
+      iscntrl   -- control character
+      isdigit   -- digit
+      isgraph   -- printable (but not space character)
+      islower   -- lower case
+      isprint   -- printable (including space character)
+      ispunct   -- punctuation
+      isspace   -- whitespace
+      isupper   -- upper case
+      isxdigit  -- hexadecimal digit
+
+    These functions return new strings.
+
+      tolower  -- convert to lower case
+      toupper  -- convert to upper case
+
+  * New function, fgetl.  Both fgetl and fgets accept an optional
+    second argument that specifies a maximum number of characters to
+    read, and the function fgets is now compatible with Matlab.
+
+  * Printing in hexadecimal format now works (format hex).  It is also
+    possible to print the internal bit representation of a value
+    (format bit).  Note that these formats are only implemented for
+    numeric values.
+
+  * Additional structure features:
+
+    -- Name completion now works for structures.
+
+    -- Values and names of structure elements are now printed by
+       default.  The new built-in variable `struct_levels_to_print'
+       controls the depth of nested structures to print.  The default
+       value is 2.
+
+    -- New functions:
+
+       struct_contains (S, NAME) -- returns 1 if S is a structure with
+                                    element NAME; otherwise returns 0.
+
+       struct_elements (S)       -- returns the names of all elements
+                                    of structure S in an array of strings.
+
+  * New io/subprocess functions:
+
+      fputs    -- write a string to a file with no formatting
+      popen2   -- start a subprocess with 2-way communication
+      mkfifo   -- create a FIFO special file
+      popen    -- open a pipe to a subprocess
+      pclose   -- close a pipe from a subprocess
+      waitpid  -- check the status of or wait for subprocesses
+
+  * New time functions:
+
+      asctime    -- format time structure according to local format
+      ctime      -- equivalent to `asctime (localtime (TMSTRUCT))'
+      gmtime     -- return time structure corresponding to UTC
+      localtime  -- return time structure corresponding to local time zone
+      strftime   -- print given time structure using specified format
+      time       -- return current time
+
+    The `clock' and `date' functions are now implemented in M-files
+    using these basic functions.
+
+  * Access to additional Unix system calls:
+
+      dup2     -- duplicate a file descriptor
+      exec     -- replace current process with a new process
+      fcntl    -- control open file descriptors
+      fork     -- create a copy of the current process
+      getpgrp  -- return the process group id of the current process
+      getpid   -- return the process id of the current process
+      getppid  -- return the process id of the parent process
+      getuid   -- return the real user id of the current process
+      getgid   -- return the real group id of the current process
+      geteuid  -- return the effective user id of the current process
+      getegid  -- return the effective group id of the current process
+      pipe     -- create an interprocess channel
+
+  * Other new functions:
+
+      commutation_matrix  -- compute special matrix form
+      duplication_matrix  -- compute special matrix form
+      common_size.m       -- bring arguments to a common size
+      completion_matches  -- perform command completion on string
+      tilde_expand        -- perform tilde expansion on string
+
+      meshgrid  -- compatible with Matlab's meshgrid function
+      tmpnam    -- replaces octave_tmp_file_name
+      atexit    -- register functions to be called when Octave exits
+      putenv    -- define an environment variable
+      bincoeff  -- compute binomial coefficients
+      nextpow2  -- compute the next power of 2 greater than a number
+      detrend   -- remove a best fit polynomial from data
+      erfinv    -- inverse error function
+      shift     -- perform a circular shift on the elements of a matrix
+      pow2      -- compute 2 .^ x
+      log2      -- compute base 2 logarithms
+      diff      -- compute differences of matrix elements
+      vech      -- stack columns of a matrix below the diagonal
+      vec       -- stack columns of a matrix to form a vector
+      xor       -- compute exclusive or
+
+  * Functions for getting info from the password database on Unix systems:
+
+      getpwent  -- read entry from password-file stream, opening if necessary
+      getpwuid  -- search for password entry with matching user ID
+      getpwnam  -- search for password entry with matching username
+      setpwent  -- rewind the password-file stream
+      endpwent  -- close the password-file stream
+
+  * Functions for getting info from the group database on Unix systems:
+
+      getgrent  -- read entry from group-file stream, opening if necessary
+      getgrgid  -- search for group entry with matching group ID
+      getgrnam  -- search for group entry with matching group name
+      setgrent  -- rewind the group-file stream
+      endgrent  -- close the group-file stream
+
+  * The New function octave_config_info returns a structure containing
+    information about how Octave was configured and compiled.
+
+  * New function getrusage returns a structure containing system
+    resource usage statistics.  The `cputime' function is now defined
+    in an M-file using getrusage.
+
+  * The info reader is now a separate binary that runs as a
+    subprocess.  You still need the info reader distributed with
+    Octave though, because there are some new command-line arguments
+    that are not yet available in the public release of Info.
+
+  * There is a new built-in variable, INFO_PROGRAM, which is used as
+    the name of the info program to run.  Its initial value is
+    $OCTAVE_HOME/lib/octave/VERSION/exec/ARCH/info, but that value can
+    be overridden by the environment variable OCTAVE_INFO_PROGRAM, or
+    the command line argument --info-program NAME, or by setting the
+    value of INFO_PROGRAM in a startup script.
+
+  * There is a new built-in variable, EXEC_PATH, which is used as
+    the list of directories to search when executing subprograms.  Its
+    initial value is taken from the environment variable
+    OCTAVE_EXEC_PATH (if it exists) or PATH, but that value can be
+    overridden by the command line argument --exec-path PATH, or
+    by setting the value of EXEC_PATH in a startup script.  If the
+    EXEC_PATH begins (ends) with a colon, the directories
+    $OCTAVE_HOME/lib/octave/VERSION/exec/ARCH and $OCTAVE_HOME/bin are
+    prepended (appended) to EXEC_PATH (if you don't specify a value
+    for EXEC_PATH explicitly, these special directories are prepended
+    to your PATH).
+
+  * If it is present, Octave will now use an `ls-R' database file to
+    speed up recursive path searching.  Octave looks for a file called
+    ls-R in the directory specified by the environment variable
+    OCTAVE_DB_DIR.  If that is not set but the environment variable
+    OCTAVE_HOME is set, Octave looks in $OCTAVE_HOME/lib/octave.
+    Otherwise, Octave looks in the directory $datadir/octave (normally
+    /usr/local/lib/octave).
+
+  * New examples directory.
+
+  * There is a new script, mkoctfile, that can be used to create .oct
+    files suitable for dynamic linking.
+
+  * Many more bug fixes.
+
+  * ChangeLogs are now kept in each subdirectory.
+
+See NEWS.1 for old news.
--- a/etc/NEWS.2.md	Tue Dec 28 18:22:40 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1036 +0,0 @@
-Summary of changes for version 2.1.x (1997-06-05 -- 2006-03-20):
----------------------------------------------------------------
-
-  * Given a matrix, X, and a boolean index, idx, of the same shape as
-    X, X(idx) and X(idx) = RHS now work no matter what the value of
-    do_fortran_indexing is.
-
-  * If you are using GNU Emacs 19.34 or earlier, you will need to add
-    the following code to your ~/.emacs file in order to use Emacs
-    Octave mode:
-
-      ;; Set up the custom library.
-      ;; taken from http://www.dina.kvl.dk/~abraham/custom/
-      (eval-and-compile
-        (condition-case ()
-            (require 'custom)
-          (error nil))
-        (if (and (featurep 'custom) (fboundp 'custom-declare-variable))
-            nil ;; We've got what we needed
-          ;; We have the old custom-library, hack around it!
-          (defmacro defgroup (&rest args)
-            nil)
-          (defmacro defcustom (var value doc &rest args)
-            (` (defvar (, var) (, value) (, doc))))))
-
-  * When `format +' is in effect, Octave uses the following symbols to
-    provide more information about the values in a matrix:
-
-      +      positive real
-      -      negative real
-      i      pure imaginary
-      c      complex
-      blank  zero
-
-  * The ++ and -- operators now work for indexed matrices, and the
-    following operators now work:
-
-      +=, -=, *=, /=, \=, <<=, >>=, .*=, ./=, .\=, &=, |=
-
-    These operators are currently implemented using a relatively
-    inefficient brute-force method but hey, they work.
-
-  * The built-in variable argv is now a list of strings instead of a
-    string vector.
-
-  * The value of LOADPATH set by the environment variable
-    OCTAVE_PATH, the -p or --path command line options, or on the
-    command line is no longer modified to include the default path.
-    Instead it is left as specified.  Its default value is now ":",
-    which tells Octave to search the default path, and the new
-    built-in variable DEFAULT_LOADPATH contains the default list of
-    directories to search.
-
-  * The function file_in_path no longer does any special processing of
-    its PATH argument.  To search LOADPATH for files, it is now
-    generally better to use the new function file_in_loadpath.
-
-  * If fread is given a skip parameter, the skip is performed after
-    the read instead of before (for compatibility with Matlab).
-
-  * The new built-in variable `crash_dumps_octave_core' controls
-    whether Octave writes user variables to the file `octave-core'
-    when it crashes or is killed by a signal.  The default value is 1
-    (0 if you use --traditional).
-
-  * If LOADPATH contains a doubled colon, the default path is inserted
-    in its place.  This is similar to the substitution that also takes
-    place for leading or trailing colons in the LOADPATH.
-
-  * Loops of the form `for i = STRING ... endfor' are now allowed.
-
-  * It is now possible to set the iteration limit for lsode using
-    lsode_options ("step limit", N).
-
-  * New functions:
-
-      is_complex  -- tell whether a variable is complex
-      rehash      -- re-initialize the cache of directories in LOADPATH
-      graw        -- send a string to the gnuplot subprocess
-
-  * New functions from Kurt Hornik's Octave-ci package:
-
-    In finance (new directory):
-
-      fv    -- future value of an investment
-      fvl   -- future value of an initial lump sum investment
-      irr   -- internal rate of return of an investment
-      nper  -- number of payments needed for amortizing a loan
-      npv   -- net present value of a series of payments
-      pmt   -- amount of periodic payment needed to amortize a loan
-      pv    -- present value of an investment
-      pvl   -- present value of an investment that pays off at the end
-      rate  -- rate of return of an investment
-      vol   -- volatility of financial time series data
-
-    In linear-algebra:
-
-      dmult -- rescale the rows of a matrix
-
-    In signal:
-
-      arch_fit       -- fit an ARCH regression model
-      arch_rnd       -- simulate an ARCH process
-      arch_test      -- test for conditional heteroscedascity
-      arma_rnd       -- simulate an ARMA process
-      autocor        -- compute autocorrelations
-      autocov        -- compute autocovariances
-      autoreg_matrix -- design matrix for autoregressions
-      bartlett       -- coefficients of the Bartlett (triangular) window
-      blackman       -- coefficients of the Blackman window
-      diffpara       -- estimate the fractional differencing parameter
-      durbinlevinson -- perform one step of the Durbin-Levinson algorithm
-      fractdiff      -- compute fractional differences
-      hamming        -- coefficients of the Hamming window
-      hanning        -- coefficients of the Hanning window
-      hurst          -- estimate the Hurst parameter
-      periodogram    -- compute the periodogram
-      rectangle_lw   -- rectangular lag window
-      rectangle_sw   -- rectangular spectral window
-      sinetone       -- compute a sine tone
-      sinewave       -- compute a sine wave
-      spectral_adf   -- spectral density estimation
-      spectral_xdf   -- spectral density estimation
-      spencer        -- apply Spencer's 15-point MA filter
-      stft           -- short-term Fourier transform
-      synthesis      -- recover a signal from its short-term Fourier transform
-      triangle_lw    -- triangular lag window
-      triangle_sw    -- triangular spectral window
-      yulewalker     -- fit AR model by Yule-Walker method
-
-    In statistics/base (new directory):
-
-      center     -- center by subtracting means
-      cloglog    -- complementary log-log function
-      cor        -- compute correlations
-      cov        -- compute covariances
-      cut        -- cut data into intervals
-      iqr        -- interquartile range
-      kendall    -- kendall's rank correlation tau
-      logit      -- logit transformation
-      mean       -- compute arithmetic, geometric, and harmonic mean
-      meansq     -- compute mean square
-      moment     -- compute moments
-      ppplot     -- perform a PP-plot (probability plot)
-      probit     -- probit transformation
-      qqplot     -- perform a QQ-plot (quantile plot)
-      range      -- compute range
-      ranks      -- compute ranks
-      run_count  -- count upward runs
-      spearman   -- spearman's rank correlation rho
-      statistics -- compute basic statistics
-      studentize -- subtract mean and divide by standard deviation
-      table      -- cross tabulation
-      values     -- extract unique elements
-      var        -- compute variance
-
-    In statistics/distributions (new directory):
-
-      beta_cdf           -- CDF of the Beta distribution
-      beta_inv           -- Quantile function of the Beta distribution
-      beta_pdf           -- PDF of the Beta distribution
-      beta_rnd           -- Random deviates from the Beta distribution
-
-      binomial_cdf       -- CDF of the binomial distribution
-      binomial_inv       -- Quantile function of the binomial distribution
-      binomial_pdf       -- PDF of the binomial distribution
-      binomial_rnd       -- Random deviates from the binomial distribution
-
-      cauchy_cdf         -- CDF of the Cauchy distribution
-      cauchy_inv         -- Quantile function of the Cauchy distribution
-      cauchy_pdf         -- PDF of the Cauchy distribution
-      cauchy_rnd         -- Random deviates from the Cauchy distribution
-
-      chisquare_cdf      -- CDF of the chi-square distribution
-      chisquare_inv      -- Quantile function of the chi-square distribution
-      chisquare_pdf      -- PDF of the chi-square distribution
-      chisquare_rnd      -- Random deviates from the chi-square distribution
-
-      discrete_cdf       -- CDF of a discrete distribution
-      discrete_inv       -- Quantile function of a discrete distribution
-      discrete_pdf       -- PDF of a discrete distribution
-      discrete_rnd       -- Random deviates from a discrete distribution
-
-      empirical_cdf      -- CDF of the empirical distribution
-      empirical_inv      -- Quantile function of the empirical distribution
-      empirical_pdf      -- PDF of the empirical distribution
-      empirical_rnd      -- Bootstrap samples from the empirical distribution
-
-      exponential_cdf    -- CDF of the exponential distribution
-      exponential_inv    -- Quantile function of the exponential distribution
-      exponential_pdf    -- PDF of the exponential distribution
-      exponential_rnd    -- Random deviates from the exponential distribution
-
-      f_cdf              -- CDF of the F distribution
-      f_inv              -- Quantile function of the F distribution
-      f_pdf              -- PDF of the F distribution
-      f_rnd              -- Random deviates from the F distribution
-
-      gamma_cdf          -- CDF of the Gamma distribution
-      gamma_inv          -- Quantile function of the Gamma distribution
-      gamma_pdf          -- PDF of the Gamma distribution
-      gamma_rnd          -- Random deviates from the Gamma distribution
-
-      geometric_cdf      -- CDF of the geometric distribution
-      geometric_inv      -- Quantile function of the geometric distribution
-      geometric_pdf      -- PDF of the geometric distribution
-      geometric_rnd      -- Random deviates from the geometric distribution
-
-      hypergeometric_cdf -- CDF of the hypergeometric distribution
-      hypergeometric_inv -- Random deviates from hypergeometric distribution
-      hypergeometric_pdf -- PDF of the hypergeometric distribution
-      hypergeometric_rnd -- Random deviates from hypergeometric distribution
-
-      kolmogorov_smirnov_cdf -- CDF of the Kolmogorov-Smirnov distribution
-
-      laplace_cdf        -- CDF of the Laplace distribution
-      laplace_inv        -- Quantile function of the Laplace distribution
-      laplace_pdf        -- PDF of the Laplace distribution
-      laplace_rnd        -- Random deviates from the Laplace distribution
-
-      logistic_cdf       -- CDF of the logistic distribution
-      logistic_inv       -- Quantile function of the logistic distribution
-      logistic_pdf       -- PDF of the logistic distribution
-      logistic_rnd       -- Random deviates from the logistic distribution
-
-      lognormal_cdf      -- CDF of the log normal distribution
-      lognormal_inv      -- Quantile function of the log normal distribution
-      lognormal_pdf      -- PDF of the log normal distribution
-      lognormal_rnd      -- Random deviates from the log normal distribution
-
-      normal_cdf         -- CDF of the normal distribution
-      normal_inv         -- Quantile function of the normal distribution
-      normal_pdf         -- PDF of the normal distribution
-      normal_rnd         -- Random deviates from the normal distribution
-
-      pascal_cdf         -- CDF of the Pascal (negative binomial) distribution
-      pascal_inv         -- Quantile function of the Pascal distribution
-      pascal_pdf         -- PDF of the Pascal (negative binomial) distribution
-      pascal_rnd         -- Random deviates from the Pascal distribution
-
-      poisson_cdf        -- CDF of the Poisson distribution
-      poisson_inv        -- Quantile function of the Poisson distribution
-      poisson_pdf        -- PDF of the Poisson distribution
-      poisson_rnd        -- Random deviates from the Poisson distribution
-
-      stdnormal_cdf      -- CDF of the standard normal distribution
-      stdnormal_inv      -- Quantile function of standard normal distribution
-      stdnormal_pdf      -- PDF of the standard normal distribution
-      stdnormal_rnd      -- Random deviates from standard normal distribution
-
-      t_cdf              -- CDF of the t distribution
-      t_inv              -- Quantile function of the t distribution
-      t_pdf              -- PDF of the t distribution
-      t_rnd              -- Random deviates from the t distribution
-
-      uniform_cdf        -- CDF of the uniform distribution
-      uniform_inv        -- Quantile function of the uniform distribution
-      uniform_pdf        -- PDF of the uniform distribution
-      uniform_rnd        -- Random deviates from the uniform distribution
-
-      weibull_cdf        -- CDF of the Weibull distribution
-      weibull_inv        -- Quantile function of the Weibull distribution
-      weibull_pdf        -- PDF of the Weibull distribution
-      weibull_rnd        -- Random deviates from the Weibull distribution
-
-      wiener_rnd         -- Simulate a Wiener process
-
-    In statistics/models (new directory):
-
-      logistic_regression             -- ordinal logistic regression
-      logistic_regression_derivatives -- derivates of log-likelihood
-                                         in logistic regression
-      logistic_regression_likelihood  -- likelihood in logistic regression
-
-    In statistics/tests (new directory):
-
-      anova                       -- one-way analysis of variance
-      bartlett_test               -- bartlett test for homogeneity of variances
-      chisquare_test_homogeneity  -- chi-square test for homogeneity
-      chisquare_test_independence -- chi-square test for independence
-      cor_test                    -- test for zero correlation
-      f_test_regression           -- test linear hypotheses in linear
-                                     regression model
-      hotelling_test              -- test for mean of a multivariate normal
-      hotelling_test_2            -- compare means of two multivariate normals
-      kolmogorov_smirnov_test     -- one-sample Kolmogorov-Smirnov test
-      kolmogorov_smirnov_test_2   -- two-sample Kolmogorov-Smirnov test
-      kruskal_wallis_test         -- kruskal-Wallis test
-      manova                      -- one-way multivariate analysis of variance
-      mcnemar_test                -- mcnemar's test for symmetry
-      prop_test_2                 -- compare two proportions
-      run_test                    -- run test for independence
-      sign_test                   -- sign test
-      t_test                      -- student's one-sample t test
-      t_test_2                    -- student's two-sample t test
-      t_test_regression           -- test one linear hypothesis in linear
-                                     regression model
-      u_test                      -- mann-Whitney U-test
-      var_test                    -- f test to compare two variances
-      welch_test                  -- welch two-sample t test
-      wilcoxon_test               -- wilcoxon signed-rank test
-      z_test                      -- test for mean of a normal sample with
-                                     known variance
-      z_test_2                    -- compare means of two normal samples with
-                                     known variances
-
-  * The save command now accepts the option -append to save the
-    variables at the end of the file, leaving the existing contents.
-
-  * New command-line option --no-history (also available using the
-    single character option -H) inhibits saving command history.
-
-  * The mkoctfile script now accepts -DDEF options and passes them on
-    to the C and C++ compilers.
-
-  * Running `make check' should work now before you run `make install',
-    even if you build a copy of Octave that depends on shared versions
-    of the Octave libraries.
-
-  * For matrices, x(:) now works and returns a column vector no matter
-    what the value of do_fortran_indexing is.
-
-  * New keywords __FILE__ and __LINE__ expand to the name of the file
-    that is being read and the current input line number, respectively.
-
-  * Octave's expression parser is more general and consistent.  It is
-    now possible to access structure elements and index arbitrary
-    values.  For example, expressions like
-
-      my_home_dir = getpwuid (getuid ()) . dir;
-
-    and
-
-      svd (x) (1:5)
-
-    now work.
-
-  * New built-in variable `print_rhs_assign_val' controls what is
-    printed when an assignment expression is evaluated.  If it is
-    zero, the value of the variable on the left hand side (after the
-    assignment) is printed.  If it is nonzero, the value of the right
-    hand side (i.e., the result of the expression) is printed.  The
-    default value of is zero, so the behavior is the same as in
-    previous versions of Octave.
-
-  * tmpnam now takes two optional arguments, DIR, and PREFIX.  For
-    example, tmpnam ("/foo", "bar-") returns a file name like
-    "/foo/bar-10773baa".  If DIR is omitted or empty, the value of the
-    environment variable TMPDIR, or /tmp is used.  If PREFIX is
-    omitted, "oct-" is used.
-
-  * The built-in variable `PWD' has been removed.  If you need to get
-    the value of the current working directory, use the pwd() function
-    instead.
-
-  * New operators.  Octave's parser now recognizes the following
-    operators:  << >> += -= *= /= .+= .-= .*= ./= &= |= <<= >>=.  So
-    far, there are only a few operations defined that actually use
-    them (this should change before 2.1 is released).
-
-  * New built-in data types:
-
-    logical:
-
-      A true value is represented by 1, and false value by 0.
-      Comparison operations like <, <=, ==, >, >=, and != now return
-      logical values.  Indexing operations that use zero-one style
-      indexing must now use logical values.  You can use the new
-      function logical() to convert a numeric value to a logical
-      value.  This avoids the need for the built-in variable
-      `prefer_zero_one_indexing', so it has been removed.  Logical
-      values are automatically converted to numeric values where
-      appropriate.
-
-    file:
-
-      A file object represents an open Octave stream object.  The
-      fopen function now returns a file object instead of an integer.
-      File objects can be converted to integers automatically, and the
-      other functions that work with file ids still work with
-      integers, so this change should be backward compatible.
-
-      The binary left-shift operator `<<' has been defined to work as
-      in C++ for file objects and built-in types.  For example,
-
-        my_stream = fopen ("foo", "w");
-        my_stream << "x = " << pi << " marks the spot\n";
-
-      writes `x = 3.1416 marks the spot' in the file foo.
-
-      The built-in variables stdin, stdout, and stderr are now also
-      file objects instead of integers.
-
-    list:
-
-      A list is an array of Octave objects.  It can be indexed using
-      the normal indexing operator.  For example,
-
-        x = list ([1,2;3,4], 1, "foo");
-        stdout << x(2) << "\n"
-        1
-        stdout << x;
-        (
-         [1] =
-
-           1  2
-           3  4
-
-          [2] = 1
-          [3] = foo
-        )
-
-      There is currently no special syntax for creating lists; you
-      must use the list function.
-
-  * Commas in global statements are no longer special.  They are now
-    treated as command separators.  This removes a conflict in the
-    grammar and is consistent with the way Matlab behaves.  The
-    variable `warn_comma_in_global_decl' has been eliminated.
-
-  * It is now possible to declare static variables that retain their
-    values across function calls.  For example,
-
-      function ncall = f () static n = 0; ncall = ++n; endfunction
-
-    defines a function that returns the number of times that it has
-    been called.
-
-  * Within user-defined functions, the new automatic variable `argn'
-    contains the names of the arguments that were passed to the
-    function.  For example,
-
-      function f (...)
-        for i = 1:nargin
-          stdout << "argn(" << i << ") = `" << deblank (argn(i,:)) \
-                 << "' and its value is " << va_arg () << "\n";
-        endfor
-      endfunction
-      f (1+2, "foo", sin (pi/2))
-
-    prints
-
-      argn(1) = `1 + 2' and its value is 3
-      argn(2) = `"foo"' and its value is foo
-      argn(3) = `sin (pi)' and its value is 1
-
-    on the standard output stream.  If nargin is zero, argn is not defined.
-  * Functions like quad, fsolve, and lsode can take either a function
-    name or a simple function body as a string.  For example,
-
-      quad ("sqrt (x)", 0, 1)
-
-    is equivalent to
-
-      function y = f (x) y = sqrt (x); endfunction
-      quad ("f", 0, 1)
-
-  * If the argument to eig() is symmetric, Octave uses the specialized
-    Lapack subroutine for symmetric matrices for a significant
-    increase in performance.
-
-  * If the argument to lsode that names the user-supplied function is
-    a 2-element string array, the second element is taken as the name
-    of the Jacobian function.  The named function should have the
-    following form:
-
-      JAC = f (X, T)
-
-    where JAC is the Jacobian matrix of partial derivatives of the
-    right-hand-side functions that define the set of differential
-    equations with respect to the state vector X.
-
-  * Global variables are now initialized to the empty matrix, for
-    compatibility with Matlab.
-
-  * Explicit initialization of global variables only happens once.
-    For example, after the following statements are evaluated, g still
-    has the value 1.
-
-      global g = 1
-      global g = 2
-
-    This is useful for initializing global variables that are used to
-    maintain state information that is shared among several functions.
-
-  * Structure elements completion on the command line actually works
-    now.
-
-  * The new built-in variable `fixed_point_format' controls whether
-    Octave uses a scaled fixed-point format for displaying matrices.
-    The default value is 0 unless you use --traditional.
-
-  * The function sumsq now computes sum (x .* conj (x)) for complex values.
-
-  * The new built-in variable max_recursion_depth allows you to
-    prevent Octave from attempting infinite recursion.  The default
-    value is 256.
-
-  * Octave now uses kpathsea 3.2.
-
-  * New configure option, --enable-readline.
-
-  * New configure option, --enable-static.
-
-Summary of changes for version 2.0.7 (1997-06-04):
--------------------------------------------------
-
-  This is a bug-fixing release.  There are no new user-visible features.
-
-Summary of changes for version 2.0.6 (1997-05-27):
--------------------------------------------------
-
-  This is primarily a bug-fixing release.  There are only a few new
-  user-visible features.
-
-  * The new built-in variable default_eval_print_flag controls whether
-    Octave prints the results of commands executed by eval() that do
-    not end with semicolons.  The default is 1.
-
-  * The new built-in constant OCTAVE_HOME specifies the top-level
-    directory where Octave is installed.
-
-  * Octave no longer includes functions to work with NPSOL or QPSOL,
-    because they are not free software.
-
-  * The new built-in variable called kluge_procbuf_delay specifies the
-    number of microseconds to delay in the parent process after
-    forking.  By default on gnu-win32 systems, it's set to 500000 (1/2
-    second).  On other systems, the default value is 0.  Delaying for
-    a short time in the parent after forking seems to avoid problems
-    in which communicating with subprocesses via pipes would sometimes
-    cause Octave to hang.  I doubt that the delay is really the right
-    solution.  If anyone has a better idea, I'd love to hear it.
-
-Summary of changes for version 2.0.5 (1997-03-01):
--------------------------------------------------
-
-  * A `switch' statement is now available.  See the Statements chapter
-    in the manual for details.
-
-  * Commands like ls, save, and cd may now also be used as formal
-    parameters for functions.
-
-  * More tests.
-
-Summary of changes for version 2.0.4 (1997-02-20):
--------------------------------------------------
-
-  * It is now possible to use commands like ls, save, and cd as simple
-    variable names.  They still cannot be used as formal parameters
-    for functions, or as the names of structure variables.  Failed
-    assignments leave them undefined (you can recover the original
-    function definition using clear).
-
-  * Is is now possible to invoke commands like ls, save, and cd as
-    normal functions (for example, load ("foo", "x", "y", "z")).
-
-Summary of changes for version 2.0.3 (1997-02-18):
--------------------------------------------------
-
-  * The manual has been completely revised and now corresponds much
-    more closely to the features of the current version.
-
-  * The return value for assignment expressions is now the RHS since
-    that is more consistent with the way other programming languages
-    work.  However, Octave still prints the entire LHS value so that
-
-      x = zeros (1, 2);
-      x(2) = 1
-
-    still prints
-
-      x =
-
-        0  1
-
-    but an assignment like
-
-      z = x(2) = 1
-
-    sets z to 1 (not [ 0, 1 ] as in previous versions of Octave).
-
-  * It is now much easier to make binary distributions.  See the
-    Binary Distributions section of the manual for more details.
-
-Summary of changes for version 2.0.2 (1997-01-27):
--------------------------------------------------
-
-  * Octave now stops executing commands from a script file if an error
-    is encountered.
-
-  * The return, and break commands now cause Octave to quit executing
-    commands from script files.  When used in invalid contexts, the
-    break, continue, and return commands are now simply ignored
-    instead of producing parse errors.
-
-  * size ("") is now [0, 0].
-
-  * New functions:
-
-      sleep   -- pause execution for a specified number of seconds
-      usleep  -- pause execution for a specified number of microseconds
-
-Summary of changes for version 2.0 (1996-12-10):
------------------------------------------------
-
-  * The set and show commands for setting and displaying gnuplot
-    parameters have been replaced by gset and gshow.  This change will
-    probably break lots of things, but it is necessary to allow for
-    compatibility with the Matlab graphics and GUI commands in a
-    future version of Octave.  (For now, the old set and show commands
-    do work, but they print an annoying warning message to try to get
-    people to switch to using gset.)
-
-  * Octave has been mostly ported to Windows NT and Windows 95 using
-    the beta 17 release of the Cygnus GNU-WIN32 tools.  Not everything
-    works, but it is usable.  See the file README.WINDOWS for more
-    information.
-
-  * Dynamic linking works on more systems using dlopen() and friends
-    (most modern Unix systems) or shl_load() and friends (HP/UX
-    systems).  A simple example is provided in examples/hello.cc.
-    For this feature to work, you must configure Octave with
-    --enable-shared.  You may also need to have a shared-library
-    version of libg++ and libstdc++.
-
-  * New data types can be added to Octave by writing a C++ class.  On
-    systems that support dynamic linking, new data types can be added
-    to an already running Octave binary.  A simple example appears in
-    the file examples/make_int.cc.  Other examples are the standard
-    Octave data types defined in the files src/ov*.{h,cc} and
-    src/op-*.cc.
-
-  * The configure option --enable-bounds-check turns on bounds
-    checking on element references for Octave's internal array and
-    matrix classes.  It's enabled by default.  To disable this
-    feature, configure Octave with --disable-bounds-check.
-
-  * The C-style I/O functions (fopen, fprintf, etc.) have been
-    rewritten to be more compatible with Matlab.  The fputs function
-    has also been added.  Usage of the *printf functions that was
-    allowed in previous versions of Octave should still work.
-    However, there is no way to make the new versions of the *scanf
-    functions compatible with Matlab *and* previous versions of
-    Octave.  An optional argument to the *scanf functions is now
-    available to make them behave in a way that is compatible with
-    previous versions of Octave.
-
-  * Octave can now read files that contain columns of numbers only,
-    with no header information.  The name of the loaded variable is
-    constructed from the file name.  Each line in the file must have
-    the same number of elements.
-
-  * The interface to the pager has changed.  The new built-in variable
-    `page_output_immediately' controls when Octave sends output to the
-    pager.  If it is nonzero, Octave sends output to the pager as soon
-    as it is available.  Otherwise, Octave buffers its output and
-    waits until just before the prompt is printed to flush it to the
-    pager.
-
-  * Expressions of the form
-
-      A(i,j) = x
-
-    where X is a scalar and the indices i and j define a matrix of
-    elements now work as you would expect rather than giving an error.
-    I am told that this is how Matlab 5.0 will behave when it is
-    released.
-
-  * Indexing of character strings now works.
-
-  * The echo command has been implemented.
-
-  * The document command is now a regular function.
-
-  * New method for handling errors:
-
-      try
-        BODY
-      catch
-        CLEANUP
-      end_try_catch
-
-    Where BODY and CLEANUP are both optional and may contain any
-    Octave expressions or commands.  The statements in CLEANUP are
-    only executed if an error occurs in BODY.
-
-    No warnings or error messages are printed while BODY is
-    executing.  If an error does occur during the execution of BODY,
-    CLEANUP can access the text of the message that would have been
-    printed in the builtin constant __error_text__.  This is the same
-    as eval (TRY, CATCH) (which may now also use __error_text__) but
-    it is more efficient since the commands do not need to be parsed
-    each time the TRY and CATCH statements are evaluated.
-
-  * Octave no longer parses the help command by grabbing everything
-    after the keyword `help' until a newline character is read.  To
-    get help for `;' or `,', now, you need to use the command
-    `help semicolon' or `help comma'.
-
-  * Octave's parser now does some simple constant folding.  This means
-    that expressions like 3*i are now evaluated only once, when a
-    function is compiled, and the right hand side of expressions like
-    a = [1,2;3,4] are treated as true matrix constants rather than
-    lists of elements which must be evaluated each time they are
-    needed.
-
-  * Built-in variables that can take values of "true" and "false" can
-    now also be set to any nonzero scalar value to indicate "true",
-    and 0 to indicate "false".
-
-  * New built-in variables `history_file', `history_size', and
-    `saving_history'.
-
-  * New built-in variable `string_fill_char' specifies the character
-    to fill with when creating arrays of strings.
-
-  * If the new built-in variable `gnuplot_has_frames' is nonzero,
-    Octave assumes that your copy of gnuplot includes support for
-    multiple plot windows when using X11.
-
-    If the new built-in variable `gnuplot_has_multiplot' is nonzero,
-    Octave assumes that your copy of gnuplot has the multiplot support
-    that is included in recent 3.6beta releases.
-
-    The initial values of these variables are determined by configure,
-    but can be changed in your startup script or at the command line
-    in case configure got it wrong, or if you upgrade your gnuplot
-    installation.
-
-  * The new plot function `figure' allows multiple plot windows when
-    using newer versions of gnuplot with X11.
-
-  * Octave now notices when the plotter has exited unexpectedly.
-
-  * New built-in variable `warn_missing_semicolon'.  If nonzero, Octave
-    will warn when statements in function definitions don't end in
-    semicolons.  The default value is 0.
-
-  * Octave now attempts to continue after floating point exceptions
-    or out-of-memory errors.
-
-  * If Octave crashes, it now attempts to save all user-defined
-    variables in a file named `octave-core' in the current directory
-    before exiting.
-
-  * It is now possible to get the values of individual option settings
-    for the dassl, fsolve, lsode, npsol, qpsol, and quad functions
-    using commands like
-
-      dassl_reltol = dassl_options ("relative tolerance");
-
-  * The svd() function no longer computes the left and right singular
-    matrices unnecessarily.  This can significantly improve
-    performance for large matrices if you are just looking for the
-    singular values.
-
-  * The filter() function is now a built-in function.
-
-  * New function randn() returns a pseudo-random number from a normal
-    distribution.  The rand() and randn() functions have separate
-    seeds and generators.
-
-  * Octave's command-line arguments are now available in the built-in
-    variable `argv'.  The program name is also available in the
-    variables `program_invocation_name' and `program_name'.  If
-    executing a script from the command line (e.g., octave foo.m) or
-    using the `#! /bin/octave' hack, the program name is set to the
-    name of the script.
-
-  * New built-in variable `completion_append_char' used as the
-    character to append to successful command-line completion
-    attempts.  The default is " " (a single space).
-
-  * Octave now uses a modified copy of the readline library from
-    version 1.14.5 of GNU bash.
-
-  * In prompt strings, `\H' expands to the whole host name.
-
-  * New built-in variable `beep_on_error'.  If nonzero, Octave will try
-    to ring your terminal's bell before printing an error message.
-    The default value is 0.
-
-  * For functions defined from files, the type command now prints the
-    text of the file.  You can still get the text reconstructed from
-    the parse tree by using the new option -t (-transformed).
-
-  * New command-line argument --traditional sets the following
-    preference variables for compatibility with Matlab:
-
-      PS1                           = ">> "
-      PS2                           = ""
-      beep_on_error                 = 1
-      default_save_format           = "mat-binary"
-      define_all_return_values      = 1
-      do_fortran_indexing           = 1
-      empty_list_elements_ok        = 1
-      implicit_str_to_num_ok        = 1
-      ok_to_lose_imaginary_part     = 1
-      page_screen_output            = 0
-      prefer_column_vectors         = 0
-      prefer_zero_one_indexing      = 1
-      print_empty_dimensions        = 0
-      treat_neg_dim_as_zero         = 1
-      warn_function_name_clash      = 0
-      whitespace_in_literal_matrix  = "traditional"
-
-  * New functions:
-
-      readdir  -- returns names of files in directory as array of strings
-      mkdir    -- create a directory
-      rmdir    -- remove a directory
-      rename   -- rename a file
-      unlink   -- delete a file
-      umask    -- set permission mask for file creation
-      stat     -- get information about a file
-      lstat    -- get information about a symbolic link
-      glob     -- perform filename globbing
-      fnmatch  -- match strings with filename globbing patterns
-      more     -- turn the pager on or off
-      gammaln  -- alias for lgamma
-
-  * New audio functions from Andreas Weingessel
-    <Andreas.Weingessel@ci.tuwien.ac.at>.
-
-      lin2mu     -- linear to mu-law encoding
-      loadaudio  -- load an audio file to a vector
-      mu2lin     -- mu-law to linear encoding
-      playaudio  -- play an audio file
-      record     -- record sound and store in vector
-      saveaudio  -- save a vector as an audio file
-      setaudio   -- executes mixer shell command
-
-  * New plotting functions from Vinayak Dutt.  Ones dealing with
-    multiple plots on one page require features from gnuplot 3.6beta
-    (or later).
-
-      bottom_title  -- put title at the bottom of the plot
-      mplot         -- multiplot version of plot
-      multiplot     -- switch multiple-plot mode on or off
-      oneplot       -- return to one plot per page
-      plot_border   -- put a border around plots
-      subplot       -- position multiple plots on a single page
-      subwindow     -- set subwindow position for next plot
-      top_title     -- put title at the top of the plot
-      zlabel        -- put a label on the z-axis
-
-  * New string functions
-
-      bin2dec  -- convert a string of ones and zeros to an integer
-      blanks   -- create a string of blanks
-      deblank  -- delete trailing blanks
-      dec2bin  -- convert an integer to a string of ones and zeros
-      dec2hex  -- convert an integer to a hexadecimal string
-      findstr  -- locate occurrences of one string in another
-      hex2dec  -- convert a hexadecimal string to an integer
-      index    -- return position of first occurrence a string in another
-      rindex   -- return position of last occurrence a string in another
-      split    -- divide one string into pieces separated by another
-      str2mat  -- create a string matrix from a list of strings
-      strrep   -- replace substrings in a string
-      substr   -- extract a substring
-
-    The following functions return a matrix of ones and zeros.
-    Elements that are nonzero indicate that the condition was true for
-    the corresponding character in the string array.
-
-      isalnum   -- letter or a digit
-      isalpha   -- letter
-      isascii   -- ascii
-      iscntrl   -- control character
-      isdigit   -- digit
-      isgraph   -- printable (but not space character)
-      islower   -- lower case
-      isprint   -- printable (including space character)
-      ispunct   -- punctuation
-      isspace   -- whitespace
-      isupper   -- upper case
-      isxdigit  -- hexadecimal digit
-
-    These functions return new strings.
-
-      tolower  -- convert to lower case
-      toupper  -- convert to upper case
-
-  * New function, fgetl.  Both fgetl and fgets accept an optional
-    second argument that specifies a maximum number of characters to
-    read, and the function fgets is now compatible with Matlab.
-
-  * Printing in hexadecimal format now works (format hex).  It is also
-    possible to print the internal bit representation of a value
-    (format bit).  Note that these formats are only implemented for
-    numeric values.
-
-  * Additional structure features:
-
-    -- Name completion now works for structures.
-
-    -- Values and names of structure elements are now printed by
-       default.  The new built-in variable `struct_levels_to_print'
-       controls the depth of nested structures to print.  The default
-       value is 2.
-
-    -- New functions:
-
-       struct_contains (S, NAME) -- returns 1 if S is a structure with
-                                    element NAME; otherwise returns 0.
-
-       struct_elements (S)       -- returns the names of all elements
-                                    of structure S in an array of strings.
-
-  * New io/subprocess functions:
-
-      fputs    -- write a string to a file with no formatting
-      popen2   -- start a subprocess with 2-way communication
-      mkfifo   -- create a FIFO special file
-      popen    -- open a pipe to a subprocess
-      pclose   -- close a pipe from a subprocess
-      waitpid  -- check the status of or wait for subprocesses
-
-  * New time functions:
-
-      asctime    -- format time structure according to local format
-      ctime      -- equivalent to `asctime (localtime (TMSTRUCT))'
-      gmtime     -- return time structure corresponding to UTC
-      localtime  -- return time structure corresponding to local time zone
-      strftime   -- print given time structure using specified format
-      time       -- return current time
-
-    The `clock' and `date' functions are now implemented in M-files
-    using these basic functions.
-
-  * Access to additional Unix system calls:
-
-      dup2     -- duplicate a file descriptor
-      exec     -- replace current process with a new process
-      fcntl    -- control open file descriptors
-      fork     -- create a copy of the current process
-      getpgrp  -- return the process group id of the current process
-      getpid   -- return the process id of the current process
-      getppid  -- return the process id of the parent process
-      getuid   -- return the real user id of the current process
-      getgid   -- return the real group id of the current process
-      geteuid  -- return the effective user id of the current process
-      getegid  -- return the effective group id of the current process
-      pipe     -- create an interprocess channel
-
-  * Other new functions:
-
-      commutation_matrix  -- compute special matrix form
-      duplication_matrix  -- compute special matrix form
-      common_size.m       -- bring arguments to a common size
-      completion_matches  -- perform command completion on string
-      tilde_expand        -- perform tilde expansion on string
-
-      meshgrid  -- compatible with Matlab's meshgrid function
-      tmpnam    -- replaces octave_tmp_file_name
-      atexit    -- register functions to be called when Octave exits
-      putenv    -- define an environment variable
-      bincoeff  -- compute binomial coefficients
-      nextpow2  -- compute the next power of 2 greater than a number
-      detrend   -- remove a best fit polynomial from data
-      erfinv    -- inverse error function
-      shift     -- perform a circular shift on the elements of a matrix
-      pow2      -- compute 2 .^ x
-      log2      -- compute base 2 logarithms
-      diff      -- compute differences of matrix elements
-      vech      -- stack columns of a matrix below the diagonal
-      vec       -- stack columns of a matrix to form a vector
-      xor       -- compute exclusive or
-
-  * Functions for getting info from the password database on Unix systems:
-
-      getpwent  -- read entry from password-file stream, opening if necessary
-      getpwuid  -- search for password entry with matching user ID
-      getpwnam  -- search for password entry with matching username
-      setpwent  -- rewind the password-file stream
-      endpwent  -- close the password-file stream
-
-  * Functions for getting info from the group database on Unix systems:
-
-      getgrent  -- read entry from group-file stream, opening if necessary
-      getgrgid  -- search for group entry with matching group ID
-      getgrnam  -- search for group entry with matching group name
-      setgrent  -- rewind the group-file stream
-      endgrent  -- close the group-file stream
-
-  * The New function octave_config_info returns a structure containing
-    information about how Octave was configured and compiled.
-
-  * New function getrusage returns a structure containing system
-    resource usage statistics.  The `cputime' function is now defined
-    in an M-file using getrusage.
-
-  * The info reader is now a separate binary that runs as a
-    subprocess.  You still need the info reader distributed with
-    Octave though, because there are some new command-line arguments
-    that are not yet available in the public release of Info.
-
-  * There is a new built-in variable, INFO_PROGRAM, which is used as
-    the name of the info program to run.  Its initial value is
-    $OCTAVE_HOME/lib/octave/VERSION/exec/ARCH/info, but that value can
-    be overridden by the environment variable OCTAVE_INFO_PROGRAM, or
-    the command line argument --info-program NAME, or by setting the
-    value of INFO_PROGRAM in a startup script.
-
-  * There is a new built-in variable, EXEC_PATH, which is used as
-    the list of directories to search when executing subprograms.  Its
-    initial value is taken from the environment variable
-    OCTAVE_EXEC_PATH (if it exists) or PATH, but that value can be
-    overridden by the command line argument --exec-path PATH, or
-    by setting the value of EXEC_PATH in a startup script.  If the
-    EXEC_PATH begins (ends) with a colon, the directories
-    $OCTAVE_HOME/lib/octave/VERSION/exec/ARCH and $OCTAVE_HOME/bin are
-    prepended (appended) to EXEC_PATH (if you don't specify a value
-    for EXEC_PATH explicitly, these special directories are prepended
-    to your PATH).
-
-  * If it is present, Octave will now use an `ls-R' database file to
-    speed up recursive path searching.  Octave looks for a file called
-    ls-R in the directory specified by the environment variable
-    OCTAVE_DB_DIR.  If that is not set but the environment variable
-    OCTAVE_HOME is set, Octave looks in $OCTAVE_HOME/lib/octave.
-    Otherwise, Octave looks in the directory $datadir/octave (normally
-    /usr/local/lib/octave).
-
-  * New examples directory.
-
-  * There is a new script, mkoctfile, that can be used to create .oct
-    files suitable for dynamic linking.
-
-  * Many more bug fixes.
-
-  * ChangeLogs are now kept in each subdirectory.
-
-See NEWS.1 for old news.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/NEWS.3	Fri Dec 31 17:03:44 2021 +0100
@@ -0,0 +1,1721 @@
+Summary of important user-visible changes for version 3.8 (2013-12-27):
+----------------------------------------------------------------------
+
+  ** One of the biggest new features for Octave 3.8 is a graphical user
+     interface.  It is the one thing that users have requested most
+     often over the last few years and now it is almost ready.  But
+     because it is not quite as polished as we would like, we have
+     decided to wait until the 4.0.x release series before making the
+     GUI the default interface (until then, you can use the --force-gui
+     option to start the GUI).
+
+     Given the length of time and the number of bug fixes and
+     improvements since the last major release Octave, we also decided
+     against delaying the release of all these new improvements any
+     longer just to perfect the GUI.  So please enjoy the 3.8 release of
+     Octave and the preview of the new GUI.  We believe it is working
+     reasonably well, but we also know that there are some obvious rough
+     spots and many things that could be improved.
+
+     WE NEED YOUR HELP.  There are many ways that you can help us fix
+     the remaining problems, complete the GUI, and improve the overall
+     user experience for both novices and experts alike:
+
+       * If you are a skilled software developer, you can help by
+         contributing your time to help with Octave's development.  See
+         http://octave.org/get-involved.html for more information.
+
+       * If Octave does not work properly, you are encouraged
+         report the problems you find.  See http://octave.org/bugs.html
+         for more information about how to report problems.
+
+       * Whether you are a user or developer, you can help to fund the
+         project.  Octave development takes a lot of time and expertise.
+         Your contributions help to ensure that Octave will continue to
+         improve.  See http://octave.org/donate.html for more details.
+
+    We hope you find Octave to be useful.  Please help us make it even
+    better for the future!
+
+ ** Octave now uses OpenGL graphics by default with FLTK widgets.  If
+    OpenGL libraries or FLTK widgets are not available when Octave is
+    built, gnuplot is used.  You may also choose to use gnuplot for
+    graphics by executing the command
+
+      graphics_toolkit ("gnuplot")
+
+    Adding this command to your ~/.octaverc file will set the default
+    for each session.
+
+ ** Printing or saving figures with OpenGL graphics requires the
+    gl2ps library which is no longer distributed with Octave.  The
+    software is widely available in most package managers.  If a
+    pre-compiled package does not exist for your system, you can find
+    the current sources at http://www.geuz.org/gl2ps/.
+
+ ** Octave now supports nested functions with scoping rules that are
+    compatible with Matlab.  A nested function is one declared and defined
+    within the body of another function.  The nested function is only
+    accessible from within the enclosing function which makes it one
+    method for making private functions whose names do not conflict with those
+    in the global namespace (See also subfunctions and private functions).
+    In addition, variables in the enclosing function are visible within the
+    nested function.  This makes it possible to have a pseudo-global variable
+    which can be seen by a group of functions, but which is not visible in
+    the global namespace.
+
+    Example:
+    function outerfunc (...)
+      ...
+      function nested1 (...)
+        ...
+        function nested2 (...)
+           ...
+        endfunction
+      endfunction
+
+      function nested3 (...)
+        ...
+      endfunction
+    endfunction
+
+ ** Line continuations inside character strings have changed.
+
+    The sequence '...' is no longer recognized as a line continuation
+    inside a character string.  A backslash '\' followed by a newline
+    character is no longer recognized as a line continuation inside
+    single-quoted character strings.  Inside double-quoted character
+    strings, a backslash followed by a newline character is still
+    recognized as a line continuation, but the backslash character must
+    be followed *immediately* by the newline character.  No whitespace or
+    end-of-line comment may appear between them.
+
+ ** Backslash as a continuation marker outside of double-quoted strings
+    is now deprecated.
+
+    Using '\' as a continuation marker outside of double quoted strings
+    is now deprecated and will be removed from a future version of
+    Octave.  When that is done, the behavior of
+
+      (a \
+       b)
+
+    will be consistent with other binary operators.
+
+ ** Redundant terminal comma accepted by parser
+
+    A redundant terminal comma is now accepted in matrix
+    definitions which allows writing code such as
+
+    [a,...
+     b,...
+     c,...
+    ] = deal (1,2,3)
+
+ ** Octave now has limited support for named exceptions
+
+    The following syntax is now accepted:
+
+      try
+        statements
+      catch exception-id
+        statements
+      end
+
+    The exception-id is a structure with the fields "message" and
+    "identifier".  For example
+
+      try
+        error ("Octave:error-id", "error message");
+      catch myerr
+        printf ("identifier: %s\n", myerr.identifier);
+        printf ("message:    %s\n", myerr.message);
+      end_try_catch
+
+    When classdef-style classes are added to Octave, the exception-id
+    will become an MException object.
+
+ ** Warning states may now be set temporarily, until the end of the
+    current function, using the syntax
+
+      warning STATE ID "local"
+
+    in which STATE may be "on", "off", or "error".  Changes to warning
+    states that are set locally affect the current function and all
+    functions called from the current scope.  The previous warning state
+    is restored on return from the current function.  The "local"
+    option is ignored if used in the top-level workspace.
+
+ ** Warning IDs renamed:
+
+    Octave:array-as-scalar => Octave:array-to-scalar
+    Octave:array-as-vector => Octave:array-to-vector
+
+ ** 'emptymatch', 'noemptymatch' options added to regular expressions.
+
+    With this addition Octave now accepts the entire set of Matlab options
+    for regular expressions.  'noemptymatch' is the default, but 'emptymatch'
+    has certain uses where you need to match an assertion rather than actual
+    characters.  For example,
+
+    regexprep ('World', '^', 'Hello ', 'emptymatch')
+      => Hello World
+
+    where the pattern is actually the assertion '^' or start-of-line.
+
+ ** For compatibility with Matlab, the regexp, regexpi, and regexprep
+    functions now process backslash escape sequences in single-quoted pattern
+    strings.  In addition, the regexprep function now processes backslash
+    escapes in single-quoted replacement strings.  For example,
+
+    regexprep (str, '\t', '\n')
+
+    would search the variable str for a TAB character (escape sequence \t)
+    and replace it with a NEWLINE (escape sequence \n).  Previously the
+    expression would have searched for a literal '\' followed by 't' and
+    replaced the two characters with the sequence '\', 'n'.
+
+ ** A TeX parser has been implemented for the FLTK toolkit and is the default
+    for any text object including titles and axis labels.  The TeX parser is
+    supported only for display on a monitor, not for printing.
+
+    A quick summary of features:
+
+    Code         Feature     Example             Comment
+    -----------------------------------------------------------------
+    _            subscript   H_2O                formula for water
+    ^            exponent    y=x^2               formula for parabola
+    \char        symbol      \beta               Greek symbol beta
+    \fontname    font        \fontname{Arial}    set Arial font
+    \fontsize    fontsize    \fontsize{16}       set fontsize 16
+    \color[rgb]  fontcolor   \color[rgb]{1 0 1}  set magenta color
+    \bf          bold        \bfBold Text        bold font
+    \it          italic      \itItalic Text      italic font
+    \sl          slanted     \slOblique Text     slanted font
+    \rm          normal      \bfBold\rmNormal    normal font
+    {}           group       {\bf Bold}Normal    group objects
+                             e^{i*\pi} = -1      group objects
+
+ ** The m-files in the plot directory have been overhauled.
+
+    The plot functions now produce output that is nearly visually compatible
+    with Matlab.  Plot performance has also increased, dramatically for some
+    functions such as comet and waitbar.  Finally, the documentation for most
+    functions has been updated so it should be clearer both how to use a
+    function and when a function is appropriate.
+
+ ** The m-files in the image directory have been overhauled.
+
+    The principal benefit is that Octave will now no longer automatically
+    convert images stored with integers to doubles.  Storing images as uint8
+    or uint16 requires only 1/8 or 1/4 the memory of an image stored using
+    doubles.  For certain operations, such as fft2, the image must still be
+    converted to double in order to work.
+
+    Other changes include fixes to the way indexed images are read from a
+    colormap depending on the image class (integer images have a -1 offset to
+    the colormap row number).
+
+ ** The imread and imwrite functions have been completely rewritten.
+
+    The main changes relate to the alpha channel, support for reading and
+    writing of floating point images, implemented writing of indexed images,
+    and appending images to multipage image files.
+
+    The issues that may arise due to backwards incompatibility are:
+
+      * imwrite no longer interprets a length of 2 or 4 in the third dimension
+        as grayscale or RGB with alpha channel (a length of 4 will be saved
+        as a CMYK image).  Alpha channel must be passed as separate argument.
+
+      * imread will always return the colormap indexes when reading an indexed
+        image, even if the colormap is not requested as output.
+
+      * transparency values are now inverted from previous Octave versions
+        (0 is for completely transparent instead of completely opaque).
+
+    In addition, the function imformats has been implemented to expand
+    reading and writing of images of different formats through imread
+    and imwrite.
+
+ ** The colormap function now provides new options--"list", "register",
+    and "unregister"--to list all available colormap functions, and to
+    add or remove a function name from the list of known colormap
+    functions.  Packages that implement extra colormaps should use these
+    commands with PKG_ADD and PKG_DEL statements.
+
+ ** strsplit has been modified to be compatible with Matlab.  There
+    are two instances where backward compatibility is broken.
+
+    (1) Delimiters are now string vectors, not scalars.
+
+    Octave's legacy behavior
+
+      strsplit ("1 2, 3", ", ")
+      ans =
+      {
+       [1,1] = 1
+       [1,2] = 2
+       [1,3] =
+       [1,4] = 3
+      }
+
+    Matlab compatible behavior
+
+      strsplit ("1 2, 3", ", ")
+      ans =
+      {
+       [1,1] = 1 2
+       [1,2] = 3
+      }
+
+    (2) By default, Matlab treats consecutive delimiters as a single
+    delimiter.  By default, Octave's legacy behavior was to return an
+    empty string for the part between the delmiters.
+
+    Where legacy behavior is desired, the call to strsplit() may be
+    replaced by ostrsplit(), which is Octave's original implementation of
+    strsplit().
+
+ ** The datevec function has been extended for better Matlab compatibility.
+    It now accepts string inputs in the following numerical formats: 12, 21,
+    22, 26, 29, 31.  This is undocumented, but verifiable, Matlab behavior.
+    In addition, the default for formats which do not specify a date is
+    January 1st of the current year.  The previous default was the current day,
+    month, and year.  This may produce changes in existing scripts.
+
+ ** The error function and its derivatives has been extended to accept complex
+    arguments.  The following functions now accept complex inputs:
+
+    erf  erfc  erfcx
+
+    In addition two new error functions erfi (imaginary error function) and
+    dawson (scaled imaginary error function) have been added.
+
+ ** The glpk function has been modified to reflect changes in the GLPK
+    library.  The "round" and "itcnt" options have been removed.  The
+    "relax" option has been replaced by the "rtest" option.  The numeric
+    values of error codes and of some options have also changed.
+
+ ** The kurtosis function has changed definition to be compatible with
+    Matlab.  It now returns the base kurtosis instead of the "excess kurtosis".
+    The old behavior can be had by changing scripts to normalize with -3.
+
+               "excess kurtosis" = kurtosis (x) - 3
+
+ ** The moment function has changed definition to be compatible with
+    Matlab.  It now returns the central moment instead of the raw moment.
+    The old behavior can be had by passing the type argument "r" for raw.
+
+ ** The default name of the Octave crash dump file is now
+    "octave-workspace" instead of "octave-core".  The exact name can
+    always be customized with the octave_core_file_name function.
+
+ ** A citation command has been added to display information on how to
+    cite Octave and packages in publications.  The package system will
+    look for and install CITATION files from packages.
+
+ ** The java package from Octave Forge is now part of core Octave.  The
+    following new functions are available for interacting with Java
+    directly from Octave:
+
+      debug_java     java_matrix_autoconversion
+      isjava         java_unsigned_autoconversion
+      java2mat       javaaddpath
+      javaArray      javaclasspath
+      javaMethod     javamem
+      javaObject     javarmpath
+                     usejava
+
+    In addition, the following functions that use the Java interface
+    are now available (provided that Octave is compiled with support for
+    Java enabled):
+
+      helpdlg    listdlg   questdlg
+      inputdlg   msgbox    warndlg
+
+ ** Other new functions added in 3.8.0:
+
+      atan2d                     erfi             lines
+      base64_decode              expint           linsolve
+      base64_encode              findfigs         missing_component_hook
+      betaincinv                 flintmax         polyeig
+      built_in_docstrings_file   fminsearch       prefdir
+      cmpermute                  gallery          preferences
+      cmunique                   gco              readline_re_read_init_file
+      colorcube                  hdl2struct       readline_read_init_file
+      copyobj                    history_save     rgbplot
+      dawson                     imformats        save_default_options
+      dblist                     importdata       shrinkfaces
+      desktop                    isaxes           splinefit
+      doc_cache_create           iscolormap       stemleaf
+      ellipj                     isequaln         strjoin
+      ellipke                    jit_debug        struct2hdl
+      erfcinv                    jit_enable       tetramesh
+                                 jit_startcnt     waterfall
+
+ ** Deprecated functions.
+
+    The following functions were deprecated in Octave 3.4 and have been
+    removed from Octave 3.8.
+
+      autocor    dispatch              is_global    setstr
+      autocov    fstat                 krylovb      strerror
+      betai      gammai                perror       values
+      cellidx    glpkmex               replot
+      cquad      is_duplicate_entry    saveimage
+
+    The following functions have been deprecated in Octave 3.8 and will
+    be removed from Octave 3.12 (or whatever version is the second major
+    release after 3.8):
+
+      default_save_options    java_new
+      gen_doc_cache           java_set
+      interp1q                java_unsigned_conversion
+      isequalwithequalnans    javafields
+      java_convert_matrix     javamethods
+      java_debug              re_read_readline_init_file
+      java_get                read_readline_init_file
+      java_invoke             saving_history
+
+
+    The following keywords have been deprecated in Octave 3.8 and will
+    be removed from Octave 3.12 (or whatever version is the second major
+    release after 3.8):
+
+      static
+
+    The following configuration variables have been deprecated in Octave
+    3.8 and will be removed from Octave 3.12 (or whatever version is the
+    second major release after 3.8):
+
+      CC_VERSION  (now GCC_VERSION)
+      CXX_VERSION (now GXX_VERSION)
+
+    The internal class <Octave_map> has been deprecated in Octave 3.8 and will
+    be removed from Octave 3.12 (or whatever version is the second major
+    release after 3.8).  Replacement classes are <octave_map> (struct array)
+    or <octave_scalar_map> for a single structure.
+
+Summary of important user-visible changes for version 3.6 (2012-01-15):
+----------------------------------------------------------------------
+
+ ** The PCRE library is now required to build Octave.  If a pre-compiled
+    package does not exist for your system, you can find PCRE sources
+    at http://www.pcre.org
+
+ ** The ARPACK library is no longer distributed with Octave.
+    If you need the eigs or svds functions you must provide an
+    external ARPACK through a package manager or by compiling it
+    yourself.  If a pre-compiled package does not exist for your system,
+    you can find the current ARPACK sources at
+    http://forge.scilab.org/index.php/p/arpack-ng
+
+ ** Many of Octave's binary operators (.*, .^, +, -, ...) now perform
+    automatic broadcasting for array operations which allows you to use
+    operator notation instead of calling bsxfun or expanding arrays (and
+    unnecessarily wasting memory) with repmat or similar idioms.  For
+    example, to scale the columns of a matrix by the elements of a row
+    vector, you may now write
+
+      rv .* M
+
+    In this expression, the number of elements of rv must match the
+    number of columns of M.  The following operators are affected:
+
+      plus      +  .+
+      minus     -  .-
+      times     .*
+      rdivide   ./
+      ldivide   .\
+      power     .^  .**
+      lt        <
+      le        <=
+      eq        ==
+      gt        >
+      ge        >=
+      ne        !=  ~=
+      and       &
+      or        |
+      atan2
+      hypot
+      max
+      min
+      mod
+      rem
+      xor
+
+    additionally, since the A op= B assignment operators are equivalent
+    to A = A op B, the following operators are also affected:
+
+      +=  -=  .+=  .-=  .*=  ./=  .\=  .^=  .**=  &=  |=
+
+    See the "Broadcasting" section in the new "Vectorization and Faster
+    Code Execution" chapter of the manual for more details.
+
+ ** Octave now features a profiler, thanks to the work of Daniel Kraft
+    under the Google Summer of Code mentorship program.  The manual has
+    been updated to reflect this addition.  The new user-visible
+    functions are profile, profshow, and profexplore.
+
+ ** Overhaul of statistical distribution functions
+
+    Functions now return "single" outputs for inputs of class "single".
+
+    75% reduction in memory usage through use of logical indexing.
+
+    Random sample functions now use the same syntax as rand and accept
+    a comma separated list of dimensions or a dimension vector.
+
+    Functions have been made Matlab-compatible with regard to special
+    cases (probability on boundaries, probabilities for values outside
+    distribution, etc.).  This may cause subtle changes to existing
+    scripts.
+
+    negative binomial function has been extended to real, non-integer
+    inputs.  The discrete_inv function now returns v(1) for 0 instead of
+    NaN.  The nbincdf function has been recoded to use a closed form
+    solution with betainc.
+
+ ** strread, textscan, and textread have been completely revamped.
+
+    They now support nearly all Matlab functionality including:
+
+      * Matlab-compatible whitespace and delimiter defaults
+
+      * Matlab-compatible options: 'whitespace', treatasempty', format
+        string repeat count, user-specified comment style, uneven-length
+        output arrays, %n and %u conversion specifiers (provisionally)
+
+ ** All .m string functions have been modified for better performance or
+    greater Matlab compatibility.  Performance gains of 15X-30X have
+    been demonstrated.  Operations on cell array of strings no longer pay
+    quite as high a penalty as those on 2-D character arrays.
+
+      deblank:  Now requires character or cellstr input.
+
+      strtrim:  Now requires character or cellstr input.
+                No longer trims nulls ("\0") from string for Matlab
+                compatibility.
+
+      strmatch: Follows documentation precisely and ignores trailing spaces
+                in pattern and in string.  Note that this is documented
+                Matlab behavior but the implementation apparently does
+                not always follow it.
+
+      substr:   Now possible to specify a negative LEN option which
+                extracts to within LEN of the end of the string.
+
+      strtok:   Now accepts cellstr input.
+
+      base2dec, bin2dec, hex2dec:
+                Now accept cellstr inputs.
+
+      dec2base, dec2bin, dec2hex:
+                Now accept cellstr inputs.
+
+      index, rindex:
+                Now accept 2-D character array input.
+
+      strsplit: Now accepts 2-D character array input.
+
+ ** Geometry functions derived from Qhull (convhull, delaunay, voronoi)
+    have been revamped.  The options passed to the underlying qhull
+    command have been changed for better results or for Matlab
+    compatibility.
+
+      convhull: Default options are "Qt" for 2D, 3D, 4D inputs
+                Default options are "Qt Qx" for 5D and higher
+
+      delaunay: Default options are "Qt Qbb Qc Qz" for 2D and 3D inputs
+                Default options are "Qt Qbb Qc Qx" for 4D and higher
+
+      voronoi:  No default arguments
+
+ ** Date/Time functions updated.  Millisecond support with FFF format
+    string now supported.
+
+    datestr: Numerical formats 21, 22, 29 changed to match Matlab.
+             Now accepts cellstr input.
+
+ ** The following warning IDs have been removed:
+
+      Octave:associativity-change
+      Octave:complex-cmp-ops
+      Octave:empty-list-elements
+      Octave:fortran-indexing
+      Octave:precedence-change
+
+ ** The warning ID Octave:string-concat has been renamed to
+    Octave:mixed-string-concat.
+
+ ** Octave now includes the following Matlab-compatible preference
+    functions:
+
+      addpref  getpref  ispref  rmpref  setpref
+
+ ** The following Matlab-compatible handle graphics functions have been
+    added:
+
+      guidata         uipanel        uitoolbar
+      guihandles      uipushtool     uiwait
+      uicontextmenu   uiresume       waitfor
+      uicontrol       uitoggletool
+
+    The uiXXX functions above are experimental.
+
+    Except for uiwait and uiresume, the uiXXX functions are not
+    supported with the FLTK+OpenGL graphics toolkit.
+
+    The gnuplot graphics toolkit does not support any of the uiXXX
+    functions nor the waitfor function.
+
+ ** New keyword parfor (parallel for loop) is now recognized as a valid
+    keyword.  Implementation, however, is still mapped to an ordinary
+    for loop.
+
+ ** Other new functions added in 3.6.0:
+
+      bicg                       nthargout                   usejava
+      is_dq_string               narginchk                   waitbar
+      is_sq_string               python                      zscore
+      is_function_handle         register_graphics_toolkit
+      loaded_graphics_toolkits   recycle
+
+ ** Deprecated functions.
+
+    The following functions were deprecated in Octave 3.2 and have been
+    removed from Octave 3.6.
+
+      create_set          spcholinv    splu
+      dmult               spcumprod    spmax
+      iscommand           spcumsum     spmin
+      israwcommand        spdet        spprod
+      lchol               spdiag       spqr
+      loadimage           spfind       spsum
+      mark_as_command     sphcat       spsumsq
+      mark_as_rawcommand  spinv        spvcat
+      spatan2             spkron       str2mat
+      spchol              splchol      unmark_command
+      spchol2inv          split        unmark_rawcommand
+
+    The following functions have been deprecated in Octave 3.6 and will
+    be removed from Octave 3.10 (or whatever version is the second major
+    release after 3.6):
+
+      cut                polyderiv
+      cor                shell_cmd
+      corrcoef           studentize
+      __error_text__     sylvester_matrix
+      error_text
+
+ ** The following functions have been modified for Matlab compatibility:
+
+      randperm
+
+Summary of important user-visible changes for version 3.4.3 (2011-10-10):
+------------------------------------------------------------------------
+
+ ** Octave 3.4.3 is a bug fixing release.
+
+Summary of important user-visible changes for version 3.4.2 (2011-06-24):
+------------------------------------------------------------------------
+
+ ** Octave 3.4.2 fixes some minor installation problems that affected
+    version 3.4.1.
+
+Summary of important user-visible changes for version 3.4.1 (2011-06-15):
+------------------------------------------------------------------------
+
+ ** Octave 3.4.1 is primarily a bug fixing release.
+
+ ** IMPORTANT note about binary incompatibility in this release:
+
+    Binary compatibility for all 3.4.x releases was originally planned,
+    but this is impossible for the 3.4.1 release due to a bug in the way
+    shared libraries were built in Octave 3.4.0.  Because of this bug,
+    .oct files built for Octave 3.4.0 must be recompiled before they
+    will work with Octave 3.4.1.
+
+    Given that there would be binary incompatibilities with shared
+    libraries going from Octave 3.4.0 to 3.4.1, the following
+    incompatible changes were also made in this release:
+
+      * The Perl Compatible Regular Expression (PCRE) library is now
+        required to build Octave.
+
+      * Octave's libraries and .oct files are now installed in
+        subdirectories of $libdir instead of $libexecdir.
+
+    Any future Octave 3.4.x release versions should remain binary
+    compatible with Octave 3.4.1 as proper library versioning is now
+    being used as recommended by the libtool manual.
+
+ ** The following functions have been deprecated in Octave 3.4.1 and will
+    be removed from Octave 3.8 (or whatever version is the second major
+    release after 3.4):
+
+      cquad  is_duplicate_entry  perror  strerror
+
+ ** The following functions are new in 3.4.1:
+
+      colstyle  gmres  iscolumn  isrow  mgorth  nproc  rectangle
+
+ ** The get_forge_pkg function is now private.
+
+ ** The rectangle_lw, rectangle_sw, triangle_lw, and triangle_sw
+    functions are now private.
+
+ ** The logistic_regression_derivatives and logistic_regression_likelihood
+    functions are now private.
+
+ ** ChangeLog files in the Octave sources are no longer maintained
+    by hand.  Instead, there is a single ChangeLog file generated from
+    the Mercurial version control commit messages.  Older ChangeLog
+    information can be found in the etc/OLD-ChangeLogs directory in the
+    source distribution.
+
+Summary of important user-visible changes for version 3.4 (2011-02-08):
+----------------------------------------------------------------------
+
+ ** BLAS and LAPACK libraries are now required to build Octave.  The
+    subset of the reference BLAS and LAPACK libraries has been removed
+    from the Octave sources.
+
+ ** The ARPACK library is now distributed with Octave so it no longer
+    needs to be available as an external dependency when building
+    Octave.
+
+ ** The `lookup' function was extended to be more useful for
+    general-purpose binary searching.  Using this improvement, the
+    ismember function was rewritten for significantly better
+    performance.
+
+ ** Real, integer and logical matrices, when used in indexing, will now
+    cache the internal index_vector value (zero-based indices) when
+    successfully used as indices, eliminating the conversion penalty for
+    subsequent indexing by the same matrix.  In particular, this means it
+    is no longer needed to avoid repeated indexing by logical arrays
+    using find for performance reasons.
+
+ ** Logical matrices are now treated more efficiently when used as
+    indices.  Octave will keep the index as a logical mask unless the
+    ratio of true elements is small enough, using a specialized
+    code.  Previously, all logical matrices were always first converted
+    to index vectors.  This results in savings in both memory and
+    computing time.
+
+ ** The `sub2ind' and `ind2sub' functions were reimplemented as compiled
+    functions for better performance.  These functions are now faster,
+    can deliver more economized results for ranges, and can reuse the
+    index cache mechanism described in previous paragraph.
+
+ ** The built-in function equivalents to associative operators (`plus',
+    `times', `mtimes', `and', and `or') have been extended to accept
+    multiple arguments.  This is especially useful for summing
+    (multiplying, etc.) lists of objects (of possibly distinct types):
+
+      matrix_sum = plus (matrix_list{:});
+
+ ** An FTP object type based on libcurl has been implemented.  These
+    objects allow ftp connections, downloads and uploads to be
+    managed.  For example,
+
+      fp = ftp ("ftp.octave.org);
+      cd (fp, "gnu/octave");
+      mget (fp, "octave-3.2.3.tar.bz2");
+      close (fp);
+
+ ** The default behavior of `assert (observed, expected)' has been
+    relaxed to employ less strict checking that does not require the
+    internals of the values to match.  This avoids previously valid
+    tests from breaking due to new internal classes introduced in future
+    Octave versions.
+
+    For instance, all of these assertions were true in Octave 3.0.x
+    but false in 3.2.x due to new optimizations and improvements:
+
+      assert (2*linspace (1, 5, 5), 2*(1:5))
+      assert (zeros (0, 0), [])
+      assert (2*ones (1, 5), (2) (ones (1,5)))
+
+ ** The behavior of library functions `ismatrix', `issquare', and
+    `issymmetric' has been changed for better consistency.
+
+    * The `ismatrix' function now returns true for all numeric,
+      logical and character 2-D or N-D matrices.  Previously, `ismatrix'
+      returned false if the first or second dimension was zero.
+      Hence, `ismatrix ([])' was false,
+      while `ismatrix (zeros (1,2,0))' was true.
+
+    * The `issquare' function now returns a logical scalar, and is
+      equivalent to the expression
+
+        ismatrix (x) && ndims (x) == 2 && rows (x) == columns (x)
+
+      The dimension is no longer returned.  As a result, `issquare ([])'
+      now yields true.
+
+    * The `issymmetric' function now checks for symmetry instead of
+      Hermitianness.  For the latter, ishermitian was created.  Also,
+      logical scalar is returned rather than the dimension, so
+      `issymmetric ([])' is now true.
+
+ ** Function handles are now aware of overloaded functions.  If a
+    function is overloaded, the handle determines at the time of its
+    reference which function to call.  A non-overloaded version does not
+    need to exist.
+
+ ** Overloading functions for built-in classes (double, int8, cell,
+    etc.) is now compatible with Matlab.
+
+ ** Function handles can now be compared with the == and != operators,
+    as well as the `isequal' function.
+
+ ** Performance of concatenation (using []) and the functions `cat',
+    `horzcat', and `vertcat' has been improved for multidimensional
+    arrays.
+
+ ** The operation-assignment operators +=, -=, *= and /= now behave more
+    efficiently in certain cases.  For instance, if M is a matrix and S a
+    scalar, then the statement
+
+      M += S;
+
+    will operate on M's data in-place if it is not shared by another
+    variable, usually increasing both time and memory efficiency.
+
+    Only selected common combinations are affected, namely:
+
+      matrix += matrix
+      matrix -= matrix
+      matrix .*= matrix
+      matrix ./= matrix
+
+      matrix += scalar
+      matrix -= scalar
+      matrix *= scalar
+      matrix /= scalar
+
+      logical matrix |= logical matrix
+      logical matrix &= logical matrix
+
+    where matrix and scalar belong to the same class.  The left-hand
+    side must be a simple variable reference.
+
+    Moreover, when unary operators occur in expressions, Octave will
+    also try to do the operation in-place if it's argument is a
+    temporary expression.
+
+ ** The effect of comparison operators (<, >, <=, and >=) applied to
+    complex numbers has changed to be consistent with the strict
+    ordering defined by the `max', `min', and `sort' functions.  More
+    specifically, complex numbers are compared by lexicographical
+    comparison of the pairs `[abs(z), arg(z)]'.  Previously, only real
+    parts were compared; this can be trivially achieved by converting
+    the operands to real values with the `real' function.
+
+ ** The automatic simplification of complex computation results has
+    changed.  Octave will now simplify any complex number with a zero
+    imaginary part or any complex matrix with all elements having zero
+    imaginary part to a real value.  Previously, this was done only for
+    positive zeros.  Note that the behavior of the complex function is
+    unchanged and it still produces a complex value even if the
+    imaginary part is zero.
+
+ ** As a side effect of code refactoring in liboctave, the binary
+    logical operations are now more easily amenable to compiler
+    optimizations and are thus significantly faster.
+
+ ** Octave now allows user-defined `subsasgn' methods to optimize out
+    redundant copies.  For more information, see the manual.
+
+ ** More efficient matrix division handling.  Octave is now able to
+    handle the expressions
+
+      M' \ V
+      M.' \ V
+      V / M
+
+    (M is a matrix and V is a vector) more efficiently in certain cases.
+    In particular, if M is triangular, all three expressions will be
+    handled by a single call to xTRTRS (from LAPACK), with appropriate
+    flags.  Previously, all three expressions required a physical
+    transpose of M.
+
+ ** More efficient handling of certain mixed real-complex matrix
+    operations.  For instance, if RM is a real matrix and CM a complex
+    matrix,
+
+      RM * CM
+
+    can now be evaluated either as
+
+      complex (RM * real (CM), RM * imag (CM))
+
+    or as
+
+      complex (RM) * CM,
+
+    depending on the dimensions.  The first form requires more
+    temporaries and copying, but halves the FLOP count, which normally
+    brings better performance if RM has enough rows.  Previously, the
+    second form was always used.
+
+    Matrix division is similarly affected.
+
+ ** More efficient handling of triangular matrix factors returned from
+    factorizations.  The functions for computing QR, LU and Cholesky
+    factorizations will now automatically return the triangular matrix
+    factors with proper internal matrix_type set, so that it won't need
+    to be computed when the matrix is used for division.
+
+ ** The built-in `sum' function now handles the non-native summation
+    (i.e., double precision sum of single or integer inputs) more
+    efficiently, avoiding a temporary conversion of the whole input
+    array to doubles.  Further, `sum' can now accept an extra option
+    argument, using a compensated summation algorithm rather than a
+    straightforward sum, which significantly improves precision if lots
+    of cancellation occurs in the summation.
+
+ ** The built-in `bsxfun' function now uses optimized code for certain
+    cases where built-in operator handles are passed in.  Namely, the
+    optimizations concern the operators `plus', `minus', `times',
+    `ldivide', `rdivide', `power', `and', `or' (for logical arrays),
+    the relational operators `eq', `ne', `lt', `le', `gt', `ge', and the
+    functions `min' and `max'.  Optimizations only apply when both
+    operands are of the same built-in class.  Mixed real/complex and
+    single/double operations will first convert both operands to a
+    common type.
+
+ ** The `strfind' and `strrep' functions now have compiled
+    implementations, facilitating significantly more efficient searching
+    and replacing in strings, especially with longer patterns.  The code
+    of `strcat' has been vectorized and is now much more efficient when
+    many strings are concatenated.  The `strcmpi' and `strncmpi'
+    functions are now built-in functions, providing better performance.
+
+ ** 'str2double' now has a compiled implementation and the API conforms
+    to Matlab.  The additional Octave-specific features of returning a
+    boolean matrix indicating which elements were successfully converted
+    has been removed.
+
+ ** Matlab-style ignoring input and output function arguments using
+    tilde (~) is now supported.  Ignored output arguments may be
+    detected from a function using the built-in function `isargout'.
+    For more details, consult the manual.
+
+ ** The list datatype, deprecated since the introduction of cells, has
+    been removed.
+
+ ** The accumarray function has been optimized and is now significantly
+    faster in certain important cases.
+
+ ** The behavior of isreal and isnumeric functions was changed to be more
+    Matlab-compatible.
+
+ ** The integer math & conversion warnings (Octave:int-convert-nan,
+    Octave:int-convert-non-int-val, Octave:int-convert-overflow,
+    Octave:int-math-overflow) have been removed.
+
+ ** rem and mod are now built-in functions.  They also handle integer
+    types efficiently using integer arithmetic.
+
+ ** Sparse indexing and indexed assignment has been mostly rewritten.
+    Since Octave uses compressed column storage for sparse matrices,
+    major attention is devoted to operations manipulating whole columns.
+    Such operations are now significantly faster, as well as some other
+    important cases.
+
+    Further, it is now possible to pre-allocate a sparse matrix and
+    subsequently fill it by assignments, provided they meet certain
+    conditions.  For more information, consult the `spalloc' function,
+    which is no longer a mere dummy.  Consequently, nzmax and nnz are no
+    longer always equal in Octave.  Octave may also produce a matrix
+    with nnz < nzmax as a result of other operations, so you should
+    consistently use nnz unless you really want to use nzmax (i.e., the
+    space allocated for nonzero elements).
+
+    Sparse concatenation is also affected, and concatenating sparse
+    matrices, especially larger collections, is now significantly more
+    efficient.  This applies to both the [] operator and the
+    cat/vertcat/horzcat functions.
+
+ ** It is now possible to optionally employ the xGESDD LAPACK drivers
+    for computing the singular value decomposition using svd, instead
+    of the default xGESVD, using the configuration pseudo-variable
+    svd_driver.  The xGESDD driver can be up to 6x times faster when
+    singular vectors are requested, but is reported to be somewhat less
+    robust on highly ill-conditioned matrices.
+
+ ** Configuration pseudo-variables, such as page_screen_output or
+    confirm_recursive_rmdir (or the above mentioned svd_driver), now
+    accept a "local" option as second argument, requesting the change
+    to be undone when the current function returns:
+
+    function [status, msg] = rm_rf (dir)
+      confirm_recursive_rmdir (false, "local");
+      [status, msg] = rmdir (dir, "s");
+      ...
+    endfunction
+
+    Upon return, confirm_recursive_rmdir will be restored to the value
+    it had on entry to the function, even if there were subsequent
+    changes to the variable in function rm_rf or any of the functions
+    it calls.
+
+ ** pkg now accepts a -forge option for downloading and installing
+    packages from Octave Forge automatically.  For example,
+
+      pkg install -forge general
+
+    will automatically download the latest release of the general
+    package and attempt to install it.  No automatic resolving of
+    dependencies is provided.  Further,
+
+      pkg list -forge
+
+    can be used to list all available packages.
+
+ ** The internal data representation of structs has been completely
+    rewritten to make certain optimizations feasible.  The field data
+    can now be shared between structs with equal keys but different
+    dimensions or values, making operations that preserve the fields
+    faster.  Economized storage is now used for scalar structs (just
+    like most other scalars), making their usage more
+    memory-efficient.  Certain array-like operations on structs
+    (concatenation, uniform cellfun, num2cell) have gained a
+    significant speed-up.  Additionally, the octave_scalar_map class
+    now provides a simpler interface to work with scalar structs within
+    a C++ DLD function.
+
+ ** Two new formats are available for displaying numbers:
+
+      format short eng
+      format long eng
+
+    Both display numbers in engineering notation, i.e., mantissa +
+    exponent where the exponent is a multiple of 3.
+
+ ** The following functions are new in Octave 3.4:
+      accumdim    erfcx        nfields      pqpnonneg  uigetdir
+      bitpack     fileread     nth_element  quadcc     uigetfile
+      bitunpack   fminbnd      onCleanup    randi      uiputfile
+      blkmm       fskipl       pbaspect     repelems   uimenu
+      cbrt        ifelse       pie3         reset      whitebg
+      curl        ishermitian  powerset     rsf2csf
+      chop        isindex      ppder        saveas
+      daspect     luupdate     ppint        strread
+      divergence  merge        ppjumps      textread
+
+ ** Using the image function to view images with external programs such
+    as display, xv, and xloadimage is no longer supported.  The
+    image_viewer function has also been removed.
+
+ ** The behavior of struct assignments to non-struct values has been
+    changed.  Previously, it was possible to overwrite an arbitrary
+    value:
+
+      a = 1;
+      a.x = 2;
+
+    This is no longer possible unless a is an empty matrix or cell
+    array.
+
+ ** The dlmread function has been extended to allow specifying a custom
+    value for empty fields.
+
+ ** The dlmread and dlmwrite functions have been modified to accept
+    file IDs (as returned by fopen) in addition to file names.
+
+ ** Octave can now optimize away the interpreter overhead of an
+    anonymous function handle, if the function simply calls another
+    function or handle with some of its parameters bound to certain
+    values.  Example:
+
+      f = @(x) sum (x, 1);
+
+    When f is called, the call is forwarded to @sum with the constant 1
+    appended, and the anonymous function call does not occur on the
+    call stack.
+
+ ** For compatibility with Matlab, mu2lin (x) is now equivalent to
+    mu2lin (x, 0).
+
+ ** The new function `history_control' may be used to control the way
+    command lines are added to the history list when Octave is using
+    readline for command-line editing.  For example
+
+      history_control ("ignoredups")
+
+    tells Octave to avoid adding duplicate lines to the history list.
+
+ ** Octave now uses the gnulib library for improved portability and to
+    avoid bugs in operating system functions.
+
+ ** Deprecated functions.
+
+    The following functions were deprecated in Octave 3.0 and have been
+    removed from Octave 3.4.
+
+      beta_cdf         geometric_pdf        pascal_pdf
+      beta_inv         geometric_rnd        pascal_rnd
+      beta_pdf         hypergeometric_cdf   poisson_cdf
+      beta_rnd         hypergeometric_inv   poisson_inv
+      binomial_cdf     hypergeometric_pdf   poisson_pdf
+      binomial_inv     hypergeometric_rnd   poisson_rnd
+      binomial_pdf     intersection         polyinteg
+      binomial_rnd     is_bool              setstr
+      chisquare_cdf    is_complex           struct_contains
+      chisquare_inv    is_list              struct_elements
+      chisquare_pdf    is_matrix            t_cdf
+      chisquare_rnd    is_scalar            t_inv
+      clearplot        is_square            t_pdf
+      clg              is_stream            t_rnd
+      com2str          is_struct            uniform_cdf
+      exponential_cdf  is_symmetric         uniform_inv
+      exponential_inv  is_vector            uniform_pdf
+      exponential_pdf  isstr                uniform_rnd
+      exponential_rnd  lognormal_cdf        weibcdf
+      f_cdf            lognormal_inv        weibinv
+      f_inv            lognormal_pdf        weibpdf
+      f_pdf            lognormal_rnd        weibrnd
+      f_rnd            meshdom              weibull_cdf
+      gamma_cdf        normal_cdf           weibull_inv
+      gamma_inv        normal_inv           weibull_pdf
+      gamma_pdf        normal_pdf           weibull_rnd
+      gamma_rnd        normal_rnd           wiener_rnd
+      geometric_cdf    pascal_cdf
+      geometric_inv    pascal_inv
+
+    The following functions were deprecated in Octave 3.2 and will
+    be removed from Octave 3.6 (or whatever version is the second major
+    release after 3.2):
+
+      create_set          spcholinv    splu
+      dmult               spcumprod    spmax
+      iscommand           spcumsum     spmin
+      israwcommand        spdet        spprod
+      lchol               spdiag       spqr
+      loadimage           spfind       spsum
+      mark_as_command     sphcat       spsumsq
+      mark_as_rawcommand  spinv        spvcat
+      spatan2             spkron       str2mat
+      spchol              splchol      unmark_command
+      spchol2inv          split        unmark_rawcommand
+
+    The following functions have been deprecated in Octave 3.4 and will
+    be removed from Octave 3.8 (or whatever version is the second major
+    release after 3.4):
+
+      autocor  cellidx   gammai     is_global  replot     values
+      autocov  dispatch  glpkmex    krylovb    saveimage
+      betai    fstat     intwarning perror     strerror
+
+Summary of important user-visible changes for version 3.2 (2009-06-05):
+----------------------------------------------------------------------
+
+ ** Compatibility with Matlab graphics has been improved.
+
+    The hggroup object and associated listener callback functions have
+    been added allowing the inclusion of group objects.  Data sources
+    have been added to these group objects such that
+
+           x = 0:0.1:10;
+           y = sin (x);
+           plot (x, y, "ydatasource", "y");
+           for i = 1 : 100
+             pause(0.1)
+             y = sin (x + 0.1 * i);
+             refreshdata ();
+           endfor
+
+    works as expected.  This capability has be used to introduce
+    stem-series, bar-series, etc., objects for better Matlab
+    compatibility.
+
+ ** New graphics functions:
+
+      addlistener                  ezcontour   gcbo         refresh
+      addproperty                  ezcontourf  ginput       refreshdata
+      allchild                     ezmesh      gtext        specular
+      available_graphics_toolkits  ezmeshc     intwarning   surfl
+      graphics_toolkit             ezplot      ishghandle   trisurf
+      cla                          ezplot3     isocolors    waitforbuttonpress
+      clabel                       ezpolar     isonormals
+      comet                        ezsurf      isosurface
+      dellistener                  findall     linkprop
+      diffuse                      gcbf        plotmatrix
+
+ ** New experimental OpenGL/FLTK based plotting system.
+
+    An experimental plotting system based on OpenGL and the FLTK
+    toolkit is now part of Octave.  This graphics toolkit is disabled by
+    default.  You can switch to using it with the command
+
+        graphics_toolkit ("fltk")
+
+    for all future figures or for a particular figure with the command
+
+        graphics_toolkit (h, "fltk")
+
+    where "h" is a valid figure handle.
+
+ ** Functions providing direct access to gnuplot have been removed.
+
+    The functions __gnuplot_plot__, __gnuplot_set__, __gnuplot_raw__,
+     __gnuplot_show__, __gnuplot_replot__, __gnuplot_splot__,
+     __gnuplot_save_data__ and __gnuplot_send_inline_data__ have been
+     removed from Octave.  These function were incompatible with the
+     high level graphics handle code.
+
+ ** The Control, Finance and Quaternion functions have been removed.
+
+    These functions are now available as separate packages from
+
+      http://octave.sourceforge.net/packages.html
+
+    and can be reinstalled using the Octave package manager (see
+    the pkg function).
+
+ ** Specific sparse matrix functions removed.
+
+    The following functions, which handled only sparse matrices have
+    been removed.  Instead of calling these functions directly, you
+    should use the corresponding function without the "sp" prefix.
+
+      spatan2     spcumsum  spkron   spprod
+      spchol      spdet     splchol  spqr
+      spchol2inv  spdiag    splu     spsum
+      spcholinv   spfind    spmax    spsumsqk
+      spcumprod   spinv     spmin
+
+ ** Improvements to the debugger.
+
+    The interactive debugging features have been improved.  Stopping
+    on statements with dbstop should work correctly now.  Stepping
+    into and over functions, and stepping one statement at a time
+    (with dbstep) now works.  Moving up and down the call stack with
+    dbup and dbdown now works.  The dbstack function is now available
+    to print the current function call stack.  The new dbquit function
+    is available to exit the debugging mode.
+
+ ** Improved traceback error messages.
+
+    Traceback error messages are much more concise and easier to
+    understand.  They now display information about the function call
+    stack instead of the stack of all statements that were active at
+    the point of the error.
+
+ ** Object Oriented Programming.
+
+    Octave now includes OOP features and the user can create their own
+    class objects and overloaded functions and operators.  For
+    example, all methods of a class called "myclass" will be found in
+    a directory "@myclass" on the users path.  The class specific
+    versions of functions and operators take precedence over the
+    generic versions of these functions.
+
+    New functions related to OOP include
+
+      class  inferiorto  isobject  loadobj  methods  superiorto
+
+    See the Octave manual for more details.
+
+ ** Parsing of Command-style Functions.
+
+    Octave now parses command-style functions without needing to first
+    declare them with "mark_as_command".  The rules for recognizing a
+    command-style function calls are
+
+      * A command must appear as the first word in a statement,
+        followed by a space.
+
+      * The first character after the space must not be '=' or '('
+
+      * The next token after the space must not look like a binary
+        operator.
+
+    These rules should be mostly compatible with the way Matlab parses
+    command-style function calls and allow users to define commands in
+    .m files without having to mark them as commands.
+
+    Note that previous versions of Octave allowed expressions like
+
+      x = load -text foo.dat
+
+    but an expression like this will now generate a parse error.  In
+    order to assign the value returned by a function to a variable,
+    you must use the normal function call syntax:
+
+      x = load ("-text", "foo.dat");
+
+ ** Block comments.
+
+    Commented code can be between matching "#{" and "#}" or "%{" and
+    "%}" markers, even if the commented code spans several line.  This
+    allows blocks code to be commented, without needing to comment
+    each line.  For example,
+
+    function [s, t] = func (x, y)
+      s = 2 * x;
+    #{
+      s *= y;
+      t = y + x;
+    #}
+    endfunction
+
+    the lines "s *= y;" and "t = y + x" will not be executed.
+
+ ** If any subfunction in a file ends with "end" or "endfunction", then
+    they all must end that way.  Previously, Octave accepted
+
+      function main ()
+        ...
+      # no endfunction here.
+      function sub ()
+        ...
+      endfunction
+
+    but this is no longer allowed.
+
+ ** Special treatment in the parser of expressions like "a' * b".
+
+    In these cases the transpose is no longer explicitly formed and
+    BLAS libraries are called with the transpose flagged,
+    significantly improving performance for these kinds of
+    operations.
+
+ ** Single Precision data type.
+
+    Octave now includes a single precision data type.  Single
+    precision variables can be created with the "single" command, or
+    from functions like ones, eye, etc.  For example,
+
+      single (1)
+      ones (2, 2, "single")
+      zeros (2, 2, "single")
+      eye (2, 2, "single")
+      Inf (2, 2, "single")
+      NaN (2, 2, "single")
+      NA (2, 2, "single")
+
+    all create single precision variables.  For compatibility with
+    Matlab, mixed double/single precision operators and functions
+    return single precision types.
+
+    As a consequence of this addition to Octave the internal
+    representation of the double precision NA value has changed, and
+    so users that make use of data generated by Octave with R or
+    visa-versa are warned that compatibility might not be assured.
+
+ ** Improved array indexing.
+
+    The underlying code used for indexing of arrays has been
+    completely rewritten and indexing is now significantly faster.
+
+ ** Improved memory management.
+
+    Octave will now attempt to share data in some cases where previously
+    a copy would be made, such as certain array slicing operations or
+    conversions between cells, structs and cs-lists.  This usually reduces
+    both time and memory consumption.
+    Also, Octave will now attempt to detect and optimize usage of a vector
+    as a stack, when elements are being repeatedly inserted at/removed from
+    the end of the vector.
+
+ ** Improved performance for reduction operations.
+
+    The performance of the sum, prod, sumsq, cumsum, cumprod, any, all,
+    max and min functions has been significantly improved.
+
+ ** Sorting and searching.
+
+    The performance of sort has been improved, especially when sorting
+    indices are requested.  An efficient built-in issorted
+    implementation was added.  The sortrows function now uses a more
+    efficient algorithm, especially in the homogeneous case.  The lookup
+    function is now a built-in function performing a binary search,
+    optimized for long runs of close elements.  Lookup also works with
+    cell arrays of strings.
+
+ ** Range arithmetics
+
+    For some operations on ranges, Octave will attempt to keep the
+    result as a range.  These include negation, adding a scalar,
+    subtracting a scalar, and multiplying by a scalar.  Ranges with zero
+    increment are allowed and can be constructed using the built-in
+    function `ones'.
+
+ ** Various performance improvements.
+
+    Performance of a number of other built-in operations and functions
+    was improved, including:
+
+    * logical operations
+    * comparison operators
+    * element-wise power
+    * accumarray
+    * cellfun
+    * isnan
+    * isinf
+    * isfinite
+    * nchoosek
+    * repmat
+    * strcmp
+
+ ** 64-bit integer arithmetic.
+
+    Arithmetic with 64-bit integers (int64 and uint64 types) is fully
+    supported, with saturation semantics like the other integer types.
+    Performance of most integer arithmetic operations has been
+    improved by using integer arithmetic directly.  Previously, Octave
+    performed integer math with saturation semantics by converting the
+    operands to double precision, performing the operation, and then
+    converting the result back to an integer value, truncating if
+    necessary.
+
+ ** Diagonal and permutation matrices.
+
+    The interpreter can now treat diagonal and permutation matrices as
+    special objects that store only the non-zero elements, rather than
+    general full matrices.  Therefore, it is now possible to construct
+    and use these matrices in linear algebra without suffering a
+    performance penalty due to storing large numbers of zero elements.
+
+ ** Improvements to fsolve.
+
+    The fsolve function now accepts an option structure argument (see
+    also the optimset function).  The INFO values returned from fsolve
+    have changed to be compatible with Matlab's fsolve function.
+    Additionally, fsolve is now able to solve overdetermined systems,
+    complex-differentiable complex systems, systems with a sparse
+    jacobian and can work in single precision if given single precision
+    inputs.  It can also be called recursively.
+
+ ** Improvements to the norm function.
+
+    The norm function is now able to compute row or column norms of a
+    matrix in a single call, as well as general matrix p-norms.
+
+ ** New functions for computing some eigenvalues or singular values.
+
+    The eigs and svds functions have been included in Octave.  These
+    functions require the ARPACK library (now distributed under a
+    GPL-compatible license).
+
+ ** New QR and Cholesky factorization updating functions.
+
+      choldelete  cholshift   qrdelete  qrshift
+      cholinsert  cholupdate  qrinsert  qrupdate
+
+ ** New quadrature functions.
+
+      dblquad  quadgk  quadv  triplequad
+
+ ** New functions for reading and writing images.
+
+    The imwrite and imread functions have been included in Octave.
+    These functions require the GraphicsMagick library.  The new
+    function imfinfo provides information about an image file (size,
+    type, colors, etc.)
+
+ ** The input_event_hook function has been replaced by the pair of
+    functions add_input_event_hook and remove_input_event_hook so that
+    more than one hook function may be installed at a time.
+
+ ** Other miscellaneous new functions.
+
+      addtodate          hypot                       reallog
+      bicgstab           idivide                     realpow
+      cellslices         info                        realsqrt
+      cgs                interp1q                    rectint
+      command_line_path  isdebugmode                 regexptranslate
+      contrast           isfloat                     restoredefaultpath
+      convn              isstrprop                   roundb
+      cummin             log1p                       rundemos
+      cummax             lsqnonneg                   runlength
+      datetick           matlabroot                  saveobj
+      display            namelengthmax               spaugment
+      expm1              nargoutchk                  strchr
+      filemarker         pathdef                     strvcat
+      fstat              perl                        subspace
+      full               prctile                     symvar
+      fzero              quantile                    treelayout
+      genvarname         re_read_readline_init_file  validatestring
+      histc
+
+ ** Changes to strcat.
+
+    The strcat function is now compatible with Matlab's strcat
+    function, which removes trailing whitespace when concatenating
+    character strings.  For example
+
+      strcat ('foo ', 'bar')
+      ==> 'foobar'
+
+    The new function cstrcat provides the previous behavior of
+    Octave's strcat.
+
+ ** Improvements to the help functions.
+
+    The help system has been mostly re-implemented in .m files to make
+    it easier to modify.  Performance of the lookfor function has been
+    greatly improved by caching the help text from all functions that
+    are distributed with Octave.  The pkg function has been modified
+    to generate cache files for external packages when they are
+    installed.
+
+ ** Deprecated functions.
+
+    The following functions were deprecated in Octave 3.0 and will be
+    removed from Octave 3.4 (or whatever version is the second major
+    release after 3.0):
+
+      beta_cdf         geometric_pdf       pascal_pdf
+      beta_inv         geometric_rnd       pascal_rnd
+      beta_pdf         hypergeometric_cdf  poisson_cdf
+      beta_rnd         hypergeometric_inv  poisson_inv
+      binomial_cdf     hypergeometric_pdf  poisson_pdf
+      binomial_inv     hypergeometric_rnd  poisson_rnd
+      binomial_pdf     intersection        polyinteg
+      binomial_rnd     is_bool             setstr
+      chisquare_cdf    is_complex          struct_contains
+      chisquare_inv    is_list             struct_elements
+      chisquare_pdf    is_matrix           t_cdf
+      chisquare_rnd    is_scalar           t_inv
+      clearplot        is_square           t_pdf
+      clg              is_stream           t_rnd
+      com2str          is_struct           uniform_cdf
+      exponential_cdf  is_symmetric        uniform_inv
+      exponential_inv  is_vector           uniform_pdf
+      exponential_pdf  isstr               uniform_rnd
+      exponential_rnd  lognormal_cdf       weibcdf
+      f_cdf            lognormal_inv       weibinv
+      f_inv            lognormal_pdf       weibpdf
+      f_pdf            lognormal_rnd       weibrnd
+      f_rnd            meshdom             weibull_cdf
+      gamma_cdf        normal_cdf          weibull_inv
+      gamma_inv        normal_inv          weibull_pdf
+      gamma_pdf        normal_pdf          weibull_rnd
+      gamma_rnd        normal_rnd          wiener_rnd
+      geometric_cdf    pascal_cdf
+      geometric_inv    pascal_inv
+
+    The following functions are now deprecated in Octave 3.2 and will
+    be removed from Octave 3.6 (or whatever version is the second major
+    release after 3.2):
+
+      create_set          spcholinv  spmax
+      dmult               spcumprod  spmin
+      iscommand           spcumsum   spprod
+      israwcommand        spdet      spqr
+      lchol               spdiag     spsum
+      loadimage           spfind     spsumsq
+      mark_as_command     spinv      str2mat
+      mark_as_rawcommand  spkron     unmark_command
+      spatan2             splchol    unmark_rawcommand
+      spchol              split
+      spchol2inv          splu
+
+Summary of important user-visible changes for version 3.0 (2007-12-21):
+----------------------------------------------------------------------
+
+ ** Compatibility with Matlab graphics is much better now.  We now
+    have some graphics features that work like Matlab's Handle
+    Graphics (tm):
+
+    + You can make a subplot and then use the print function to
+      generate a file with the plot.
+
+    + RGB line colors are supported if you use gnuplot 4.2.  Octave
+      can still use gnuplot 4.0, but there is no way to set arbitrary
+      line colors with it when using the Matlab-style plot functions.
+      There never was any way to do this reliably with older versions
+      of gnuplot (whether run from Octave or not) since it only
+      provided a limited set to choose from, and they were terminal
+      dependent, so choosing color 1 with the X11 terminal would be
+      different from color 1 with the PostScript terminal.  Valid RGB
+      colors for gnuplot 4.0 are the eight possible combinations of 0
+      and 1 for the R, G and B values. Invalid values are all mapped
+      to the same color.
+
+      This also affects patch objects used in the bar, contour, meshc
+      and surfc functions, where the bars and contours will be
+      monochrome. A workaround for this is to type "colormap gmap40"
+      that loads a colormap that in many cases will be adequate for
+      simple bar and contour plots.
+
+    + You can control the width of lines using (for example):
+
+        line (x, y, "linewidth", 4, "color", [1, 0, 0.5]);
+
+      (this also shows the color feature).
+
+    + With gnuplot 4.2, image data is plotted with gnuplot and may be
+      combined with other 2-d plot data.
+
+    + Lines for contour plots are generated with an Octave function, so
+      contour plots are now 2-d plots instead of special 3-d plots, and
+      this allows you to plot additional 2-d data on top of a contour
+      plot.
+
+    + With the gnuplot "extended" terminals the TeX interpreter is
+    emulated. However, this means that the TeX interpreter is only
+    supported on the postscript terminals with gnuplot 4.0. Under
+    gnuplot 4.2 the terminals aqua, dumb, png, jpeg, gif, pm, windows,
+    wxt, svg and x11 are supported as well.
+
+    + The following plot commands are now considered obsolete and will
+      be removed from a future version of Octave:
+
+        __gnuplot_set__
+        __gnuplot_show__
+        __gnuplot_plot__
+        __gnuplot_splot__
+        __gnuplot_replot__
+
+      Additionally, these functions no longer have any effect on plots
+      created with the Matlab-style plot commands (plot, line, mesh,
+      semilogx, etc.).
+
+    + Plot property values are not extensively checked.  Specifying
+      invalid property values may produce unpredictable results.
+
+    + Octave now sends data over the same pipe that is used to send
+      commands to gnuplot.  While this avoids the problem of
+      cluttering /tmp with data files, it is no longer possible to use
+      the mouse to zoom in on plots.  This is a limitation of gnuplot,
+      which is unable to zoom when the data it plots is not stored in
+      a file.  Some work has been done to fix this problem in newer
+      versions of gnuplot (> 4.2.2).  See for example, this thread
+
+        http://www.nabble.com/zooming-of-inline-data-tf4357017.html#a12416496
+
+      on the gnuplot development list.
+
+
+ ** The way Octave handles search paths has changed.  Instead of
+    setting the built-in variable LOADPATH, you must use addpath,
+    rmpath, or path to manipulate the function search path.  These
+    functions will maintain "." at the head of the path, for
+    compatibility with Matlab.
+
+    Leading, trailing or doubled colons are no longer special.
+    Now, all elements of the search path are explicitly included in
+    the path when Octave starts.  To display the path, use the path
+    function.
+
+    Path elements that end in // are no longer searched recursively.
+    Instead, you may use addpath and the genpath function to add an
+    entire directory tree to the path.  For example,
+
+      addpath (genpath ("~/octave"));
+
+    will add ~/octave and all directories below it to the head of the
+    path.
+
+
+ ** Previous versions of Octave had a number of built-in variables to
+    control warnings (for example, warn_divide_by_zero).  These
+    variables have been replaced by warning identifiers that are used
+    with the warning function to control the state of warnings.
+
+    For example, instead of writing
+
+      warn_divide_by_zero = false;
+
+    to disable divide-by-zero warnings, you should write
+
+      warning ("off", "Octave:divide-by-zero");
+
+    You may use the same technique in your own code to control
+    warnings.  For example, you can use
+
+      warning ("My-package:phase-of-the-moon",
+               "the phase of the moon could cause trouble today");
+
+    to allow users to control this warning using the
+    "My-package:phase-of-the-moon" warning identifier.
+
+    You may also enable or disable all warnings, or turn them into
+    errors:
+
+      warning ("on", "all");
+      warning ("off", "all");
+      warning ("error", "Octave:divide-by-zero");
+      warning ("error", "all");
+
+    You can query the state of current warnings using
+
+      warning ("query", ID)
+      warning ("query")
+
+    (only those warning IDs which have been explicitly set are
+    returned).
+
+    A partial list and description of warning identifiers is available
+    using
+
+      help warning_ids
+
+
+ ** All built-in variables have been converted to functions.  This
+    change simplifies the interpreter and allows a consistent
+    interface to internal variables for user-defined packages and the
+    core functions distributed with Octave.  In most cases, code that
+    simply accesses internal variables does not need to change.  Code
+    that sets internal variables will change.  For example, instead of
+    writing
+
+      PS1 = ">> ";
+
+    you will need to write
+
+      PS1 (">> ");
+
+    If you need write code that will run in both old and new versions
+    of Octave, you can use something like
+
+      if (exist ("OCTAVE_VERSION") == 5)
+        ## New:
+        PS1 (">> ");
+      else
+        ## Old:
+        PS1 = ">> ";
+      endif
+
+
+ ** For compatibility with Matlab, the output order of Octave's
+    "system" function has changed from
+
+      [output, status] = system (cmd);
+
+    to
+
+      [status, output] = system (cmd);
+
+
+ ** For compatibility with Matlab, the output of Octave's fsolve
+    function has been changed from
+
+      [x, info, msg] = fsolve (...);
+
+    to
+
+      [x, fval, info] = fsolve (...);
+
+
+ ** For compatibility with Matlab, normcdf, norminv, normpdf, and
+    normrnd have been modified to compute distributions using the
+    standard deviation instead of the variance.
+
+
+ ** For compatibility with Matlab, gamcdf, gaminv, gampdf, gamrnd,
+    expcdf, expinv, exppdf and exprnd have been modified to compute
+    the distributions using the standard scale factor rather than
+    one over the scale factor.
+
+---------------------------------------------------------
+
+See NEWS.2 for old news.
--- a/etc/NEWS.3.md	Tue Dec 28 18:22:40 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1721 +0,0 @@
-Summary of important user-visible changes for version 3.8 (2013-12-27):
-----------------------------------------------------------------------
-
-  ** One of the biggest new features for Octave 3.8 is a graphical user
-     interface.  It is the one thing that users have requested most
-     often over the last few years and now it is almost ready.  But
-     because it is not quite as polished as we would like, we have
-     decided to wait until the 4.0.x release series before making the
-     GUI the default interface (until then, you can use the --force-gui
-     option to start the GUI).
-
-     Given the length of time and the number of bug fixes and
-     improvements since the last major release Octave, we also decided
-     against delaying the release of all these new improvements any
-     longer just to perfect the GUI.  So please enjoy the 3.8 release of
-     Octave and the preview of the new GUI.  We believe it is working
-     reasonably well, but we also know that there are some obvious rough
-     spots and many things that could be improved.
-
-     WE NEED YOUR HELP.  There are many ways that you can help us fix
-     the remaining problems, complete the GUI, and improve the overall
-     user experience for both novices and experts alike:
-
-       * If you are a skilled software developer, you can help by
-         contributing your time to help with Octave's development.  See
-         http://octave.org/get-involved.html for more information.
-
-       * If Octave does not work properly, you are encouraged
-         report the problems you find.  See http://octave.org/bugs.html
-         for more information about how to report problems.
-
-       * Whether you are a user or developer, you can help to fund the
-         project.  Octave development takes a lot of time and expertise.
-         Your contributions help to ensure that Octave will continue to
-         improve.  See http://octave.org/donate.html for more details.
-
-    We hope you find Octave to be useful.  Please help us make it even
-    better for the future!
-
- ** Octave now uses OpenGL graphics by default with FLTK widgets.  If
-    OpenGL libraries or FLTK widgets are not available when Octave is
-    built, gnuplot is used.  You may also choose to use gnuplot for
-    graphics by executing the command
-
-      graphics_toolkit ("gnuplot")
-
-    Adding this command to your ~/.octaverc file will set the default
-    for each session.
-
- ** Printing or saving figures with OpenGL graphics requires the
-    gl2ps library which is no longer distributed with Octave.  The
-    software is widely available in most package managers.  If a
-    pre-compiled package does not exist for your system, you can find
-    the current sources at http://www.geuz.org/gl2ps/.
-
- ** Octave now supports nested functions with scoping rules that are
-    compatible with Matlab.  A nested function is one declared and defined
-    within the body of another function.  The nested function is only
-    accessible from within the enclosing function which makes it one
-    method for making private functions whose names do not conflict with those
-    in the global namespace (See also subfunctions and private functions).
-    In addition, variables in the enclosing function are visible within the
-    nested function.  This makes it possible to have a pseudo-global variable
-    which can be seen by a group of functions, but which is not visible in
-    the global namespace.
-
-    Example:
-    function outerfunc (...)
-      ...
-      function nested1 (...)
-        ...
-        function nested2 (...)
-           ...
-        endfunction
-      endfunction
-
-      function nested3 (...)
-        ...
-      endfunction
-    endfunction
-
- ** Line continuations inside character strings have changed.
-
-    The sequence '...' is no longer recognized as a line continuation
-    inside a character string.  A backslash '\' followed by a newline
-    character is no longer recognized as a line continuation inside
-    single-quoted character strings.  Inside double-quoted character
-    strings, a backslash followed by a newline character is still
-    recognized as a line continuation, but the backslash character must
-    be followed *immediately* by the newline character.  No whitespace or
-    end-of-line comment may appear between them.
-
- ** Backslash as a continuation marker outside of double-quoted strings
-    is now deprecated.
-
-    Using '\' as a continuation marker outside of double quoted strings
-    is now deprecated and will be removed from a future version of
-    Octave.  When that is done, the behavior of
-
-      (a \
-       b)
-
-    will be consistent with other binary operators.
-
- ** Redundant terminal comma accepted by parser
-
-    A redundant terminal comma is now accepted in matrix
-    definitions which allows writing code such as
-
-    [a,...
-     b,...
-     c,...
-    ] = deal (1,2,3)
-
- ** Octave now has limited support for named exceptions
-
-    The following syntax is now accepted:
-
-      try
-        statements
-      catch exception-id
-        statements
-      end
-
-    The exception-id is a structure with the fields "message" and
-    "identifier".  For example
-
-      try
-        error ("Octave:error-id", "error message");
-      catch myerr
-        printf ("identifier: %s\n", myerr.identifier);
-        printf ("message:    %s\n", myerr.message);
-      end_try_catch
-
-    When classdef-style classes are added to Octave, the exception-id
-    will become an MException object.
-
- ** Warning states may now be set temporarily, until the end of the
-    current function, using the syntax
-
-      warning STATE ID "local"
-
-    in which STATE may be "on", "off", or "error".  Changes to warning
-    states that are set locally affect the current function and all
-    functions called from the current scope.  The previous warning state
-    is restored on return from the current function.  The "local"
-    option is ignored if used in the top-level workspace.
-
- ** Warning IDs renamed:
-
-    Octave:array-as-scalar => Octave:array-to-scalar
-    Octave:array-as-vector => Octave:array-to-vector
-
- ** 'emptymatch', 'noemptymatch' options added to regular expressions.
-
-    With this addition Octave now accepts the entire set of Matlab options
-    for regular expressions.  'noemptymatch' is the default, but 'emptymatch'
-    has certain uses where you need to match an assertion rather than actual
-    characters.  For example,
-
-    regexprep ('World', '^', 'Hello ', 'emptymatch')
-      => Hello World
-
-    where the pattern is actually the assertion '^' or start-of-line.
-
- ** For compatibility with Matlab, the regexp, regexpi, and regexprep
-    functions now process backslash escape sequences in single-quoted pattern
-    strings.  In addition, the regexprep function now processes backslash
-    escapes in single-quoted replacement strings.  For example,
-
-    regexprep (str, '\t', '\n')
-
-    would search the variable str for a TAB character (escape sequence \t)
-    and replace it with a NEWLINE (escape sequence \n).  Previously the
-    expression would have searched for a literal '\' followed by 't' and
-    replaced the two characters with the sequence '\', 'n'.
-
- ** A TeX parser has been implemented for the FLTK toolkit and is the default
-    for any text object including titles and axis labels.  The TeX parser is
-    supported only for display on a monitor, not for printing.
-
-    A quick summary of features:
-
-    Code         Feature     Example             Comment
-    -----------------------------------------------------------------
-    _            subscript   H_2O                formula for water
-    ^            exponent    y=x^2               formula for parabola
-    \char        symbol      \beta               Greek symbol beta
-    \fontname    font        \fontname{Arial}    set Arial font
-    \fontsize    fontsize    \fontsize{16}       set fontsize 16
-    \color[rgb]  fontcolor   \color[rgb]{1 0 1}  set magenta color
-    \bf          bold        \bfBold Text        bold font
-    \it          italic      \itItalic Text      italic font
-    \sl          slanted     \slOblique Text     slanted font
-    \rm          normal      \bfBold\rmNormal    normal font
-    {}           group       {\bf Bold}Normal    group objects
-                             e^{i*\pi} = -1      group objects
-
- ** The m-files in the plot directory have been overhauled.
-
-    The plot functions now produce output that is nearly visually compatible
-    with Matlab.  Plot performance has also increased, dramatically for some
-    functions such as comet and waitbar.  Finally, the documentation for most
-    functions has been updated so it should be clearer both how to use a
-    function and when a function is appropriate.
-
- ** The m-files in the image directory have been overhauled.
-
-    The principal benefit is that Octave will now no longer automatically
-    convert images stored with integers to doubles.  Storing images as uint8
-    or uint16 requires only 1/8 or 1/4 the memory of an image stored using
-    doubles.  For certain operations, such as fft2, the image must still be
-    converted to double in order to work.
-
-    Other changes include fixes to the way indexed images are read from a
-    colormap depending on the image class (integer images have a -1 offset to
-    the colormap row number).
-
- ** The imread and imwrite functions have been completely rewritten.
-
-    The main changes relate to the alpha channel, support for reading and
-    writing of floating point images, implemented writing of indexed images,
-    and appending images to multipage image files.
-
-    The issues that may arise due to backwards incompatibility are:
-
-      * imwrite no longer interprets a length of 2 or 4 in the third dimension
-        as grayscale or RGB with alpha channel (a length of 4 will be saved
-        as a CMYK image).  Alpha channel must be passed as separate argument.
-
-      * imread will always return the colormap indexes when reading an indexed
-        image, even if the colormap is not requested as output.
-
-      * transparency values are now inverted from previous Octave versions
-        (0 is for completely transparent instead of completely opaque).
-
-    In addition, the function imformats has been implemented to expand
-    reading and writing of images of different formats through imread
-    and imwrite.
-
- ** The colormap function now provides new options--"list", "register",
-    and "unregister"--to list all available colormap functions, and to
-    add or remove a function name from the list of known colormap
-    functions.  Packages that implement extra colormaps should use these
-    commands with PKG_ADD and PKG_DEL statements.
-
- ** strsplit has been modified to be compatible with Matlab.  There
-    are two instances where backward compatibility is broken.
-
-    (1) Delimiters are now string vectors, not scalars.
-
-    Octave's legacy behavior
-
-      strsplit ("1 2, 3", ", ")
-      ans =
-      {
-       [1,1] = 1
-       [1,2] = 2
-       [1,3] =
-       [1,4] = 3
-      }
-
-    Matlab compatible behavior
-
-      strsplit ("1 2, 3", ", ")
-      ans =
-      {
-       [1,1] = 1 2
-       [1,2] = 3
-      }
-
-    (2) By default, Matlab treats consecutive delimiters as a single
-    delimiter.  By default, Octave's legacy behavior was to return an
-    empty string for the part between the delmiters.
-
-    Where legacy behavior is desired, the call to strsplit() may be
-    replaced by ostrsplit(), which is Octave's original implementation of
-    strsplit().
-
- ** The datevec function has been extended for better Matlab compatibility.
-    It now accepts string inputs in the following numerical formats: 12, 21,
-    22, 26, 29, 31.  This is undocumented, but verifiable, Matlab behavior.
-    In addition, the default for formats which do not specify a date is
-    January 1st of the current year.  The previous default was the current day,
-    month, and year.  This may produce changes in existing scripts.
-
- ** The error function and its derivatives has been extended to accept complex
-    arguments.  The following functions now accept complex inputs:
-
-    erf  erfc  erfcx
-
-    In addition two new error functions erfi (imaginary error function) and
-    dawson (scaled imaginary error function) have been added.
-
- ** The glpk function has been modified to reflect changes in the GLPK
-    library.  The "round" and "itcnt" options have been removed.  The
-    "relax" option has been replaced by the "rtest" option.  The numeric
-    values of error codes and of some options have also changed.
-
- ** The kurtosis function has changed definition to be compatible with
-    Matlab.  It now returns the base kurtosis instead of the "excess kurtosis".
-    The old behavior can be had by changing scripts to normalize with -3.
-
-               "excess kurtosis" = kurtosis (x) - 3
-
- ** The moment function has changed definition to be compatible with
-    Matlab.  It now returns the central moment instead of the raw moment.
-    The old behavior can be had by passing the type argument "r" for raw.
-
- ** The default name of the Octave crash dump file is now
-    "octave-workspace" instead of "octave-core".  The exact name can
-    always be customized with the octave_core_file_name function.
-
- ** A citation command has been added to display information on how to
-    cite Octave and packages in publications.  The package system will
-    look for and install CITATION files from packages.
-
- ** The java package from Octave Forge is now part of core Octave.  The
-    following new functions are available for interacting with Java
-    directly from Octave:
-
-      debug_java     java_matrix_autoconversion
-      isjava         java_unsigned_autoconversion
-      java2mat       javaaddpath
-      javaArray      javaclasspath
-      javaMethod     javamem
-      javaObject     javarmpath
-                     usejava
-
-    In addition, the following functions that use the Java interface
-    are now available (provided that Octave is compiled with support for
-    Java enabled):
-
-      helpdlg    listdlg   questdlg
-      inputdlg   msgbox    warndlg
-
- ** Other new functions added in 3.8.0:
-
-      atan2d                     erfi             lines
-      base64_decode              expint           linsolve
-      base64_encode              findfigs         missing_component_hook
-      betaincinv                 flintmax         polyeig
-      built_in_docstrings_file   fminsearch       prefdir
-      cmpermute                  gallery          preferences
-      cmunique                   gco              readline_re_read_init_file
-      colorcube                  hdl2struct       readline_read_init_file
-      copyobj                    history_save     rgbplot
-      dawson                     imformats        save_default_options
-      dblist                     importdata       shrinkfaces
-      desktop                    isaxes           splinefit
-      doc_cache_create           iscolormap       stemleaf
-      ellipj                     isequaln         strjoin
-      ellipke                    jit_debug        struct2hdl
-      erfcinv                    jit_enable       tetramesh
-                                 jit_startcnt     waterfall
-
- ** Deprecated functions.
-
-    The following functions were deprecated in Octave 3.4 and have been
-    removed from Octave 3.8.
-
-      autocor    dispatch              is_global    setstr
-      autocov    fstat                 krylovb      strerror
-      betai      gammai                perror       values
-      cellidx    glpkmex               replot
-      cquad      is_duplicate_entry    saveimage
-
-    The following functions have been deprecated in Octave 3.8 and will
-    be removed from Octave 3.12 (or whatever version is the second major
-    release after 3.8):
-
-      default_save_options    java_new
-      gen_doc_cache           java_set
-      interp1q                java_unsigned_conversion
-      isequalwithequalnans    javafields
-      java_convert_matrix     javamethods
-      java_debug              re_read_readline_init_file
-      java_get                read_readline_init_file
-      java_invoke             saving_history
-
-
-    The following keywords have been deprecated in Octave 3.8 and will
-    be removed from Octave 3.12 (or whatever version is the second major
-    release after 3.8):
-
-      static
-
-    The following configuration variables have been deprecated in Octave
-    3.8 and will be removed from Octave 3.12 (or whatever version is the
-    second major release after 3.8):
-
-      CC_VERSION  (now GCC_VERSION)
-      CXX_VERSION (now GXX_VERSION)
-
-    The internal class <Octave_map> has been deprecated in Octave 3.8 and will
-    be removed from Octave 3.12 (or whatever version is the second major
-    release after 3.8).  Replacement classes are <octave_map> (struct array)
-    or <octave_scalar_map> for a single structure.
-
-Summary of important user-visible changes for version 3.6 (2012-01-15):
-----------------------------------------------------------------------
-
- ** The PCRE library is now required to build Octave.  If a pre-compiled
-    package does not exist for your system, you can find PCRE sources
-    at http://www.pcre.org
-
- ** The ARPACK library is no longer distributed with Octave.
-    If you need the eigs or svds functions you must provide an
-    external ARPACK through a package manager or by compiling it
-    yourself.  If a pre-compiled package does not exist for your system,
-    you can find the current ARPACK sources at
-    http://forge.scilab.org/index.php/p/arpack-ng
-
- ** Many of Octave's binary operators (.*, .^, +, -, ...) now perform
-    automatic broadcasting for array operations which allows you to use
-    operator notation instead of calling bsxfun or expanding arrays (and
-    unnecessarily wasting memory) with repmat or similar idioms.  For
-    example, to scale the columns of a matrix by the elements of a row
-    vector, you may now write
-
-      rv .* M
-
-    In this expression, the number of elements of rv must match the
-    number of columns of M.  The following operators are affected:
-
-      plus      +  .+
-      minus     -  .-
-      times     .*
-      rdivide   ./
-      ldivide   .\
-      power     .^  .**
-      lt        <
-      le        <=
-      eq        ==
-      gt        >
-      ge        >=
-      ne        !=  ~=
-      and       &
-      or        |
-      atan2
-      hypot
-      max
-      min
-      mod
-      rem
-      xor
-
-    additionally, since the A op= B assignment operators are equivalent
-    to A = A op B, the following operators are also affected:
-
-      +=  -=  .+=  .-=  .*=  ./=  .\=  .^=  .**=  &=  |=
-
-    See the "Broadcasting" section in the new "Vectorization and Faster
-    Code Execution" chapter of the manual for more details.
-
- ** Octave now features a profiler, thanks to the work of Daniel Kraft
-    under the Google Summer of Code mentorship program.  The manual has
-    been updated to reflect this addition.  The new user-visible
-    functions are profile, profshow, and profexplore.
-
- ** Overhaul of statistical distribution functions
-
-    Functions now return "single" outputs for inputs of class "single".
-
-    75% reduction in memory usage through use of logical indexing.
-
-    Random sample functions now use the same syntax as rand and accept
-    a comma separated list of dimensions or a dimension vector.
-
-    Functions have been made Matlab-compatible with regard to special
-    cases (probability on boundaries, probabilities for values outside
-    distribution, etc.).  This may cause subtle changes to existing
-    scripts.
-
-    negative binomial function has been extended to real, non-integer
-    inputs.  The discrete_inv function now returns v(1) for 0 instead of
-    NaN.  The nbincdf function has been recoded to use a closed form
-    solution with betainc.
-
- ** strread, textscan, and textread have been completely revamped.
-
-    They now support nearly all Matlab functionality including:
-
-      * Matlab-compatible whitespace and delimiter defaults
-
-      * Matlab-compatible options: 'whitespace', treatasempty', format
-        string repeat count, user-specified comment style, uneven-length
-        output arrays, %n and %u conversion specifiers (provisionally)
-
- ** All .m string functions have been modified for better performance or
-    greater Matlab compatibility.  Performance gains of 15X-30X have
-    been demonstrated.  Operations on cell array of strings no longer pay
-    quite as high a penalty as those on 2-D character arrays.
-
-      deblank:  Now requires character or cellstr input.
-
-      strtrim:  Now requires character or cellstr input.
-                No longer trims nulls ("\0") from string for Matlab
-                compatibility.
-
-      strmatch: Follows documentation precisely and ignores trailing spaces
-                in pattern and in string.  Note that this is documented
-                Matlab behavior but the implementation apparently does
-                not always follow it.
-
-      substr:   Now possible to specify a negative LEN option which
-                extracts to within LEN of the end of the string.
-
-      strtok:   Now accepts cellstr input.
-
-      base2dec, bin2dec, hex2dec:
-                Now accept cellstr inputs.
-
-      dec2base, dec2bin, dec2hex:
-                Now accept cellstr inputs.
-
-      index, rindex:
-                Now accept 2-D character array input.
-
-      strsplit: Now accepts 2-D character array input.
-
- ** Geometry functions derived from Qhull (convhull, delaunay, voronoi)
-    have been revamped.  The options passed to the underlying qhull
-    command have been changed for better results or for Matlab
-    compatibility.
-
-      convhull: Default options are "Qt" for 2D, 3D, 4D inputs
-                Default options are "Qt Qx" for 5D and higher
-
-      delaunay: Default options are "Qt Qbb Qc Qz" for 2D and 3D inputs
-                Default options are "Qt Qbb Qc Qx" for 4D and higher
-
-      voronoi:  No default arguments
-
- ** Date/Time functions updated.  Millisecond support with FFF format
-    string now supported.
-
-    datestr: Numerical formats 21, 22, 29 changed to match Matlab.
-             Now accepts cellstr input.
-
- ** The following warning IDs have been removed:
-
-      Octave:associativity-change
-      Octave:complex-cmp-ops
-      Octave:empty-list-elements
-      Octave:fortran-indexing
-      Octave:precedence-change
-
- ** The warning ID Octave:string-concat has been renamed to
-    Octave:mixed-string-concat.
-
- ** Octave now includes the following Matlab-compatible preference
-    functions:
-
-      addpref  getpref  ispref  rmpref  setpref
-
- ** The following Matlab-compatible handle graphics functions have been
-    added:
-
-      guidata         uipanel        uitoolbar
-      guihandles      uipushtool     uiwait
-      uicontextmenu   uiresume       waitfor
-      uicontrol       uitoggletool
-
-    The uiXXX functions above are experimental.
-
-    Except for uiwait and uiresume, the uiXXX functions are not
-    supported with the FLTK+OpenGL graphics toolkit.
-
-    The gnuplot graphics toolkit does not support any of the uiXXX
-    functions nor the waitfor function.
-
- ** New keyword parfor (parallel for loop) is now recognized as a valid
-    keyword.  Implementation, however, is still mapped to an ordinary
-    for loop.
-
- ** Other new functions added in 3.6.0:
-
-      bicg                       nthargout                   usejava
-      is_dq_string               narginchk                   waitbar
-      is_sq_string               python                      zscore
-      is_function_handle         register_graphics_toolkit
-      loaded_graphics_toolkits   recycle
-
- ** Deprecated functions.
-
-    The following functions were deprecated in Octave 3.2 and have been
-    removed from Octave 3.6.
-
-      create_set          spcholinv    splu
-      dmult               spcumprod    spmax
-      iscommand           spcumsum     spmin
-      israwcommand        spdet        spprod
-      lchol               spdiag       spqr
-      loadimage           spfind       spsum
-      mark_as_command     sphcat       spsumsq
-      mark_as_rawcommand  spinv        spvcat
-      spatan2             spkron       str2mat
-      spchol              splchol      unmark_command
-      spchol2inv          split        unmark_rawcommand
-
-    The following functions have been deprecated in Octave 3.6 and will
-    be removed from Octave 3.10 (or whatever version is the second major
-    release after 3.6):
-
-      cut                polyderiv
-      cor                shell_cmd
-      corrcoef           studentize
-      __error_text__     sylvester_matrix
-      error_text
-
- ** The following functions have been modified for Matlab compatibility:
-
-      randperm
-
-Summary of important user-visible changes for version 3.4.3 (2011-10-10):
-------------------------------------------------------------------------
-
- ** Octave 3.4.3 is a bug fixing release.
-
-Summary of important user-visible changes for version 3.4.2 (2011-06-24):
-------------------------------------------------------------------------
-
- ** Octave 3.4.2 fixes some minor installation problems that affected
-    version 3.4.1.
-
-Summary of important user-visible changes for version 3.4.1 (2011-06-15):
-------------------------------------------------------------------------
-
- ** Octave 3.4.1 is primarily a bug fixing release.
-
- ** IMPORTANT note about binary incompatibility in this release:
-
-    Binary compatibility for all 3.4.x releases was originally planned,
-    but this is impossible for the 3.4.1 release due to a bug in the way
-    shared libraries were built in Octave 3.4.0.  Because of this bug,
-    .oct files built for Octave 3.4.0 must be recompiled before they
-    will work with Octave 3.4.1.
-
-    Given that there would be binary incompatibilities with shared
-    libraries going from Octave 3.4.0 to 3.4.1, the following
-    incompatible changes were also made in this release:
-
-      * The Perl Compatible Regular Expression (PCRE) library is now
-        required to build Octave.
-
-      * Octave's libraries and .oct files are now installed in
-        subdirectories of $libdir instead of $libexecdir.
-
-    Any future Octave 3.4.x release versions should remain binary
-    compatible with Octave 3.4.1 as proper library versioning is now
-    being used as recommended by the libtool manual.
-
- ** The following functions have been deprecated in Octave 3.4.1 and will
-    be removed from Octave 3.8 (or whatever version is the second major
-    release after 3.4):
-
-      cquad  is_duplicate_entry  perror  strerror
-
- ** The following functions are new in 3.4.1:
-
-      colstyle  gmres  iscolumn  isrow  mgorth  nproc  rectangle
-
- ** The get_forge_pkg function is now private.
-
- ** The rectangle_lw, rectangle_sw, triangle_lw, and triangle_sw
-    functions are now private.
-
- ** The logistic_regression_derivatives and logistic_regression_likelihood
-    functions are now private.
-
- ** ChangeLog files in the Octave sources are no longer maintained
-    by hand.  Instead, there is a single ChangeLog file generated from
-    the Mercurial version control commit messages.  Older ChangeLog
-    information can be found in the etc/OLD-ChangeLogs directory in the
-    source distribution.
-
-Summary of important user-visible changes for version 3.4 (2011-02-08):
-----------------------------------------------------------------------
-
- ** BLAS and LAPACK libraries are now required to build Octave.  The
-    subset of the reference BLAS and LAPACK libraries has been removed
-    from the Octave sources.
-
- ** The ARPACK library is now distributed with Octave so it no longer
-    needs to be available as an external dependency when building
-    Octave.
-
- ** The `lookup' function was extended to be more useful for
-    general-purpose binary searching.  Using this improvement, the
-    ismember function was rewritten for significantly better
-    performance.
-
- ** Real, integer and logical matrices, when used in indexing, will now
-    cache the internal index_vector value (zero-based indices) when
-    successfully used as indices, eliminating the conversion penalty for
-    subsequent indexing by the same matrix.  In particular, this means it
-    is no longer needed to avoid repeated indexing by logical arrays
-    using find for performance reasons.
-
- ** Logical matrices are now treated more efficiently when used as
-    indices.  Octave will keep the index as a logical mask unless the
-    ratio of true elements is small enough, using a specialized
-    code.  Previously, all logical matrices were always first converted
-    to index vectors.  This results in savings in both memory and
-    computing time.
-
- ** The `sub2ind' and `ind2sub' functions were reimplemented as compiled
-    functions for better performance.  These functions are now faster,
-    can deliver more economized results for ranges, and can reuse the
-    index cache mechanism described in previous paragraph.
-
- ** The built-in function equivalents to associative operators (`plus',
-    `times', `mtimes', `and', and `or') have been extended to accept
-    multiple arguments.  This is especially useful for summing
-    (multiplying, etc.) lists of objects (of possibly distinct types):
-
-      matrix_sum = plus (matrix_list{:});
-
- ** An FTP object type based on libcurl has been implemented.  These
-    objects allow ftp connections, downloads and uploads to be
-    managed.  For example,
-
-      fp = ftp ("ftp.octave.org);
-      cd (fp, "gnu/octave");
-      mget (fp, "octave-3.2.3.tar.bz2");
-      close (fp);
-
- ** The default behavior of `assert (observed, expected)' has been
-    relaxed to employ less strict checking that does not require the
-    internals of the values to match.  This avoids previously valid
-    tests from breaking due to new internal classes introduced in future
-    Octave versions.
-
-    For instance, all of these assertions were true in Octave 3.0.x
-    but false in 3.2.x due to new optimizations and improvements:
-
-      assert (2*linspace (1, 5, 5), 2*(1:5))
-      assert (zeros (0, 0), [])
-      assert (2*ones (1, 5), (2) (ones (1,5)))
-
- ** The behavior of library functions `ismatrix', `issquare', and
-    `issymmetric' has been changed for better consistency.
-
-    * The `ismatrix' function now returns true for all numeric,
-      logical and character 2-D or N-D matrices.  Previously, `ismatrix'
-      returned false if the first or second dimension was zero.
-      Hence, `ismatrix ([])' was false,
-      while `ismatrix (zeros (1,2,0))' was true.
-
-    * The `issquare' function now returns a logical scalar, and is
-      equivalent to the expression
-
-        ismatrix (x) && ndims (x) == 2 && rows (x) == columns (x)
-
-      The dimension is no longer returned.  As a result, `issquare ([])'
-      now yields true.
-
-    * The `issymmetric' function now checks for symmetry instead of
-      Hermitianness.  For the latter, ishermitian was created.  Also,
-      logical scalar is returned rather than the dimension, so
-      `issymmetric ([])' is now true.
-
- ** Function handles are now aware of overloaded functions.  If a
-    function is overloaded, the handle determines at the time of its
-    reference which function to call.  A non-overloaded version does not
-    need to exist.
-
- ** Overloading functions for built-in classes (double, int8, cell,
-    etc.) is now compatible with Matlab.
-
- ** Function handles can now be compared with the == and != operators,
-    as well as the `isequal' function.
-
- ** Performance of concatenation (using []) and the functions `cat',
-    `horzcat', and `vertcat' has been improved for multidimensional
-    arrays.
-
- ** The operation-assignment operators +=, -=, *= and /= now behave more
-    efficiently in certain cases.  For instance, if M is a matrix and S a
-    scalar, then the statement
-
-      M += S;
-
-    will operate on M's data in-place if it is not shared by another
-    variable, usually increasing both time and memory efficiency.
-
-    Only selected common combinations are affected, namely:
-
-      matrix += matrix
-      matrix -= matrix
-      matrix .*= matrix
-      matrix ./= matrix
-
-      matrix += scalar
-      matrix -= scalar
-      matrix *= scalar
-      matrix /= scalar
-
-      logical matrix |= logical matrix
-      logical matrix &= logical matrix
-
-    where matrix and scalar belong to the same class.  The left-hand
-    side must be a simple variable reference.
-
-    Moreover, when unary operators occur in expressions, Octave will
-    also try to do the operation in-place if it's argument is a
-    temporary expression.
-
- ** The effect of comparison operators (<, >, <=, and >=) applied to
-    complex numbers has changed to be consistent with the strict
-    ordering defined by the `max', `min', and `sort' functions.  More
-    specifically, complex numbers are compared by lexicographical
-    comparison of the pairs `[abs(z), arg(z)]'.  Previously, only real
-    parts were compared; this can be trivially achieved by converting
-    the operands to real values with the `real' function.
-
- ** The automatic simplification of complex computation results has
-    changed.  Octave will now simplify any complex number with a zero
-    imaginary part or any complex matrix with all elements having zero
-    imaginary part to a real value.  Previously, this was done only for
-    positive zeros.  Note that the behavior of the complex function is
-    unchanged and it still produces a complex value even if the
-    imaginary part is zero.
-
- ** As a side effect of code refactoring in liboctave, the binary
-    logical operations are now more easily amenable to compiler
-    optimizations and are thus significantly faster.
-
- ** Octave now allows user-defined `subsasgn' methods to optimize out
-    redundant copies.  For more information, see the manual.
-
- ** More efficient matrix division handling.  Octave is now able to
-    handle the expressions
-
-      M' \ V
-      M.' \ V
-      V / M
-
-    (M is a matrix and V is a vector) more efficiently in certain cases.
-    In particular, if M is triangular, all three expressions will be
-    handled by a single call to xTRTRS (from LAPACK), with appropriate
-    flags.  Previously, all three expressions required a physical
-    transpose of M.
-
- ** More efficient handling of certain mixed real-complex matrix
-    operations.  For instance, if RM is a real matrix and CM a complex
-    matrix,
-
-      RM * CM
-
-    can now be evaluated either as
-
-      complex (RM * real (CM), RM * imag (CM))
-
-    or as
-
-      complex (RM) * CM,
-
-    depending on the dimensions.  The first form requires more
-    temporaries and copying, but halves the FLOP count, which normally
-    brings better performance if RM has enough rows.  Previously, the
-    second form was always used.
-
-    Matrix division is similarly affected.
-
- ** More efficient handling of triangular matrix factors returned from
-    factorizations.  The functions for computing QR, LU and Cholesky
-    factorizations will now automatically return the triangular matrix
-    factors with proper internal matrix_type set, so that it won't need
-    to be computed when the matrix is used for division.
-
- ** The built-in `sum' function now handles the non-native summation
-    (i.e., double precision sum of single or integer inputs) more
-    efficiently, avoiding a temporary conversion of the whole input
-    array to doubles.  Further, `sum' can now accept an extra option
-    argument, using a compensated summation algorithm rather than a
-    straightforward sum, which significantly improves precision if lots
-    of cancellation occurs in the summation.
-
- ** The built-in `bsxfun' function now uses optimized code for certain
-    cases where built-in operator handles are passed in.  Namely, the
-    optimizations concern the operators `plus', `minus', `times',
-    `ldivide', `rdivide', `power', `and', `or' (for logical arrays),
-    the relational operators `eq', `ne', `lt', `le', `gt', `ge', and the
-    functions `min' and `max'.  Optimizations only apply when both
-    operands are of the same built-in class.  Mixed real/complex and
-    single/double operations will first convert both operands to a
-    common type.
-
- ** The `strfind' and `strrep' functions now have compiled
-    implementations, facilitating significantly more efficient searching
-    and replacing in strings, especially with longer patterns.  The code
-    of `strcat' has been vectorized and is now much more efficient when
-    many strings are concatenated.  The `strcmpi' and `strncmpi'
-    functions are now built-in functions, providing better performance.
-
- ** 'str2double' now has a compiled implementation and the API conforms
-    to Matlab.  The additional Octave-specific features of returning a
-    boolean matrix indicating which elements were successfully converted
-    has been removed.
-
- ** Matlab-style ignoring input and output function arguments using
-    tilde (~) is now supported.  Ignored output arguments may be
-    detected from a function using the built-in function `isargout'.
-    For more details, consult the manual.
-
- ** The list datatype, deprecated since the introduction of cells, has
-    been removed.
-
- ** The accumarray function has been optimized and is now significantly
-    faster in certain important cases.
-
- ** The behavior of isreal and isnumeric functions was changed to be more
-    Matlab-compatible.
-
- ** The integer math & conversion warnings (Octave:int-convert-nan,
-    Octave:int-convert-non-int-val, Octave:int-convert-overflow,
-    Octave:int-math-overflow) have been removed.
-
- ** rem and mod are now built-in functions.  They also handle integer
-    types efficiently using integer arithmetic.
-
- ** Sparse indexing and indexed assignment has been mostly rewritten.
-    Since Octave uses compressed column storage for sparse matrices,
-    major attention is devoted to operations manipulating whole columns.
-    Such operations are now significantly faster, as well as some other
-    important cases.
-
-    Further, it is now possible to pre-allocate a sparse matrix and
-    subsequently fill it by assignments, provided they meet certain
-    conditions.  For more information, consult the `spalloc' function,
-    which is no longer a mere dummy.  Consequently, nzmax and nnz are no
-    longer always equal in Octave.  Octave may also produce a matrix
-    with nnz < nzmax as a result of other operations, so you should
-    consistently use nnz unless you really want to use nzmax (i.e., the
-    space allocated for nonzero elements).
-
-    Sparse concatenation is also affected, and concatenating sparse
-    matrices, especially larger collections, is now significantly more
-    efficient.  This applies to both the [] operator and the
-    cat/vertcat/horzcat functions.
-
- ** It is now possible to optionally employ the xGESDD LAPACK drivers
-    for computing the singular value decomposition using svd, instead
-    of the default xGESVD, using the configuration pseudo-variable
-    svd_driver.  The xGESDD driver can be up to 6x times faster when
-    singular vectors are requested, but is reported to be somewhat less
-    robust on highly ill-conditioned matrices.
-
- ** Configuration pseudo-variables, such as page_screen_output or
-    confirm_recursive_rmdir (or the above mentioned svd_driver), now
-    accept a "local" option as second argument, requesting the change
-    to be undone when the current function returns:
-
-    function [status, msg] = rm_rf (dir)
-      confirm_recursive_rmdir (false, "local");
-      [status, msg] = rmdir (dir, "s");
-      ...
-    endfunction
-
-    Upon return, confirm_recursive_rmdir will be restored to the value
-    it had on entry to the function, even if there were subsequent
-    changes to the variable in function rm_rf or any of the functions
-    it calls.
-
- ** pkg now accepts a -forge option for downloading and installing
-    packages from Octave Forge automatically.  For example,
-
-      pkg install -forge general
-
-    will automatically download the latest release of the general
-    package and attempt to install it.  No automatic resolving of
-    dependencies is provided.  Further,
-
-      pkg list -forge
-
-    can be used to list all available packages.
-
- ** The internal data representation of structs has been completely
-    rewritten to make certain optimizations feasible.  The field data
-    can now be shared between structs with equal keys but different
-    dimensions or values, making operations that preserve the fields
-    faster.  Economized storage is now used for scalar structs (just
-    like most other scalars), making their usage more
-    memory-efficient.  Certain array-like operations on structs
-    (concatenation, uniform cellfun, num2cell) have gained a
-    significant speed-up.  Additionally, the octave_scalar_map class
-    now provides a simpler interface to work with scalar structs within
-    a C++ DLD function.
-
- ** Two new formats are available for displaying numbers:
-
-      format short eng
-      format long eng
-
-    Both display numbers in engineering notation, i.e., mantissa +
-    exponent where the exponent is a multiple of 3.
-
- ** The following functions are new in Octave 3.4:
-      accumdim    erfcx        nfields      pqpnonneg  uigetdir
-      bitpack     fileread     nth_element  quadcc     uigetfile
-      bitunpack   fminbnd      onCleanup    randi      uiputfile
-      blkmm       fskipl       pbaspect     repelems   uimenu
-      cbrt        ifelse       pie3         reset      whitebg
-      curl        ishermitian  powerset     rsf2csf
-      chop        isindex      ppder        saveas
-      daspect     luupdate     ppint        strread
-      divergence  merge        ppjumps      textread
-
- ** Using the image function to view images with external programs such
-    as display, xv, and xloadimage is no longer supported.  The
-    image_viewer function has also been removed.
-
- ** The behavior of struct assignments to non-struct values has been
-    changed.  Previously, it was possible to overwrite an arbitrary
-    value:
-
-      a = 1;
-      a.x = 2;
-
-    This is no longer possible unless a is an empty matrix or cell
-    array.
-
- ** The dlmread function has been extended to allow specifying a custom
-    value for empty fields.
-
- ** The dlmread and dlmwrite functions have been modified to accept
-    file IDs (as returned by fopen) in addition to file names.
-
- ** Octave can now optimize away the interpreter overhead of an
-    anonymous function handle, if the function simply calls another
-    function or handle with some of its parameters bound to certain
-    values.  Example:
-
-      f = @(x) sum (x, 1);
-
-    When f is called, the call is forwarded to @sum with the constant 1
-    appended, and the anonymous function call does not occur on the
-    call stack.
-
- ** For compatibility with Matlab, mu2lin (x) is now equivalent to
-    mu2lin (x, 0).
-
- ** The new function `history_control' may be used to control the way
-    command lines are added to the history list when Octave is using
-    readline for command-line editing.  For example
-
-      history_control ("ignoredups")
-
-    tells Octave to avoid adding duplicate lines to the history list.
-
- ** Octave now uses the gnulib library for improved portability and to
-    avoid bugs in operating system functions.
-
- ** Deprecated functions.
-
-    The following functions were deprecated in Octave 3.0 and have been
-    removed from Octave 3.4.
-
-      beta_cdf         geometric_pdf        pascal_pdf
-      beta_inv         geometric_rnd        pascal_rnd
-      beta_pdf         hypergeometric_cdf   poisson_cdf
-      beta_rnd         hypergeometric_inv   poisson_inv
-      binomial_cdf     hypergeometric_pdf   poisson_pdf
-      binomial_inv     hypergeometric_rnd   poisson_rnd
-      binomial_pdf     intersection         polyinteg
-      binomial_rnd     is_bool              setstr
-      chisquare_cdf    is_complex           struct_contains
-      chisquare_inv    is_list              struct_elements
-      chisquare_pdf    is_matrix            t_cdf
-      chisquare_rnd    is_scalar            t_inv
-      clearplot        is_square            t_pdf
-      clg              is_stream            t_rnd
-      com2str          is_struct            uniform_cdf
-      exponential_cdf  is_symmetric         uniform_inv
-      exponential_inv  is_vector            uniform_pdf
-      exponential_pdf  isstr                uniform_rnd
-      exponential_rnd  lognormal_cdf        weibcdf
-      f_cdf            lognormal_inv        weibinv
-      f_inv            lognormal_pdf        weibpdf
-      f_pdf            lognormal_rnd        weibrnd
-      f_rnd            meshdom              weibull_cdf
-      gamma_cdf        normal_cdf           weibull_inv
-      gamma_inv        normal_inv           weibull_pdf
-      gamma_pdf        normal_pdf           weibull_rnd
-      gamma_rnd        normal_rnd           wiener_rnd
-      geometric_cdf    pascal_cdf
-      geometric_inv    pascal_inv
-
-    The following functions were deprecated in Octave 3.2 and will
-    be removed from Octave 3.6 (or whatever version is the second major
-    release after 3.2):
-
-      create_set          spcholinv    splu
-      dmult               spcumprod    spmax
-      iscommand           spcumsum     spmin
-      israwcommand        spdet        spprod
-      lchol               spdiag       spqr
-      loadimage           spfind       spsum
-      mark_as_command     sphcat       spsumsq
-      mark_as_rawcommand  spinv        spvcat
-      spatan2             spkron       str2mat
-      spchol              splchol      unmark_command
-      spchol2inv          split        unmark_rawcommand
-
-    The following functions have been deprecated in Octave 3.4 and will
-    be removed from Octave 3.8 (or whatever version is the second major
-    release after 3.4):
-
-      autocor  cellidx   gammai     is_global  replot     values
-      autocov  dispatch  glpkmex    krylovb    saveimage
-      betai    fstat     intwarning perror     strerror
-
-Summary of important user-visible changes for version 3.2 (2009-06-05):
-----------------------------------------------------------------------
-
- ** Compatibility with Matlab graphics has been improved.
-
-    The hggroup object and associated listener callback functions have
-    been added allowing the inclusion of group objects.  Data sources
-    have been added to these group objects such that
-
-           x = 0:0.1:10;
-           y = sin (x);
-           plot (x, y, "ydatasource", "y");
-           for i = 1 : 100
-             pause(0.1)
-             y = sin (x + 0.1 * i);
-             refreshdata ();
-           endfor
-
-    works as expected.  This capability has be used to introduce
-    stem-series, bar-series, etc., objects for better Matlab
-    compatibility.
-
- ** New graphics functions:
-
-      addlistener                  ezcontour   gcbo         refresh
-      addproperty                  ezcontourf  ginput       refreshdata
-      allchild                     ezmesh      gtext        specular
-      available_graphics_toolkits  ezmeshc     intwarning   surfl
-      graphics_toolkit             ezplot      ishghandle   trisurf
-      cla                          ezplot3     isocolors    waitforbuttonpress
-      clabel                       ezpolar     isonormals
-      comet                        ezsurf      isosurface
-      dellistener                  findall     linkprop
-      diffuse                      gcbf        plotmatrix
-
- ** New experimental OpenGL/FLTK based plotting system.
-
-    An experimental plotting system based on OpenGL and the FLTK
-    toolkit is now part of Octave.  This graphics toolkit is disabled by
-    default.  You can switch to using it with the command
-
-        graphics_toolkit ("fltk")
-
-    for all future figures or for a particular figure with the command
-
-        graphics_toolkit (h, "fltk")
-
-    where "h" is a valid figure handle.
-
- ** Functions providing direct access to gnuplot have been removed.
-
-    The functions __gnuplot_plot__, __gnuplot_set__, __gnuplot_raw__,
-     __gnuplot_show__, __gnuplot_replot__, __gnuplot_splot__,
-     __gnuplot_save_data__ and __gnuplot_send_inline_data__ have been
-     removed from Octave.  These function were incompatible with the
-     high level graphics handle code.
-
- ** The Control, Finance and Quaternion functions have been removed.
-
-    These functions are now available as separate packages from
-
-      http://octave.sourceforge.net/packages.html
-
-    and can be reinstalled using the Octave package manager (see
-    the pkg function).
-
- ** Specific sparse matrix functions removed.
-
-    The following functions, which handled only sparse matrices have
-    been removed.  Instead of calling these functions directly, you
-    should use the corresponding function without the "sp" prefix.
-
-      spatan2     spcumsum  spkron   spprod
-      spchol      spdet     splchol  spqr
-      spchol2inv  spdiag    splu     spsum
-      spcholinv   spfind    spmax    spsumsqk
-      spcumprod   spinv     spmin
-
- ** Improvements to the debugger.
-
-    The interactive debugging features have been improved.  Stopping
-    on statements with dbstop should work correctly now.  Stepping
-    into and over functions, and stepping one statement at a time
-    (with dbstep) now works.  Moving up and down the call stack with
-    dbup and dbdown now works.  The dbstack function is now available
-    to print the current function call stack.  The new dbquit function
-    is available to exit the debugging mode.
-
- ** Improved traceback error messages.
-
-    Traceback error messages are much more concise and easier to
-    understand.  They now display information about the function call
-    stack instead of the stack of all statements that were active at
-    the point of the error.
-
- ** Object Oriented Programming.
-
-    Octave now includes OOP features and the user can create their own
-    class objects and overloaded functions and operators.  For
-    example, all methods of a class called "myclass" will be found in
-    a directory "@myclass" on the users path.  The class specific
-    versions of functions and operators take precedence over the
-    generic versions of these functions.
-
-    New functions related to OOP include
-
-      class  inferiorto  isobject  loadobj  methods  superiorto
-
-    See the Octave manual for more details.
-
- ** Parsing of Command-style Functions.
-
-    Octave now parses command-style functions without needing to first
-    declare them with "mark_as_command".  The rules for recognizing a
-    command-style function calls are
-
-      * A command must appear as the first word in a statement,
-        followed by a space.
-
-      * The first character after the space must not be '=' or '('
-
-      * The next token after the space must not look like a binary
-        operator.
-
-    These rules should be mostly compatible with the way Matlab parses
-    command-style function calls and allow users to define commands in
-    .m files without having to mark them as commands.
-
-    Note that previous versions of Octave allowed expressions like
-
-      x = load -text foo.dat
-
-    but an expression like this will now generate a parse error.  In
-    order to assign the value returned by a function to a variable,
-    you must use the normal function call syntax:
-
-      x = load ("-text", "foo.dat");
-
- ** Block comments.
-
-    Commented code can be between matching "#{" and "#}" or "%{" and
-    "%}" markers, even if the commented code spans several line.  This
-    allows blocks code to be commented, without needing to comment
-    each line.  For example,
-
-    function [s, t] = func (x, y)
-      s = 2 * x;
-    #{
-      s *= y;
-      t = y + x;
-    #}
-    endfunction
-
-    the lines "s *= y;" and "t = y + x" will not be executed.
-
- ** If any subfunction in a file ends with "end" or "endfunction", then
-    they all must end that way.  Previously, Octave accepted
-
-      function main ()
-        ...
-      # no endfunction here.
-      function sub ()
-        ...
-      endfunction
-
-    but this is no longer allowed.
-
- ** Special treatment in the parser of expressions like "a' * b".
-
-    In these cases the transpose is no longer explicitly formed and
-    BLAS libraries are called with the transpose flagged,
-    significantly improving performance for these kinds of
-    operations.
-
- ** Single Precision data type.
-
-    Octave now includes a single precision data type.  Single
-    precision variables can be created with the "single" command, or
-    from functions like ones, eye, etc.  For example,
-
-      single (1)
-      ones (2, 2, "single")
-      zeros (2, 2, "single")
-      eye (2, 2, "single")
-      Inf (2, 2, "single")
-      NaN (2, 2, "single")
-      NA (2, 2, "single")
-
-    all create single precision variables.  For compatibility with
-    Matlab, mixed double/single precision operators and functions
-    return single precision types.
-
-    As a consequence of this addition to Octave the internal
-    representation of the double precision NA value has changed, and
-    so users that make use of data generated by Octave with R or
-    visa-versa are warned that compatibility might not be assured.
-
- ** Improved array indexing.
-
-    The underlying code used for indexing of arrays has been
-    completely rewritten and indexing is now significantly faster.
-
- ** Improved memory management.
-
-    Octave will now attempt to share data in some cases where previously
-    a copy would be made, such as certain array slicing operations or
-    conversions between cells, structs and cs-lists.  This usually reduces
-    both time and memory consumption.
-    Also, Octave will now attempt to detect and optimize usage of a vector
-    as a stack, when elements are being repeatedly inserted at/removed from
-    the end of the vector.
-
- ** Improved performance for reduction operations.
-
-    The performance of the sum, prod, sumsq, cumsum, cumprod, any, all,
-    max and min functions has been significantly improved.
-
- ** Sorting and searching.
-
-    The performance of sort has been improved, especially when sorting
-    indices are requested.  An efficient built-in issorted
-    implementation was added.  The sortrows function now uses a more
-    efficient algorithm, especially in the homogeneous case.  The lookup
-    function is now a built-in function performing a binary search,
-    optimized for long runs of close elements.  Lookup also works with
-    cell arrays of strings.
-
- ** Range arithmetics
-
-    For some operations on ranges, Octave will attempt to keep the
-    result as a range.  These include negation, adding a scalar,
-    subtracting a scalar, and multiplying by a scalar.  Ranges with zero
-    increment are allowed and can be constructed using the built-in
-    function `ones'.
-
- ** Various performance improvements.
-
-    Performance of a number of other built-in operations and functions
-    was improved, including:
-
-    * logical operations
-    * comparison operators
-    * element-wise power
-    * accumarray
-    * cellfun
-    * isnan
-    * isinf
-    * isfinite
-    * nchoosek
-    * repmat
-    * strcmp
-
- ** 64-bit integer arithmetic.
-
-    Arithmetic with 64-bit integers (int64 and uint64 types) is fully
-    supported, with saturation semantics like the other integer types.
-    Performance of most integer arithmetic operations has been
-    improved by using integer arithmetic directly.  Previously, Octave
-    performed integer math with saturation semantics by converting the
-    operands to double precision, performing the operation, and then
-    converting the result back to an integer value, truncating if
-    necessary.
-
- ** Diagonal and permutation matrices.
-
-    The interpreter can now treat diagonal and permutation matrices as
-    special objects that store only the non-zero elements, rather than
-    general full matrices.  Therefore, it is now possible to construct
-    and use these matrices in linear algebra without suffering a
-    performance penalty due to storing large numbers of zero elements.
-
- ** Improvements to fsolve.
-
-    The fsolve function now accepts an option structure argument (see
-    also the optimset function).  The INFO values returned from fsolve
-    have changed to be compatible with Matlab's fsolve function.
-    Additionally, fsolve is now able to solve overdetermined systems,
-    complex-differentiable complex systems, systems with a sparse
-    jacobian and can work in single precision if given single precision
-    inputs.  It can also be called recursively.
-
- ** Improvements to the norm function.
-
-    The norm function is now able to compute row or column norms of a
-    matrix in a single call, as well as general matrix p-norms.
-
- ** New functions for computing some eigenvalues or singular values.
-
-    The eigs and svds functions have been included in Octave.  These
-    functions require the ARPACK library (now distributed under a
-    GPL-compatible license).
-
- ** New QR and Cholesky factorization updating functions.
-
-      choldelete  cholshift   qrdelete  qrshift
-      cholinsert  cholupdate  qrinsert  qrupdate
-
- ** New quadrature functions.
-
-      dblquad  quadgk  quadv  triplequad
-
- ** New functions for reading and writing images.
-
-    The imwrite and imread functions have been included in Octave.
-    These functions require the GraphicsMagick library.  The new
-    function imfinfo provides information about an image file (size,
-    type, colors, etc.)
-
- ** The input_event_hook function has been replaced by the pair of
-    functions add_input_event_hook and remove_input_event_hook so that
-    more than one hook function may be installed at a time.
-
- ** Other miscellaneous new functions.
-
-      addtodate          hypot                       reallog
-      bicgstab           idivide                     realpow
-      cellslices         info                        realsqrt
-      cgs                interp1q                    rectint
-      command_line_path  isdebugmode                 regexptranslate
-      contrast           isfloat                     restoredefaultpath
-      convn              isstrprop                   roundb
-      cummin             log1p                       rundemos
-      cummax             lsqnonneg                   runlength
-      datetick           matlabroot                  saveobj
-      display            namelengthmax               spaugment
-      expm1              nargoutchk                  strchr
-      filemarker         pathdef                     strvcat
-      fstat              perl                        subspace
-      full               prctile                     symvar
-      fzero              quantile                    treelayout
-      genvarname         re_read_readline_init_file  validatestring
-      histc
-
- ** Changes to strcat.
-
-    The strcat function is now compatible with Matlab's strcat
-    function, which removes trailing whitespace when concatenating
-    character strings.  For example
-
-      strcat ('foo ', 'bar')
-      ==> 'foobar'
-
-    The new function cstrcat provides the previous behavior of
-    Octave's strcat.
-
- ** Improvements to the help functions.
-
-    The help system has been mostly re-implemented in .m files to make
-    it easier to modify.  Performance of the lookfor function has been
-    greatly improved by caching the help text from all functions that
-    are distributed with Octave.  The pkg function has been modified
-    to generate cache files for external packages when they are
-    installed.
-
- ** Deprecated functions.
-
-    The following functions were deprecated in Octave 3.0 and will be
-    removed from Octave 3.4 (or whatever version is the second major
-    release after 3.0):
-
-      beta_cdf         geometric_pdf       pascal_pdf
-      beta_inv         geometric_rnd       pascal_rnd
-      beta_pdf         hypergeometric_cdf  poisson_cdf
-      beta_rnd         hypergeometric_inv  poisson_inv
-      binomial_cdf     hypergeometric_pdf  poisson_pdf
-      binomial_inv     hypergeometric_rnd  poisson_rnd
-      binomial_pdf     intersection        polyinteg
-      binomial_rnd     is_bool             setstr
-      chisquare_cdf    is_complex          struct_contains
-      chisquare_inv    is_list             struct_elements
-      chisquare_pdf    is_matrix           t_cdf
-      chisquare_rnd    is_scalar           t_inv
-      clearplot        is_square           t_pdf
-      clg              is_stream           t_rnd
-      com2str          is_struct           uniform_cdf
-      exponential_cdf  is_symmetric        uniform_inv
-      exponential_inv  is_vector           uniform_pdf
-      exponential_pdf  isstr               uniform_rnd
-      exponential_rnd  lognormal_cdf       weibcdf
-      f_cdf            lognormal_inv       weibinv
-      f_inv            lognormal_pdf       weibpdf
-      f_pdf            lognormal_rnd       weibrnd
-      f_rnd            meshdom             weibull_cdf
-      gamma_cdf        normal_cdf          weibull_inv
-      gamma_inv        normal_inv          weibull_pdf
-      gamma_pdf        normal_pdf          weibull_rnd
-      gamma_rnd        normal_rnd          wiener_rnd
-      geometric_cdf    pascal_cdf
-      geometric_inv    pascal_inv
-
-    The following functions are now deprecated in Octave 3.2 and will
-    be removed from Octave 3.6 (or whatever version is the second major
-    release after 3.2):
-
-      create_set          spcholinv  spmax
-      dmult               spcumprod  spmin
-      iscommand           spcumsum   spprod
-      israwcommand        spdet      spqr
-      lchol               spdiag     spsum
-      loadimage           spfind     spsumsq
-      mark_as_command     spinv      str2mat
-      mark_as_rawcommand  spkron     unmark_command
-      spatan2             splchol    unmark_rawcommand
-      spchol              split
-      spchol2inv          splu
-
-Summary of important user-visible changes for version 3.0 (2007-12-21):
-----------------------------------------------------------------------
-
- ** Compatibility with Matlab graphics is much better now.  We now
-    have some graphics features that work like Matlab's Handle
-    Graphics (tm):
-
-    + You can make a subplot and then use the print function to
-      generate a file with the plot.
-
-    + RGB line colors are supported if you use gnuplot 4.2.  Octave
-      can still use gnuplot 4.0, but there is no way to set arbitrary
-      line colors with it when using the Matlab-style plot functions.
-      There never was any way to do this reliably with older versions
-      of gnuplot (whether run from Octave or not) since it only
-      provided a limited set to choose from, and they were terminal
-      dependent, so choosing color 1 with the X11 terminal would be
-      different from color 1 with the PostScript terminal.  Valid RGB
-      colors for gnuplot 4.0 are the eight possible combinations of 0
-      and 1 for the R, G and B values. Invalid values are all mapped
-      to the same color.
-
-      This also affects patch objects used in the bar, contour, meshc
-      and surfc functions, where the bars and contours will be
-      monochrome. A workaround for this is to type "colormap gmap40"
-      that loads a colormap that in many cases will be adequate for
-      simple bar and contour plots.
-
-    + You can control the width of lines using (for example):
-
-        line (x, y, "linewidth", 4, "color", [1, 0, 0.5]);
-
-      (this also shows the color feature).
-
-    + With gnuplot 4.2, image data is plotted with gnuplot and may be
-      combined with other 2-d plot data.
-
-    + Lines for contour plots are generated with an Octave function, so
-      contour plots are now 2-d plots instead of special 3-d plots, and
-      this allows you to plot additional 2-d data on top of a contour
-      plot.
-
-    + With the gnuplot "extended" terminals the TeX interpreter is
-    emulated. However, this means that the TeX interpreter is only
-    supported on the postscript terminals with gnuplot 4.0. Under
-    gnuplot 4.2 the terminals aqua, dumb, png, jpeg, gif, pm, windows,
-    wxt, svg and x11 are supported as well.
-
-    + The following plot commands are now considered obsolete and will
-      be removed from a future version of Octave:
-
-        __gnuplot_set__
-        __gnuplot_show__
-        __gnuplot_plot__
-        __gnuplot_splot__
-        __gnuplot_replot__
-
-      Additionally, these functions no longer have any effect on plots
-      created with the Matlab-style plot commands (plot, line, mesh,
-      semilogx, etc.).
-
-    + Plot property values are not extensively checked.  Specifying
-      invalid property values may produce unpredictable results.
-
-    + Octave now sends data over the same pipe that is used to send
-      commands to gnuplot.  While this avoids the problem of
-      cluttering /tmp with data files, it is no longer possible to use
-      the mouse to zoom in on plots.  This is a limitation of gnuplot,
-      which is unable to zoom when the data it plots is not stored in
-      a file.  Some work has been done to fix this problem in newer
-      versions of gnuplot (> 4.2.2).  See for example, this thread
-
-        http://www.nabble.com/zooming-of-inline-data-tf4357017.html#a12416496
-
-      on the gnuplot development list.
-
-
- ** The way Octave handles search paths has changed.  Instead of
-    setting the built-in variable LOADPATH, you must use addpath,
-    rmpath, or path to manipulate the function search path.  These
-    functions will maintain "." at the head of the path, for
-    compatibility with Matlab.
-
-    Leading, trailing or doubled colons are no longer special.
-    Now, all elements of the search path are explicitly included in
-    the path when Octave starts.  To display the path, use the path
-    function.
-
-    Path elements that end in // are no longer searched recursively.
-    Instead, you may use addpath and the genpath function to add an
-    entire directory tree to the path.  For example,
-
-      addpath (genpath ("~/octave"));
-
-    will add ~/octave and all directories below it to the head of the
-    path.
-
-
- ** Previous versions of Octave had a number of built-in variables to
-    control warnings (for example, warn_divide_by_zero).  These
-    variables have been replaced by warning identifiers that are used
-    with the warning function to control the state of warnings.
-
-    For example, instead of writing
-
-      warn_divide_by_zero = false;
-
-    to disable divide-by-zero warnings, you should write
-
-      warning ("off", "Octave:divide-by-zero");
-
-    You may use the same technique in your own code to control
-    warnings.  For example, you can use
-
-      warning ("My-package:phase-of-the-moon",
-               "the phase of the moon could cause trouble today");
-
-    to allow users to control this warning using the
-    "My-package:phase-of-the-moon" warning identifier.
-
-    You may also enable or disable all warnings, or turn them into
-    errors:
-
-      warning ("on", "all");
-      warning ("off", "all");
-      warning ("error", "Octave:divide-by-zero");
-      warning ("error", "all");
-
-    You can query the state of current warnings using
-
-      warning ("query", ID)
-      warning ("query")
-
-    (only those warning IDs which have been explicitly set are
-    returned).
-
-    A partial list and description of warning identifiers is available
-    using
-
-      help warning_ids
-
-
- ** All built-in variables have been converted to functions.  This
-    change simplifies the interpreter and allows a consistent
-    interface to internal variables for user-defined packages and the
-    core functions distributed with Octave.  In most cases, code that
-    simply accesses internal variables does not need to change.  Code
-    that sets internal variables will change.  For example, instead of
-    writing
-
-      PS1 = ">> ";
-
-    you will need to write
-
-      PS1 (">> ");
-
-    If you need write code that will run in both old and new versions
-    of Octave, you can use something like
-
-      if (exist ("OCTAVE_VERSION") == 5)
-        ## New:
-        PS1 (">> ");
-      else
-        ## Old:
-        PS1 = ">> ";
-      endif
-
-
- ** For compatibility with Matlab, the output order of Octave's
-    "system" function has changed from
-
-      [output, status] = system (cmd);
-
-    to
-
-      [status, output] = system (cmd);
-
-
- ** For compatibility with Matlab, the output of Octave's fsolve
-    function has been changed from
-
-      [x, info, msg] = fsolve (...);
-
-    to
-
-      [x, fval, info] = fsolve (...);
-
-
- ** For compatibility with Matlab, normcdf, norminv, normpdf, and
-    normrnd have been modified to compute distributions using the
-    standard deviation instead of the variance.
-
-
- ** For compatibility with Matlab, gamcdf, gaminv, gampdf, gamrnd,
-    expcdf, expinv, exppdf and exprnd have been modified to compute
-    the distributions using the standard scale factor rather than
-    one over the scale factor.
-
----------------------------------------------------------
-
-See NEWS.2 for old news.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etc/NEWS.4	Fri Dec 31 17:03:44 2021 +0100
@@ -0,0 +1,1350 @@
+Summary of important user-visible changes for version 4.4 (2018-04-30):
+----------------------------------------------------------------------
+
+ ** A graphical Variable Editor has been added to the GUI interface.
+    It uses a spreadsheet-like interface for quick, intuitive editing
+    of variables.  The Variable Editor is launched by double-clicking
+    on a variable name in the Workspace Window or by typing
+    "openvar VARIABLE_NAME" in the Command Window.
+
+ ** On systems with 64-bit pointers, --enable-64 is now the default and
+    Octave always uses 64-bit indexing.  However, if the configure
+    script determines that the BLAS library uses 32-bit integers, then
+    operations using the following libraries are limited to arrays with
+    dimensions that are smaller than 2^31 elements:
+
+      BLAS  LAPACK  QRUPDATE  SuiteSparse  ARPACK
+
+    Additionally, the following libraries use "int" internally, so
+    maximum problem sizes are always limited:
+
+      glpk  Qhull
+
+ ** The octave command no longer starts the GUI by default.  Most users
+    starting Octave from a shell were expecting the command line
+    interface, and desktop launchers already required the `--force-gui'
+    option.  With this change, desktop launchers should be modified to
+    use the new option `--gui'.  The previous `--force-gui' option will
+    continue to work, and maps to `--gui', but it will be removed in
+    Octave 6.
+
+ ** A known bug in Qt (https://bugreports.qt.io/browse/QTBUG-55357) is
+    addressed by limiting GUI sub-panel relocation capabilities for Qt
+    versions in the range >= 5.6.1 and < 5.7.1.  However, this may not
+    thoroughly avoid issues on all platforms.
+
+ ** A new container data type--containers.Map--is available.  Map is a
+    key/value storage container (a.k.a, a hash) that efficiently allows
+    storing and retrieving values by name, rather than by position which
+    is how arrays work.
+
+ ** The bareword "import" is now recognized in scripts and functions.
+    However, the functionality to import functions and classes from
+    other namespaces into the local scope has not yet been implemented.
+    Attempting to use "import" will provoke an error message.
+
+ ** hex2num and num2hex now work for integer and char types and num2hex
+    may optionally return a cell array of strings instead of a character
+    array.  If given a cell array of strings, hex2num now returns a
+    numeric array of the same size as the input cell array.  Previously,
+    hex2num would accept a cell array of strings of arbitrary dimension
+    but would always return a column vector.
+
+ ** New special functions cosint, sinint, and gammaincinv have been added.
+
+ ** Special functions in Octave have been rewritten for larger input
+    domains, better accuracy, and additional options.
+    * gammainc now accepts negative real values for X.
+    * improved accuracy for gammainc, betainc, betaincinv, expint.
+    * gammainc has new options "scaledlower" and "scaledupper".
+    * betainc, betaincinv have new option "upper".
+
+ ** The "names" option used in regular expressions now returns a struct
+    array, rather than a struct with a cell array for each field.  This
+    change was made for Matlab compatibility.
+
+ ** The quadcc function now uses both absolute tolerance and relative
+    tolerance to determine the stopping criteria for an integration.
+    To be compatible with other quadXXX functions, such as quadgk, the
+    calling syntax has changed to
+
+      quadcc (f, a, b, [AbsTol, [RelTol]])
+
+    To update existing code, change instances of RelTol to [0, RelTol].
+
+      quadcc (f, a, b, tol) => quadcc (f, a, b, [0, tol])
+
+    A warning that a single tolerance input is now interpreted as an
+    absolute tolerance will be issued in Octave versions 4.4 and 5,
+    after which it will be removed.  The warning has ID
+    "Octave:quadcc:RelTol-conversion" and can be disabled with
+
+      warning ("off", "Octave:quadcc:RelTol-conversion")
+
+ ** The qr function now returns a standard factorization unless
+    explicitly instructed to perform an economy factorization by using a
+    final argument of 0.
+
+ ** The Qt graphics toolkit now supports offscreen printing without osmesa
+    if Octave was built with Qt >= 5.1.
+
+ ** The built-in pager for display of large data is now disabled by
+    default.  To re-enable it for every Octave session add the following
+    to your .octaverc file:
+
+      more on;
+
+ ** The FLTK toolkit is no longer prioritized for development.  The
+    number of Octave Maintainers is too small to support three different
+    graphic toolkits.  New development will target the Qt toolkit.
+    While no longer prioritized, the FLTK toolkit is not deprecated and
+    there is no schedule for its removal.
+
+ ** The graphic object property "PickableParts" has been implemented
+    which controls whether an object can accept mouse clicks.
+
+ ** The graphic object property "Interruptible" has been fully
+    implemented which controls whether a running callback function can
+    be interrupted by another callback function.
+
+ ** The graphic object property "HitTest" has been updated to be fully
+    compatible with Matlab.
+
+ ** Text objects now implement the properties "BackgroundColor",
+    "EdgeColor", "LineStyle", "LineWidth", and "Margin".
+
+ ** An initial implementation of alpha transparency has been made for
+    patch and surface objects.  Printing to svg and pdf is supported.
+
+ ** ishandle now returns true for both graphics handle objects and
+    Java objects.  The latter change was made for Matlab compatibility.
+    Use ishghandle or isgraphics if it is important not to include Java
+    objects.
+
+ ** The pkg command now accepts a URL as an argument, allowing a valid
+    Octave package to be installed from any remote host with one command,
+    for example
+
+      pkg install https://example.org/download/example-package.tar.gz
+
+ ** The following statistical functions have been moved from core
+    Octave to the statistics package available from Octave Forge.
+
+    BASE
+      cloglog
+      logit
+      prctile
+      probit
+      qqplot
+      table  (renamed to crosstab)
+
+    DISTRIBUTIONS
+      betacdf
+      betainv
+      betapdf
+      betarnd
+      binocdf
+      binoinv
+      binopdf
+      binornd
+      cauchy_cdf
+      cauchy_inv
+      cauchy_pdf
+      cauchy_rnd
+      chi2cdf
+      chi2inv
+      chi2pdf
+      chi2rnd
+      expcdf
+      expinv
+      exppdf
+      exprnd
+      fcdf
+      finv
+      fpdf
+      frnd
+      gamcdf
+      gaminv
+      gampdf
+      gamrnd
+      geocdf
+      geoinv
+      geopdf
+      geornd
+      hygecdf
+      hygeinv
+      hygepdf
+      hygernd
+      kolmogorov_smirnov_cdf
+      laplace_cdf
+      laplace_inv
+      laplace_pdf
+      laplace_rnd
+      logistic_cdf
+      logistic_inv
+      logistic_pdf
+      logistic_rnd
+      logncdf
+      logninv
+      lognpdf
+      lognrnd
+      nbincdf
+      nbininv
+      nbinpdf
+      nbinrnd
+      normcdf
+      norminv
+      normpdf
+      normrnd
+      poisscdf
+      poissinv
+      poisspdf
+      poissrnd
+      stdnormal_cdf
+      stdnormal_inv
+      stdnormal_pdf
+      stdnormal_rnd
+      tcdf
+      tinv
+      tpdf
+      trnd
+      unidcdf
+      unidinv
+      unidpdf
+      unidrnd
+      unifcdf
+      unifinv
+      unifpdf
+      unifrnd
+      wblcdf
+      wblinv
+      wblpdf
+      wblrnd
+      wienrnd
+
+    MODELS
+      logistic_regression
+
+    TESTS
+      anova
+      bartlett_test
+      chisquare_test_homogeneity
+      chisquare_test_independence
+      cor_test
+      f_test_regression
+      hotelling_test
+      hotelling_test_2
+      kolmogorov_smirnov_test
+      kolmogorov_smirnov_test_2
+      kruskal_wallis_test
+      manova
+      mcnemar_test
+      prop_test_2
+      run_test
+      sign_test
+      t_test
+      t_test_2
+      t_test_regression
+      u_test
+      var_test
+      welch_test
+      wilcoxon_test
+      z_test
+      z_test_2
+
+ ** The following image functions have been moved from core Octave to
+    the image package available from Octave Forge.
+
+      ntsc2rgb
+      rgb2ntsc
+
+ ** Other new functions added in 4.4:
+
+      bounds
+      camlookat
+      camorbit
+      campos
+      camroll
+      camtarget
+      camup
+      camva
+      camzoom
+      corrcoef
+      cosint
+      decic
+      erase
+      gammaincinv
+      getframe
+      groot
+      gsvd
+      hgtransform
+      humps
+      integral
+      integral2
+      integral3
+      isgraphics
+      isstring
+      mad
+      ode15i
+      ode15s
+      openvar
+      quad2d
+      repelem
+      rgb2gray
+      rticks
+      sinint
+      tfqmr
+      thetaticks
+      vecnorm
+      winqueryreg
+      xticklabels
+      xticks
+      yticklabels
+      yticks
+      zticklabels
+      zticks
+
+ ** Deprecated functions.
+
+    The following functions have been deprecated in Octave 4.4 and will
+    be removed from Octave 6 (or whatever version is the second major
+    release after 4.4):
+
+      Function             | Replacement
+      ---------------------|------------------
+      chop                 | sprintf for visual results
+      desktop              | isguirunning
+      tmpnam               | tempname
+      toascii              | double
+      java2mat             | __java2mat__
+
+
+ ** The following functions were deprecated in Octave 4.0 and have been
+    removed from Octave 4.4.
+
+      allow_noninteger_range_as_index
+      bicubic
+      delaunay3
+      do_braindead_shortcircuit_evaluation
+      dump_prefs
+      find_dir_in_path
+      finite
+      fmod
+      fnmatch
+      gmap40
+      loadaudio
+      luinc
+      mouse_wheel_zoom
+      nfields
+      octave_tmp_file_name
+      playaudio
+      saveaudio
+      setaudio
+      syl
+      usage
+
+ ** The "Octave:undefined-return-values" warning ID is obsolete.  Octave
+    now throws an error for any attempts to assign undefined values that
+    might be returned from functions.
+
+ ** Deprecated graphics properties.
+
+    The following properties or allowed corresponding values have been
+    deprecated in Octave 4.4 and will be removed from Octave 6 (or whatever
+    version is the second major release after 4.4):
+
+      Object               | Property                | Value
+      ---------------------|-------------------------|-------------------
+      figure               | doublebuffer            |
+                           | mincolormap             |
+                           | wvisual                 |
+                           | wvisualmode             |
+                           | xdisplay                |
+                           | xvisual                 |
+                           | xvisualmode             |
+      axes                 | drawmode                |
+      annotation           | edgecolor ("rectangle") |
+      text                 | fontweight              | "demi" and "light"
+      uicontrol            | fontweight              | "demi" and "light"
+      uipanel              | fontweight              | "demi" and "light"
+      uibuttongroup        | fontweight              | "demi" and "light"
+
+ ** The rectangle and ellipse annotation property "edgecolor" has been
+    deprecated and will be removed from Octave 6 (or whatever version
+    is the second major release after 4.4).  Use the property "color"
+    instead.
+
+ ** The header file oct-alloc.h has been removed along with the macros
+    that it defined (DECLARE_OCTAVE_ALLOCATOR, DEFINE_OCTAVE_ALLOCATOR,
+    and DEFINE_OCTAVE_ALLOCATOR2).
+
+
+Summary of bugs fixed for version 4.2.2 (2018-03-13):
+----------------------------------------------------
+
+Using the bug numbers listed below, find bug reports on the web using
+the URL https://savannah.gnu.org/bugs/?NNNNN
+
+ ** make leftdiv work for scalar \ int-matrix (bug #51682)
+
+ ** inputdlg.m: Avoid crash when prompt and defaults sizes differ (bug #53209)
+
+ ** tie octave_classdef::numel method to "numel" user override method
+    (bug #46571)
+
+ ** fix performance of Sparse fsolve for complex sparse matrices (bug #53140)
+
+ ** fix performance of Sparse fsolve (bug #53140)
+
+ ** octave.desktop.in: No repetition of Name in Comment field and start I10n
+    (bug #53078)
+
+ ** don't create partially invalid graphic objects (bug #52904)
+
+ ** test for incorrect regexprep on ARM platforms (bug #52810)
+
+ ** fix incorrect regexprep on ARM platforms (bug #52810)
+
+ ** correctly handle reading of characters >127 in scanf family (bug #52681)
+
+ ** fix addpath for UNC paths on Windows (bug #51268)
+
+ ** protect being-deleted objects on figure list from second deletion
+    (bug #52666)
+
+ ** dlmwrite.m: Close fid if filename is only one char long (bug #52679)
+
+ ** set gnuplot color data to half output range when autoscaling zero input
+    range (bug #52624)
+
+ ** add polarplot() to the list of unimplemented functions (bug #52643)
+
+ ** configure.ac: Fix test for Java version (bug #52617)
+
+ ** for gnuplot toolkit, do not map TrueColor data to colormap size (bug #52599)
+
+ ** make wheel scroll behave more consistently in pan mode (bug #52588)
+
+ ** make gnuplot color have three components for interpolated edge color
+    (bug #52595)
+
+ ** simplify gnuplot toolkit scripts for image/non-image data plots (bug #52589)
+
+ ** fix concatenation of empty char matrices with other strings (bug #52542)
+
+ ** build: Fix compiling OCTAVE_ARPACK_OK_2 Fortran code (bug #52425)
+
+ ** trisurf.m, trimesh.m: Fix input validation (bug #48109)
+
+ ** allow uncommenting in editor when line begins with whitespace (bug #52406)
+
+ ** do not extend selection when indenting/commenting in editor (bug #45610)
+
+ ** remove all delimiters from whitespace list in textscan function (bug #52479)
+
+ ** calculate 1-norm of matrices to assess whether NaN or Inf are present
+    (bug #39000)
+
+ ** prevent extra ampersand under KDE in cd-or-add-to-path dialog (bug #52423)
+
+ ** plotyy.m: Fix error when using FUN2 argument (bug #48115)
+
+ ** check ARPACK library for buggy behavior in configure (bug #52425)
+
+ ** fix printing integer type images (bug #51558)
+
+ ** fix segfault in delaunayn when Qhull memory is not properly cleared
+    (bug #52410)
+
+ ** fix segfault with CHOLMOD library and empty matrices (bug #52365)
+
+ ** tag global and persistent symbols as variables when parsing (bug #52363)
+
+ ** properly restore the input stream pointer at end of textscan (bug #52116 et
+    al.)
+
+ ** fix building with Qt4 for Windows (bug #52237)
+
+ ** ensure numeric values are passed for the axes "clim" property (bug #52053)
+
+ ** avoid abort on exit from GUI (bug #50664)
+
+ ** correct auto limits on log axes with negative and zero values (bug #51861)
+
+ ** fix warning in quadgk with zero size interval (bug #51867)
+
+ ** sparse: correctly handle scalar column index (bug #51880)
+
+ ** fix segfault in ichol under certain conditions (bug #51736)
+
+ ** configure: ensure empty pkg-config results are actually empty (bug #51680)
+
+ ** fix 'legend hide' for gnuplot (bug #50483)
+
+ ** qqplot.m: Fix typo in input validation (bug #51458)
+
+ ** add possible '\r' to smartindent regex exprepression (Bug #51279)
+
+ ** make strncmp case sensitive again (bug #51384)
+
+ ** fix possible infinite loop in normest1.m (bug #51241)
+
+ ** also run unwind protect cleanup code on interrupt exceptions (bug #51209)
+
+ ** fix crash when inverting complex matrices with NaNs (bug #51198)
+
+ ** improve accuracy of residue for inputs with very different magnitudes
+    (bug #51148)
+
+ ** publish.m: Fix corruption of results for some code inputs (bug #51178)
+
+ ** residue.m: Remove code that filters out small return values (bug #34266, bug
+    #49291)
+
+ ** avoid possible double free at interpreter exit (bug #51088)
+
+ ** show stack trace for errors in command line and startup files (bug #49346)
+
+ ** interp1.m: Return NA for all columns which are out of bounds (bug #51030)
+
+ ** use idx_type for dimensions instead of int (bug #50934)
+
+ ** show stack trace for wrong type arg errors (bug #50894)
+
+ ** let mouse selection of Qt figures update "currentfigure" (bug #50666)
+
+ ** disable qscintilla editor drag and drop so parent will handle it (Bug
+    #50559)
+
+ ** quadgk.m: Correct error messages which point to quadv (bug #50604)
+
+ ** set version on AppUserModelId (Bug #50428)
+
+ ** version-rcfile: Don't try to execute startup directory, only startup.m
+    (bug #50593)
+
+ ** dlmread: Return empty matrix when requested range is outside data
+    (bug #50102)
+
+ ** fix eigs for generalized nonsymmetric and shift-invert problems (bug #39573)
+
+ ** fix eigs for the generalized eigenvalue problem (bug #50546)
+
+ ** datetick.m: Fix uneven range bugs (bug #50493)
+
+ ** datenum.m: Correct calculation for fractional leap years (bug #50508)
+
+ ** datenum.m: Allow horizontal vectors of dates with fractional months
+    (bug #50508)
+
+ ** datenum.m: Accept legal input of vectors with fractional months (bug #50508)
+
+ ** fix the anchor position in the info text of the doc browser (bug #50422)
+
+ ** fix order of legend labels with plotyy axes (bug #50497)
+
+ ** correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items
+    (bug #49341)
+
+ ** for gnuplot graphics toolkit, show only one key entry for errorbars
+    (bug #49260)
+
+ ** fix compilation of jit caused by cset d0562b3159c7 (bug #50398)
+
+ ** remove inline keyword on file_stat destructor which breaks MacOS compilation
+    (bug #50234)
+
+Documentation bugs fixed:
+
+ ** playblocking.m: Correct documentation about start and limits inputs
+    (bug #51217)
+
+ ** fix eig output argument description (bug #50524)
+
+ ** remove backslashes before double quotes in m-file docstrings (bug #52870)
+
+ ** tweaks to use single quotes instead of double quotes (bug #52870)
+
+ ** correct fieldname of returned struct in ver (bug #52845)
+
+ ** cleanup @code example in Appendix on test functions (bug #52852)
+
+ ** fixes for signal, image, audio, and OOP chapters (bug #52844)
+
+ ** fix issues in geometry, polynomial, and interpolation chapters (bug #52835)
+
+ ** fix TeX documentation for qp and clarify size of inputs (bug #52829)
+
+ ** correct errors in Diagonal matrix chapter of manual (bug #52814)
+
+ ** replace @math{1e^{XXX}} sequences with raw 1eXXX (bug #52827)
+
+ ** use '...' rather than deprecated '\' for line continuation (bug #52828)
+
+ ** make documentation Sec 26.1 more consistent and Sec 25.4 clearer
+    (bug #52685)
+
+ ** documentation fixes for linspace, logspace, lookup (bug #52785)
+
+ ** atan2d.m: Correct documentation to match atan docstring (bug #52786)
+
+ ** small tweaks to fplot and surfnorm docstrings (bug #52761)
+
+ ** rewrite documentation for Advanced Indexing (bug #52723)
+
+ ** delete extra ']' in scanf docstring (bug #52742)
+
+ ** fix mistaken use of space between function and '(' in documentation
+    (bug #52723)
+
+ ** fix various inconsistencies in manual (bug #52712)
+
+ ** fix typo in cset 8354b505ad6b (bug #52702)
+
+ ** fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
+
+ ** explain Matlab compatibility of fopen modes (bug #52644)
+
+ ** update documentation for keywords to include classdef statements
+    (bug #52591)
+
+ ** fix documentation of third input to lsode() (bug #52664)
+
+ ** clarify quiver/quiver3 documentation when a linestyle is given (bug #52608)
+
+ ** new section about classdef classes with example (bug #44590)
+
+ ** correct surface plot explanation of  meshgridded results of 1 input
+    (bug #52536)
+
+ ** fix definition of Delaunay triangulation in docstrings (bug #52416)
+
+ ** accumarray.m: Add '@' to function handles in docstring (bug #52418)
+
+ ** update manual to explain \deg and \circ symbols (bug #52287)
+
+ ** correct documentation for randg (bug #52118)
+
+ ** add documentation about PCRE library regexp stack overflow (bug #51589)
+
+ ** play.m: Correct documentation about start and limits inputs (bug #51217)
+
+ ** redo docstring for qz (bug #50846)
+
+ ** describe optional install dependencies PortAudio and SUNDIALS (bug #50513)
+
+ ** update CITATION date, version, and permalink to manual (bug #47058)
+
+
+Summary of bugs fixed for version 4.2.1 (2017-02-22):
+----------------------------------------------------
+
+Using the bug numbers listed below, find bug reports on the web using
+the URL https://savannah.gnu.org/bugs/?NNNNN
+
+ ** guarantee returning std::string from tilde_expand functions (bug #50234)
+
+ ** workaround segfault in file_stat (bug #50234)
+
+ ** genpropdoc.m: document more graphics properties (bug #50337)
+
+ ** always fork and exec when starting the gui (bug #49609)
+
+ ** print.m: fix regression with -append option (bug #50318)
+
+ ** don't display legend, colorbar, and annotation axes coordinates
+    (bug #50272)
+
+ ** qp.m: Fix regression with incorrect vector dimensions (bug #50067)
+
+ ** prevent infinite loop in global documentation search (bug #50177)
+
+ ** connect execute command signal in editor constructor (bug #50171)
+
+ ** connect editors execute command signal to the required slot (bug #50171)
+
+ ** check if input is class method before declaring it unimplemented
+    (patch #9238) (bug #49694)
+
+ ** workaround segfault when an error occurs while printing (bug #49779)
+
+ ** axis.m: Do not set plotboxaspectratio to 0 (bug #49755)
+
+ ** don't rethrow exception in destructor (bug #49304)
+
+ ** rethrow octave::exit_exception (bug #49304)
+
+ ** update appdata.xml to follow conventions (bug #49952)
+
+ ** mexproto.h (mxAssert, mxAssertS): ensure operator precedence (bug #50050)
+
+ ** calculate error in solution for ode solvers correctly (bug #49950)
+
+ ** use GetModuleFileName for getting octave path in windows (bug #48671)
+
+ ** use C++ updaters for labels color (bug #49980)
+
+ ** distinguish elements vs. bytes in fread (bug #49699)
+
+ ** move frame2im and im2frame to image/ directory (bug #49939)
+
+ ** fix undefined return argument for more than 2 outputs from ode solver
+    (bug #49890)
+
+ ** fix inv for hermitian matrices (bug #49904)
+
+ ** fix gzip for certain types of gzip files (bug #49760)
+
+ ** fix typo in liboctave version info (bug #49860)
+
+ ** initialize ODE Event function with start time (bug #49846)
+
+ ** allow configure test to succeed without implicit fcn decls (bug #49782)
+
+ ** allow external docstrings from .oct files to be found again (bug #49687)
+
+ ** don't require semicolon between property list elements (bug #49819)
+
+ ** display.m: Correctly display output for non-class objects
+    (bug #49753, #49794)
+
+ ** don't run publish.tst unless OSMESA or gnuplot are available (bug #49767)
+
+ ** find help for function aliases again (bug #49687)
+
+ ** legend.m: backport cset 7184b4516a68 (bug #49675)
+
+ ** preserve lasterror info on rethrow (bug #49642)
+
+ ** norm: fix error in input argument validation leading to segfault
+    (bug #49634)
+
+Documentation bugs fixed:
+
+ ** overhaul Java interface description (bug #50299)
+
+ ** add documentation for hex and binary prefix and _ separator
+    (bug #50305, #50334)
+
+ ** fix build of docs broken in sub2ind (bug #50348)
+
+ ** version.m: document that "-release" returns an empty string (bug #50294)
+
+ ** remove trailing "\n\" from sleep and usleep docstrings (bug #50301)
+
+ ** expand documentation for cast() (bug #50201)
+
+ ** correct two entries in Table 34.1 (bug #50203)
+
+ ** oop.txi: Improve table formatting (bug #50203)
+
+ ** fix '##' in middle of docstring/comment lines (bug #50145)
+
+ ** reword documentation about subplots in 15.2.4 (bug #50148)
+
+ ** update unimplemented list of functions and where to find them
+    (bug #50098)
+
+ ** compare_plot_demos: fix HTML syntax, simplify output, remove
+    external deps (bug #49709)
+
+ ** add more depth to explanation of '~' function argument (bug #49444)
+
+ ** correct documentation for javaclasspath file (bug #49873)
+
+ ** small fixes to docstrings (bug #49733)
+
+ ** change text describing demo plots to reflect new ColorOrder (bug #49288)
+
+Other bugs fixed:
+
+ ** add missing classdef test files (bug #49819)
+
+
+Summary of important user-visible changes for version 4.2 (2016-11-13):
+----------------------------------------------------------------------
+
+ ** The parser has been extended to accept, but ignore, underscore
+    characters in numbers.  This facilitates writing more legible code
+    by using '_' as a thousands separator or to group nibbles into bytes
+    in hex constants.
+
+    Examples: 1_000_000 == 1e6  or  0xDE_AD_BE_EF
+
+ ** The parser has been extended to understand binary numbers which
+    begin with the prefix '0b' or '0B'.  The value returned is Octave's
+    default numeric class of double, not at unsigned integer class.
+    Therefore numbers greater than flintmax, i.e., 2^53, will lose some
+    precision.
+
+    Examples: 0b101 == 5  or  0B1100_0001 == 0xC1
+
+ ** gnuplot 4.4 is now the minimum version supported by Octave.
+
+ ** The default set of colors used to plot lines has been updated to be
+    compatible with Matlab's new default color scheme.  The line plot
+    color scheme can be set with the axes property "ColorOrder".
+
+ ** The default colormap is now set to "viridis" which is also the
+    default colormap in matplotlib.  This new colormap fixes some of the
+    main issues with the old default colormap "jet" such as its bad
+    "luminance profile" and is also more similar to Matlab's new default
+    colormap "parula".
+
+ ** The colormap function no longer supports the input argument "list"
+    to show built-in colormaps.  Use "help colormap" to find the
+    built-in colormaps.
+
+ ** The graphics command "hold on" now ensures that each new plot added
+    to an existing plot has a different color or linestyle according to
+    the "ColorOrder" and/or "LineStyleOrder" properties.  This is
+    equivalent to the old command "hold all" and was made for Matlab
+    compatibility.  Existing code *may* produce differently colored
+    plots if it did not specify the color for a plot and relied on each
+    new plot having the default first color in the "ColorOrder"
+    property.
+
+ ** When starting, Octave now looks in the function path for a file
+    startup.m and executes any commands found there.  This change was
+    made to accommodate Matlab users.  Octave has it's own configuration
+    system based on the file .octaverc which is preferred.
+
+ ** Octal ('\NNN') and hex ('\xNN') escape sequences in single quoted
+    strings are now interpreted by the function do_string_escapes().
+    The *printf family of functions now supports octal and hex escape
+    sequences in single-quoted strings for Matlab compatibility.
+
+ ** Special octal and hex escape sequences for the pattern and
+    replacement strings in regular expressions are now interpreted for
+    Matlab compatibility.
+
+    octal: '\oNNN' or '\o{NNN}'
+    hex  : '\xNN'  or '\x{NN}'
+
+ ** Unknown escape sequences in the replacement string for regexprep are
+    now substituted with their unescaped version and no warning is
+    emitted.  This change was made for Matlab compatibility.
+
+    Example: regexprep ('a', 'a', 'x\yz')
+             => 'xyz'
+
+ ** mkfifo now interprets the MODE argument as an octal, not decimal,
+    integer.  This is consistent with the equivalent shell command.
+
+ ** linspace now returns an empty matrix if the number of requested
+    points is 0 or a negative number.  This change was made to be
+    compatible with Matlab releases newer than 2011.  In addition,
+    Octave no longer supports matrix inputs for A or B.
+
+ ** The cov function now returns the complex conjugate of the result
+    from previous versions of Octave.  This change was made for
+    compatibility with Matlab.
+
+ ** condest now works with a normest1 compatible syntax.
+
+ ** The griddata function no longer plots the interpolated mesh if no
+    output argument is requested, instead the vector or array of
+    interpolated values is always returned for Matlab compatibility.
+
+ ** The new function "light" and the corresponding graphics object
+    provide light and shadow effects for patch and surface objects.
+
+ ** The surfnorm function now returns unnormalized (magnitude != 1)
+    normal vectors for compatibility with Matlab.
+
+ ** The normal vectors returned from isonormals have been reversed to
+    point towards smaller values for compatibility with Matlab.
+
+ ** The quadl function now uses an absolute, rather than relative,
+    tolerance for Matlab compatibility.  The default tolerance is 1e-6
+    which may result in lower precision results than previous versions
+    of Octave which used eps as the relative tolerance.  The quadl
+    function has also been extended to return a second output with the
+    total number of function evaluations.
+
+ ** The textscan function is now built-in and is much faster and much
+    more Matlab-compatible than the previous m-file version.
+
+ ** Dialog boxes--errordlg, helpdlg, inputdlg, listdlg, msgbox,
+    questdlg, and warndlg--now exclusively use Qt for rendering.
+    Java based versions have been removed.
+
+ ** The axes properties "TitleFontSizeMultiplier" and "TitleFontWeight"
+    are now implemented which control the default appearance of text
+    created with title().
+    The axes property "LabelFontSizeMultiplier" is now implemented
+    which controls the default appearance of text created with
+    xlabel(), ylabel(), or zlabel().
+
+ ** The graphics property "box" for axes now defaults to "off".
+    To obtain equivalent plots to previous versions of Octave use
+      set (0, "DefaultAxesBox", "on");
+    in your .octaverc file.
+
+ ** The graphics property "boxstyle" has been implemented.  The default
+    is "back" which draws only the back planes in a 3-D view.  If the
+    option is "full" then all planes are drawn.
+
+ ** The graphics property "erasemode" has been hidden, and will
+    eventually be removed.  This property has also been removed
+    from Matlab, and was never implemented in Octave.
+
+ ** The graphics property "graphicssmoothing" for figures now controls
+    whether anti-aliasing will be used for lines.  The default is "on".
+
+ ** The value "zero" for the axes properties "xaxislocation" and
+    "yaxislocation" has been deprecated and will be removed from
+    Octave 5.  Use "origin" instead.
+
+ ** The publish function allows easy publication of Octave script files
+    in HTML or other formats, including figures and output created by
+    this script.  It comes with its counterpart grabcode, which lets one
+    literally grab the HTML published code from a remote website, for
+    example.
+
+ ** The value of the MEX variable TrapFlag now defaults to 0, which will
+    cause Octave to abort execution of a MEX file and return to the
+    prompt if an error is encountered in mexCallMATLAB.
+
+ ** The MEX API now includes the function mexCallMATLABWithTrap.  This
+    function will not abort if an error occurs during mexCallMATLAB, but
+    instead will return execution to the MEX function for error
+    handling.
+
+ ** The MEX API functions for input validation that begin with "mxIs"
+    (e.g., mxIsDouble, mxIsEmpty, etc.) now return type bool rather than
+    type int.
+
+ ** The functions mxAssert and mxAssertS for checking assertions have
+    been added.  In order to avoid a performance penalty they are only
+    compiled in to debug versions of a MEX file, i.e., that are produced
+    when the '-g' option is given to mex or mkoctfile.
+
+ ** Other new MEX API functions include mexEvalStringWithTrap,
+    mxIsScalar, mxCreateUninitNumericArray, mxCreateUninitNumericMatrix.
+
+ ** Other new functions added in 4.2:
+
+      audioformats
+      camlight
+      condeig
+      deg2rad
+      dialog
+      evalc
+      hash
+      im2double
+      isocaps
+      lighting
+      localfunctions
+      material
+      normest1
+      ode23
+      ode45
+      odeget
+      odeplot
+      odeset
+      padecoef
+      profexport
+      psi
+      rad2deg
+      reducepatch
+      reducevolume
+      smooth3
+      uibuttongroup
+
+ ** Deprecated functions.
+
+    The following functions have been deprecated in Octave 4.2 and will
+    be removed from Octave 5 (or whatever version is the second major
+    release after 4.2):
+
+      Function             | Replacement
+      ---------------------|------------------
+      bitmax               | flintmax
+      mahalanobis          | mahal in Octave Forge statistics pkg
+      md5sum               | hash
+      octave_config_info   | __octave_config_info__
+      onenormest           | normest1
+      sleep                | pause
+      usleep               | pause
+      wavread              | audioread
+      wavwrite             | audiowrite
+
+ ** The following functions were deprecated in Octave 3.8 and have been
+    removed from Octave 4.2.
+
+      default_save_options    java_new
+      gen_doc_cache           java_unsigned_conversion
+      interp1q                javafields
+      isequalwithequalnans    javamethods
+      java_convert_matrix     re_read_readline_init_file
+      java_debug              read_readline_init_file
+      java_invoke             saving_history
+
+ ** The global error_state variable in Octave's C++ API has been
+    deprecated and will be removed in a future version.  Now the error
+    and print_usage functions throw an exception
+    (octave::execution_exception) after displaying the error message.
+    This makes the error and print_usage functions in C++ work more like
+    the corresponding functions in the scripting language.
+
+ ** The default error handlers in liboctave have been updated to use
+    exceptions.  After displaying an error message they no longer return
+    control to the calling program.  The error handler function can be
+    customized through the global variables
+    "current_liboctave_error_handler" and
+    "current_liboctave_error_with_id_handler".  If a programmer has
+    installed their own custom error handling routines when directly
+    linking with liboctave then these must be updated to throw an
+    exception and not return to the calling program.
+
+ ** The system for common errors and warnings has been renamed from
+    gripe_XXX to either err_XXX if error is called or warn_XXX if
+    warning is called.  The gripe_XXX functions are deprecated and will
+    be removed in version 5.
+
+ ** New configure option, --enable-address-sanitizer-flags, to build
+    Octave with memory allocator checks (similar to those in valgrind)
+    built in.
+
+Summary of important user-visible changes for version 4.0 (2015-05-23):
+----------------------------------------------------------------------
+
+ ** A graphical user interface is now the default when running Octave
+    interactively.  The start-up option --no-gui will run the familiar
+    command line interface, and still allows use of the GUI dialogs and
+    qt plotting toolkit.  The option --no-gui-libs runs a minimalist
+    command line interface that does not link with the Qt libraries and
+    uses the fltk toolkit for plotting.
+
+ ** Octave now uses OpenGL graphics with Qt widgets by default.  If
+    OpenGL libraries are not available when Octave is built, gnuplot is
+    used.  You may choose to use the fltk or gnuplot toolkit for
+    graphics by executing the command
+
+      graphics_toolkit ("fltk")
+        OR
+      graphics_toolkit ("gnuplot")
+
+    Adding such a command to your ~/.octaverc file will set the default
+    for each session.
+
+ ** A new syntax for object oriented programming termed classdef has
+    been introduced.  See the manual for more extensive documentation of
+    the classdef interface.
+
+    New keywords:
+
+      classdef      endclassdef
+      enumeration   endenumeration
+      events        endevents
+      methods       endmethods
+      properties    endproperties
+
+ ** New audio functions and classes:
+
+      audiodevinfo  audioread      sound
+      audioinfo     audiorecorder  soundsc
+      audioplayer   audiowrite
+
+ ** Other new classes in Octave 4.0:
+
+      audioplayer    inputParser
+      audiorecorder
+
+ ** Optional stricter Matlab compatibility for ranges, diagonal
+    matrices, and permutation matrices.
+
+    Octave has internal optimizations which use space-efficient storage
+    for the three data types above.  Three new functions have been added
+    which control whether the optimizations are used (default), or
+    whether the data types are stored as full matrices.
+
+    disable_range   disable_diagonal_matrix   disable_permutation_matrix
+
+    All three optimizations are disabled if Octave is started with the
+    --braindead command line option.
+
+ ** The preference
+
+      do_braindead_shortcircuit_evaluation
+
+    is now enabled by default.
+
+ ** The preference
+
+      allow_noninteger_range_as_index
+
+    is now enabled by default and the warning ID
+
+      Octave:noninteger-range-as-index
+
+    is now set to "on" by default instead of "error" by default and "on"
+    for --traditional.
+
+ ** The "backtrace" warning option is now enabled by default.  This
+    change was made for Matlab compatibility.
+
+ ** For compatibility with Matlab, the "ismatrix (x)" function now only
+    checks the dimension of "x".  The old behavior of "ismatrix" is
+    obtained by "isnumeric (x) || islogical (x) || ischar (x)".
+
+ ** The nextpow2 function behavior has been changed for vector inputs.
+    Instead of computing `nextpow2 (length (x))', it will now compute
+    nextpow2 for each element of the input.  This change is Matlab
+    compatible, and also prevents bugs for "vectors" of length 1.
+
+ ** polyeig now returns a row vector of eigenvalues rather than a matrix
+    with the eigenvalues on the diagonal.  This change was made for
+    Matlab compatibility.
+
+ ** Interpolation function changes for Matlab compatibility
+
+    The interpolation method 'cubic' is now equivalent to 'pchip' for
+    interp1, interp2, and interp3.  Previously, 'cubic' was equivalent
+    to 'spline' for interp2.  This may produce different results as
+    'spline' has continuous 1st and 2nd derivatives while 'pchip' only
+    has a continuous 1st derivative.  The methods 'next' and 'previous'
+    have been added to interp1 for compatibility.
+
+ ** The delaunay function has been extended to accept 3-D inputs for
+    Matlab compatibility.  The delaunay function no longer plots the
+    triangulation if no output argument is requested, instead, the
+    triangulation is always returned.  The delaunay3 function which
+    handles 3-D inputs has been deprecated in favor of delaunay.
+
+ ** The trigonometric functions asin and acos return different phase
+    values from previous versions of Octave when the input is outside
+    the principal branch ([-1, 1]).  If the real portion of the input is
+    greater than 1 then the limit from below is taken.  If the real
+    portion is less than 1 then the limit from above is taken.  This
+    criteria is consistent with several other numerical analysis
+    software packages.
+
+ ** The hyperbolic function acosh now returns values with a phase in the
+    range [-pi/2, +pi/2].  Previously Octave returned values in the
+    range [0, pi].  This is consistent with several other numerical
+    analysis software packages.
+
+ ** strfind changes when using empty pattern ("") for Matlab
+    compatibility
+
+    strfind now returns an empty array when the pattern itself is empty.
+    In previous versions of Octave, strfind matched at every character
+    location when the pattern was empty.
+
+      NEW
+      strfind ("abc", "") => []
+      OLD
+      strfind ("abc", "") => [1, 2, 3, 4]
+
+ ** Integer formats used in the printf family of functions now work for
+    64-bit integers and are more compatible with Matlab when printing
+    non-integer values.  Now instead of truncating, Octave will switch
+    the effective format to '%g' in the following circumstances:
+
+      * the value of an integer type (int8, uint32, etc.) value exceeds
+        the maximum for the format specifier.  For '%d', the limit is
+        intmax ('int64') and for '%u' it is intmax ('uint64').
+
+      * round(x) != x or the value is outside the range allowed by the
+        integer format specifier.
+
+    There is still one difference: Matlab switches to '%e' and Octave
+    switches to '%g'.
+
+ ** The functions intersect, setdiff, setxor, and union now return a
+    column vector as output unless the input was a row vector.  This
+    change was made for Matlab compatibility.
+
+ ** The inpolygon function now returns true for points that are within
+    the polygon OR on it's edge.  This change was made for Matlab
+    compatibility.
+
+ ** The archive family of functions (bzip2, gzip, zip, tar) and their
+    unpacking routines (bunzip2, gunzip, unzip, untar, unpack) have been
+    recoded.  Excepting unpack, the default is now to place files in the
+    same directory as the archive (on unpack) or as the original files
+    (on archiving).
+
+ ** Qt and FLTK graphics toolkits now support offscreen rendering on
+    Linux.  In other words, print will work even when the figure
+    visibility is "off".
+
+ ** Z-order stacking issues with patches, grid lines, and line object
+    plot markers for on screen display and printing have all been
+    resolved.  For 2-D plots the axis grid lines can be placed on top of
+    the plot with set (gca, "layer", "top").
+
+ ** The patch graphic object has been overhauled.  It now produces
+    visual results equivalent to Matlab even for esoteric combinations
+    of faces/vertices/cdata.
+
+ ** The polar() plot function now draws a circular theta axis and radial
+    rho axis rather than using a rectangular x/y axis.
+
+ ** linkprop has been completely re-coded for performance and Matlab
+    compatibility.  It now returns a linkprop object which must be
+    stored in a variable for as long as the graphic objects should
+    remain linked.  To unlink properties use 'clear hlink' where hlink
+    is the variable containing the linkprop object.
+
+ ** isprime has been extended to operate on negative and complex inputs.
+
+ ** xor has been extended to accept more than two arguments in which
+    case it performs cumulative XOR reduction.
+
+ ** The following functions now support N-dimensional arrays:
+
+      fliplr   flipud   rot90   rectint
+
+ ** The new warning ID "Octave:data-file-in-path" replaces the three
+    previous separate warning IDs "Octave:fopen-file-in-path",
+    "Octave:load-file-in-path", and "Octave:md5sum-file-in-path".
+
+ ** The warning ID Octave:singular-matrix-div has been replaced by
+    Octave:nearly-singular-matrix and Octave:singular-matrix.
+
+ ** The warning ID Octave:matlab-incompatible has been replaced by
+    Octave:language-extension to better reflect its meaning.
+
+ ** The warning ID Octave:broadcast has been removed.  Instead automatic
+    broadcasting will throw an Octave:language-extension warning.  This
+    warning ID is used for broadcasting as well as other features not
+    available in Matlab.
+
+ ** Other new functions added in 4.0:
+
+      annotation
+      bandwidth
+      cubehelix
+      dir_in_loadpath
+      flip
+      frame2im
+      get_home_directory
+      hgload
+      hgsave
+      ichol
+      ilu
+      im2frame
+      isbanded
+      isdiag
+      isstudent
+      istril
+      istriu
+      javachk
+      jit_failcnt
+      linkaxes
+      lscov
+      metaclass
+      numfields
+      open
+      ordschur
+      pan
+      qmr
+      rotate
+      rotate3d
+      sylvester
+      unsetenv
+      validateattributes
+      zoom
+
+ ** inline() scheduled for eventual deprecation by Matlab
+
+    Functions created through the use of inline are scheduled for
+    deprecation by Matlab.  When this occurs Octave will continue to
+    support inline functions for an indeterminate amount of time before
+    also removing support.  All new code should use anonymous functions
+    in place of inline functions.
+
+ ** Deprecated functions.
+
+    The following functions have been deprecated in Octave 4.0 and will
+    be removed from Octave 4.4 (or whatever version is the second major
+    release after 4.0):
+
+      Function             | Replacement
+      ---------------------|------------------
+      bicubic              | interp2
+      delaunay3            | delaunay
+      dump_prefs           | individual preference get/set routines
+      find_dir_in_path     | dir_in_loadpath
+      finite               | isfinite
+      fmod                 | rem
+      fnmatch              | glob or regexp
+      gmap40               | ----
+      loadaudio            | audioread
+      luinc                | ilu or ichol
+      mouse_wheel_zoom     | mousewheelzoom axes property
+      nfields              | numfields
+      octave_tmp_file_name | tempname
+      playaudio            | audioplayer
+      saveaudio            | audiowrite
+      syl                  | sylvester
+      usage                | print_usage
+
+      allow_noninteger_range_as_index
+      do_braindead_shortcircuit_evaluation
+      setaudio
+
+ ** The following functions were deprecated in Octave 3.8 and will be
+    removed from Octave 4.2 (or whatever version is the second major
+    release after 3.8):
+
+      default_save_options    java_new
+      gen_doc_cache           java_unsigned_conversion
+      interp1q                javafields
+      isequalwithequalnans    javamethods
+      java_convert_matrix     re_read_readline_init_file
+      java_debug              read_readline_init_file
+      java_invoke             saving_history
+
+ ** The following functions were deprecated in Octave 3.6 and have been
+    removed from Octave 4.0.
+
+      cut                polyderiv
+      cor                shell_cmd
+      corrcoef           studentize
+      __error_text__     sylvester_matrix
+      error_text
+
+ ** The following keywords were deprecated in Octave 3.8 and have been
+    removed from Octave 4.0
+
+      static
+
+ ** The following configuration variables were deprecated in Octave 3.8
+    and have been removed from Octave 4.0
+
+      CC_VERSION  (now GCC_VERSION)
+      CXX_VERSION (now GXX_VERSION)
+
+ ** The internal function atan2 of the sparse matrix class has been
+    deprecated in Octave 4.0 and will be removed from Octave 4.4 (or
+    whatever version is the second major release after 4.0).  Use the
+    Fatan2 function with sparse inputs as a replacement.
+
+ ** The internal class Octave_map was deprecated in Octave 3.8 and has
+    been removed from Octave 4.0.  Replacement classes are octave_map
+    (struct array) or octave_scalar_map for a single structure.
+
+ ** Octave now has OpenMP enabled by default if the system provides a
+    working OpenMP implementation.  This allows oct-file modules to take
+    advantage of OpenMP if desired.  This can be disabled when building
+    Octave with the configure option --disable-openmp.
+
+ ** Octave now automatically truncates intermediate calculations done
+    with floating point values to 64 bits.  Some hardware math
+    co-processors, such as the x87, maintain extra precision, but this
+    leads to disagreements in calculations when compared to reference
+    implementations in software using the IEEE standard for double
+    precision.  There was no measurable performance impact to this
+    change, but it may be disabled with the configure option
+    --disable-float-truncate.  MinGW and Cygwin platforms, as well as
+    GCC compilers >= 5.0 require this feature.  Non-x87 hardware, or
+    hardware using SSE options exclusively, can disable float truncation
+    if desired.
+
+---------------------------------------------------------
+
+See NEWS.3 for old news.
--- a/etc/NEWS.4.md	Tue Dec 28 18:22:40 2021 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1350 +0,0 @@
-Summary of important user-visible changes for version 4.4 (2018-04-30):
-----------------------------------------------------------------------
-
- ** A graphical Variable Editor has been added to the GUI interface.
-    It uses a spreadsheet-like interface for quick, intuitive editing
-    of variables.  The Variable Editor is launched by double-clicking
-    on a variable name in the Workspace Window or by typing
-    "openvar VARIABLE_NAME" in the Command Window.
-
- ** On systems with 64-bit pointers, --enable-64 is now the default and
-    Octave always uses 64-bit indexing.  However, if the configure
-    script determines that the BLAS library uses 32-bit integers, then
-    operations using the following libraries are limited to arrays with
-    dimensions that are smaller than 2^31 elements:
-
-      BLAS  LAPACK  QRUPDATE  SuiteSparse  ARPACK
-
-    Additionally, the following libraries use "int" internally, so
-    maximum problem sizes are always limited:
-
-      glpk  Qhull
-
- ** The octave command no longer starts the GUI by default.  Most users
-    starting Octave from a shell were expecting the command line
-    interface, and desktop launchers already required the `--force-gui'
-    option.  With this change, desktop launchers should be modified to
-    use the new option `--gui'.  The previous `--force-gui' option will
-    continue to work, and maps to `--gui', but it will be removed in
-    Octave 6.
-
- ** A known bug in Qt (https://bugreports.qt.io/browse/QTBUG-55357) is
-    addressed by limiting GUI sub-panel relocation capabilities for Qt
-    versions in the range >= 5.6.1 and < 5.7.1.  However, this may not
-    thoroughly avoid issues on all platforms.
-
- ** A new container data type--containers.Map--is available.  Map is a
-    key/value storage container (a.k.a, a hash) that efficiently allows
-    storing and retrieving values by name, rather than by position which
-    is how arrays work.
-
- ** The bareword "import" is now recognized in scripts and functions.
-    However, the functionality to import functions and classes from
-    other namespaces into the local scope has not yet been implemented.
-    Attempting to use "import" will provoke an error message.
-
- ** hex2num and num2hex now work for integer and char types and num2hex
-    may optionally return a cell array of strings instead of a character
-    array.  If given a cell array of strings, hex2num now returns a
-    numeric array of the same size as the input cell array.  Previously,
-    hex2num would accept a cell array of strings of arbitrary dimension
-    but would always return a column vector.
-
- ** New special functions cosint, sinint, and gammaincinv have been added.
-
- ** Special functions in Octave have been rewritten for larger input
-    domains, better accuracy, and additional options.
-    * gammainc now accepts negative real values for X.
-    * improved accuracy for gammainc, betainc, betaincinv, expint.
-    * gammainc has new options "scaledlower" and "scaledupper".
-    * betainc, betaincinv have new option "upper".
-
- ** The "names" option used in regular expressions now returns a struct
-    array, rather than a struct with a cell array for each field.  This
-    change was made for Matlab compatibility.
-
- ** The quadcc function now uses both absolute tolerance and relative
-    tolerance to determine the stopping criteria for an integration.
-    To be compatible with other quadXXX functions, such as quadgk, the
-    calling syntax has changed to
-
-      quadcc (f, a, b, [AbsTol, [RelTol]])
-
-    To update existing code, change instances of RelTol to [0, RelTol].
-
-      quadcc (f, a, b, tol) => quadcc (f, a, b, [0, tol])
-
-    A warning that a single tolerance input is now interpreted as an
-    absolute tolerance will be issued in Octave versions 4.4 and 5,
-    after which it will be removed.  The warning has ID
-    "Octave:quadcc:RelTol-conversion" and can be disabled with
-
-      warning ("off", "Octave:quadcc:RelTol-conversion")
-
- ** The qr function now returns a standard factorization unless
-    explicitly instructed to perform an economy factorization by using a
-    final argument of 0.
-
- ** The Qt graphics toolkit now supports offscreen printing without osmesa
-    if Octave was built with Qt >= 5.1.
-
- ** The built-in pager for display of large data is now disabled by
-    default.  To re-enable it for every Octave session add the following
-    to your .octaverc file:
-
-      more on;
-
- ** The FLTK toolkit is no longer prioritized for development.  The
-    number of Octave Maintainers is too small to support three different
-    graphic toolkits.  New development will target the Qt toolkit.
-    While no longer prioritized, the FLTK toolkit is not deprecated and
-    there is no schedule for its removal.
-
- ** The graphic object property "PickableParts" has been implemented
-    which controls whether an object can accept mouse clicks.
-
- ** The graphic object property "Interruptible" has been fully
-    implemented which controls whether a running callback function can
-    be interrupted by another callback function.
-
- ** The graphic object property "HitTest" has been updated to be fully
-    compatible with Matlab.
-
- ** Text objects now implement the properties "BackgroundColor",
-    "EdgeColor", "LineStyle", "LineWidth", and "Margin".
-
- ** An initial implementation of alpha transparency has been made for
-    patch and surface objects.  Printing to svg and pdf is supported.
-
- ** ishandle now returns true for both graphics handle objects and
-    Java objects.  The latter change was made for Matlab compatibility.
-    Use ishghandle or isgraphics if it is important not to include Java
-    objects.
-
- ** The pkg command now accepts a URL as an argument, allowing a valid
-    Octave package to be installed from any remote host with one command,
-    for example
-
-      pkg install https://example.org/download/example-package.tar.gz
-
- ** The following statistical functions have been moved from core
-    Octave to the statistics package available from Octave Forge.
-
-    BASE
-      cloglog
-      logit
-      prctile
-      probit
-      qqplot
-      table  (renamed to crosstab)
-
-    DISTRIBUTIONS
-      betacdf
-      betainv
-      betapdf
-      betarnd
-      binocdf
-      binoinv
-      binopdf
-      binornd
-      cauchy_cdf
-      cauchy_inv
-      cauchy_pdf
-      cauchy_rnd
-      chi2cdf
-      chi2inv
-      chi2pdf
-      chi2rnd
-      expcdf
-      expinv
-      exppdf
-      exprnd
-      fcdf
-      finv
-      fpdf
-      frnd
-      gamcdf
-      gaminv
-      gampdf
-      gamrnd
-      geocdf
-      geoinv
-      geopdf
-      geornd
-      hygecdf
-      hygeinv
-      hygepdf
-      hygernd
-      kolmogorov_smirnov_cdf
-      laplace_cdf
-      laplace_inv
-      laplace_pdf
-      laplace_rnd
-      logistic_cdf
-      logistic_inv
-      logistic_pdf
-      logistic_rnd
-      logncdf
-      logninv
-      lognpdf
-      lognrnd
-      nbincdf
-      nbininv
-      nbinpdf
-      nbinrnd
-      normcdf
-      norminv
-      normpdf
-      normrnd
-      poisscdf
-      poissinv
-      poisspdf
-      poissrnd
-      stdnormal_cdf
-      stdnormal_inv
-      stdnormal_pdf
-      stdnormal_rnd
-      tcdf
-      tinv
-      tpdf
-      trnd
-      unidcdf
-      unidinv
-      unidpdf
-      unidrnd
-      unifcdf
-      unifinv
-      unifpdf
-      unifrnd
-      wblcdf
-      wblinv
-      wblpdf
-      wblrnd
-      wienrnd
-
-    MODELS
-      logistic_regression
-
-    TESTS
-      anova
-      bartlett_test
-      chisquare_test_homogeneity
-      chisquare_test_independence
-      cor_test
-      f_test_regression
-      hotelling_test
-      hotelling_test_2
-      kolmogorov_smirnov_test
-      kolmogorov_smirnov_test_2
-      kruskal_wallis_test
-      manova
-      mcnemar_test
-      prop_test_2
-      run_test
-      sign_test
-      t_test
-      t_test_2
-      t_test_regression
-      u_test
-      var_test
-      welch_test
-      wilcoxon_test
-      z_test
-      z_test_2
-
- ** The following image functions have been moved from core Octave to
-    the image package available from Octave Forge.
-
-      ntsc2rgb
-      rgb2ntsc
-
- ** Other new functions added in 4.4:
-
-      bounds
-      camlookat
-      camorbit
-      campos
-      camroll
-      camtarget
-      camup
-      camva
-      camzoom
-      corrcoef
-      cosint
-      decic
-      erase
-      gammaincinv
-      getframe
-      groot
-      gsvd
-      hgtransform
-      humps
-      integral
-      integral2
-      integral3
-      isgraphics
-      isstring
-      mad
-      ode15i
-      ode15s
-      openvar
-      quad2d
-      repelem
-      rgb2gray
-      rticks
-      sinint
-      tfqmr
-      thetaticks
-      vecnorm
-      winqueryreg
-      xticklabels
-      xticks
-      yticklabels
-      yticks
-      zticklabels
-      zticks
-
- ** Deprecated functions.
-
-    The following functions have been deprecated in Octave 4.4 and will
-    be removed from Octave 6 (or whatever version is the second major
-    release after 4.4):
-
-      Function             | Replacement
-      ---------------------|------------------
-      chop                 | sprintf for visual results
-      desktop              | isguirunning
-      tmpnam               | tempname
-      toascii              | double
-      java2mat             | __java2mat__
-
-
- ** The following functions were deprecated in Octave 4.0 and have been
-    removed from Octave 4.4.
-
-      allow_noninteger_range_as_index
-      bicubic
-      delaunay3
-      do_braindead_shortcircuit_evaluation
-      dump_prefs
-      find_dir_in_path
-      finite
-      fmod
-      fnmatch
-      gmap40
-      loadaudio
-      luinc
-      mouse_wheel_zoom
-      nfields
-      octave_tmp_file_name
-      playaudio
-      saveaudio
-      setaudio
-      syl
-      usage
-
- ** The "Octave:undefined-return-values" warning ID is obsolete.  Octave
-    now throws an error for any attempts to assign undefined values that
-    might be returned from functions.
-
- ** Deprecated graphics properties.
-
-    The following properties or allowed corresponding values have been
-    deprecated in Octave 4.4 and will be removed from Octave 6 (or whatever
-    version is the second major release after 4.4):
-
-      Object               | Property                | Value
-      ---------------------|-------------------------|-------------------
-      figure               | doublebuffer            |
-                           | mincolormap             |
-                           | wvisual                 |
-                           | wvisualmode             |
-                           | xdisplay                |
-                           | xvisual                 |
-                           | xvisualmode             |
-      axes                 | drawmode                |
-      annotation           | edgecolor ("rectangle") |
-      text                 | fontweight              | "demi" and "light"
-      uicontrol            | fontweight              | "demi" and "light"
-      uipanel              | fontweight              | "demi" and "light"
-      uibuttongroup        | fontweight              | "demi" and "light"
-
- ** The rectangle and ellipse annotation property "edgecolor" has been
-    deprecated and will be removed from Octave 6 (or whatever version
-    is the second major release after 4.4).  Use the property "color"
-    instead.
-
- ** The header file oct-alloc.h has been removed along with the macros
-    that it defined (DECLARE_OCTAVE_ALLOCATOR, DEFINE_OCTAVE_ALLOCATOR,
-    and DEFINE_OCTAVE_ALLOCATOR2).
-
-
-Summary of bugs fixed for version 4.2.2 (2018-03-13):
-----------------------------------------------------
-
-Using the bug numbers listed below, find bug reports on the web using
-the URL https://savannah.gnu.org/bugs/?NNNNN
-
- ** make leftdiv work for scalar \ int-matrix (bug #51682)
-
- ** inputdlg.m: Avoid crash when prompt and defaults sizes differ (bug #53209)
-
- ** tie octave_classdef::numel method to "numel" user override method
-    (bug #46571)
-
- ** fix performance of Sparse fsolve for complex sparse matrices (bug #53140)
-
- ** fix performance of Sparse fsolve (bug #53140)
-
- ** octave.desktop.in: No repetition of Name in Comment field and start I10n
-    (bug #53078)
-
- ** don't create partially invalid graphic objects (bug #52904)
-
- ** test for incorrect regexprep on ARM platforms (bug #52810)
-
- ** fix incorrect regexprep on ARM platforms (bug #52810)
-
- ** correctly handle reading of characters >127 in scanf family (bug #52681)
-
- ** fix addpath for UNC paths on Windows (bug #51268)
-
- ** protect being-deleted objects on figure list from second deletion
-    (bug #52666)
-
- ** dlmwrite.m: Close fid if filename is only one char long (bug #52679)
-
- ** set gnuplot color data to half output range when autoscaling zero input
-    range (bug #52624)
-
- ** add polarplot() to the list of unimplemented functions (bug #52643)
-
- ** configure.ac: Fix test for Java version (bug #52617)
-
- ** for gnuplot toolkit, do not map TrueColor data to colormap size (bug #52599)
-
- ** make wheel scroll behave more consistently in pan mode (bug #52588)
-
- ** make gnuplot color have three components for interpolated edge color
-    (bug #52595)
-
- ** simplify gnuplot toolkit scripts for image/non-image data plots (bug #52589)
-
- ** fix concatenation of empty char matrices with other strings (bug #52542)
-
- ** build: Fix compiling OCTAVE_ARPACK_OK_2 Fortran code (bug #52425)
-
- ** trisurf.m, trimesh.m: Fix input validation (bug #48109)
-
- ** allow uncommenting in editor when line begins with whitespace (bug #52406)
-
- ** do not extend selection when indenting/commenting in editor (bug #45610)
-
- ** remove all delimiters from whitespace list in textscan function (bug #52479)
-
- ** calculate 1-norm of matrices to assess whether NaN or Inf are present
-    (bug #39000)
-
- ** prevent extra ampersand under KDE in cd-or-add-to-path dialog (bug #52423)
-
- ** plotyy.m: Fix error when using FUN2 argument (bug #48115)
-
- ** check ARPACK library for buggy behavior in configure (bug #52425)
-
- ** fix printing integer type images (bug #51558)
-
- ** fix segfault in delaunayn when Qhull memory is not properly cleared
-    (bug #52410)
-
- ** fix segfault with CHOLMOD library and empty matrices (bug #52365)
-
- ** tag global and persistent symbols as variables when parsing (bug #52363)
-
- ** properly restore the input stream pointer at end of textscan (bug #52116 et
-    al.)
-
- ** fix building with Qt4 for Windows (bug #52237)
-
- ** ensure numeric values are passed for the axes "clim" property (bug #52053)
-
- ** avoid abort on exit from GUI (bug #50664)
-
- ** correct auto limits on log axes with negative and zero values (bug #51861)
-
- ** fix warning in quadgk with zero size interval (bug #51867)
-
- ** sparse: correctly handle scalar column index (bug #51880)
-
- ** fix segfault in ichol under certain conditions (bug #51736)
-
- ** configure: ensure empty pkg-config results are actually empty (bug #51680)
-
- ** fix 'legend hide' for gnuplot (bug #50483)
-
- ** qqplot.m: Fix typo in input validation (bug #51458)
-
- ** add possible '\r' to smartindent regex exprepression (Bug #51279)
-
- ** make strncmp case sensitive again (bug #51384)
-
- ** fix possible infinite loop in normest1.m (bug #51241)
-
- ** also run unwind protect cleanup code on interrupt exceptions (bug #51209)
-
- ** fix crash when inverting complex matrices with NaNs (bug #51198)
-
- ** improve accuracy of residue for inputs with very different magnitudes
-    (bug #51148)
-
- ** publish.m: Fix corruption of results for some code inputs (bug #51178)
-
- ** residue.m: Remove code that filters out small return values (bug #34266, bug
-    #49291)
-
- ** avoid possible double free at interpreter exit (bug #51088)
-
- ** show stack trace for errors in command line and startup files (bug #49346)
-
- ** interp1.m: Return NA for all columns which are out of bounds (bug #51030)
-
- ** use idx_type for dimensions instead of int (bug #50934)
-
- ** show stack trace for wrong type arg errors (bug #50894)
-
- ** let mouse selection of Qt figures update "currentfigure" (bug #50666)
-
- ** disable qscintilla editor drag and drop so parent will handle it (Bug
-    #50559)
-
- ** quadgk.m: Correct error messages which point to quadv (bug #50604)
-
- ** set version on AppUserModelId (Bug #50428)
-
- ** version-rcfile: Don't try to execute startup directory, only startup.m
-    (bug #50593)
-
- ** dlmread: Return empty matrix when requested range is outside data
-    (bug #50102)
-
- ** fix eigs for generalized nonsymmetric and shift-invert problems (bug #39573)
-
- ** fix eigs for the generalized eigenvalue problem (bug #50546)
-
- ** datetick.m: Fix uneven range bugs (bug #50493)
-
- ** datenum.m: Correct calculation for fractional leap years (bug #50508)
-
- ** datenum.m: Allow horizontal vectors of dates with fractional months
-    (bug #50508)
-
- ** datenum.m: Accept legal input of vectors with fractional months (bug #50508)
-
- ** fix the anchor position in the info text of the doc browser (bug #50422)
-
- ** fix order of legend labels with plotyy axes (bug #50497)
-
- ** correct hggroup plot legends for gnuplot toolkit, add legend demo 17 items
-    (bug #49341)
-
- ** for gnuplot graphics toolkit, show only one key entry for errorbars
-    (bug #49260)
-
- ** fix compilation of jit caused by cset d0562b3159c7 (bug #50398)
-
- ** remove inline keyword on file_stat destructor which breaks MacOS compilation
-    (bug #50234)
-
-Documentation bugs fixed:
-
- ** playblocking.m: Correct documentation about start and limits inputs
-    (bug #51217)
-
- ** fix eig output argument description (bug #50524)
-
- ** remove backslashes before double quotes in m-file docstrings (bug #52870)
-
- ** tweaks to use single quotes instead of double quotes (bug #52870)
-
- ** correct fieldname of returned struct in ver (bug #52845)
-
- ** cleanup @code example in Appendix on test functions (bug #52852)
-
- ** fixes for signal, image, audio, and OOP chapters (bug #52844)
-
- ** fix issues in geometry, polynomial, and interpolation chapters (bug #52835)
-
- ** fix TeX documentation for qp and clarify size of inputs (bug #52829)
-
- ** correct errors in Diagonal matrix chapter of manual (bug #52814)
-
- ** replace @math{1e^{XXX}} sequences with raw 1eXXX (bug #52827)
-
- ** use '...' rather than deprecated '\' for line continuation (bug #52828)
-
- ** make documentation Sec 26.1 more consistent and Sec 25.4 clearer
-    (bug #52685)
-
- ** documentation fixes for linspace, logspace, lookup (bug #52785)
-
- ** atan2d.m: Correct documentation to match atan docstring (bug #52786)
-
- ** small tweaks to fplot and surfnorm docstrings (bug #52761)
-
- ** rewrite documentation for Advanced Indexing (bug #52723)
-
- ** delete extra ']' in scanf docstring (bug #52742)
-
- ** fix mistaken use of space between function and '(' in documentation
-    (bug #52723)
-
- ** fix various inconsistencies in manual (bug #52712)
-
- ** fix typo in cset 8354b505ad6b (bug #52702)
-
- ** fix inconsistencies with char, strvcat, strread docstrings (bug #52702.
-
- ** explain Matlab compatibility of fopen modes (bug #52644)
-
- ** update documentation for keywords to include classdef statements
-    (bug #52591)
-
- ** fix documentation of third input to lsode() (bug #52664)
-
- ** clarify quiver/quiver3 documentation when a linestyle is given (bug #52608)
-
- ** new section about classdef classes with example (bug #44590)
-
- ** correct surface plot explanation of  meshgridded results of 1 input
-    (bug #52536)
-
- ** fix definition of Delaunay triangulation in docstrings (bug #52416)
-
- ** accumarray.m: Add '@' to function handles in docstring (bug #52418)
-
- ** update manual to explain \deg and \circ symbols (bug #52287)
-
- ** correct documentation for randg (bug #52118)
-
- ** add documentation about PCRE library regexp stack overflow (bug #51589)
-
- ** play.m: Correct documentation about start and limits inputs (bug #51217)
-
- ** redo docstring for qz (bug #50846)
-
- ** describe optional install dependencies PortAudio and SUNDIALS (bug #50513)
-
- ** update CITATION date, version, and permalink to manual (bug #47058)
-
-
-Summary of bugs fixed for version 4.2.1 (2017-02-22):
-----------------------------------------------------
-
-Using the bug numbers listed below, find bug reports on the web using
-the URL https://savannah.gnu.org/bugs/?NNNNN
-
- ** guarantee returning std::string from tilde_expand functions (bug #50234)
-
- ** workaround segfault in file_stat (bug #50234)
-
- ** genpropdoc.m: document more graphics properties (bug #50337)
-
- ** always fork and exec when starting the gui (bug #49609)
-
- ** print.m: fix regression with -append option (bug #50318)
-
- ** don't display legend, colorbar, and annotation axes coordinates
-    (bug #50272)
-
- ** qp.m: Fix regression with incorrect vector dimensions (bug #50067)
-
- ** prevent infinite loop in global documentation search (bug #50177)
-
- ** connect execute command signal in editor constructor (bug #50171)
-
- ** connect editors execute command signal to the required slot (bug #50171)
-
- ** check if input is class method before declaring it unimplemented
-    (patch #9238) (bug #49694)
-
- ** workaround segfault when an error occurs while printing (bug #49779)
-
- ** axis.m: Do not set plotboxaspectratio to 0 (bug #49755)
-
- ** don't rethrow exception in destructor (bug #49304)
-
- ** rethrow octave::exit_exception (bug #49304)
-
- ** update appdata.xml to follow conventions (bug #49952)
-
- ** mexproto.h (mxAssert, mxAssertS): ensure operator precedence (bug #50050)
-
- ** calculate error in solution for ode solvers correctly (bug #49950)
-
- ** use GetModuleFileName for getting octave path in windows (bug #48671)
-
- ** use C++ updaters for labels color (bug #49980)
-
- ** distinguish elements vs. bytes in fread (bug #49699)
-
- ** move frame2im and im2frame to image/ directory (bug #49939)
-
- ** fix undefined return argument for more than 2 outputs from ode solver
-    (bug #49890)
-
- ** fix inv for hermitian matrices (bug #49904)
-
- ** fix gzip for certain types of gzip files (bug #49760)
-
- ** fix typo in liboctave version info (bug #49860)
-
- ** initialize ODE Event function with start time (bug #49846)
-
- ** allow configure test to succeed without implicit fcn decls (bug #49782)
-
- ** allow external docstrings from .oct files to be found again (bug #49687)
-
- ** don't require semicolon between property list elements (bug #49819)
-
- ** display.m: Correctly display output for non-class objects
-    (bug #49753, #49794)
-
- ** don't run publish.tst unless OSMESA or gnuplot are available (bug #49767)
-
- ** find help for function aliases again (bug #49687)
-
- ** legend.m: backport cset 7184b4516a68 (bug #49675)
-
- ** preserve lasterror info on rethrow (bug #49642)
-
- ** norm: fix error in input argument validation leading to segfault
-    (bug #49634)
-
-Documentation bugs fixed:
-
- ** overhaul Java interface description (bug #50299)
-
- ** add documentation for hex and binary prefix and _ separator
-    (bug #50305, #50334)
-
- ** fix build of docs broken in sub2ind (bug #50348)
-
- ** version.m: document that "-release" returns an empty string (bug #50294)
-
- ** remove trailing "\n\" from sleep and usleep docstrings (bug #50301)
-
- ** expand documentation for cast() (bug #50201)
-
- ** correct two entries in Table 34.1 (bug #50203)
-
- ** oop.txi: Improve table formatting (bug #50203)
-
- ** fix '##' in middle of docstring/comment lines (bug #50145)
-
- ** reword documentation about subplots in 15.2.4 (bug #50148)
-
- ** update unimplemented list of functions and where to find them
-    (bug #50098)
-
- ** compare_plot_demos: fix HTML syntax, simplify output, remove
-    external deps (bug #49709)
-
- ** add more depth to explanation of '~' function argument (bug #49444)
-
- ** correct documentation for javaclasspath file (bug #49873)
-
- ** small fixes to docstrings (bug #49733)
-
- ** change text describing demo plots to reflect new ColorOrder (bug #49288)
-
-Other bugs fixed:
-
- ** add missing classdef test files (bug #49819)
-
-
-Summary of important user-visible changes for version 4.2 (2016-11-13):
-----------------------------------------------------------------------
-
- ** The parser has been extended to accept, but ignore, underscore
-    characters in numbers.  This facilitates writing more legible code
-    by using '_' as a thousands separator or to group nibbles into bytes
-    in hex constants.
-
-    Examples: 1_000_000 == 1e6  or  0xDE_AD_BE_EF
-
- ** The parser has been extended to understand binary numbers which
-    begin with the prefix '0b' or '0B'.  The value returned is Octave's
-    default numeric class of double, not at unsigned integer class.
-    Therefore numbers greater than flintmax, i.e., 2^53, will lose some
-    precision.
-
-    Examples: 0b101 == 5  or  0B1100_0001 == 0xC1
-
- ** gnuplot 4.4 is now the minimum version supported by Octave.
-
- ** The default set of colors used to plot lines has been updated to be
-    compatible with Matlab's new default color scheme.  The line plot
-    color scheme can be set with the axes property "ColorOrder".
-
- ** The default colormap is now set to "viridis" which is also the
-    default colormap in matplotlib.  This new colormap fixes some of the
-    main issues with the old default colormap "jet" such as its bad
-    "luminance profile" and is also more similar to Matlab's new default
-    colormap "parula".
-
- ** The colormap function no longer supports the input argument "list"
-    to show built-in colormaps.  Use "help colormap" to find the
-    built-in colormaps.
-
- ** The graphics command "hold on" now ensures that each new plot added
-    to an existing plot has a different color or linestyle according to
-    the "ColorOrder" and/or "LineStyleOrder" properties.  This is
-    equivalent to the old command "hold all" and was made for Matlab
-    compatibility.  Existing code *may* produce differently colored
-    plots if it did not specify the color for a plot and relied on each
-    new plot having the default first color in the "ColorOrder"
-    property.
-
- ** When starting, Octave now looks in the function path for a file
-    startup.m and executes any commands found there.  This change was
-    made to accommodate Matlab users.  Octave has it's own configuration
-    system based on the file .octaverc which is preferred.
-
- ** Octal ('\NNN') and hex ('\xNN') escape sequences in single quoted
-    strings are now interpreted by the function do_string_escapes().
-    The *printf family of functions now supports octal and hex escape
-    sequences in single-quoted strings for Matlab compatibility.
-
- ** Special octal and hex escape sequences for the pattern and
-    replacement strings in regular expressions are now interpreted for
-    Matlab compatibility.
-
-    octal: '\oNNN' or '\o{NNN}'
-    hex  : '\xNN'  or '\x{NN}'
-
- ** Unknown escape sequences in the replacement string for regexprep are
-    now substituted with their unescaped version and no warning is
-    emitted.  This change was made for Matlab compatibility.
-
-    Example: regexprep ('a', 'a', 'x\yz')
-             => 'xyz'
-
- ** mkfifo now interprets the MODE argument as an octal, not decimal,
-    integer.  This is consistent with the equivalent shell command.
-
- ** linspace now returns an empty matrix if the number of requested
-    points is 0 or a negative number.  This change was made to be
-    compatible with Matlab releases newer than 2011.  In addition,
-    Octave no longer supports matrix inputs for A or B.
-
- ** The cov function now returns the complex conjugate of the result
-    from previous versions of Octave.  This change was made for
-    compatibility with Matlab.
-
- ** condest now works with a normest1 compatible syntax.
-
- ** The griddata function no longer plots the interpolated mesh if no
-    output argument is requested, instead the vector or array of
-    interpolated values is always returned for Matlab compatibility.
-
- ** The new function "light" and the corresponding graphics object
-    provide light and shadow effects for patch and surface objects.
-
- ** The surfnorm function now returns unnormalized (magnitude != 1)
-    normal vectors for compatibility with Matlab.
-
- ** The normal vectors returned from isonormals have been reversed to
-    point towards smaller values for compatibility with Matlab.
-
- ** The quadl function now uses an absolute, rather than relative,
-    tolerance for Matlab compatibility.  The default tolerance is 1e-6
-    which may result in lower precision results than previous versions
-    of Octave which used eps as the relative tolerance.  The quadl
-    function has also been extended to return a second output with the
-    total number of function evaluations.
-
- ** The textscan function is now built-in and is much faster and much
-    more Matlab-compatible than the previous m-file version.
-
- ** Dialog boxes--errordlg, helpdlg, inputdlg, listdlg, msgbox,
-    questdlg, and warndlg--now exclusively use Qt for rendering.
-    Java based versions have been removed.
-
- ** The axes properties "TitleFontSizeMultiplier" and "TitleFontWeight"
-    are now implemented which control the default appearance of text
-    created with title().
-    The axes property "LabelFontSizeMultiplier" is now implemented
-    which controls the default appearance of text created with
-    xlabel(), ylabel(), or zlabel().
-
- ** The graphics property "box" for axes now defaults to "off".
-    To obtain equivalent plots to previous versions of Octave use
-      set (0, "DefaultAxesBox", "on");
-    in your .octaverc file.
-
- ** The graphics property "boxstyle" has been implemented.  The default
-    is "back" which draws only the back planes in a 3-D view.  If the
-    option is "full" then all planes are drawn.
-
- ** The graphics property "erasemode" has been hidden, and will
-    eventually be removed.  This property has also been removed
-    from Matlab, and was never implemented in Octave.
-
- ** The graphics property "graphicssmoothing" for figures now controls
-    whether anti-aliasing will be used for lines.  The default is "on".
-
- ** The value "zero" for the axes properties "xaxislocation" and
-    "yaxislocation" has been deprecated and will be removed from
-    Octave 5.  Use "origin" instead.
-
- ** The publish function allows easy publication of Octave script files
-    in HTML or other formats, including figures and output created by
-    this script.  It comes with its counterpart grabcode, which lets one
-    literally grab the HTML published code from a remote website, for
-    example.
-
- ** The value of the MEX variable TrapFlag now defaults to 0, which will
-    cause Octave to abort execution of a MEX file and return to the
-    prompt if an error is encountered in mexCallMATLAB.
-
- ** The MEX API now includes the function mexCallMATLABWithTrap.  This
-    function will not abort if an error occurs during mexCallMATLAB, but
-    instead will return execution to the MEX function for error
-    handling.
-
- ** The MEX API functions for input validation that begin with "mxIs"
-    (e.g., mxIsDouble, mxIsEmpty, etc.) now return type bool rather than
-    type int.
-
- ** The functions mxAssert and mxAssertS for checking assertions have
-    been added.  In order to avoid a performance penalty they are only
-    compiled in to debug versions of a MEX file, i.e., that are produced
-    when the '-g' option is given to mex or mkoctfile.
-
- ** Other new MEX API functions include mexEvalStringWithTrap,
-    mxIsScalar, mxCreateUninitNumericArray, mxCreateUninitNumericMatrix.
-
- ** Other new functions added in 4.2:
-
-      audioformats
-      camlight
-      condeig
-      deg2rad
-      dialog
-      evalc
-      hash
-      im2double
-      isocaps
-      lighting
-      localfunctions
-      material
-      normest1
-      ode23
-      ode45
-      odeget
-      odeplot
-      odeset
-      padecoef
-      profexport
-      psi
-      rad2deg
-      reducepatch
-      reducevolume
-      smooth3
-      uibuttongroup
-
- ** Deprecated functions.
-
-    The following functions have been deprecated in Octave 4.2 and will
-    be removed from Octave 5 (or whatever version is the second major
-    release after 4.2):
-
-      Function             | Replacement
-      ---------------------|------------------
-      bitmax               | flintmax
-      mahalanobis          | mahal in Octave Forge statistics pkg
-      md5sum               | hash
-      octave_config_info   | __octave_config_info__
-      onenormest           | normest1
-      sleep                | pause
-      usleep               | pause
-      wavread              | audioread
-      wavwrite             | audiowrite
-
- ** The following functions were deprecated in Octave 3.8 and have been
-    removed from Octave 4.2.
-
-      default_save_options    java_new
-      gen_doc_cache           java_unsigned_conversion
-      interp1q                javafields
-      isequalwithequalnans    javamethods
-      java_convert_matrix     re_read_readline_init_file
-      java_debug              read_readline_init_file
-      java_invoke             saving_history
-
- ** The global error_state variable in Octave's C++ API has been
-    deprecated and will be removed in a future version.  Now the error
-    and print_usage functions throw an exception
-    (octave::execution_exception) after displaying the error message.
-    This makes the error and print_usage functions in C++ work more like
-    the corresponding functions in the scripting language.
-
- ** The default error handlers in liboctave have been updated to use
-    exceptions.  After displaying an error message they no longer return
-    control to the calling program.  The error handler function can be
-    customized through the global variables
-    "current_liboctave_error_handler" and
-    "current_liboctave_error_with_id_handler".  If a programmer has
-    installed their own custom error handling routines when directly
-    linking with liboctave then these must be updated to throw an
-    exception and not return to the calling program.
-
- ** The system for common errors and warnings has been renamed from
-    gripe_XXX to either err_XXX if error is called or warn_XXX if
-    warning is called.  The gripe_XXX functions are deprecated and will
-    be removed in version 5.
-
- ** New configure option, --enable-address-sanitizer-flags, to build
-    Octave with memory allocator checks (similar to those in valgrind)
-    built in.
-
-Summary of important user-visible changes for version 4.0 (2015-05-23):
-----------------------------------------------------------------------
-
- ** A graphical user interface is now the default when running Octave
-    interactively.  The start-up option --no-gui will run the familiar
-    command line interface, and still allows use of the GUI dialogs and
-    qt plotting toolkit.  The option --no-gui-libs runs a minimalist
-    command line interface that does not link with the Qt libraries and
-    uses the fltk toolkit for plotting.
-
- ** Octave now uses OpenGL graphics with Qt widgets by default.  If
-    OpenGL libraries are not available when Octave is built, gnuplot is
-    used.  You may choose to use the fltk or gnuplot toolkit for
-    graphics by executing the command
-
-      graphics_toolkit ("fltk")
-        OR
-      graphics_toolkit ("gnuplot")
-
-    Adding such a command to your ~/.octaverc file will set the default
-    for each session.
-
- ** A new syntax for object oriented programming termed classdef has
-    been introduced.  See the manual for more extensive documentation of
-    the classdef interface.
-
-    New keywords:
-
-      classdef      endclassdef
-      enumeration   endenumeration
-      events        endevents
-      methods       endmethods
-      properties    endproperties
-
- ** New audio functions and classes:
-
-      audiodevinfo  audioread      sound
-      audioinfo     audiorecorder  soundsc
-      audioplayer   audiowrite
-
- ** Other new classes in Octave 4.0:
-
-      audioplayer    inputParser
-      audiorecorder
-
- ** Optional stricter Matlab compatibility for ranges, diagonal
-    matrices, and permutation matrices.
-
-    Octave has internal optimizations which use space-efficient storage
-    for the three data types above.  Three new functions have been added
-    which control whether the optimizations are used (default), or
-    whether the data types are stored as full matrices.
-
-    disable_range   disable_diagonal_matrix   disable_permutation_matrix
-
-    All three optimizations are disabled if Octave is started with the
-    --braindead command line option.
-
- ** The preference
-
-      do_braindead_shortcircuit_evaluation
-
-    is now enabled by default.
-
- ** The preference
-
-      allow_noninteger_range_as_index
-
-    is now enabled by default and the warning ID
-
-      Octave:noninteger-range-as-index
-
-    is now set to "on" by default instead of "error" by default and "on"
-    for --traditional.
-
- ** The "backtrace" warning option is now enabled by default.  This
-    change was made for Matlab compatibility.
-
- ** For compatibility with Matlab, the "ismatrix (x)" function now only
-    checks the dimension of "x".  The old behavior of "ismatrix" is
-    obtained by "isnumeric (x) || islogical (x) || ischar (x)".
-
- ** The nextpow2 function behavior has been changed for vector inputs.
-    Instead of computing `nextpow2 (length (x))', it will now compute
-    nextpow2 for each element of the input.  This change is Matlab
-    compatible, and also prevents bugs for "vectors" of length 1.
-
- ** polyeig now returns a row vector of eigenvalues rather than a matrix
-    with the eigenvalues on the diagonal.  This change was made for
-    Matlab compatibility.
-
- ** Interpolation function changes for Matlab compatibility
-
-    The interpolation method 'cubic' is now equivalent to 'pchip' for
-    interp1, interp2, and interp3.  Previously, 'cubic' was equivalent
-    to 'spline' for interp2.  This may produce different results as
-    'spline' has continuous 1st and 2nd derivatives while 'pchip' only
-    has a continuous 1st derivative.  The methods 'next' and 'previous'
-    have been added to interp1 for compatibility.
-
- ** The delaunay function has been extended to accept 3-D inputs for
-    Matlab compatibility.  The delaunay function no longer plots the
-    triangulation if no output argument is requested, instead, the
-    triangulation is always returned.  The delaunay3 function which
-    handles 3-D inputs has been deprecated in favor of delaunay.
-
- ** The trigonometric functions asin and acos return different phase
-    values from previous versions of Octave when the input is outside
-    the principal branch ([-1, 1]).  If the real portion of the input is
-    greater than 1 then the limit from below is taken.  If the real
-    portion is less than 1 then the limit from above is taken.  This
-    criteria is consistent with several other numerical analysis
-    software packages.
-
- ** The hyperbolic function acosh now returns values with a phase in the
-    range [-pi/2, +pi/2].  Previously Octave returned values in the
-    range [0, pi].  This is consistent with several other numerical
-    analysis software packages.
-
- ** strfind changes when using empty pattern ("") for Matlab
-    compatibility
-
-    strfind now returns an empty array when the pattern itself is empty.
-    In previous versions of Octave, strfind matched at every character
-    location when the pattern was empty.
-
-      NEW
-      strfind ("abc", "") => []
-      OLD
-      strfind ("abc", "") => [1, 2, 3, 4]
-
- ** Integer formats used in the printf family of functions now work for
-    64-bit integers and are more compatible with Matlab when printing
-    non-integer values.  Now instead of truncating, Octave will switch
-    the effective format to '%g' in the following circumstances:
-
-      * the value of an integer type (int8, uint32, etc.) value exceeds
-        the maximum for the format specifier.  For '%d', the limit is
-        intmax ('int64') and for '%u' it is intmax ('uint64').
-
-      * round(x) != x or the value is outside the range allowed by the
-        integer format specifier.
-
-    There is still one difference: Matlab switches to '%e' and Octave
-    switches to '%g'.
-
- ** The functions intersect, setdiff, setxor, and union now return a
-    column vector as output unless the input was a row vector.  This
-    change was made for Matlab compatibility.
-
- ** The inpolygon function now returns true for points that are within
-    the polygon OR on it's edge.  This change was made for Matlab
-    compatibility.
-
- ** The archive family of functions (bzip2, gzip, zip, tar) and their
-    unpacking routines (bunzip2, gunzip, unzip, untar, unpack) have been
-    recoded.  Excepting unpack, the default is now to place files in the
-    same directory as the archive (on unpack) or as the original files
-    (on archiving).
-
- ** Qt and FLTK graphics toolkits now support offscreen rendering on
-    Linux.  In other words, print will work even when the figure
-    visibility is "off".
-
- ** Z-order stacking issues with patches, grid lines, and line object
-    plot markers for on screen display and printing have all been
-    resolved.  For 2-D plots the axis grid lines can be placed on top of
-    the plot with set (gca, "layer", "top").
-
- ** The patch graphic object has been overhauled.  It now produces
-    visual results equivalent to Matlab even for esoteric combinations
-    of faces/vertices/cdata.
-
- ** The polar() plot function now draws a circular theta axis and radial
-    rho axis rather than using a rectangular x/y axis.
-
- ** linkprop has been completely re-coded for performance and Matlab
-    compatibility.  It now returns a linkprop object which must be
-    stored in a variable for as long as the graphic objects should
-    remain linked.  To unlink properties use 'clear hlink' where hlink
-    is the variable containing the linkprop object.
-
- ** isprime has been extended to operate on negative and complex inputs.
-
- ** xor has been extended to accept more than two arguments in which
-    case it performs cumulative XOR reduction.
-
- ** The following functions now support N-dimensional arrays:
-
-      fliplr   flipud   rot90   rectint
-
- ** The new warning ID "Octave:data-file-in-path" replaces the three
-    previous separate warning IDs "Octave:fopen-file-in-path",
-    "Octave:load-file-in-path", and "Octave:md5sum-file-in-path".
-
- ** The warning ID Octave:singular-matrix-div has been replaced by
-    Octave:nearly-singular-matrix and Octave:singular-matrix.
-
- ** The warning ID Octave:matlab-incompatible has been replaced by
-    Octave:language-extension to better reflect its meaning.
-
- ** The warning ID Octave:broadcast has been removed.  Instead automatic
-    broadcasting will throw an Octave:language-extension warning.  This
-    warning ID is used for broadcasting as well as other features not
-    available in Matlab.
-
- ** Other new functions added in 4.0:
-
-      annotation
-      bandwidth
-      cubehelix
-      dir_in_loadpath
-      flip
-      frame2im
-      get_home_directory
-      hgload
-      hgsave
-      ichol
-      ilu
-      im2frame
-      isbanded
-      isdiag
-      isstudent
-      istril
-      istriu
-      javachk
-      jit_failcnt
-      linkaxes
-      lscov
-      metaclass
-      numfields
-      open
-      ordschur
-      pan
-      qmr
-      rotate
-      rotate3d
-      sylvester
-      unsetenv
-      validateattributes
-      zoom
-
- ** inline() scheduled for eventual deprecation by Matlab
-
-    Functions created through the use of inline are scheduled for
-    deprecation by Matlab.  When this occurs Octave will continue to
-    support inline functions for an indeterminate amount of time before
-    also removing support.  All new code should use anonymous functions
-    in place of inline functions.
-
- ** Deprecated functions.
-
-    The following functions have been deprecated in Octave 4.0 and will
-    be removed from Octave 4.4 (or whatever version is the second major
-    release after 4.0):
-
-      Function             | Replacement
-      ---------------------|------------------
-      bicubic              | interp2
-      delaunay3            | delaunay
-      dump_prefs           | individual preference get/set routines
-      find_dir_in_path     | dir_in_loadpath
-      finite               | isfinite
-      fmod                 | rem
-      fnmatch              | glob or regexp
-      gmap40               | ----
-      loadaudio            | audioread
-      luinc                | ilu or ichol
-      mouse_wheel_zoom     | mousewheelzoom axes property
-      nfields              | numfields
-      octave_tmp_file_name | tempname
-      playaudio            | audioplayer
-      saveaudio            | audiowrite
-      syl                  | sylvester
-      usage                | print_usage
-
-      allow_noninteger_range_as_index
-      do_braindead_shortcircuit_evaluation
-      setaudio
-
- ** The following functions were deprecated in Octave 3.8 and will be
-    removed from Octave 4.2 (or whatever version is the second major
-    release after 3.8):
-
-      default_save_options    java_new
-      gen_doc_cache           java_unsigned_conversion
-      interp1q                javafields
-      isequalwithequalnans    javamethods
-      java_convert_matrix     re_read_readline_init_file
-      java_debug              read_readline_init_file
-      java_invoke             saving_history
-
- ** The following functions were deprecated in Octave 3.6 and have been
-    removed from Octave 4.0.
-
-      cut                polyderiv
-      cor                shell_cmd
-      corrcoef           studentize
-      __error_text__     sylvester_matrix
-      error_text
-
- ** The following keywords were deprecated in Octave 3.8 and have been
-    removed from Octave 4.0
-
-      static
-
- ** The following configuration variables were deprecated in Octave 3.8
-    and have been removed from Octave 4.0
-
-      CC_VERSION  (now GCC_VERSION)
-      CXX_VERSION (now GXX_VERSION)
-
- ** The internal function atan2 of the sparse matrix class has been
-    deprecated in Octave 4.0 and will be removed from Octave 4.4 (or
-    whatever version is the second major release after 4.0).  Use the
-    Fatan2 function with sparse inputs as a replacement.
-
- ** The internal class Octave_map was deprecated in Octave 3.8 and has
-    been removed from Octave 4.0.  Replacement classes are octave_map
-    (struct array) or octave_scalar_map for a single structure.
-
- ** Octave now has OpenMP enabled by default if the system provides a
-    working OpenMP implementation.  This allows oct-file modules to take
-    advantage of OpenMP if desired.  This can be disabled when building
-    Octave with the configure option --disable-openmp.
-
- ** Octave now automatically truncates intermediate calculations done
-    with floating point values to 64 bits.  Some hardware math
-    co-processors, such as the x87, maintain extra precision, but this
-    leads to disagreements in calculations when compared to reference
-    implementations in software using the IEEE standard for double
-    precision.  There was no measurable performance impact to this
-    change, but it may be disabled with the configure option
-    --disable-float-truncate.  MinGW and Cygwin platforms, as well as
-    GCC compilers >= 5.0 require this feature.  Non-x87 hardware, or
-    hardware using SSE options exclusively, can disable float truncation
-    if desired.
-
----------------------------------------------------------
-
-See NEWS.3 for old news.