changeset 14208:67a0ab9f8283

maint: Merge stable to default branch.
author Rik <octave@nomad.inbox5.com>
date Thu, 12 Jan 2012 12:54:24 -0800
parents 969532305835 (current diff) f50e5fa121cf (diff)
children 238e499c5fea
files doc/interpreter/contributors.in scripts/deprecated/sphcat.m scripts/deprecated/spvcat.m
diffstat 40 files changed, 403 insertions(+), 254 deletions(-) [+]
line wrap: on
line diff
--- a/.hgsubstate	Fri Jan 06 12:43:48 2012 -0500
+++ b/.hgsubstate	Thu Jan 12 12:54:24 2012 -0800
@@ -1,1 +1,1 @@
-3559997a03e82d650aaa708447362fe20a6eaf15 gnulib
+f9813bce2c06a6130a68db4478d1b16ddadaf276 gnulib
--- a/.hgtags	Fri Jan 06 12:43:48 2012 -0500
+++ b/.hgtags	Thu Jan 12 12:54:24 2012 -0800
@@ -55,3 +55,6 @@
 b0e70a71647b671ebcfa7a79af1ae6d3c0f52065 release-3-4-3
 3781981be535e80d44c85373b8fdaa60ca5cd097 ss-3-5-90
 ff5588774680d4f54567311fc109c8e351950f1c ss-3-5-91
+a737b3fb9c4d89d3694da6b4e623aeee64b212e1 ss-3-5-92
+72aebe6196414e38ef802469ff6e238f914f04c9 rc-3-6-0-0
+64d9f33313cc8c691974bcd123357e24bccbabdc rc-3-6-0-1
--- a/NEWS	Fri Jan 06 12:43:48 2012 -0500
+++ b/NEWS	Thu Jan 12 12:54:24 2012 -0800
@@ -1,7 +1,16 @@
 Summary of important user-visible changes for version 3.6:
 ---------------------------------------------------------
 
- ** The PCRE library is now required to build Octave.
+ ** 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 that allows you to use
@@ -48,7 +57,7 @@
  ** 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 profexplore, profile, and profshow.
+    functions are profile, profshow, and profexplore.
 
  ** Overhaul of statistical distribution functions
 
@@ -56,7 +65,7 @@
 
     75% reduction in memory usage through use of logical indexing.
 
-    Random sample functions now use the same syntax as rand() and accept
+    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
@@ -64,9 +73,10 @@
     distribution, etc.).  This may cause subtle changes to existing
     scripts.
 
-    negative binomial function has been extended to real, non-integer inputs.
-    discrete_inv() now returns v(1) for 0 instead of NaN.
-    nbincdf() recoded to use closed form solution with betainc().
+    negative binomial function has been extended to real, non-integer
+    inputs.  The discrete_inv fucntion now returns v(1) for 0 instead of
+    NaN.  The nbincdf fucntion has bbeen recoded to use a closed form
+    solution with betainc.
 
  ** strread, textscan, and textread have been completely revamped.
 
@@ -167,10 +177,12 @@
 
  ** Other new functions added in 3.6.0:
 
-      is_dq_string    nthargout    usejava     
-      is_sq_string    python       waitbar
-      narginchk       recycle      zscore            
-    
+      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
@@ -397,8 +409,8 @@
     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 wrapping the
-    operands in 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
@@ -527,7 +539,7 @@
     cat/vertcat/horzcat functions.
 
  ** It is now possible to optionally employ the xGESDD LAPACK drivers
-    for computing the singular value decomposition using svd(), instead
+    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
@@ -712,7 +724,7 @@
            for i = 1 : 100
              pause(0.1)
              y = sin (x + 0.1 * i);
-             refreshdata();
+             refreshdata ();
            endfor
 
     works as expected.  This capability has be used to introduce
--- a/autogen.sh	Fri Jan 06 12:43:48 2012 -0500
+++ b/autogen.sh	Thu Jan 12 12:54:24 2012 -0800
@@ -37,3 +37,17 @@
 echo "bootstrapping..."
 
 build-aux/bootstrap "$@"
+
+## G77 is obsolete, but it is still the first option in the autoconf Fortran
+## macros.  We should avoid it, because mixing old versions of g77 with modern
+## gcc and g++ causes trouble.  The following will make it harder (but not
+## impossible) for users to make this mistake.
+##
+## FIXME -- we should really work to fix autoconf so that it prefers gfortran
+## over g77 even when searching for a Fortran 77 compiler.
+
+echo "replacing all occurrences of g77 with gfortran in configure script..."
+
+sed 's/g77/gfortran/g' configure > configure.t
+mv configure.t configure
+chmod 755 configure
--- a/configure.ac	Fri Jan 06 12:43:48 2012 -0500
+++ b/configure.ac	Thu Jan 12 12:54:24 2012 -0800
@@ -27,13 +27,13 @@
 EXTERN_CFLAGS="$CFLAGS"
 EXTERN_CXXFLAGS="$CXXFLAGS"
 
-AC_INIT([GNU Octave], [3.5.91+], [http://octave.org/bugs.html], [octave])
+AC_INIT([GNU Octave], [3.6.0-rc1], [http://octave.org/bugs.html], [octave])
 
 dnl PACKAGE_VERSION is set by the AC_INIT VERSION arg
 OCTAVE_VERSION="$PACKAGE_VERSION"
-OCTAVE_API_VERSION_NUMBER="46"
+OCTAVE_API_VERSION_NUMBER="47"
 OCTAVE_API_VERSION="api-v$OCTAVE_API_VERSION_NUMBER+"
-OCTAVE_RELEASE_DATE="2011-12-23"
+OCTAVE_RELEASE_DATE="2012-01-12"
 OCTAVE_COPYRIGHT="Copyright (C) 2012 John W. Eaton and others."
 AC_SUBST(OCTAVE_VERSION)
 AC_SUBST(OCTAVE_API_VERSION_NUMBER)
--- a/doc/interpreter/contributors.in	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/contributors.in	Thu Jan 12 12:54:24 2012 -0800
@@ -25,6 +25,7 @@
 Marco Caliari
 Daniel Calvelo
 John C. Campbell
+Juan Pablo Carbajal
 Jean-Francois Cardoso
 Joao Cardoso
 Larrie Carr
--- a/doc/interpreter/doccheck/aspell-octave.en.pws	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/doccheck/aspell-octave.en.pws	Thu Jan 12 12:54:24 2012 -0800
@@ -38,6 +38,7 @@
 autoloaded
 autoloading
 Autoloading
+Automake
 autoregression
 autoregressions
 autoscaled
@@ -82,6 +83,7 @@
 brackety
 breakpoint
 Brenan
+broadcastable
 Brockwell
 BSX
 builtin
@@ -305,6 +307,7 @@
 fprintf
 FreeBSD
 freespacing
+FreeType
 freetype
 frnd
 frob
@@ -339,6 +342,7 @@
 globbing
 glpk
 GLS
+gnulib
 gnuplot
 Gnuplot
 gnuplot's
@@ -348,6 +352,7 @@
 Goto
 gotos
 GPL
+GPLK
 gplot
 grabdemo
 GradObj
@@ -485,6 +490,7 @@
 libcurl
 liblapack
 liboctave
+Libtool
 licensors
 lineanchors
 linefeeds
@@ -551,6 +557,7 @@
 mex
 Michelsen
 Microsystems
+MinGW
 minima
 Minimizers
 Minitab
@@ -572,6 +579,7 @@
 mpoles
 mpower
 mrdivide
+MSYS
 mtimes
 Multi
 multi
@@ -745,6 +753,7 @@
 Reindent
 relicensing
 ren
+renderer
 repelems
 repmat
 resampled
@@ -781,6 +790,7 @@
 SCO
 screenful
 se
+sed
 seealso
 semidefinite
 Sep
@@ -909,6 +919,7 @@
 tinv
 Tisseur
 Tisseur's
+tmp
 Toeplitz
 tokenExtents
 TolF
@@ -1046,6 +1057,7 @@
 ydata
 yerrorbar
 yerrorbars
+ylim
 yy
 YY
 yyyy
@@ -1056,3 +1068,4 @@
 zer
 Ziggurat
 zlib
+zlim
--- a/doc/interpreter/doccheck/mk_undocumented_list	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/doccheck/mk_undocumented_list	Thu Jan 12 12:54:24 2012 -0800
@@ -9,7 +9,7 @@
  where = cellfun (\@which, funclist, \"UniformOutput\", 0)'
 _END_OCT_SCRIPT_
 
-die "Unable to invoke 'run-octave'.  Exiting\n" unless (@octave_output);
+unless (@octave_output) { die "Unable to invoke 'run-octave'.  Exiting\n" ;}
 
 ################################################################################
 # Winnow list of functions that require a DOCSTRING
@@ -86,9 +86,9 @@
 F_DUPFD
 F_GETFD
 F_GETFL
+fact
 finite
 fmod
-fntests
 F_SETFD
 F_SETFL
 gammaln
--- a/doc/interpreter/expr.txi	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/expr.txi	Thu Jan 12 12:54:24 2012 -0800
@@ -523,7 +523,7 @@
 
 @item @var{x} .+ @var{y}
 @opindex .+
-Element by element addition.  This operator is equivalent to @code{+}.
+Element-by-element addition.  This operator is equivalent to @code{+}.
 
 @item @var{x} - @var{y}
 @opindex -
@@ -532,17 +532,17 @@
 shape.
 
 @item @var{x} .- @var{y}
-Element by element subtraction.  This operator is equivalent to @code{-}.
+Element-by-element subtraction.  This operator is equivalent to @code{-}.
 
 @item @var{x} * @var{y}
 @opindex *
-Matrix multiplication. The number of columns of @var{x} must agree with
+Matrix multiplication.  The number of columns of @var{x} must agree with
 the number of rows of @var{y}, or they must be broadcastable to the same
 shape.
 
 @item @var{x} .* @var{y}
 @opindex .*
-Element by element multiplication. If both operands are matrices, the
+Element-by-element multiplication.  If both operands are matrices, the
 number of rows and columns must both agree, or they must be
 broadcastable to the same shape.
 
@@ -562,7 +562,7 @@
 
 @item @var{x} ./ @var{y}
 @opindex ./
-Element by element right division.
+Element-by-element right division.
 
 @item @var{x} \ @var{y}
 @opindex \
@@ -580,7 +580,7 @@
 
 @item @var{x} .\ @var{y}
 @opindex .\
-Element by element left division.  Each element of @var{y} is divided
+Element-by-element left division.  Each element of @var{y} is divided
 by each corresponding element of @var{x}.
 
 @item @var{x} ^ @var{y}
@@ -601,9 +601,13 @@
 @itemx @var{x} .** @var{y}
 @opindex .**
 @opindex .^
-Element by element power operator. If both operands are matrices, the
+Element-by-element power operator.  If both operands are matrices, the
 number of rows and columns must both agree, or they must be
-broadcastable to the same shape.
+broadcastable to the same shape.  If several complex results are
+possible, the one with smallest non-negative argument (angle) is taken.
+This rule may return a complex root even when a real root is also possible.
+Use @code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a
+real result is preferred.
 
 @item -@var{x}
 @opindex -
@@ -628,7 +632,7 @@
 Transpose.
 @end table
 
-Note that because Octave's element by element operators begin with a
+Note that because Octave's element-by-element operators begin with a
 @samp{.}, there is a possible ambiguity for statements like
 
 @example
--- a/doc/interpreter/func.txi	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/func.txi	Thu Jan 12 12:54:24 2012 -0800
@@ -1145,6 +1145,8 @@
 @end group
 @end example
 
+@DOCSTRING(is_function_handle)
+
 @DOCSTRING(functions)
 
 @DOCSTRING(func2str)
--- a/doc/interpreter/install.txi	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/install.txi	Thu Jan 12 12:54:24 2012 -0800
@@ -64,6 +64,56 @@
 part of your system, or you may have to build some or all of them
 yourself.
 
+@menu
+* Tips for Specific Systems::
+* Build Tools::
+* External Packages::
+@end menu
+
+@node Tips for Specific Systems
+@subsection Tips for Specific Systems
+
+The names of pre-compiled packages vary by system and do not always
+match exactly the names listed above.
+
+You will usually need the development version of an external dependency
+so that you get the libraries and header files for building software,
+not just for running already compiled programs.  These packages
+typically have names that end with the suffix @code{-dev} or @code{-devel}.
+
+On systems with @code{apt-get} (Debian, Ubuntu, etc.), you may be able
+to install most of the tools and external packages using a command
+similar to
+
+@example
+apt-get build-dep octave
+@end example
+
+@noindent
+The specific package name may be @code{octave3.2} or @code{octave3.4}.
+The set of required tools and external dependencies does not change
+frequently, so it is not important that the version match exactly, but
+you should use the most recent one available.
+
+On systems with @code{yum} (Fedora, Red Hat, etc.), you may be able to
+install most of the tools and external packages using a command similar to
+
+@example
+yum-builddep octave
+@end example
+
+@noindent
+The @code{yum-builddep} utility is part of the @code{yum-utils} package.
+
+For either type of system, the package name may include a version
+number.  The set of required tools and external dependencies does not
+change frequently, so it is not important that the version exactly match
+the version you are installing, but you should use the most recent one
+available.
+
+@node Build Tools
+@subsection Build Tools
+
 The following tools are required:
 
 @table @asis
@@ -118,11 +168,12 @@
 Automake.
 @end table
 
+@node External Packages
+@subsection External Packages
+
 The following external packages are required:
 
 @table @asis
-@item PCRE
-The Perl Compatible Reular Expression library (http://www.pcre.org).
 @item BLAS
 Basic Linear Algebra Subroutine library
 (@url{http://www.netlib.org/blas}).  Accelerated BLAS libraries such as
@@ -130,6 +181,8 @@
 better performance.
 @item LAPACK
 Linear Algebra Package (@url{http://www.netlib.org/lapack}).
+@item PCRE
+The Perl Compatible Regular Expression library (http://www.pcre.org).
 @end table
 
 The following external package is optional but strongly recommended:
@@ -152,7 +205,7 @@
 
 @item cURL
 Library for transferring data with URL syntax
-(@url{http://curl.haxx.se}). cURL is required to provide the
+(@url{http://curl.haxx.se}).  cURL is required to provide the
 @code{urlread} and @code{urlwrite} functions and the @code{ftp} class.
 
 @item FFTW3
@@ -172,7 +225,7 @@
 
 @item FreeType
 Portable font engine (@url{http://www.freetype.org}).  FreeType is used
-to peform font rendering Octave's OpenGL-based graphics functions.
+to perform font rendering for Octave's OpenGL-based graphics functions.
 
 @item GLPK
 GNU Linear Programming Kit (@url{http://www.gnu.org/software/glpk}).
@@ -190,7 +243,7 @@
 @item HDF5
 Library for manipulating portable data files
 (@url{http://www.hdfgroup.org/HDF5}).  HDF5 is required for Octave's
-@code{save} and @code{load} commands to write and read HDF data files.
+@code{load} and @code{save} commands to read and write HDF data files.
 
 @item OpenGL
 API for portable 2D and 3D graphics (@url{http://www.opengl.org}).  An
--- a/doc/interpreter/octave.texi	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/octave.texi	Thu Jan 12 12:54:24 2012 -0800
@@ -386,7 +386,7 @@
 
 Index Expressions
 
-* Advanced Indexing::           
+* Advanced Indexing::
 
 Calling Functions
 
@@ -477,6 +477,8 @@
 * Breakpoints::
 * Debug Mode::
 * Call Stack::
+* Profiling::
+* Profiler Example::
 
 Input and Output
 
@@ -488,7 +490,6 @@
 * Terminal Output::             
 * Terminal Input::              
 * Simple File I/O::             
-* Rational Approximations::
 
 Terminal Output
 
@@ -546,7 +547,7 @@
 
 Three-Dimensional Plots
 
-* Aspect Ratio::  
+* Aspect Ratio::
 * Three-dimensional Function Plotting::  
 * Three-dimensional Geometric Shapes::  
 
@@ -575,7 +576,7 @@
 * Line Styles::                 
 * Marker Styles::               
 * Callbacks::                   
-* Application-defined Data
+* Application-defined Data::
 * Object Groups::               
 * Graphics Toolkits::           
 
@@ -595,7 +596,7 @@
 
 Graphics Toolkits
 
-* Customizing Toolkit Behavior::
+* Customizing Toolkit Behavior::    
 
 Matrix Manipulation
 
@@ -626,17 +627,17 @@
 
 Vectorization and Faster Code Execution
 
-* Basic Vectorization::
-* Broadcasting::
-* Function Application::
-* Accumulation::
-* Miscellaneous Techniques::
+* Basic Vectorization::        Basic techniques for code optimization
+* Broadcasting::               Broadcasting operations
+* Function Application::       Applying functions to arrays, cells, and structs
+* Accumulation::               Accumulation functions
+* Miscellaneous Techniques::   Other techniques for speeding up code
 * Examples::
 
 Nonlinear Equations
 
 * Solvers::
-* Minimizers::
+* Minimizers::          
 
 Diagonal and Permutation Matrices
 
@@ -705,7 +706,7 @@
 * Descriptive Statistics::
 * Basic Statistical Functions:: 
 * Statistical Plots:: 
-* Correlation and Regression Analysis::
+* Correlation and Regression Analysis::                      
 * Distributions::     
 * Tests::                       
 * Random Number Generation::          
@@ -772,7 +773,7 @@
 * I/O Dialogs::       
 * Progress Bar::       
 * GUI Utility Functions::       
-* User-Defined Preferences::
+* User-Defined Preferences::       
 
 System Utilities
 
@@ -876,16 +877,22 @@
 Reporting Bugs
 
 * Bug Criteria::                
-* Bug Tracker::                 Where to submit your bug report.
-* Bug Reporting::               How to report a bug effectively.
-* Sending Patches::             How to send a patch for Octave.
+* Bug Tracker::        Where to submit your bug report.
+* Bug Reporting::      How to report a bug effectively.
+* Sending Patches::    How to send a patch for Octave.
 
 Installation
 
 * Build Dependencies::
 * Running Configure and Make::
-* Compiling Octave with 64-bit Indexing::       
-* Installation Problems::       
+* Compiling Octave with 64-bit Indexing::
+* Installation Problems::
+
+Build Dependencies
+
+* Tips for Specific Systems::
+* Build Tools::
+* External Packages::
 
 Emacs Octave Support
 
--- a/doc/interpreter/preface.txi	Fri Jan 06 12:43:48 2012 -0500
+++ b/doc/interpreter/preface.txi	Thu Jan 12 12:54:24 2012 -0800
@@ -32,29 +32,29 @@
 were somewhat vague, we knew that we wanted to create something that
 would enable students to solve realistic problems, and that they could
 use for many things other than chemical reactor design problems.
-
-There are those who would say that we should be teaching the students
-Fortran instead, because that is the computer language of engineering,
-but every time we have tried that, the students have spent far too much
-time trying to figure out why their Fortran code crashes and not enough
-time learning about chemical engineering.  With Octave, most students
-pick up the basics quickly, and are using it confidently in just a few
-hours.
+We find that most students pick up the basics of Octave quickly, and are
+using it confidently in just a few hours.
 
 Although it was originally intended to be used to teach reactor design,
 it has been used in several other undergraduate and graduate
 courses in the Chemical Engineering Department at the University of
 Texas, and the math department at the University of Texas has been using
-it for teaching differential equations and linear algebra as well.  If
-you find it useful, please let us know.  We are always interested to
-find out how Octave is being used in other places.
+it for teaching differential equations and linear algebra as well.
+More recently, Octave has been used as the primary computational tool
+for teaching Stanford's online Machine Learning class
+(@url{ml-class.org}) taught by Andrew Ng.  Tens of thousands of students
+participated in the course.
+
+If you find Octave useful, please let us know.  We are always interested
+to find out how Octave is being used.
 
 Virtually everyone thinks that the name Octave has something to do with
-music, but it is actually the name of a former professor of mine who
-wrote a famous textbook on chemical reaction engineering, and who was
-also well known for his ability to do quick `back of the envelope'
-calculations.  We hope that this software will make it possible for many
-people to do more ambitious computations just as easily.
+music, but it is actually the name of one of John W. Eaton's former
+professors who wrote a famous textbook on chemical reaction engineering,
+and who was also well known for his ability to do quick `back of the
+envelope' calculations.  We hope that this software will make it
+possible for many people to do more ambitious computations just as
+easily.
 
 Everyone is encouraged to share this software with others under the
 terms of the GNU General Public License (@pxref{Copying}).  You are 
@@ -162,6 +162,24 @@
 could make a significant difference in the amount of time that is
 available for development and support.
 
+Donations supporting Octave development may be made on the web at
+@url{https://my.fsf.org/donate/working-together/octave}.  These
+donations also help to support the Free Software Foundation
+
+If you'd prefer to pay by check or money order, you can do so by sending
+a check to the FSF at the following address:
+
+@quotation
+Free Software Foundation@*
+51 Franklin Street, Suite 500@*
+Boston, MA 02110-1335@*
+USA
+@end quotation
+
+@noindent
+If you pay by check, please be sure to write ``GNU Octave'' in the memo
+field of your check.
+
 If you cannot provide funding or contribute code, you can still help
 make Octave better and more reliable by reporting any bugs you find and
 by offering suggestions for ways to improve Octave.  @xref{Trouble}, for
@@ -180,18 +198,7 @@
 GNU General Public License that comes with Octave and that also appears 
 in @ref{Copying}.
 
-Octave is available on CD-ROM, with various collections of other free
-software, from the Free Software Foundation.  Ordering a copy of
-Octave from the Free Software Foundation helps to fund the development
-of more free software.  For more information, write to
+To download a copy of Octave, please visit
+@url{http://www.octave.org/download.html}.
 
-@quotation
-Free Software Foundation@*
-51 Franklin Street, Fifth Floor@*
-Boston, MA 02110-1301--1307@*
-USA
-@end quotation
-
-Octave can also be downloaded from @url{http://www.octave.org}, where
-additional information is available.
 @end ifclear
--- a/libcruft/Makefile.am	Fri Jan 06 12:43:48 2012 -0500
+++ b/libcruft/Makefile.am	Thu Jan 12 12:54:24 2012 -0800
@@ -43,7 +43,7 @@
 
 # Increment these as needed and according to the rules in the libtool
 # manual:
-libcruft_current = 0
+libcruft_current = 1
 libcruft_revision = 0
 libcruft_age = 0
 
--- a/liboctave/Makefile.am	Fri Jan 06 12:43:48 2012 -0500
+++ b/liboctave/Makefile.am	Thu Jan 12 12:54:24 2012 -0800
@@ -520,7 +520,7 @@
 
 # Increment these as needed and according to the rules in the libtool
 # manual:
-liboctave_current = 0
+liboctave_current = 1
 liboctave_revision = 0
 liboctave_age = 0
 
--- a/liboctave/lo-specfun.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/liboctave/lo-specfun.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -852,6 +852,13 @@
 
       retval = bessel_return_value (Complex (yr, yi), ierr);
     }
+  else if (is_integer_value (alpha))
+    {
+      // zbesi can overflow as z->0, and cause troubles for generic case below
+      alpha = -alpha;
+      Complex tmp = zbesi (z, alpha, kode, ierr);
+      retval = bessel_return_value (tmp, ierr);
+    }
   else
     {
       alpha = -alpha;
--- a/liboctave/oct-inttypes.h	Fri Jan 06 12:43:48 2012 -0500
+++ b/liboctave/oct-inttypes.h	Thu Jan 12 12:54:24 2012 -0800
@@ -366,8 +366,8 @@
     {
       // Promotion type for multiplication (if exists).
       typedef typename query_integer_type<2*sizeof (T), false>::type mptype;
-      return truncate_int (static_cast<mptype> (x)
-                           * static_cast<mptype> (y));
+      return octave_int_base<T>::truncate_int (static_cast<mptype> (x)
+                                               * static_cast<mptype> (y));
     }
 
   // Division with rounding to nearest. Note that / and % are probably
@@ -621,8 +621,8 @@
     {
       // Promotion type for multiplication (if exists).
       typedef typename query_integer_type<2*sizeof (T), true>::type mptype;
-      return truncate_int (static_cast<mptype> (x)
-                           * static_cast<mptype> (y));
+      return octave_int_base<T>::truncate_int (static_cast<mptype> (x)
+                                               * static_cast<mptype> (y));
     }
 
   // Division.
--- a/scripts/deprecated/module.mk	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/deprecated/module.mk	Thu Jan 12 12:54:24 2012 -0800
@@ -27,8 +27,6 @@
   deprecated/saveimage.m \
   deprecated/setstr.m \
   deprecated/shell_cmd.m \
-  deprecated/sphcat.m \
-  deprecated/spvcat.m \
   deprecated/strerror.m \
   deprecated/studentize.m \
   deprecated/sylvester_matrix.m \
--- a/scripts/deprecated/sphcat.m	Fri Jan 06 12:43:48 2012 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-## Copyright (C) 2004-2012 David Bateman and Andy Adler
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {@var{y} =} sphcat (@var{a1}, @var{a2}, @dots{}, @var{aN})
-## Return the horizontal concatenation of sparse matrices.  This function
-## is obselete and @code{horzcat} should be used instead.
-## @seealso {horzcat, spvcat, vertcat, cat}
-## @end deftypefn
-
-function y = sphcat (varargin)
-  persistent warned = false;
-  if (! warned)
-    warned = true;
-    warning ("Octave:deprecated-function",
-             "sphcat is obsolete and will be removed from a future version of Octave; please use horzcat instead");
-  endif
-
-  y = horzcat (varargin{:});
-endfunction
--- a/scripts/deprecated/spvcat.m	Fri Jan 06 12:43:48 2012 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-## Copyright (C) 2004-2012 David Bateman and Andy Adler
-##
-## This file is part of Octave.
-##
-## Octave is free software; you can redistribute it and/or modify it
-## under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 3 of the License, or (at
-## your option) any later version.
-##
-## Octave is distributed in the hope that it will be useful, but
-## WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-## General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with Octave; see the file COPYING.  If not, see
-## <http://www.gnu.org/licenses/>.
-
-## -*- texinfo -*-
-## @deftypefn {Function File} {@var{y} =} spvcat (@var{a1}, @var{a2}, @dots{}, @var{aN})
-## Return the vertical concatenation of sparse matrices.  This function
-## is obselete and @code{vertcat} should be used instead.
-## @seealso{vertcat, sphcat, horzcat, cat}
-## @end deftypefn
-
-function y = spvcat (varargin)
-  persistent warned = false;
-  if (! warned)
-    warned = true;
-    warning ("Octave:deprecated-function",
-             "spvcat is obsolete and will be removed from a future version of Octave; please use vertcat instead");
-  endif
-
-  y = vertcat (varargin{:});
-endfunction
--- a/scripts/plot/figure.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/plot/figure.m	Thu Jan 12 12:54:24 2012 -0800
@@ -63,7 +63,16 @@
 
   if (rem (nargs, 2) == 0)
     if (isnan (f) || init_new_figure)
-      f = __go_figure__ (f, varargin{:});
+      if (ismac () && strcmp (graphics_toolkit (), "fltk"))
+        ## FIXME - Hack for fltk-aqua to work around bug # 31931
+        f = __go_figure__ (f);
+        drawnow ();
+        if (! isempty (varargin))
+          set (f, varargin{:});
+        endif
+      else
+        f = __go_figure__ (f, varargin{:});
+      endif
     elseif (nargs > 0)
       set (f, varargin{:});
     endif
--- a/scripts/plot/plot3.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/plot/plot3.m	Thu Jan 12 12:54:24 2012 -0800
@@ -170,6 +170,8 @@
 
       if (! size_equal (x, y, z))
         error ("plot3: x, y, and z must have the same shape");
+      elseif (ndims (x) > 2)
+        error ("plot3: x, y, and z must not have more than two dimensions");
       endif
 
       for i = 1 : columns (x)
@@ -222,6 +224,8 @@
 
       if (! size_equal (x, y, z))
         error ("plot3: x, y, and z must have the same shape");
+      elseif (ndims (x) > 2)
+        error ("plot3: x, y, and z must not have more than two dimensions");
       endif
 
       options =  __default_plot_options__ ();
@@ -294,6 +298,8 @@
 
     if (! size_equal (x, y, z))
       error ("plot3: x, y, and z must have the same shape");
+    elseif (ndims (x) > 2)
+      error ("plot3: x, y, and z must not have more than two dimensions");
     endif
 
     options =  __default_plot_options__ ();
--- a/scripts/plot/private/__fltk_print__.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/plot/private/__fltk_print__.m	Thu Jan 12 12:54:24 2012 -0800
@@ -52,15 +52,17 @@
     dot = find (opts.name == ".", 1, "last");
     if ((! isempty (dot))
         && any (strcmpi (opts.name(dot:end), ...
-                {".eps", ".ps", ".pdf", ".tex", "."})))
+                {strcat(".", suffix), ".tex", "."})))
       name = opts.name(1:dot-1);
       if (dot < numel (opts.name)
           && any (strcmpi (opts.name(dot+1:end), {"eps", "ps", "pdf"})))
         ## If user provides eps/ps/pdf suffix, use it.
         suffix = opts.name(dot+1:end);
       endif
-    elseif (dot == numel (opts.name))
-      name = opts.name;
+    else
+      error ("print:invalid-suffix", 
+             "invalid suffix `%s' for device `%s'.",
+             opts.name(dot:end), lower (opts.devopt));
     endif
     gl2ps_device = {sprintf("%snotxt", lower (suffix))};
     gl2ps_device{2} = "tex";
--- a/scripts/plot/private/__gnuplot_print__.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/plot/private/__gnuplot_print__.m	Thu Jan 12 12:54:24 2012 -0800
@@ -69,10 +69,16 @@
     endif
   case {"epslatex", "pslatex", "pstex", "epslatexstandalone"}
     dot = find (opts.name == ".", 1, "last");
-    if ((! isempty (dot))
-        && any (strcmpi (opts.name(dot:end),
-                {".eps", ".ps", ".pdf", ".tex", "."})))
-      name = opts.name(1:dot-1);
+    n = find (opts.devopt == "l", 1);
+    suffix = opts.devopt(1:n-1);
+    if (! isempty (dot))
+      if (any (strcmpi (opts.name(dot:end), {strcat(".", suffix), ".tex", "."})))
+        name = opts.name(1:dot-1);
+      else
+        error ("print:invalid-suffix", 
+               "invalid suffix `%s' for device `%s'.",
+               opts.name(dot:end), lower (opts.devopt));
+      endif
     endif
     if (strfind (opts.devopt, "standalone"))
       term = sprintf ("%s ",
--- a/scripts/plot/xlim.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/plot/xlim.m	Thu Jan 12 12:54:24 2012 -0800
@@ -17,6 +17,10 @@
 ## <http://www.gnu.org/licenses/>.
 
 ## -*- texinfo -*-
+## @c List other forms of function in documentation index
+## @findex ylim
+## @findex zlim
+##
 ## @deftypefn  {Function File} {@var{xl} =} xlim ()
 ## @deftypefnx {Function File} {} xlim (@var{xl})
 ## @deftypefnx {Function File} {@var{m} =} xlim ('mode')
--- a/scripts/sparse/svds.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/sparse/svds.m	Thu Jan 12 12:54:24 2012 -0800
@@ -264,13 +264,13 @@
 %! assert (flag, !1);
 %! assert (s2, s(end:-1:end-k+1), 1e-10);
 %!
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! [u2,s2,v2,flag] = svds (A,k,0,opts);
 %! s2 = diag (s2);
 %! assert (flag, !1);
 %! assert (s2, s(k:-1:1), 1e-10);
 %!
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! idx = floor(n/2);
 %! % Don't put sigma right on a singular value or there are convergence issues
 %! sigma = 0.99*s(idx) + 0.01*s(idx+1);
--- a/scripts/testfun/test.m	Fri Jan 06 12:43:48 2012 -0500
+++ b/scripts/testfun/test.m	Thu Jan 12 12:54:24 2012 -0800
@@ -456,8 +456,12 @@
 ### TESTIF
 
     elseif (strcmp (__type, "testif"))
-      [__e, __feat] = regexp (__code, '^\s*(\S+)', 'end', 'tokens');
-      if (isempty (findstr (octave_config_info ("DEFS"), __feat{1}{1})))
+      __e = regexp (__code, '.$', 'lineanchors', 'once');
+      ## Strip comment any comment from testif line before looking for features
+      __feat_line = strtok (__code(1:__e), '#%'); 
+      __feat = regexp (__feat_line, '\w+', 'match');
+      __have_feat = strfind (octave_config_info ("DEFS"), __feat); 
+      if (any (cellfun ("isempty", __have_feat)))
         __xskip++;
         __istest = 0;
         __code = ""; # Skip the code.
--- a/src/DLD-FUNCTIONS/__magick_read__.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/DLD-FUNCTIONS/__magick_read__.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -212,7 +212,8 @@
   idim(3) = nframes;
 
   Magick::ImageType type = imvec[0].type ();
-  const int divisor = (((1 << QuantumDepth) - 1) / ((1 << depth) - 1));
+  const int divisor = ((uint64_t (1) << QuantumDepth) - 1) / 
+                      ((uint64_t (1) << depth) - 1);
 
   switch (type)
     {
--- a/src/DLD-FUNCTIONS/eigs.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/DLD-FUNCTIONS/eigs.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -789,7 +789,7 @@
 %!testif HAVE_ARPACK
 %! d1 = eigs (A, k, 'lm');
 %! assert (d1, d0(end:-1:(end-k+1)), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 'sm');
 %! assert (d1, d0(k:-1:1), 1e-11);
 %!testif HAVE_ARPACK
@@ -804,15 +804,15 @@
 %!testif HAVE_ARPACK
 %! d1 = eigs (A, k+1, 'be');
 %! assert (d1, d2([1:floor((k+1)/2), (end - ceil((k+1)/2) + 1):end]), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 4.1);
 %! [~,idx0] = sort (abs(d0 - 4.1));
 %! [~,idx1] = sort (abs(d1 - 4.1));
 %! assert (d1(idx1), d0(idx0(1:k)), 1e-11);
-%!testif HAVE_CHOLMOD
+%!testif HAVE_ARPACK, HAVE_CHOLMOD
 %! d1 = eigs(A, speye(n), k, 'lm');
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (eigs(A,k,4.1), eigs(A,speye(n),k,4.1), 1e-11);
 %!testif HAVE_ARPACK
 %! opts.cholB=true;
@@ -824,17 +824,17 @@
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts);
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! d1 = eigs(A, speye(n), k, 4.1, opts);
 %! assert (abs(d1), eigs(A,k,4.1), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! q = [2:n,1];
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts);
 %! assert (abs(d1), eigs(A,k,4.1), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (eigs(A,k,4.1), eigs(A,speye(n),k,4.1), 1e-11);
 %!testif HAVE_ARPACK
 %! fn = @(x) A * x;
@@ -846,7 +846,7 @@
 %! opts.issym = 1; opts.isreal = 1;
 %! d1 = eigs (fn, n, k, 'sm', opts);
 %! assert (d1, d0(k:-1:1), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! fn = @(x) (A - 4.1 * eye(n)) \ x;
 %! opts.issym = 1; opts.isreal = 1;
 %! d1 = eigs (fn, n, k, 4.1, opts);
@@ -862,7 +862,7 @@
 %! for i=1:k
 %!  assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11)
 %! endfor
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! [v1,d1] = eigs(A, k, 'sm');
 %! d1 = diag(d1);
 %! for i=1:k
@@ -909,7 +909,7 @@
 %!testif HAVE_ARPACK
 %! d1 = eigs (A, k, 'lm');
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 'sm');
 %! assert (abs(d1), abs(d0(1:k)), 1e-11);
 %!testif HAVE_ARPACK
@@ -932,13 +932,13 @@
 %! [~, idx] = sort (imag(abs(d0)));
 %! d2 = d0(idx);
 %! assert (sort(imag(d1)), sort(imag(d2(1:k))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 4.1);
 %! [~,idx0] = sort (abs(d0 - 4.1));
 %! [~,idx1] = sort (abs(d1 - 4.1));
 %! assert (abs(d1(idx1)), abs(d0(idx0(1:k))), 1e-11);
 %! assert (sort(imag(d1(idx1))), sort(imag(d0(idx0(1:k)))), 1e-11);
-%!testif HAVE_CHOLMOD
+%!testif HAVE_ARPACK, HAVE_CHOLMOD
 %! d1 = eigs(A, speye(n), k, 'lm');
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
 %!testif HAVE_ARPACK
@@ -951,19 +951,19 @@
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts);
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! d1 = eigs(A, speye(n), k, 4.1, opts);
 %! assert (abs(d1), eigs(A,k,4.1), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! q = [2:n,1];
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts);
 %! assert (abs(d1), eigs(A,k,4.1), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (abs(eigs(A,k,4.1)), abs(eigs(A,speye(n),k,4.1)), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (sort(imag(eigs(A,k,4.1))), sort(imag(eigs(A,speye(n),k,4.1))), 1e-11);
 %!testif HAVE_ARPACK
 %! fn = @(x) A * x;
@@ -975,7 +975,7 @@
 %! opts.issym = 0; opts.isreal = 1;
 %! d1 = eigs (fn, n, k, 'sm', opts);
 %! assert (abs(d1), d0(1:k), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! fn = @(x) (A - 4.1 * eye(n)) \ x;
 %! opts.issym = 0; opts.isreal = 1;
 %! d1 = eigs (fn, n, k, 4.1, opts);
@@ -986,7 +986,7 @@
 %! for i=1:k
 %!  assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11)
 %! endfor
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! [v1,d1] = eigs(A, k, 'sm');
 %! d1 = diag(d1);
 %! for i=1:k
@@ -1039,7 +1039,7 @@
 %!testif HAVE_ARPACK
 %! d1 = eigs (A, k, 'lm');
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 'sm');
 %! assert (abs(d1), abs(d0(1:k)), 1e-11);
 %!testif HAVE_ARPACK
@@ -1062,13 +1062,13 @@
 %! [~, idx] = sort (imag(abs(d0)));
 %! d2 = d0(idx);
 %! assert (sort(imag(d1)), sort(imag(d2(1:k))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! d1 = eigs (A, k, 4.1);
 %! [~,idx0] = sort (abs(d0 - 4.1));
 %! [~,idx1] = sort (abs(d1 - 4.1));
 %! assert (abs(d1(idx1)), abs(d0(idx0(1:k))), 1e-11);
 %! assert (sort(imag(d1(idx1))), sort(imag(d0(idx0(1:k)))), 1e-11);
-%!testif HAVE_CHOLMOD
+%!testif HAVE_ARPACK, HAVE_CHOLMOD
 %! d1 = eigs(A, speye(n), k, 'lm');
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
 %!testif HAVE_ARPACK
@@ -1081,21 +1081,21 @@
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts);
 %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! d1 = eigs(A, speye(n), k, 4.1, opts);
 %! assert (abs(abs(d1)), abs(eigs(A,k,4.1)), 1e-11);
 %! assert (sort(imag(abs(d1))), sort(imag(eigs(A,k,4.1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! opts.cholB=true;
 %! q = [2:n,1];
 %! opts.permB=q;
 %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts);
 %! assert (abs(abs(d1)), abs(eigs(A,k,4.1)), 1e-11);
 %! assert (sort(imag(abs(d1))), sort(imag(eigs(A,k,4.1))), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (abs(eigs(A,k,4.1)), abs(eigs(A,speye(n),k,4.1)), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! assert (sort(imag(eigs(A,k,4.1))), sort(imag(eigs(A,speye(n),k,4.1))), 1e-11);
 %!testif HAVE_ARPACK
 %! fn = @(x) A * x;
@@ -1107,7 +1107,7 @@
 %! opts.issym = 0; opts.isreal = 0;
 %! d1 = eigs (fn, n, k, 'sm', opts);
 %! assert (abs(d1), d0(1:k), 1e-11);
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! fn = @(x) (A - 4.1 * eye(n)) \ x;
 %! opts.issym = 0; opts.isreal = 0;
 %! d1 = eigs (fn, n, k, 4.1, opts);
@@ -1118,7 +1118,7 @@
 %! for i=1:k
 %!  assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11)
 %! endfor
-%!testif HAVE_UMFPACK
+%!testif HAVE_ARPACK, HAVE_UMFPACK
 %! [v1,d1] = eigs(A, k, 'sm');
 %! d1 = diag(d1);
 %! for i=1:k
--- a/src/DLD-FUNCTIONS/module-files	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/DLD-FUNCTIONS/module-files	Thu Jan 12 12:54:24 2012 -0800
@@ -32,7 +32,7 @@
 dmperm.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS)
 dot.cc
 eig.cc
-eigs.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS) $(LAPACK_LIBS) $(BLAS_LIBS)
+eigs.cc|$(ARPACK_CPPFLAGS) $(SPARSE_XCPPFLAGS)|$(ARPACK_LDFLAGS) $(SPARSE_XLDFLAGS)|$(ARPACK_LIBS) $(SPARSE_XLIBS) $(LAPACK_LIBS) $(BLAS_LIBS)
 fft.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
 fft2.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
 fftn.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
--- a/src/DLD-FUNCTIONS/pinv.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/DLD-FUNCTIONS/pinv.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -174,18 +174,19 @@
 %!shared a, b, tol, hitol, d, u, x, y
 %! a = reshape (rand*[1:16], 4, 4);   ## Rank 2 matrix
 %! b = pinv (a);
-%! tol = 1e-14;
-%! hitol = 15*sqrt(eps);
+%! tol = 4e-14;
+%! hitol = 40*sqrt (eps);
 %! d = diag ([rand, rand, hitol, hitol]);
 %! u = rand (4);                      ## Could be singular by freak accident
 %! x = inv (u)*d*u;
-%! y = pinv (x, sqrt(eps));
-%!assert(a*b*a, a, tol);
-%!assert(b*a*b, b, tol);
-%!assert((b*a)', b*a, tol);
-%!assert((a*b)', a*b, tol);
-%!assert(x*y*x, x, -hitol);
-%!assert(y*x*y, y, -hitol);
-%!assert((x*y)', x*y, hitol);
-%!assert((y*x)', y*x, hitol);
+%! y = pinv (x, sqrt (eps));
+%!
+%!assert (a*b*a, a, tol)
+%!assert (b*a*b, b, tol)
+%!assert ((b*a)', b*a, tol)
+%!assert ((a*b)', a*b, tol)
+%!assert (x*y*x, x, -hitol)
+%!assert (y*x*y, y, -hitol)
+%!assert ((x*y)', x*y, hitol)
+%!assert ((y*x)', y*x, hitol)
 */
--- a/src/Makefile.am	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/Makefile.am	Thu Jan 12 12:54:24 2012 -0800
@@ -515,7 +515,7 @@
   $(LIBOCTINTERP_LINK_DEPS)
 
 # Increment these as needed and according to the rules in the libtool manual:
-liboctinterp_current = 0
+liboctinterp_current = 1
 liboctinterp_revision = 0
 liboctinterp_age = 0
 
--- a/src/data.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/data.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -3927,6 +3927,9 @@
 
 DEFUN (Inf, args, ,
   "-*- texinfo -*-\n\
+@c List other form of function in documentation index\n\
+@findex inf\n\
+\n\
 @deftypefn  {Built-in Function} {} Inf\n\
 @deftypefnx {Built-in Function} {} Inf (@var{n})\n\
 @deftypefnx {Built-in Function} {} Inf (@var{n}, @var{m})\n\
@@ -3984,6 +3987,9 @@
 
 DEFUN (NaN, args, ,
   "-*- texinfo -*-\n\
+@c List other form of function in documentation index\n\
+@findex nan\n\
+\n\
 @deftypefn  {Built-in Function} {} NaN\n\
 @deftypefnx {Built-in Function} {} NaN (@var{n})\n\
 @deftypefnx {Built-in Function} {} NaN (@var{n}, @var{m})\n\
@@ -5599,9 +5605,13 @@
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} power (@var{x}, @var{y})\n\
 Return the element-by-element operation of @var{x} raised to the\n\
-@var{y} power.\n\
+@var{y} power.  If several complex results are possible,\n\
+returns the one with smallest non-negative argument (angle).  Use\n\
+@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\
+real result is preferred.\n\
+\n\
 This function and @w{@xcode{x .^ y}} are equivalent.\n\
-@seealso{mpower}\n\
+@seealso{mpower, realpow, realsqrt, cbrt, nthroot}\n\
 @end deftypefn")
 {
   return binary_op_defun_body (octave_value::op_el_pow, args);
--- a/src/file-io.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/file-io.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -1879,6 +1879,9 @@
 
 DEFUNX ("tmpnam", Ftmpnam, args, ,
  "-*- texinfo -*-\n\
+@c List other forms of function in documentation index\n\
+@findex octave_tmp_file_name\n\
+\n\
 @deftypefn  {Built-in Function} {} tmpnam ()\n\
 @deftypefnx {Built-in Function} {} tmpnam (@var{dir})\n\
 @deftypefnx {Built-in Function} {} tmpnam (@var{dir}, @var{prefix})\n\
@@ -2178,7 +2181,7 @@
 @deftypefn  {Built-in Function} {} SEEK_SET ()\n\
 @deftypefnx {Built-in Function} {} SEEK_CUR ()\n\
 @deftypefnx {Built-in Function} {} SEEK_END ()\n\
-Return the value required to request that @code{fseek} perform\n\
+Return the numerical value to pass to @code{fseek} to perform\n\
 one of the following actions:\n\
 @table @code\n\
 @item SEEK_SET\n\
@@ -2190,6 +2193,7 @@
 @item SEEK_END\n\
 Position file relative to the end.\n\
 @end table\n\
+@seealso{fseek}\n\
 @end deftypefn")
 {
   return const_value ("SEEK_SET", args, -1);
@@ -2198,7 +2202,9 @@
 DEFUNX ("SEEK_CUR", FSEEK_CUR, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} SEEK_CUR ()\n\
-See SEEK_SET.\n\
+Return the numerical value to pass to @code{fseek} to\n\
+position the file pointer relative to the current position.\n\
+@seealso{SEEK_SET, SEEK_END}.\n\
 @end deftypefn")
 {
   return const_value ("SEEK_CUR", args, 0);
@@ -2207,7 +2213,9 @@
 DEFUNX ("SEEK_END", FSEEK_END, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} SEEK_END ()\n\
-See SEEK_SET.\n\
+Return the numerical value to pass to @code{fseek} to\n\
+position the file pointer relative to the end of the file.\n\
+@seealso{SEEK_SET, SEEK_CUR}.\n\
 @end deftypefn")
 {
   return const_value ("SEEK_END", args, 1);
--- a/src/help.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/help.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -239,15 +239,19 @@
   pair_type ("**",
     "-*- texinfo -*-\n\
 @deftypefn {Operator} {} **\n\
-Power operator.\n\
-@seealso{power, ^, .**, .^}\n\
+Power operator.  This may return complex results for real inputs.  Use\n\
+@code{realsqrt}, @code{cbrt}, @code{nthroot}, or @code{realroot} to obtain\n\
+real results when possible.\n\
+@seealso{power, ^, .**, .^, realpow, realsqrt, cbrt, nthroot}\n\
 @end deftypefn"),
 
   pair_type ("^",
     "-*- texinfo -*-\n\
 @deftypefn {Operator} {} ^\n\
-Power operator.\n\
-@seealso{power, **, .^, .**}\n\
+Power operator.  This may return complex results for real inputs.  Use\n\
+@code{realsqrt}, @code{cbrt}, @code{nthroot}, or @code{realroot} to obtain\n\
+real results when possible.\n\
+@seealso{power, **, .^, .**, realpow, realsqrt, cbrt, nthroot}\n\
 @end deftypefn"),
 
   pair_type ("+",
@@ -304,15 +308,21 @@
   pair_type (".**",
     "-*- texinfo -*-\n\
 @deftypefn {Operator} {} .*\n\
-Element by element power operator.\n\
-@seealso{**, ^, .^, power}\n\
+Element by element power operator.  If several complex results are possible,\n\
+returns the one with smallest non-negative argument (angle).  Use\n\
+@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\
+real result is preferred.\n\
+@seealso{**, ^, .^, power, realpow, realsqrt, cbrt, nthroot}\n\
 @end deftypefn"),
 
   pair_type (".^",
     "-*- texinfo -*-\n\
 @deftypefn {Operator} {} .^\n\
-Element by element power operator.\n\
-@seealso{.**, ^, **, power}\n\
+Element by element power operator.  If several complex results are possible,\n\
+returns the one with smallest non-negative argument (angle).  Use\n\
+@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\
+real result is preferred.\n\
+@seealso{.**, ^, **, power, realpow, realsqrt, cbrt, nthroot}\n\
 @end deftypefn"),
 
   pair_type ("./",
--- a/src/oct-parse.yy	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/oct-parse.yy	Thu Jan 12 12:54:24 2012 -0800
@@ -1899,8 +1899,6 @@
   tree_expression *op1 = e->lhs ();
   tree_expression *op2 = e->rhs ();
 
-  octave_value::binary_op op_type = e->op_type ();
-
   if (op1->is_constant () && op2->is_constant ())
     {
       octave_value tmp = e->rvalue1 ();
@@ -3266,7 +3264,7 @@
     {
       size_t offset = s.find_first_not_of (" \t");
 
-      retval = (s.substr (offset, 9) == "Copyright");
+      retval = (s.substr (offset, 9) == "Copyright" || s.substr (offset, 6) == "Author");
     }
 
   return retval;
@@ -4448,7 +4446,8 @@
 
 DEFUN (eval, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {} eval (@var{try}, @var{catch})\n\
+@deftypefn  {Built-in Function} {} eval (@var{try})\n\
+@deftypefnx {Built-in Function} {} eval (@var{try}, @var{catch})\n\
 Parse the string @var{try} and evaluate it as if it were an Octave\n\
 program.  If that fails, evaluate the optional string @var{catch}.\n\
 The string @var{try} is evaluated in the current context,\n\
@@ -4472,6 +4471,11 @@
         This is a bad example\n\
 @end group\n\
 @end example\n\
+\n\
+Consider using try/catch blocks instead if you are only using @code{eval}\n\
+as an error-capturing mechanism rather than for the execution of arbitrary\n\
+code strings.\n\
+@seealso{evalin}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -4554,6 +4558,7 @@
 @deftypefn {Built-in Function} {} assignin (@var{context}, @var{varname}, @var{value})\n\
 Assign @var{value} to @var{varname} in context @var{context}, which\n\
 may be either @code{\"base\"} or @code{\"caller\"}.\n\
+@seealso{evalin}\n\
 @end deftypefn")
 {
   octave_value_list retval;
@@ -4603,10 +4608,12 @@
 
 DEFUN (evalin, args, nargout,
   "-*- texinfo -*-\n\
-@deftypefn {Built-in Function} {} evalin (@var{context}, @var{try}, @var{catch})\n\
+@deftypefn  {Built-in Function} {} evalin (@var{context}, @var{try})\n\
+@deftypefnx {Built-in Function} {} evalin (@var{context}, @var{try}, @var{catch})\n\
 Like @code{eval}, except that the expressions are evaluated in the\n\
 context @var{context}, which may be either @code{\"caller\"} or\n\
 @code{\"base\"}.\n\
+@seealso{eval, assignin}\n\
 @end deftypefn")
 {
   octave_value_list retval;
--- a/src/ov-fcn-handle.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/ov-fcn-handle.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -1776,6 +1776,38 @@
 
 */
 
+DEFUN (is_function_handle, args, ,
+  "-*- texinfo -*-\n\
+@deftypefn {Built-in Function} {} is_function_handle (@var{x})\n\
+Return true if @var{x} is a function handle.\n\
+@seealso{isa, typeinfo, class}\n\
+@end deftypefn")
+{
+  octave_value retval;
+
+  int nargin = args.length ();
+
+  if (nargin == 1)
+    retval = args(0).is_function_handle ();
+  else
+    print_usage ();
+
+  return retval;
+}
+
+/*
+%!shared fh
+%! fh = @(x) x;
+
+%!assert (is_function_handle (fh))
+%!assert (! is_function_handle ({fh}))
+%!assert (! is_function_handle (1))
+%!error is_function_handle ();
+%!error is_function_handle (1, 2);
+
+*/
+
+
 octave_fcn_binder::octave_fcn_binder (const octave_value& f,
                                       const octave_value& root,
                                       const octave_value_list& templ,
--- a/src/syscalls.cc	Fri Jan 06 12:43:48 2012 -0500
+++ b/src/syscalls.cc	Thu Jan 12 12:54:24 2012 -0800
@@ -1646,7 +1646,7 @@
 DEFUNX ("F_DUPFD", FF_DUPFD, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} F_DUPFD ()\n\
-Return the value required to request that @code{fcntl} return a\n\
+Return the numerical value to pass to @code{fcntl} to return a\n\
 duplicate file descriptor.\n\
 @seealso{fcntl, F_GETFD, F_GETFL, F_SETFD, F_SETFL}\n\
 @end deftypefn")
@@ -1662,7 +1662,7 @@
 DEFUNX ("F_GETFD", FF_GETFD, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} F_GETFD ()\n\
-Return the value required to request that @code{fcntl} to return the\n\
+Return the numerical value to pass to @code{fcntl} to return the\n\
 file descriptor flags.\n\
 @seealso{fcntl, F_DUPFD, F_GETFL, F_SETFD, F_SETFL}\n\
 @end deftypefn")
@@ -1678,7 +1678,7 @@
 DEFUNX ("F_GETFL", FF_GETFL, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} F_GETFL ()\n\
-Return the value required to request that @code{fcntl} to return the\n\
+Return the numerical value to pass to @code{fcntl} to return the\n\
 file status flags.\n\
 @seealso{fcntl, F_DUPFD, F_GETFD, F_SETFD, F_SETFL}\n\
 @end deftypefn")
@@ -1694,7 +1694,7 @@
 DEFUNX ("F_SETFD", FF_SETFD, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} F_SETFD ()\n\
-Return the value required to request that @code{fcntl} to set the file\n\
+Return the numerical value to pass to @code{fcntl} to set the file\n\
 descriptor flags.\n\
 @seealso{fcntl, F_DUPFD, F_GETFD, F_GETFL, F_SETFL}\n\
 @end deftypefn")
@@ -1710,7 +1710,7 @@
 DEFUNX ("F_SETFL", FF_SETFL, args, ,
   "-*- texinfo -*-\n\
 @deftypefn {Built-in Function} {} F_SETFL ()\n\
-Return the value required to request that @code{fcntl} to set the file\n\
+Return the numerical value to pass to @code{fcntl} to set the file\n\
 status flags.\n\
 @seealso{fcntl, F_DUPFD, F_GETFD, F_GETFL, F_SETFD}\n\
 @end deftypefn")
--- a/test/Makefile.am	Fri Jan 06 12:43:48 2012 -0500
+++ b/test/Makefile.am	Thu Jan 12 12:54:24 2012 -0800
@@ -23,7 +23,6 @@
 FCN_FILES = \
   fntests.m \
   test_args.m \
-  test_contin.m \
   test_diag_perm.m \
   test_error.m \
   test_eval-catch.m \
@@ -31,11 +30,10 @@
   test_func.m \
   test_global.m \
   test_if.m \
-  test_index-wfi-f.m \
-  test_index-wfi-t.m \
+  test_index.m \
   test_io.m \
-  test_logical-wfi-f.m \
-  test_logical-wfi-t.m \
+  test_line_continue.m \
+  test_logical_index.m \
   test_null_assign.m \
   test_parser.m \
   test_prefer.m \
--- a/test/build_sparse_tests.sh	Fri Jan 06 12:43:48 2012 -0500
+++ b/test/build_sparse_tests.sh	Thu Jan 12 12:54:24 2012 -0800
@@ -646,11 +646,11 @@
 %! assert (l, sparse ([1,2,2],[1,1,2],1), 10*eps);
 %! assert (u, sparse ([1,1,2],[1,2,2],[1,1,1i]), 10*eps);
 
-%!testif HAVE_UMFPACK ;# permuted LU
+%!testif HAVE_UMFPACK   # permuted LU
 %! [L,U] = lu (bs);
 %! assert (L*U, bs, 1e-10);
 
-%!testif HAVE_UMFPACK ;# simple LU + row permutations
+%!testif HAVE_UMFPACK   # simple LU + row permutations
 %! [L,U,P] = lu (bs);
 %! assert (P'*L*U, bs, 1e-10);
 %! # triangularity
@@ -659,7 +659,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# simple LU + row/col permutations
+%!testif HAVE_UMFPACK   # simple LU + row/col permutations
 %! [L,U,P,Q] = lu (bs);
 %! assert (P'*L*U*Q', bs, 1e-10);
 %! # triangularity
@@ -668,7 +668,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# LU with vector permutations
+%!testif HAVE_UMFPACK   # LU with vector permutations
 %! [L,U,P,Q] = lu (bs,'vector');
 %! assert (L(P,:)*U(:,Q), bs, 1e-10);
 %! # triangularity
@@ -677,7 +677,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# LU with scaling
+%!testif HAVE_UMFPACK   # LU with scaling
 %! [L,U,P,Q,R] = lu (bs);
 %! assert (R*P'*L*U*Q', bs, 1e-10);
 %! # triangularity
@@ -686,7 +686,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# inverse
+%!testif HAVE_UMFPACK   # inverse
 %! assert (inv (bs)*bs, sparse (eye (rows (bs))), 1e-10);
 
 %!assert (bf\as', bf\af', 100*eps);
@@ -706,7 +706,7 @@
 %!testif HAVE_CHOLMOD
 %! assert (chol (bs,'lower'), chol (bs)', 1e-10);
 
-%!testif HAVE_CHOLMOD ;# Return Partial Cholesky factorization
+%!testif HAVE_CHOLMOD   # Return Partial Cholesky factorization
 %! [RS,PS] = chol (bs);
 %! assert (RS'*RS, bs, 1e-10);
 %! assert (PS, 0);
@@ -714,7 +714,7 @@
 %! assert (LS*LS', bs, 1e-10);
 %! assert (PS, 0);
 
-%!testif HAVE_CHOLMOD ;# Permuted Cholesky factorization
+%!testif HAVE_CHOLMOD   # Permuted Cholesky factorization
 %! [RS,PS,QS] = chol (bs);
 %! assert (RS'*RS, QS*bs*QS', 1e-10);
 %! assert (PS, 0);
@@ -750,11 +750,11 @@
     gen_matrixdiag_tests
     gen_matrixreshape_tests
     cat >>$TESTS <<EOF
-%!testif HAVE_UMFPACK ;# permuted LU
+%!testif HAVE_UMFPACK   # permuted LU
 %! [L,U] = lu (bs);
 %! assert (L*U, bs, 1e-10);
 
-%!testif HAVE_UMFPACK ;# simple LU + row permutations
+%!testif HAVE_UMFPACK   # simple LU + row permutations
 %! [L,U,P] = lu (bs);
 %! assert (P'*L*U, bs, 1e-10);
 %! # triangularity
@@ -763,7 +763,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# simple LU + row/col permutations
+%!testif HAVE_UMFPACK   # simple LU + row/col permutations
 %! [L,U,P,Q] = lu (bs);
 %! assert (P'*L*U*Q', bs, 1e-10);
 %! # triangularity
@@ -772,7 +772,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# LU with vector permutations
+%!testif HAVE_UMFPACK   # LU with vector permutations
 %! [L,U,P,Q] = lu (bs,'vector');
 %! assert (L (P,:)*U (:,Q), bs, 1e-10);
 %! # triangularity
@@ -781,7 +781,7 @@
 %! [i,j,v] = find (U);
 %! assert (j-i>=0);
 
-%!testif HAVE_UMFPACK ;# LU with scaling
+%!testif HAVE_UMFPACK   # LU with scaling
 %! [L,U,P,Q,R] = lu (bs);
 %! assert (R*P'*L*U*Q', bs, 1e-10);
 %! # triangularity
@@ -930,7 +930,7 @@
 %! load (savefile, "as_save");
 %! unlink (savefile);
 %! assert (as_save, sparse(af));
-%!testif HAVE_HDF5 # save hdf5
+%!testif HAVE_HDF5   # save hdf5
 %! savefile = tmpnam ();
 %! as_save = as;
 %! save ("-hdf5", savefile, "bf", "as_save", "af");