Summary of changes for version 0.70:
-----------------------------------

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

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

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

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

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

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

  * 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 builtin
    operators, keywords and functions.  Coming soon: help for script
    files.

  * Without any arguments, the help command now lists all known
    builtin 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
    builtin 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 organazations who have supported
		the development of Octave.

      NEWS   -- This file, listing recent changes.

  * Help is now available at the gnuplot prompt.
