Summary of changes for version 2.0.17:
-------------------------------------

  This will probably be the last release in the 2.0.x series.  There
  are a few bug fixes, but the major change is to print a message
  saying that Octave 2.0.x cannot be compiled with gcc 3.0.x or gcc
  2.96.  If you want to build Octave 2.0.x, you will need to use gcc
  2.95.x.  If you want to use gcc 3.0.x or some later version, you
  should be using the Octave 2.1.35 sources or a more recent version.

Summary of changes for version 2.0.15:
-------------------------------------

  This is primarily a bug-fixing release.

  * 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))))))


Summary of changes for version 2.0.14:
-------------------------------------

  This release fixes numerous bugs and adds the following new features:

  * argv is now padded with blanks instead of ASCII NUL.

  * New functions:

      besselh  -- Hankel functions of the first and second kind
      airy     -- Airy functions of the first and second kind, and
                  their derivatives

  * The Bessel functions now accept complex values for the argument
    and any real value for the order.

  * 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 value is complex
      isnumeric   -- tell whether a value is a numeric object
      isfinite    -- find finite elements of a matrix object
      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-sqaure 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.

Summary of changes for version 2.0.13:
-------------------------------------

  This is a bug-fixing release.  There are no new user-visible features.

Summary of changes for version 2.0.12:
-------------------------------------

  * Tilde expansion is once again performed on the directories listed
    in the LOADPATH variable.

  * gplot now supports the `axes' qualifier that is new with gnuplot
    3.6beta.

  * Timestamps on .m and .oct files are now only checked if a prompt
    has been printed since the last timestamp check.

  * Octave now prints a warning if a .m or .oct file has a time stamp
    in the future.

  * For matrices, x(:) now works 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.

  * The GNU Info reader is no longer distributed with Octave because
    current releases of GNU Info now support all the features needed
    by Octave.  If your copy of GNU Info doesn't support the
    --index-search option, you should install a newer version of GNU
    Info, which is distributed as part of the GNU Texinfo package.

  * 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.

  * Octave now uses kpathsea 3.2.

  * The new built-in variable `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.11:
-------------------------------------

  * There are two new built-in variables that control how global
    variables are initialized.  If `initialize_global_variables' is
    nonzero, global variables are initialized to the value of the
    variable `default_global_variable_value'.  The default value of
    `initialize_global_variables' is 0 (1 if you use --traditional)
    and `default_global_variable_value' is undefined (the empty matrix
    if you use --traditional).  The default settings are compatible
    with versions of Octave before 2.0.10.

Summary of changes for version 2.0.10:
-------------------------------------

  * 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.

  * For compatibility with Matlab, Octave's lyap function now solves

      A*X + X*A' + C = 0

    instead of

      A'*X + X*A + C = 0

    To try to avoid confusion for people who are used to the way
    Octave behaved in previous versions, a warning is printed the
    first time lyap is called in a given session.  To completely
    disable the warning, simply add

      global __disable_lyap_interface_change_warning__;

    to your ~/.octaverc file.  The warning will eventually disappear
    for good in some future version of Octave.

  * New built-in functions for computing Bessel functions:
    besseli, besselj, besselk, and bessely.

  * The gammai and betai functions are now implemented as built-in
    functions rather than function files.

  * The new built-in variable `implicit_num_to_str_ok' controls
    whether Octave converts expressions like `[97, 98, 99, "123"]' to
    strings.  The default value is 0 unless you use --traditional.

  * 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.

  * Dynamically linked functions can be cleared.

  * If a .oct file has a time stamp more recent than the time that it
    was loaded, it is automatically reloaded.  Reloading a .oct file
    may cause several functions to be cleared automatically.  By
    default, a warning is printed that lists the names of the
    functions that will be cleared.  You can suppress the message by
    setting the new built-in variable `warn_reload_forces_clear' to 0.

  * 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.

  * 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 readline version 2.1 and kpathsea 3.0.

  * The libreadline and libkpathsea libraries are no longer installed.

  * The libcruft, liboctave, and liboctinterp libraries are now
    installed in $libdir/octave instead of just $libdir.

  * It's no longer necessary to have libg++, but you do need to have
    the GNU implementation of libstdc++.  If you are using gcc 2.7.2,
    libstdc++ is distributed as part of libg++ 2.7.2.  For later
    versions, libstdc++ is distributed separately.  For egcs,
    libstdc++ is included with the compiler distribution.

Summary of changes for version 2.0.9:
------------------------------------

  This is a bug-fixing release, but there is one new user-visible
  feature:

  * It is now possible to specify a label for lines in the plot key
    when using the plot function.  For example,

      plot (x, y, "-*;sin(x);")

    plots y vs. x using the linespoints style and sets the title of
    the line in the key to be `sin(x)'

Summary of changes for version 2.0.8:
------------------------------------

  This is a bug-fixing release.  There are only a few new user-visible
  features.

  * If the argument to eig() is symmetric, Octave uses the specialized
    Lapack subroutine for symmetric matrices for a significant
    increase in performance.

  * It is now possible to use the mkoctfile script to create .oct
    files from multiple source and object files.

Summary of changes for version 2.0.7:
------------------------------------

  This is a bug-fixing release.  There are no new user-visible features.

Summary of changes for version 2.0.6:
------------------------------------

  This is primarily a bug-fixing release.  There are only a few new
  user-visilbe 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.

Summary of changes for version 2.0.5:
------------------------------------

  * 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:
------------------------------------

  * 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 orginal
    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:
------------------------------------

  * 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:
------------------------------------

  * 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:
----------------------------------

  * 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 pgroup-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 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.
